Read Trumpia lists, subscribers, keywords and reports; add contacts and send SMS or email campaigns.
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
WRITE: add contacts to one or more distribution lists (comma-separated list names that already exist). Each contact needs a mobile number, an email or a landline. Only add people who gave express consent to receive messages (TCPA, CAN-SPAM, CTIA rules apply); Trumpia may require a submitted API contract. Returns a request_id; check trumpia_get_request_report. PUT /subscription.
Names of existing distribution lists to add the contacts to.
1-100 contacts.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
WRITE: add contacts to one or more distribution lists (comma-separated list names that already exist). Each contact needs a mobile number, an email or a landline. Only add people who gave express consent to receive messages (TCPA, CAN-SPAM, CTIA rules apply); Trumpia may require a submitted API contract. Returns a request_id; check trumpia_get_request_report. PUT /subscription.
| Argument | Type | Description |
|---|---|---|
| list_names* | array | Names of existing distribution lists to add the contacts to. |
| subscriptions* | array | 1-100 contacts. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_names",
"subscriptions"
],
"properties": {
"list_names": {
"type": "array",
"items": {
"type": "string",
"maxLength": 30,
"minLength": 1
},
"maxItems": 20,
"minItems": 1,
"description": "Names of existing distribution lists to add the contacts to."
},
"subscriptions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 200
},
"mobile": {
"type": "object",
"required": [
"number"
],
"properties": {
"number": {
"type": "string",
"pattern": "^\\d{4,20}$",
"description": "Mobile number, digits only (US: 10 digits)."
},
"country_code": {
"type": "string",
"pattern": "^\\d{1,4}$",
"description": "Country code (default 1)."
}
}
},
"landline": {
"type": "object",
"required": [
"number"
],
"properties": {
"number": {
"type": "string",
"pattern": "^\\d{4,20}$",
"description": "Landline number, digits only (10 digits)."
},
"country_code": {
"type": "string",
"pattern": "^\\d{1,4}$"
}
}
},
"last_name": {
"type": "string",
"maxLength": 100
},
"customdata": {
"type": "array",
"items": {
"type": "object",
"required": [
"customdata_id",
"value"
],
"properties": {
"value": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "The value; its format depends on the field type."
},
"customdata_id": {
"type": "string",
"pattern": "^\\d{1,20}$",
"description": "Custom data field id (from trumpia_list_custom_fields)."
}
}
},
"maxItems": 50
},
"first_name": {
"type": "string",
"maxLength": 100
},
"voice_device": {
"enum": [
"mobile",
"landline"
],
"type": "string",
"description": "Number to reach by voice (US, Canada, Guam, Puerto Rico)."
}
}
},
"maxItems": 100,
"minItems": 1,
"description": "1-100 contacts."
}
}
}WRITE: cancel a message that is scheduled and has not been sent yet (see trumpia_list_scheduled_messages). Does nothing for a message already sent. DELETE /message/scheduled/{message_id}.
| Argument | Type | Description |
|---|---|---|
| message_id* | string | Scheduled message id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"message_id"
],
"properties": {
"message_id": {
"type": "string",
"pattern": "^\\d{1,20}$",
"description": "Scheduled message id."
}
}
}WRITE: create a distribution list. Trumpia requires disclosing how often subscribers get messages and what for. Returns request_id and list_id. The list name must not contain spaces or special characters. PUT /list.
| Argument | Type | Description |
|---|---|---|
| frequency* | integer | Messages per month subscribers will receive (disclosure required by mobile regulations). |
| list_name* | string | List name (no spaces or special characters), e.g. GeneralList. |
| description* | string | What the list sends, e.g. 'promo alerts' (max 20 characters). |
| display_name* | string | Name subscribers see when they sign up (max 50 characters). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_name",
"display_name",
"frequency",
"description"
],
"properties": {
"frequency": {
"type": "integer",
"maximum": 999,
"minimum": 1,
"description": "Messages per month subscribers will receive (disclosure required by mobile regulations)."
},
"list_name": {
"type": "string",
"maxLength": 30,
"minLength": 1,
"description": "List name (no spaces or special characters), e.g. GeneralList."
},
"description": {
"type": "string",
"maxLength": 20,
"minLength": 1,
"description": "What the list sends, e.g. 'promo alerts' (max 20 characters)."
},
"display_name": {
"type": "string",
"maxLength": 50,
"minLength": 1,
"description": "Name subscribers see when they sign up (max 50 characters)."
}
}
}The account's remaining domestic and international text credits. GET /balance/credit.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}One custom data field: type, options (allowed values, max length), whether required, and its mail-merge text. GET /customdata/{customdata_id}.
| Argument | Type | Description |
|---|---|---|
| customdata_id* | string | Custom data field id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"customdata_id"
],
"properties": {
"customdata_id": {
"type": "string",
"pattern": "^\\d{1,20}$",
"description": "Custom data field id."
}
}
}One mobile keyword in detail: auto-response message, code, alternative messages. GET /keyword/{keyword_id}.
| Argument | Type | Description |
|---|---|---|
| keyword_id* | string | Keyword id (from trumpia_list_keywords). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"keyword_id"
],
"properties": {
"keyword_id": {
"type": "string",
"pattern": "^\\d{1,20}$",
"description": "Keyword id (from trumpia_list_keywords)."
}
}
}One distribution list: display name, description, message frequency and subscription / mobile / email counts. GET /list/{list_id}.
| Argument | Type | Description |
|---|---|---|
| list_id* | string | Distribution list id (from trumpia_list_lists). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id"
],
"properties": {
"list_id": {
"type": "string",
"pattern": "^\\d{1,20}$",
"description": "Distribution list id (from trumpia_list_lists)."
}
}
}Delivery statistics of a message sent with trumpia_send_message: status (sent / scheduled / canceled), totals, sent and failed counts per channel and credits used. GET /message/{message_id}.
| Argument | Type | Description |
|---|---|---|
| message_id* | string | Message id returned by trumpia_send_message. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"message_id"
],
"properties": {
"message_id": {
"type": "string",
"pattern": "^\\d{1,20}$",
"description": "Message id returned by trumpia_send_message."
}
}
}The outcome of an earlier write request (list/contact/message changes are processed asynchronously). Pass the request_id that the write tool returned; the reply holds the result (for example the new list_id) or says it is still processing or failed. GET /report/{request_id}.
| Argument | Type | Description |
|---|---|---|
| request_id* | string | The request_id from a write reply. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "The request_id from a write reply."
}
}
}One subscription (contact): name, email, mobile and landline (with verified flags), list ids, created date and custom data. Contains personal data. GET /subscription/{subscription_id}.
| Argument | Type | Description |
|---|---|---|
| subscription_id* | string | Subscription id (from a list or search). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"subscription_id"
],
"properties": {
"subscription_id": {
"type": "string",
"pattern": "^\\d{1,20}$",
"description": "Subscription id (from a list or search)."
}
}
}All custom data fields (id and name) that can be stored on subscriptions and used as mail-merge values. GET /customdata.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Registered email sender addresses (the From / Reply-To addresses allowed for email messages) as { senders: [ { sender_id, address, default } ] } (Trumpia returns a bare array; it is wrapped). GET /email/sender.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}All mobile keywords with id, keyword and the short or long code. GET /keyword.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}All distribution lists (id and name). Lists group subscriptions for targeted messages. GET /list.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Registered organization names as { org_names: [ { org_name_id, name, default } ] } (Trumpia returns a bare array; it is wrapped). The id can be set as org_name_id on messages. GET /orgname.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Messages that are scheduled and not yet sent (id, description, scheduled time, recipient counts). Use offset and limit to page; total_count says how many exist. GET /message/scheduled.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Messages to return, 1-1000 (default 50). |
| order | string | scheduled_at = oldest first (default), -scheduled_at = newest first. |
| offset | integer | Messages to skip (default 0). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Messages to return, 1-1000 (default 50)."
},
"order": {
"enum": [
"scheduled_at",
"-scheduled_at"
],
"type": "string",
"description": "scheduled_at = oldest first (default), -scheduled_at = newest first."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Messages to skip (default 0)."
}
}
}Subscription (contact) ids, newest first. Returns ids only; use trumpia_get_subscription for the details. Pages of 100-10000 ids; next_page is set when a full page came back. GET /subscription.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number from 1 (default 1). |
| row_size | integer | Ids per page, 100-10000 (default 100). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"minimum": 1,
"description": "Page number from 1 (default 1)."
},
"row_size": {
"type": "integer",
"maximum": 10000,
"minimum": 100,
"description": "Ids per page, 100-10000 (default 100)."
}
}
}Find subscription ids by email, mobile number, landline, country code, created date, first name or last name; optionally within one list. search_data 'all' returns every subscription that has data of that type. Returns ids; use trumpia_get_subscription for details. GET /subscription/search.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number from 1 (default 1). |
| list_id | string | Limit the search to this distribution list. |
| row_size | integer | Ids per page, 100-10000 (default 100). |
| search_data* | string | The value to find, or 'all' (every subscription that has data of that type; email, mobile and landline only). For search_type created_date a range is required: 'YYYY-MM-DD hh:mm:ss~YYYY-MM-DD hh:mm:ss', e.g. '2026-03-01 00:00:00~2026-04-01 00:00:00'. |
| search_type* | string | Which field to search. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"search_type",
"search_data"
],
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"minimum": 1,
"description": "Page number from 1 (default 1)."
},
"list_id": {
"type": "string",
"pattern": "^\\d{1,20}$",
"description": "Limit the search to this distribution list."
},
"row_size": {
"type": "integer",
"maximum": 10000,
"minimum": 100,
"description": "Ids per page, 100-10000 (default 100)."
},
"search_data": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The value to find, or 'all' (every subscription that has data of that type; email, mobile and landline only). For search_type created_date a range is required: 'YYYY-MM-DD hh:mm:ss~YYYY-MM-DD hh:mm:ss', e.g. '2026-03-01 00:00:00~2026-04-01 00:00:00'."
},
"search_type": {
"enum": [
"email",
"mobile",
"landline",
"country_code",
"created_date",
"first_name",
"last_name"
],
"type": "string",
"description": "Which field to search."
}
}
}WRITE, SENDS REAL MESSAGES that spend credits and cannot be recalled once sent: send an SMS and/or an email to distribution lists or specific subscriptions, now or scheduled (a scheduled one can be cancelled with trumpia_cancel_scheduled_message). Subscribers must have opted in (TCPA, CAN-SPAM, CTIA). Confirm the recipients and text with the user first. Mail merge tokens: [$FirstName], [$LastName], [$FullName], [$CustomData-NAME]. Returns request_id and message_id. PUT /message.
| Argument | Type | Description |
|---|---|---|
| sms | string | SMS text (140 bytes per segment in US/Canada, up to 980 bytes concatenated). |
| send_date | string | Schedule time as YYYY-MM-DD hh:mm:ss (24-hour clock; the account's time zone). Omit to send immediately. |
| email_body | string | Email body (needs email_subject). |
| description* | string | Internal description of the message. |
| org_name_id | string | Organization name id to include in the mobile message (default organization name if omitted). |
| email_subject | string | Email subject (needs email_body). |
| recipient_ids* | array |
WRITE, SENDS A REAL TEXT that spends a credit and cannot be recalled: one SMS to one mobile number without adding the contact first. The recipient must have consented; Trumpia may require API Certification for contacts that have not opted in. Confirm number and text with the user first. Returns request_id and sms_id. PUT /sms.
| Argument | Type | Description |
|---|---|---|
| sender | string | Short/long code or registered landline to send from (default: the account's code). |
| message* | string | The text (the SMS header and footer count toward the length). |
| org_name_id | string | Organization name id (default organization name if omitted). |
| country_code | string | Country code (default 1). 0 = infer it from the number, which then must start with +. |
| mobile_number* | string | US: the 10-digit number without leading 0 or 1. With country_code 0 the number must be E.164 with a leading +, e.g. +17774443210. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"mobile_number",
"message"
],
"properties": {
"sender": {
"type": "string",
"pattern": "^\\d{4,20}$",
"description": "Short/long code or registered landline to send from (default: the account's code)."
},
"message": {
"type": "string",
"maxLength": 980,
"minLength": 1,
"description": "The text (the SMS header and footer count toward the length)."
},
"org_name_id": {
"type": "string",
"pattern": "^\\d{1,20}$",
"description": "Organization name id (default organization name if omitted)."
},
"country_code": {
"type": "string",
"pattern": "^\\d{1,4}$",
"description": "Country code (default 1). 0 = infer it from the number, which then must start with +."
},
"mobile_number": {
"type": "string",
"pattern": "^\\+?\\d{4,20}$",
"description": "US: the 10-digit number without leading 0 or 1. With country_code 0 the number must be E.164 with a leading +, e.g. +17774443210."
}
}
}WRITE: change a distribution list's name, display name, frequency or description. Only the fields you pass change. POST /list/{list_id}.
| Argument | Type | Description |
|---|---|---|
| list_id* | string | Distribution list id. |
| frequency | integer | |
| list_name | string | |
| description | string | |
| display_name | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id"
],
"properties": {
"list_id": {
"type": "string",
"pattern": "^\\d{1,20}$",
"description": "Distribution list id."
},
"frequency": {
"type": "integer",
"maximum": 999,
"minimum": 1
},
"list_name": {
"type": "string",
"maxLength": 30,
"minLength": 1
},
"description": {
"type": "string",
"maxLength": 20,
"minLength": 1
},
"display_name": {
"type": "string",
"maxLength": 50,
"minLength": 1
}
}
}WRITE: change a contact's name, email, mobile, landline, custom data or list membership. Only the fields you pass change. Returns a request_id. POST /subscription/{subscription_id}.
| Argument | Type | Description |
|---|---|---|
| string | ||
| mobile | object | |
| landline | object | |
| last_name | string | |
| customdata | array | |
| first_name | string | |
| list_names | array | Existing distribution list names the contact should be added to. |
| subscription_id* | string | Subscription id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"subscription_id"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 200
},
"mobile": {
"type": "object",
"required": [
"number"
],
"properties": {
"number": {
"type": "string",
"pattern": "^\\d{4,20}$",
"description": "Mobile number, digits only (US: 10 digits)."
},
"country_code": {
"type": "string",
"pattern": "^\\d{1,4}$",
"description": "Country code (default 1)."
}
}
},
"landline": {
"type": "object",
"required": [
"number"
],
"properties": {
"number": {
"type": "string",
"pattern": "^\\d{4,20}$",
"description": "Landline number, digits only (10 digits)."
},
"country_code": {
"type": "string",
"pattern": "^\\d{1,4}$"
}
}
},
"last_name": {
"type": "string",
"maxLength": 100
},
"customdata": {
"type": "array",
"items": {
"type": "object",
"required": [
"customdata_id",
"value"
],
"properties": {
"value": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "The value; its format depends on the field type."
},
"customdata_id": {
"type": "string",
"pattern": "^\\d{1,20}$",
"description": "Custom data field id (from trumpia_list_custom_fields)."
}
}
},
"maxItems": 50
},
"first_name": {
"type": "string",
"maxLength": 100
},
"list_names": {
"type": "array",
"items": {
"type": "string",
"maxLength": 30,
"minLength": 1
},
"maxItems": 20,
"description": "Existing distribution list names the contact should be added to."
},
"subscription_id": {
"type": "string",
"pattern": "^\\d{1,20}$",
"description": "Subscription id."
}
}
}| 1-300 ids (at most 100 lists or 300 subscriptions). |
| email_reply_to | string | Reply-to address (a registered sender). |
| recipient_type* | string | Whether recipient_ids are distribution list ids or subscription ids. |
| mail_merge_full_name | string | Replacement when a contact has no full name. |
| mail_merge_last_name | string | Replacement when a contact has no last name. |
| mail_merge_first_name | string | Replacement when a contact has no first name. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"description",
"recipient_type",
"recipient_ids"
],
"properties": {
"sms": {
"type": "string",
"maxLength": 980,
"minLength": 1,
"description": "SMS text (140 bytes per segment in US/Canada, up to 980 bytes concatenated)."
},
"send_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$",
"description": "Schedule time as YYYY-MM-DD hh:mm:ss (24-hour clock; the account's time zone). Omit to send immediately."
},
"email_body": {
"type": "string",
"maxLength": 100000,
"minLength": 1,
"description": "Email body (needs email_subject)."
},
"description": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Internal description of the message."
},
"org_name_id": {
"type": "string",
"pattern": "^\\d{1,20}$",
"description": "Organization name id to include in the mobile message (default organization name if omitted)."
},
"email_subject": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Email subject (needs email_body)."
},
"recipient_ids": {
"type": "array",
"items": {
"type": "string",
"pattern": "^\\d{1,20}$",
"description": "Numeric id, as returned by Trumpia."
},
"maxItems": 300,
"minItems": 1,
"description": "1-300 ids (at most 100 lists or 300 subscriptions)."
},
"email_reply_to": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 100,
"description": "Reply-to address (a registered sender)."
},
"recipient_type": {
"enum": [
"list",
"subscription"
],
"type": "string",
"description": "Whether recipient_ids are distribution list ids or subscription ids."
},
"mail_merge_full_name": {
"type": "string",
"maxLength": 61,
"description": "Replacement when a contact has no full name."
},
"mail_merge_last_name": {
"type": "string",
"maxLength": 30,
"description": "Replacement when a contact has no last name."
},
"mail_merge_first_name": {
"type": "string",
"maxLength": 30,
"description": "Replacement when a contact has no first name."
}
}
}