Text-Em-All MCP by usefulapi
Send and track Text-Em-All broadcasts, texts and contact lists.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"text-em-all": {
"url": "https://text-em-all.usefulapi.io/mcp"
}
}
}Remote endpoints
https://text-em-all.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (14)
🟢get_account
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.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_broadcasts(page, pagesize, takesize, sortby, params)
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.
Input Schema
{
"type": "object",
"properties": {
"page": {
"description": "1-based page number (Feed `page`).",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"pagesize": {
"description": "Number of items per page (Feed `pagesize`, default 10).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"takesize": {
"description": "How many items to return (Feed `takesize`; defaults to pagesize).",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"sortby": {
"description": "Comma-separated fields to sort by; prefix a field with '-' for descending (e.g. '-StartDate,CreatedDate').",
"type": "string"
},
"params": {
"description": "Additional documented equals-style query filters to send verbatim (e.g. BroadcastStatus=Completed). For range operators (Field~gte~value etc.) use the textemall_request escape hatch. Merged with paging above.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"number",
"boolean"
]
}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_broadcast(id)
Fetch a single broadcast by id, including its status and summary. Text-Em-All API: GET /v1/broadcasts/{id}.
Input Schema
{
"type": "object",
"properties": {
"id": {
"description": "The BroadcastID.",
"type": [
"string",
"number"
]
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_broadcast_details(id)
Fetch per-contact delivery details/results for a broadcast (who was reached, delivery status). Text-Em-All API: GET /v1/broadcasts/{id}/details.
Input Schema
{
"type": "object",
"properties": {
"id": {
"description": "The BroadcastID.",
"type": [
"string",
"number"
]
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_text_numbers(page, pagesize, takesize, params)
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.
Input Schema
{
"type": "object",
"properties": {
"page": {
"description": "1-based page number (Feed `page`).",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"pagesize": {
"description": "Number of items per page (Feed `pagesize`, default 10).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"takesize": {
"description": "How many items to return (Feed `takesize`; defaults to pagesize).",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"params": {
"description": "Additional documented equals-style query filters to send verbatim (e.g. BroadcastStatus=Completed). For range operators (Field~gte~value etc.) use the textemall_request escape hatch. Merged with paging above.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"number",
"boolean"
]
}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_lists(page, pagesize, takesize, params)
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.
Input Schema
{
"type": "object",
"properties": {
"page": {
"description": "1-based page number (Feed `page`).",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"pagesize": {
"description": "Number of items per page (Feed `pagesize`, default 10).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"takesize": {
"description": "How many items to return (Feed `takesize`; defaults to pagesize).",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"params": {
"description": "Additional documented equals-style query filters to send verbatim (e.g. BroadcastStatus=Completed). For range operators (Field~gte~value etc.) use the textemall_request escape hatch. Merged with paging above.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"number",
"boolean"
]
}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_authorization_token(username, password)
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.
Input Schema
{
"type": "object",
"properties": {
"username": {
"type": "string",
"description": "The Text-Em-All website login username. Required."
},
"password": {
"type": "string",
"description": "The Text-Em-All website login PIN/password. Required."
}
},
"required": [
"username",
"password"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_conversations_sso_url(textNumber, phoneNumber)
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.
Input Schema
{
"type": "object",
"properties": {
"textNumber": {
"description": "A toll-free text number on the account, e.g. 18885551234.",
"type": "string"
},
"phoneNumber": {
"description": "A phone number that has a conversation with the text number, e.g. 9725551212.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢textemall_request(path)
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.
Input Schema
{
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Full API path after the origin, starting with \"/\", e.g. \"/v1/broadcasts?pagesize=50\"."
}
},
"required": [
"path"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴create_broadcast(broadcastName, broadcastType, contacts, textMessage, voiceText, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"broadcastName": {
"type": "string",
"description": "A name/label for this broadcast (BroadcastName). Required."
},
"broadcastType": {
"type": "string",
"enum": [
"SMS",
"Announcement"
],
"description": "'SMS' for a text broadcast, 'Announcement' for a voice broadcast. Required."
},
"contacts": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"primaryPhone": {
"type": "string",
"description": "The contact's phone number (Person.PrimaryPhone). Required."
},
"firstName": {
"description": "Contact first name (Person.FirstName).",
"type": "string"
},
"lastName": {
"description": "Contact last name (Person.LastName).",
"type": "string"
},
"notes": {
"description": "Free-text notes about the contact (Person.Notes).",
"type": "string"
}
},
"required": [
"primaryPhone"
]
},
"description": "Recipients (each needs primaryPhone). Required."
},
"textMessage": {
"description": "The text body for an SMS broadcast (TextMessage). Required when broadcastType='SMS'.",
"type": "string"
},
"voiceText": {
"description": "Text-to-speech message for an Announcement broadcast (mapped to Audio.TextToSpeech=true + Audio.Text).",
"type": "string"
},
"primaryPhoneNumbersOnly": {
"description": "Only send to each contact's primary phone number (PrimaryPhoneNumbersOnly, default true).",
"type": "boolean"
},
"fields": {
"description": "Additional documented Text-Em-All fields to send verbatim in the JSON write body, using the API's PascalCase names (e.g. CallerID, TextNumberID, Lists, RetryTimes). Merged OVER the typed fields above.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"broadcastName",
"broadcastType",
"contacts"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴send_text_message(textNumberId, phoneNumber, message, firstName, lastName, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"textNumberId": {
"description": "The TextNumberID of the toll-free number to send from (see list_text_numbers). Required.",
"type": [
"string",
"number"
]
},
"phoneNumber": {
"type": "string",
"description": "The recipient's phone number (e.g. 9725551212). Required."
},
"message": {
"type": "string",
"description": "The text message body. Required."
},
"firstName": {
"description": "Recipient first name (Contact.FirstName).",
"type": "string"
},
"lastName": {
"description": "Recipient last name (Contact.LastName).",
"type": "string"
},
"truncateIfExceedsLimit": {
"description": "Truncate the message if it exceeds the length limit (TruncateIfExceedsLimit).",
"type": "boolean"
},
"fields": {
"description": "Additional documented Text-Em-All fields to send verbatim in the JSON write body, using the API's PascalCase names (e.g. CallerID, TextNumberID, Lists, RetryTimes). Merged OVER the typed fields above.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"textNumberId",
"phoneNumber",
"message"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴create_draft_broadcast(contacts, fields)
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, ... }.
Input Schema
{
"type": "object",
"properties": {
"contacts": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"primaryPhone": {
"type": "string",
"description": "The contact's phone number (Person.PrimaryPhone). Required."
},
"firstName": {
"description": "Contact first name (Person.FirstName).",
"type": "string"
},
"lastName": {
"description": "Contact last name (Person.LastName).",
"type": "string"
},
"notes": {
"description": "Free-text notes about the contact (Person.Notes).",
"type": "string"
}
},
"required": [
"primaryPhone"
]
},
"description": "Contacts to pre-populate on the draft broadcast (each needs primaryPhone). Required."
},
"fields": {
"description": "Additional documented Text-Em-All fields to send verbatim in the JSON write body, using the API's PascalCase names (e.g. CallerID, TextNumberID, Lists, RetryTimes). Merged OVER the typed fields above.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"contacts"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴add_account_user(userName, firstName, lastName, fields)
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.
Input Schema
{
"type": "object",
"properties": {
"userName": {
"description": "The new user's login username (UserName).",
"type": "string"
},
"firstName": {
"description": "First name (FirstName).",
"type": "string"
},
"lastName": {
"description": "Last name (LastName).",
"type": "string"
},
"fields": {
"description": "Additional documented Text-Em-All fields to send verbatim in the JSON write body, using the API's PascalCase names (e.g. CallerID, TextNumberID, Lists, RetryTimes). Merged OVER the typed fields above.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴update_account_user(user_id, firstName, lastName, fields)
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.
Input Schema
{
"type": "object",
"properties": {
"user_id": {
"description": "The id of the user to update (path only). Required.",
"type": [
"string",
"number"
]
},
"firstName": {
"description": "New first name (FirstName).",
"type": "string"
},
"lastName": {
"description": "New last name (LastName).",
"type": "string"
},
"fields": {
"description": "Additional documented Text-Em-All fields to send verbatim in the JSON write body, using the API's PascalCase names (e.g. CallerID, TextNumberID, Lists, RetryTimes). Merged OVER the typed fields above.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"user_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence