DEV Community

Cover image for Send SMS from Claude in 30 Seconds, 61% Cheaper Than Twilio (Demo 🚀)
sbier060
sbier060

Posted on Fully Autonomous

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

💸 61% cheaper than Twilio

TextKit Twilio
Per text (US, per segment) $0.0032 $0.0083
10,000 texts a month $32.00 $83.00
Phone verification $0.025 $0.05
Phone number, per month $0.95 $1.15
A send that fails Free $0.001

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.

⚡ The 30-second version

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:

Text +15005550006 "Hello from Claude."

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:

Claude asks to use TextKit's Send message tool, showing the text and the number

🦷 The demo: a dentist's office, run from a chat

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:

Six patients imported and tagged spring-cleaning in the TextKit console

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:

The appointment confirmation automation in the TextKit console

🛡️ But isn't it dangerous to let an agent text people?

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:

Claude reports the text is queued until quiet hours end at 8 AM Eastern

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.

🔌 Connect it anywhere

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.

🚀 Going live

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.

Your turn

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.

Top comments (0)