Text-Em-All MCP by usefulapi

Send and track Text-Em-All broadcasts, texts and contact lists.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
91%
Naming quality
99%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,524Tokens (tool definitions)
~1.9 KBTypical response size
Significant attention impact (2.75% of 128k context)

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-http

What it can do

Tool inventory

Tools (14)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded14 tools
verifiedversion not recorded14 tools