EZ MCP Server
The EZ Texting MCP Server exposes EZ Texting platform capabilities as tools that AI agents — Claude, ChatGPT, Cursor, and any other Model Context Protocol client — can call to perform messaging, contact management, and account operations on behalf of users. Instead of writing API-client code, your AI assistant handles authentication, payload shaping, and error handling in response to natural-language requests like “send a reminder to everyone in my VIP group” or “how many messages did I send last month?”
Connection details
| MCP Server URL | https://mcp.eztexting.com/mcp |
| Transport | Streamable HTTP (remote MCP) |
| Authentication | OAuth, handled by the MCP client |
Connecting in Claude
Open Settings → Integrations, add a new MCP server, and paste the URL:
https://mcp.eztexting.com/mcpClaude will walk you through the OAuth flow to authorize the server against your EZ Texting account.
Connecting programmatically
For clients that accept a JSON MCP server config:
{
"type": "url",
"url": "https://mcp.eztexting.com/mcp",
"name": "eztexting-mcp"
}Claude Code (terminal)
Staging example — point to prod once finalized:
claude mcp add --transport http ez-stg0 http://mcp-app.stg0.cf.wtf/mcpThen use the /mcp menu in Claude Code to connect and authenticate.
When to use the MCP server vs. the REST API
- MCP Server— you want to drive the API from Claude, ChatGPT, or another AI assistant; you're scripting in natural language; you want to skip writing API client code for one-off or exploratory tasks.
- REST API— you're building a product integration, a scheduled job, or any automation that needs deterministic, repeatable calls from code. The MCP server is a wrapper; the REST API is the underlying contract.
Available tools
The MCP server exposes 41 tools across 11 categories. Every tool maps to a REST API endpoint — if you know the API, you know what each tool does.
Account
Check account status, buy credits.
| Tool | Description | Key parameters |
|---|---|---|
account_details | Account creation date, billing plan name and type, remaining credits, and whether credits can be purchased. | — |
buy_credits | Purchase credits (min 150, max 10,000). | creditsToBuy (integer, required) |
tools | Lists every available tool with a one-line summary, grouped by category. | — |
Contacts
Create, update, list, and delete contacts.
| Tool | Description | Key parameters |
|---|---|---|
contact_list | Paged list of contacts with optional filters and sorting. | phoneNumber, firstName, lastName, email, groupName, optOut, source, page, size, sort |
contact_get | Fetch a contact by phone number — name, email, note, opt-out status, group memberships. | phoneNumber (required) |
contact_upsert | Create or update a contact. Phone number is the unique key. | phoneNumber (required); firstName, lastName, email, note |
contact_delete | Delete a contact by phone number. Irreversible. | phoneNumber (required) |
Contact Groups
Organize contacts into groups for targeted sends.
| Tool | Description | Key parameters |
|---|---|---|
contact_group_list | Paged list of contact groups. | name (partial match), page, size, sort |
contact_group_get | Fetch a group — name, note, contact count. | id (required) |
contact_group_upsert | Create or update a group. Omit id to create; provide id to update. Can seed with contacts or merge existing groups on create. | name (max 25 chars, required); id, phoneNumbers, groupIds, note |
contact_group_delete | Delete a group. Irreversible. | id (required) |
contact_group_membership | Add or remove contacts in a group by phone number. | id, phoneNumbers, action (add/remove) — all required |
Contact Fields
Define custom fields on contact records.
| Tool | Description | Key parameters |
|---|---|---|
contact_field_list | Paged list of custom fields — id, label, type, name, editable. | page, size |
contact_field_upsert | Create or update a custom field. Omit id to create; provide id to update. | label (max 20 chars), type (text/number/date) — required; id |
contact_field_delete | Delete a custom contact field. Irreversible. | id (required) |
Messages
Send SMS/MMS, list sent messages, get delivery details.
| Tool | Description | Key parameters |
|---|---|---|
message_send | Send an SMS or MMS immediately or scheduled. Requires toNumbers or groupIds. | toNumbers, groupIds, message, fromNumber, mediaUrl, sendAt |
message_get | Fetch details for a message by ID — type, from number, sent time, recipient count, credits used. | id (required) |
message_list | Paged list of messages with filters. | contactNumber, userNumber, textQuery, incoming, unread, type (sms/mms), sentAtStart, sentAtEnd, page, size, sort |
Message Templates
Reusable message bodies for consistent sends.
| Tool | Description | Key parameters |
|---|---|---|
message_template_list | Paged list of message templates. | name (exact), nameLike (partial), page, size, sort |
message_template_get | Fetch a template by ID — name, company, message text, media. | id (required) |
message_template_upsert | Create or update a message template. Omit id to create; provide id to update. | name, message (required); id, companyName, mediaFileId, mediaFileUrl |
message_template_delete | Delete a template. Irreversible. | id (required) |
Message Reports
Delivery, engagement, and link-click reporting.
| Tool | Description | Key parameters |
|---|---|---|
message_report_get | Delivery and engagement breakdown (counts and percentages) plus link click stats. | id (required) |
message_report_responses | Contacts and their response for a message, filtered by report type and status. | id, reportType, status (required); page, size, sort |
Conversations
Two-way threads with contacts.
| Tool | Description | Key parameters |
|---|---|---|
conversation_list | Paged list of conversations with contact name, unread count, opt status, and last message. | unread, archived, optType (OPTIN/OPTOUT/NONE), query, page, size, sort |
conversation_messages | Messages in a specific conversation between a user number and contact number. | userNumber, contactNumber (both required); read, page, size |
conversation_state | Archive or restore a conversation. | userNumber, contactNumber, action (archive/restore) — all required |
conversation_messages_mark | Mark one or more conversation messages as read or unread by message ID. | ids, read (both required) |
Workflows
Build, save, publish, and manage automated messaging workflows.
| Tool | Description | Key parameters |
|---|---|---|
wf_pub_available | Check if the account's plan allows publishing workflows. | — |
wf_stat | Workflow count broken down by status (PUBLISHED, UNPUBLISHED, PAUSED). | — |
wf_create_from_template | Clone a new workflow from an existing template. | templateId (required) |
wf_store_id | Save a workflow ID into session context (call before editing or publishing). | workflowId (required) |
wf_fetch | Fetch an existing workflow by ID. | workflowId (required) |
wf_save | Save updated workflow content. | workflow (JSON string, required) |
wf_status | Activate or deactivate a workflow (publish/unpublish). | workflowId, action (both required) |
Webhooks
Real-time notifications for incoming messages, opt-ins, and new contacts.
| Tool | Description | Key parameters |
|---|---|---|
webhook_list | Paged list of webhook subscriptions. | page, size |
webhook_get | Fetch a webhook by ID — type, callback URL, SSL settings. | id (required) |
webhook_create | Create a webhook subscription for an event type. | type (inbound_text.received / keyword.opt_in / contact.created), callbackUrl (both required); secret, insecureSsl |
webhook_delete | Delete a webhook subscription. Irreversible. | id (required) |
Statistics
Aggregate account-level metrics.
| Tool | Description | Key parameters |
|---|---|---|
msg_stat | Account-level SMS/MMS message statistics. | — |
ai_compose_stat | Messages created via AI Compose, broken down by source. | — |
Conventions
- Phone number format. All phone numbers must be 11 digits (country code + area code + number), e.g.
12015551234. - Pagination. Default
sizeis 20. Allowed values:10,20,50,100,200. - Sorting. Prefix the field name with
-for descending, e.g.-sentAt. - Scheduling.
message_sendaccepts an ISO 8601sendAttimestamp to schedule messages for future delivery. - MMS media. Attach media via
mediaUrl— images, video, or audio up to 5 MB. - Webhook event types.
inbound_text.received,keyword.opt_in,contact.created. - Upsert pattern.
contact_group_upsert,contact_field_upsert, andmessage_template_upserthandle both create and update — omitidto create, provideidto update.
Example prompts
Once your client is connected, these are representative things you can ask. The AI picks the right tool(s) and handles the payload:
- “Send ‘Your table is ready’ to 12015551234.” →
message_send - “Create a contact group called VIP Customers and add Jane Doe (12015551234) to it.” →
contact_group_upsert+contact_group_membership - “How many text messages did I send this month?” →
msg_stat - “Show me all conversations with unread replies.” →
conversation_listwithunread=true - “Set up a webhook that pings https://my-app.com/hooks/sms whenever someone replies.” →
webhook_create - “Buy 500 more credits.” →
buy_credits
Safety & authentication
- MCP tools act with the same permissions as your EZ Texting account. Sending messages costs real credits; deleting a contact is irreversible.
- Destructive tools (
contact_delete,contact_group_delete,contact_field_delete,webhook_delete,message_template_delete) should be gated behind user confirmation in your client — Claude Desktop and most MCP clients prompt for confirmation before invoking tools tagged as destructive. - OAuth is handled by the MCP client — EZ Texting never sees your client credentials, and your client never handles your EZ Texting password directly.
Related
- API Reference — the underlying REST endpoints the MCP tools wrap
- Authentication — Basic Auth and OAuth2 for the REST API
- Webhooks — the three event types the MCP server can subscribe to
- Automations & Workflows — the workflow model MCP's
wf_*tools operate on