What is MCP?
Model Context Protocol (MCP) is an open standard that lets AI assistants securely connect to external tools and data. EZ Texting's MCP server puts your account directly inside the AI clients you already use. No switching tabs, no copy-paste.
EZ Texting MCP exposes 48 tools across 4 groups (+3 meta-tools on the unified endpoint) — send SMS/MMS, manage contacts and groups, run workflows, fetch reports, manage webhooks, query account state.
https://mcp.eztexting.com/mcp directly. No npm, no Node, no child process, faster startup, auto-updates server-side. Use the local stdio bridge only when the client doesn't support remote yet.
Claude.ai, ChatGPT, Claude Desktop, Claude Code, Cursor 0.46+, VS Code 1.99+, Windsurf, Cline 3.0+.
Endpoint: https://mcp.eztexting.com/mcp. OAuth 2.0 authorization code with PKCE (S256), auto-discovered; supports Dynamic Client Registration and Client ID Metadata Documents. No API keys.
Fallback: clients without native remote MCP support, air-gapped envs, or proxy quirks.
Runs npx -y @eztexting/mcp-server as child process. Tokens cached in ~/.mcp-auth/.
node -v.EZ Textinghttps://mcp.eztexting.com/mcp
Available on Pro / Max / Team / Enterprise plans.
ChatGPT supports remote MCP via custom connectors (Plus / Pro / Team / Enterprise — Developer mode).
EZ Textinghttps://mcp.eztexting.com/mcp
EZ Textinghttps://mcp.eztexting.com/mcpPro / Max / Team / Enterprise plans. No config file, no Node.
Edit your config file, then fully quit + relaunch Claude Desktop.
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
{
"mcpServers": {
"eztexting": {
"command": "npx",
"args": ["-y", "@eztexting/mcp-server"]
}
}
}
Verify: Settings → Developer → MCP Servers. eztexting shown as "running".
claude mcp add --transport http eztexting https://mcp.eztexting.com/mcp
Scope flag works the same:
claude mcp add --transport http --scope user eztexting https://mcp.eztexting.com/mcp
claude mcp add --transport http --scope project eztexting https://mcp.eztexting.com/mcp
Or in ~/.claude.json / .mcp.json:
{
"mcpServers": {
"eztexting": {
"type": "http",
"url": "https://mcp.eztexting.com/mcp"
}
}
}
Verify: claude mcp list. Then run /mcp in Claude Code and choose Authenticate; a browser window opens to sign in.
claude mcp add eztexting -- npx -y @eztexting/mcp-server
Or JSON:
{
"mcpServers": {
"eztexting": {
"command": "npx",
"args": ["-y", "@eztexting/mcp-server"]
}
}
}
Edit ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):
{
"mcpServers": {
"eztexting": {
"type": "http",
"url": "https://mcp.eztexting.com/mcp"
}
}
}
Or: Settings → MCP → Add new MCP server → choose HTTP transport.
{
"mcpServers": {
"eztexting": {
"command": "npx",
"args": ["-y", "@eztexting/mcp-server"]
}
}
}
Command palette → MCP: Open User Configuration. Add:
{
"servers": {
"eztexting": {
"type": "http",
"url": "https://mcp.eztexting.com/mcp"
}
}
}
Workspace scope: same shape in .vscode/mcp.json. Open Copilot Chat → Agent mode → eztexting tools surface.
{
"servers": {
"eztexting": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@eztexting/mcp-server"]
}
}
}
Edit ~/.codeium/windsurf/mcp_config.json (or: Settings → Cascade → MCP Servers → Add).
{
"mcpServers": {
"eztexting": {
"serverUrl": "https://mcp.eztexting.com/mcp"
}
}
}
{
"mcpServers": {
"eztexting": {
"command": "npx",
"args": ["-y", "@eztexting/mcp-server"]
}
}
}
Restart Windsurf after editing.
Open Cline panel → MCP Servers icon → Configure MCP Servers → opens cline_mcp_settings.json.
{
"mcpServers": {
"eztexting": {
"type": "streamableHttp",
"url": "https://mcp.eztexting.com/mcp",
"disabled": false,
"autoApprove": []
}
}
}
{
"mcpServers": {
"eztexting": {
"command": "npx",
"args": ["-y", "@eztexting/mcp-server"],
"disabled": false,
"autoApprove": []
}
}
}
Save → Cline auto-restarts server. Refresh MCP panel if tools don't appear.
Zed remote-MCP support is limited as of writing. Use the local stdio bridge.
Open ~/.config/zed/settings.json. Add under context_servers:
{
"context_servers": {
"eztexting": {
"command": {
"path": "npx",
"args": ["-y", "@eztexting/mcp-server"]
},
"settings": {}
}
}
}
Restart Zed. Tools surface in the assistant panel.
The connector acts as the EZ Texting user who signs in, with that user's account permissions.
Tools that only read are marked read-only; tools that send messages, overwrite or delete data are marked destructive, so your AI client asks before running them. To revoke access, disconnect the connector in your AI client.
See the EZ Texting Privacy Policy for how data is handled.
48 tools across 4 functional groups (+3 meta-tools on the unified endpoint — see tool tiers).
| Tool | Purpose |
|---|---|
message_send | Send SMS / MMS to one or more recipients |
message_list | List sent messages with filters (date, status, recipient) |
message_get | Fetch a single message by ID |
message_schedule_list | List scheduled messages with filters (status, recurring) |
message_schedule_get | Fetch a scheduled message by ID, including its schedule |
message_schedule_create_recurring | Create a recurring scheduled message |
message_schedule_update | Update or reschedule a one-time scheduled message |
message_schedule_update_recurring | Update a recurring scheduled message |
message_schedule_delete | Delete a draft or scheduled message |
message_template_list | List templates; pass id to fetch one |
message_template_upsert | Create or update a template |
message_template_delete | Delete a template |
conversation_list | List conversation threads (inbox) |
conversation_messages | Fetch messages within a thread |
conversation_messages_mark | Mark thread messages read / unread |
conversation_state | Get / set thread state (open, closed, archived) |
message_report_get | Fetch delivery + engagement report for a campaign |
message_report_responses | Fetch response data tied to a sent message |
drip_list | List drip campaigns with filters / pagination |
drip_get | Fetch a drip campaign by ID with all its messages |
drip_report_get | Contact progress for a drip campaign |
| Tool | Purpose |
|---|---|
contact_list | List contacts with filters / pagination |
contact_get | Fetch a single contact by ID |
contact_upsert | Create or update a contact |
contact_delete | Delete a contact |
contact_group_list | List contact groups; pass id to fetch one |
contact_group_upsert | Create or update a group |
contact_group_delete | Delete a group |
contact_group_membership | Add / remove contacts in a group |
contact_field_list | List custom contact fields |
contact_field_upsert | Create or update a custom field |
contact_field_delete | Delete a custom field |
| Tool | Purpose |
|---|---|
wf_list | List workflows on the account with filters (query, name, statuses, types) |
wf_fetch | Fetch a workflow definition by id |
wf_save | Create or update a workflow |
wf_status | Activate / deactivate a workflow (publish / unpublish) |
wf_stat | Workflow counts by status (PUBLISHED, UNPUBLISHED, PAUSED) |
wf_templates | List available workflow templates |
wf_create_from_template | Instantiate a workflow from a template |
wf_schema | Fetch workflow JSON schema (root or per node type) |
Workflow publishing eligibility is exposed via account_details (workflowPublishAllowed).
| Tool | Purpose |
|---|---|
account_details | Account info, plan, balance, workflow publishing eligibility |
buy_credits | Purchase up to 10,000 EZ Texting message credits for your own account, charged to the card already on file |
stat_get | Account stats — type=MSG (delivery) or AI_COMPOSE (AI usage) |
webhook_list | List webhooks; pass id to fetch one |
webhook_create | Register a new webhook |
webhook_delete | Remove a webhook |
keyword_list | List keyword auto-responders |
phone_number_list | List the account's phone numbers |
The unified https://mcp.eztexting.com/mcp endpoint runs in hybrid mode.
Rather than dumping all 48 tool schemas into every tools/list response
(which consumes context budget before you type a single prompt), it lists a curated set of
HOT tools and every write tool directly, and hides the remaining read-only tools behind
three lightweight meta-tools — 31 tools listed in total.
The meta-tools only ever reach read-only tools.
/mcp/messaging,
/mcp/contacts, etc.) are never hybrid — all their tools appear directly in
tools/list. Use a sub-server when you want the full catalog for one domain
without discovery overhead.
tools/list 10 toolsListed statically on every connection. Zero latency, no discovery step needed.
| Tool | Group |
|---|---|
message_send | Messaging |
message_list | Messaging |
conversation_list | Messaging |
conversation_messages | Messaging |
conversation_messages_mark | Messaging |
conversation_state | Messaging |
contact_list | Contacts |
contact_get | Contacts |
contact_upsert | Contacts |
account_details | Admin |
tools/list 18 toolsEvery tool that creates, changes, deletes or buys something is listed directly, in addition to the HOT tools above
(5 of which are writes). Write tools are never reachable through the meta-tools:
buy_credits, contact_delete, contact_group_upsert, contact_group_delete,
contact_group_membership, contact_field_upsert, contact_field_delete,
message_schedule_create_recurring, message_schedule_update, message_schedule_update_recurring,
message_schedule_delete, message_template_upsert, message_template_delete,
webhook_create, webhook_delete, wf_save, wf_status, wf_create_from_template.
The remaining read-only tools (message lookups, schedules, templates, reports, drips, groups, fields, workflow reads, admin lookups) are hidden from tools/list but fully reachable via the meta-tools below. See the Available tools section for the full list.
Always listed alongside HOT and write tools. Let the AI find and run COLD read-only tools without you spelling out tool names.
| Tool | Purpose |
|---|---|
search_tools | Keyword / category search over the read-only tools; returns names and one-line summaries (no input schemas — use describe_tools for those) |
describe_tools | Fetch full schema for a list of read-only tool names |
execute_read_tool | Call a read-only tool by its tool_name, passing its arguments as a JSON object under args |
You don't need to manage this manually — the AI handles it automatically. For reference:
search_tools("phone number") → discovers phone_number_listdescribe_tools(["phone_number_list"]) → gets full schemaexecute_read_tool({"tool_name": "phone_number_list", "args": {}}) → lists the account's phone numbersFor clients or scripts that need all 48 tools listed without the discovery layer, use the relevant sub-server URL directly (e.g. /mcp/admin for webhook tools).
Measured via tools/list response size (the full JSON-RPC response). Token estimate: bytes ÷ 4
| Endpoint | Tools listed | Bytes | ~Tokens |
|---|---|---|---|
/mcp (hybrid: 10 HOT + 18 write + 3 meta) | 31 | 26,913 | 6,728 |
/mcp/messaging | 21 | 19,670 | 4,917 |
/mcp/contacts | 11 | 7,244 | 1,811 |
/mcp/workflows | 8 | 5,360 | 1,340 |
/mcp/admin | 8 | 4,673 | 1,168 |
Use the unified /mcp endpoint by default. Pick a sub-server when you want the full catalog without discovery overhead.
| Sub-server | Remote URL | Sample tools |
|---|---|---|
messaging | https://mcp.eztexting.com/mcp/messaging | message_send, conversation_list, message_template_upsert |
contacts | https://mcp.eztexting.com/mcp/contacts | contact_upsert, contact_group_membership, contact_field_list |
workflows | https://mcp.eztexting.com/mcp/workflows | wf_save, wf_create_from_template, wf_status |
admin | https://mcp.eztexting.com/mcp/admin | account_details, buy_credits, webhook_create |
Point your client at the sub-server URL directly. Example (Claude Code):
claude mcp add --transport http eztexting-messaging https://mcp.eztexting.com/mcp/messaging
Or JSON (Cursor / VS Code / Claude Desktop / Claude Code):
{
"mcpServers": {
"eztexting-messaging": {
"type": "http",
"url": "https://mcp.eztexting.com/mcp/messaging"
}
}
}
{
"mcpServers": {
"eztexting-messaging": {
"command": "npx",
"args": ["-y", "@eztexting/mcp-server", "--server", "messaging"]
}
}
}
"Send 'Order shipped — track at ez.tx/abc' to +15555550123."
usesmessage_send
"Add these 50 contacts to group 'VIP-2026' from contacts.csv."
usescontact_upsert, contact_group_membership
"Create a 3-step drip from the 'Welcome' template, send Day 0/3/7."
useswf_create_from_template, wf_save
"How many messages did we send last week, broken out by day?"
usesstat_get, message_report_get
"Register a webhook at https://my.app/ez for incoming replies."
useswebhook_create
"List unread conversations and summarize the top 5."
usesconversation_list, conversation_messages