Send SMS from Claude in 30 Seconds, 61% Cheaper Than Twilio (Demo 🚀)
TL;DR: TextKit is an SMS API that Claude can use over MCP. A text costs $0.0032, against Twilio's $0.0083: 61% less, excluding carrier fees. Try it in one command: claude mcp add --transport http textkit https://mcp.jointextkit.com The problem with most texting APIs is that you have to jump through

TL;DR: TextKit is an SMS API that Claude can use over MCP. A text costs $0.0032, against Twilio's $0.0083: 61% less, excluding carrier fees. Try it in one command: claude mcp add --transport http textkit https://mcp.jointextkit.com
The problem with most texting APIs is that you have to jump through hoops to send one text. You sit down with a calculator to work out what it will cost, fill out forms for the carriers, and so on. What I wanted was something that lets me say: Claude, send this text.
Prices exclude carrier fees, which both pass through at cost. Twilio's prices are from its SMS and Verify pricing pages, read October 24, 2026. US and Canada only.
claude mcp add --transport http textkit https://mcp.jointextkit.com Enter fullscreen mode Exit fullscreen mode Run /mcp, pick TextKit and sign in. Then ask:
That number is our sandbox, so nothing reaches a real phone until you say so. Claude shows you exactly what it is about to send, and asks first:
Here is a day of texting for a small dental office, asked in plain English. Each request maps to tools on the server, and all of them work in the sandbox.
Buy a number in area code 512 and text +15005550006 "Your cleaning is tomorrow at 10. Reply C to confirm."
Import the patients in this CSV, tag them spring-cleaning, and tell me how many have an opt-in.
Send everyone tagged spring-cleaning "We have Saturday openings this month." Do a dry run first and show me the count and cost.
When someone triggers appointment_booked, wait an hour and text them a confirmation, unless appointment_cancelled arrives first.
How did yesterday's broadcast do? Show delivered, failed, replies and opt-outs.
The patients land in your contacts, tagged:
The dry run comes back before anything is sent (trimmed; a sandbox send costs $0):
{ "object": "batch_validation", "counts": { "rows": 6, "valid": 6, "invalid": 0, "duplicates": 0, "opted_out": 0, "landline": 0 }, "segments": { "total": 6, "max": 1, "encoding": "GSM-7" }, "estimated_cost_usd": 0 } Enter fullscreen mode Exit fullscreen mode And the confirmation flow is waiting as a draft until you turn it on:
It would be, so the server is built to be careful. Here is the first text from the demo. It was 7:55 AM where the number lives, so TextKit held it until quiet hours ended:
The rest of the rules work the same way. Test keys never reach a real phone. Before a broadcast, Claude does a dry run that shows how many people you would reach, what it would cost and who would be skipped, and nothing goes out until you confirm. People who reply STOP are blocked from every future send. And you can give Claude a key that can only do what you allow.
Each tool is one API call made with your key, so your key's scopes, rate limits and send checks apply as usual.
The server is https://mcp.jointextkit.com. Sign in once with OAuth or use an API key.
Claude Code: the command above, then /mcp to sign in.
Claude.ai and Claude Desktop: Settings → Connectors → Add custom connector, URL https://mcp.jointextkit.com.
ChatGPT: add a custom MCP server with the URL https://mcp.jointextkit.com/chatgpt and OAuth. That URL has every tool except Verify and API keys, because ChatGPT does not allow one-time codes.
Cursor, VS Code, Cline and any MCP client that can send a header:
{ "mcpServers": { "textkit": { "url": "https://mcp.jointextkit.com", "headers": { "Authorization": "Bearer ssms_sk_test_..." } } } } Enter fullscreen mode Exit fullscreen mode It is also in the official MCP registry as com.jointextkit/textkit.
To text actual customers you need either a 10DLC registration or a verified toll-free number. We take care of the 10DLC registration for you. In the meantime, you can only send texts to your own verified numbers.
When you want SMS inside your own app, ask Claude to create a key and store it as TEXTKIT_API_KEY, then point it at the quickstart for your stack. Each one opens with a prompt written for agents.
What would you have Claude text first? Tell me in the comments. I read every one.
I wrote this post with help from Claude. Docs: jointextkit.com/docs/mcp.