Text-Em-All MCP by usefulapi
by usefulapi.io · remote · no sign-in to list tools · v1.16.3 · published by io.usefulapi
Send and track Text-Em-All broadcasts, texts and contact lists.
14 tools: 5 can delete or cancel things, 2 change things and 7 only read.
Scanned Oct 21, 2026
- Deletes or cancels5Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things2Claude Code: ask: see these tools
- Only reads7Claude Code: allow: see these tools
3 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http text-em-all https://text-em-all.usefulapi.io/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "get_conversations_sso_url" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "get_conversations_sso_url" says "get": a word for reading.
The server marks "textemall_request" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "textemall_request" says "request": a word for a change.
- Infoget_account
The description mentions "credentials".
What this check looks forMatched text
description: "...account. Use this first to confirm your credentials work."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
14 tools
Deletes or cancels 5Claude Code: deny
add_account_userMUTATES Text-Em-All data: adds a new user to your account (a master user can do this).No findings
Why it is in this group
- The name "add_account_user" says "add": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it MUTATES Text-Em-All data: adds a new user to your account (a master user can do this). Text-Em-All API: POST /v1/account/users. Provide the user's fields via `fields` using the API's PascalCase names (e.g. UserName, FirstName, LastName, EmailAddress, Permissions). Returns the created user.
Annotations the server declares
- title: Add an account user
- destructiveHint: true
create_broadcastMUTATES Text-Em-All data AND SENDS MESSAGES (spends account credits): creates + sends a broadcast to the given contacts.No findings
Why it is in this group
- The name "create_broadcast" says "create": a word for a change.
- The name "create_broadcast" also says "broadcast": a word for sending, and what is sent cannot be taken back.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it MUTATES Text-Em-All data AND SENDS MESSAGES (spends account credits): creates + sends a broadcast to the given contacts. Text-Em-All API: POST /v1/broadcasts. Set broadcastType to 'SMS' (a text broadcast — provide textMessage) or 'Announcement' (a voice broadcast — provide voiceText for text-to-speech, or a pre-recorded AudioID via `fields.Audio`). Contacts is a list of { primaryPhone, firstName?, lastName?, notes? }. Extra documented fields (CallerID, TextNumberID, Lists, RetryTimes, CallThrottle, MaxMessageLength, StartDate, CheckCallingWindow) go through `fields` (PascalCase). Returns the created broadcast.
Annotations the server declares
- title: Send a broadcast
- destructiveHint: true
create_draft_broadcastMUTATES Text-Em-All data (creates a DRAFT — does NOT send anything): stages a broadcast with the given contacts and returns a single-sign-on URL to finish + send it in the Text-Em-…No findings
Why it is in this group
- The name "create_draft_broadcast" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it MUTATES Text-Em-All data (creates a DRAFT — does NOT send anything): stages a broadcast with the given contacts and returns a single-sign-on URL to finish + send it in the Text-Em-All UI. Safer than create_broadcast when a human should review before sending. Text-Em-All API: POST /v1/draftbroadcasts. Returns { SingleSignOnUrl, ... }.
Annotations the server declares
- title: Create a draft broadcast
- destructiveHint: true
send_text_messageMUTATES Text-Em-All data AND SENDS A TEXT (spends credits): sends a 1:1 conversation text message immediately from one of your toll-free text numbers to a single contact.No findings
Why it is in this group
- The name "send_text_message" says "send": a word for sending, and what is sent cannot be taken back.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it MUTATES Text-Em-All data AND SENDS A TEXT (spends credits): sends a 1:1 conversation text message immediately from one of your toll-free text numbers to a single contact. Text-Em-All API: POST /v1/conversations. You need a textNumberId (from list_text_numbers). Returns the conversation.
Annotations the server declares
- title: Send a conversation text
- destructiveHint: true
update_account_userMUTATES Text-Em-All data: updates an existing account user.No findings
Why it is in this group
- The name "update_account_user" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it MUTATES Text-Em-All data: updates an existing account user. Text-Em-All API: PUT /v1/account/users/{user_id}. Provide the fields to change via `fields` (PascalCase, e.g. FirstName, LastName, EmailAddress, Permissions). The user_id is never sent in the body. Returns the updated user.
Annotations the server declares
- title: Update an account user
- destructiveHint: true
Changes things 2Claude Code: ask
get_conversations_sso_urlGenerate a single-sign-on URL to the Text-Em-All conversations UI (open in a browser/iframe).1 finding
Why it is in this group
- The name "get_conversations_sso_url" says "get": a word for reading.
- The description's first verb is "generate": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "get_conversations_sso_url" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "get_conversations_sso_url" says "get": a word for reading.
Description, as the server wrote it Generate a single-sign-on URL to the Text-Em-All conversations UI (open in a browser/iframe). Optionally scope it to one conversation thread by passing a toll-free textNumber + the other phoneNumber. Text-Em-All API: POST /v1/singlesignon/conversations. Returns { Url }. No account data is changed.
Annotations the server declares
- title: Get a single-sign-on conversations URL
- readOnlyHint: true
textemall_requestPower-user escape hatch: GET any Text-Em-All API path not wrapped by a dedicated tool.1 finding
Why it is in this group
- The name "textemall_request" says "request": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "textemall_request" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "textemall_request" says "request": a word for a change.
Description, as the server wrote it Power-user escape hatch: GET any Text-Em-All API path not wrapped by a dedicated tool. READ-ONLY — only GET is allowed. Pass the FULL API path after the origin, starting with a slash, INCLUDING any query string, e.g. "/v1/broadcasts?StartDate~gte~2024-01-01&sortby=-StartDate" or "/v1/textnumbers". Returns the parsed JSON.
Annotations the server declares
- title: Raw read request
- readOnlyHint: true
Only reads 7Claude Code: allow
get_accountFetch your Text-Em-All account settings — company/billing info plus credit balances (AvailableCallUnits, CallBalance) used for sending.1 finding
Why it is in this group
- The name "get_account" says "get": a word for reading.
Findings
- Info
The description mentions "credentials".
What this check looks forMatched text
description: "...account. Use this first to confirm your credentials work."
Description, as the server wrote it Fetch your Text-Em-All account settings — company/billing info plus credit balances (AvailableCallUnits, CallBalance) used for sending. Text-Em-All API: GET /v1/account. Use this first to confirm your credentials work.
Annotations the server declares
- title: Get account settings
- readOnlyHint: true
get_authorization_tokenExchange a Text-Em-All account username + PIN/password for that user's authorization token (the value you set as TEXTEMALL_AUTH_TOKEN).No findings
Why it is in this group
- The name "get_authorization_token" says "get": a word for reading.
Description, as the server wrote it Exchange a Text-Em-All account username + PIN/password for that user's authorization token (the value you set as TEXTEMALL_AUTH_TOKEN). Text-Em-All API: POST /v1/user/login. Signed with your App/Secret key only (no user token yet). Returns { AuthToken }. Use this once to bootstrap; store the token in config thereafter.
Annotations the server declares
- title: Get a user authorization token
- readOnlyHint: true
get_broadcastFetch a single broadcast by id, including its status and summary.No findings
Why it is in this group
- The name "get_broadcast" says "get": a word for reading.
Description, as the server wrote it Fetch a single broadcast by id, including its status and summary. Text-Em-All API: GET /v1/broadcasts/{id}.
Annotations the server declares
- title: Get a broadcast
- readOnlyHint: true
get_broadcast_detailsFetch per-contact delivery details/results for a broadcast (who was reached, delivery status).No findings
Why it is in this group
- The name "get_broadcast_details" says "get": a word for reading.
Description, as the server wrote it Fetch per-contact delivery details/results for a broadcast (who was reached, delivery status). Text-Em-All API: GET /v1/broadcasts/{id}/details.
Annotations the server declares
- title: Get broadcast delivery details
- readOnlyHint: true
list_broadcastsList broadcasts (text + voice campaigns) as a paged Feed { Size, Items:[...], Previous, Next }.No findings
Why it is in this group
- The name "list_broadcasts" says "list": a word for reading.
Description, as the server wrote it List broadcasts (text + voice campaigns) as a paged Feed { Size, Items:[...], Previous, Next }. Text-Em-All API: GET /v1/broadcasts. Filter with equals-style `params` (e.g. BroadcastStatus=Complete) and order with `sortby`. For date-range operators (StartDate~gte~2024-01-01) use the textemall_request escape hatch.
Annotations the server declares
- title: List broadcasts
- readOnlyHint: true
list_listsList saved contact lists (groups you can broadcast to) as a Feed; each List has a ListID/ListName.No findings
Why it is in this group
- The name "list_lists" says "list": a word for reading.
Description, as the server wrote it List saved contact lists (groups you can broadcast to) as a Feed; each List has a ListID/ListName. Text-Em-All API: GET /v1/lists. NOTE: inferred from the API's List model — if your account/endpoint differs, use the textemall_request escape hatch.
Annotations the server declares
- title: List contact lists
- readOnlyHint: true
list_text_numbersList the toll-free text (SMS) numbers on your account as a Feed.No findings
Why it is in this group
- The name "list_text_numbers" says "list": a word for reading.
Description, as the server wrote it List the toll-free text (SMS) numbers on your account as a Feed. Each TextNumber has a TextNumberID you need to send a 1:1 conversation text (see send_text_message). Text-Em-All API: GET /v1/textnumbers.
Annotations the server declares
- title: List text numbers
- readOnlyHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.16.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http text-em-all https://text-em-all.usefulapi.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__text-em-all__get_account",
"mcp__text-em-all__list_broadcasts",
"mcp__text-em-all__get_broadcast",
"mcp__text-em-all__get_broadcast_details",
"mcp__text-em-all__list_text_numbers",
"mcp__text-em-all__list_lists",
"mcp__text-em-all__get_authorization_token"
],
"ask": [
"mcp__text-em-all__get_conversations_sso_url",
"mcp__text-em-all__textemall_request"
],
"deny": [
"mcp__text-em-all__create_broadcast",
"mcp__text-em-all__send_text_message",
"mcp__text-em-all__create_draft_broadcast",
"mcp__text-em-all__add_account_user",
"mcp__text-em-all__update_account_user"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as text-em-all. Review it before you use it.