Pay-per-use SMS sending via x402 crypto payments. Exposes a single send_sms tool that dispatches transactional messages to US phone numbers through a Twilio-backed toll-free gateway. Each send costs $0.03 USDC on Base and automatically appends STOP opt-out language. Currently running on Sepolia testnet while the seller's number clears Twilio TFV approval, so calls return a 503 without charging you until that gate lifts. You supply a funded wallet private key in the MCP config and the server handles payment signing on each invocation. Designed for agent-initiated notifications where you've already collected recipient consent. Rate limits and TCPA compliance checks are baked in. The seller never sees your key; settlement happens on-chain and the receipt comes back with the Twilio SID.
A paid MCP server that lets AI agents send SMS messages to US phone numbers.
Each send_sms tool call:
Reply STOP to opt out if the body doesn't include opt-out languageNo API keys. No Twilio account. The agent pays the toll, the message goes out.
Status (2026-05-22): Public beta on Base Sepolia (testnet). The seller's toll-free number is undergoing Twilio TFV approval (submitted 2026-05-14, still in queue). During this window
/sendcalls short-circuit to a503 delivery_pending_tfv_approvalresponse before the buyer wallet signs anything, so no USDC is moved. The day Twilio approves the number, delivery flips on; pricing flips to Base mainnet shortly after.
Add this to your MCP config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"x402-sms": {
"command": "npx",
"args": ["-y", "x402-sms-mcp"],
"env": {
"BUYER_PRIVATE_KEY": "0xYOUR_PRIVATE_KEY"
}
}
}
}
Restart your MCP client. A send_sms tool will appear.
A wallet on Base Sepolia (testnet) funded with:
Generate a throwaway key:
node -e "const {generatePrivateKey,privateKeyToAccount}=require('viem/accounts');const k=generatePrivateKey();console.log('PRIVATE_KEY=',k);console.log('ADDRESS=',privateKeyToAccount(k).address)"
Use the printed address to claim from faucets, then put the printed key into your MCP config.
In Claude Desktop, ask:
Text my cell at +15551234567 when this long-running task finishes. The recipient (me) consents to receive this message.
Claude will call send_sms with opt_in_attestation: true. You'll get back a Twilio SID + the on-chain settlement hash. The transfer is visible at https://sepolia.basescan.org.
This MCP wraps a regulated SMS gateway. The operator (you) is responsible for ensuring every recipient has consented to receive messages before invoking send_sms. The opt_in_attestation: true argument is your legal attestation under TCPA and CTIA short-code/long-code rules.
Do NOT use this MCP to:
+1 E.164)The seller-side automatically:
Reply STOP to opt out to every messageIf you have any doubt about consent, do not call this tool.
| Env var | Required | Default |
|---|---|---|
BUYER_PRIVATE_KEY | yes | — |
SMS_URL | no | https://x402-sms-server-production.up.railway.app/send |
To point the MCP server at your own seller deployment, override SMS_URL.
The MCP surfaces three distinct error shapes so the model can explain what happened to the user and decide whether to retry.
| Cause | What you'll see in chat | Was payment taken? |
|---|---|---|
Seller's toll-free number still in TFV review (HTTP 503) | "SMS not sent — service is in pre-launch wait" + the seller's submitted date and retry guidance | no |
Buyer wallet exceeded per-minute/hour/day rate limit (HTTP 429) | "SMS not sent — this buyer wallet hit the per-X rate limit" + retry_after_seconds | no |
Twilio-side rejection (e.g. invalid number 21211, opted-out 21610) | Friendly hint mapped from the Twilio error code + the full response body | yes (the send tried) |
For the full mapping of Twilio error codes the MCP recognizes, see TWILIO_HINTS in src/index.ts.
Claude Desktop ──tool call──> MCP server (this package, on your machine)
│
│ x402 payment (USDC, Base Sepolia)
│ + to/message/opt_in_attestation
▼
Public seller (Hono + Twilio on Railway)
│
│ Twilio dispatch
▼
SMS lands on recipient's phone
│
│ Twilio SID + status
▼
MCP server ──tool result──> Claude Desktop
The MCP server doesn't talk to Twilio directly. It signs an x402 payment with the buyer's wallet, sends the payment + message details to the seller endpoint, and the seller's verified toll-free number dispatches the SMS. Your private key never leaves your machine. The seller never sees it.
MIT
BUYER_PRIVATE_KEY*secretEthereum private key for the buyer wallet that pays the per-call USDC fee.
io.github.mindstone/mcp-server-microsoft-teams
com.mintmcp/outlook-email
helbertparanhos/resend-email-mcp
marlinjai/email-mcp
io.github.mindstone/mcp-server-email-imap
io.github.osamahassouna/email-playbook-mcp