Published: April 27, 2026 | 9 min read
Claude can do almost anything except receive an SMS code — until you give it the right tool. The VirtualSMS MCP server adds 18 SMS-verification tools to Claude Desktop, Claude Code, and any Claude API caller. Real SIM cards, two transports, three production agent workflows. Install in 5 minutes.
Claude MCP for SMS Verification — Complete Setup Guide (2026)
What VirtualSMS Claude MCP Does
Claude is exceptional at orchestrating multi-step workflows — but it cannot receive SMS codes on its own. Until recently, every “sign up for X service” agent task ran into the same wall: a phone-number prompt that broke the chain. The VirtualSMS MCP server closes that gap. It exposes 18 SMS-verification tools to Claude Desktop, Claude Code, and any Claude API caller using tool-use, so the agent can buy a real-SIM number, wait for the code, and continue the workflow without human intervention.
This is the only production-grade MCP server for SMS verification today. The numbers are real physical SIM cards on real carrier networks — not VoIP — which is the difference between a successful WhatsApp verification and an instant block. The carrier-detection mechanics are unpacked in our VoIP vs physical SIM post; the short version is that platforms detect VoIP carrier prefixes within milliseconds, while a real SIM looks identical to a personal mobile.
💡 In one sentence: install once, then prompt Claude with “buy a Telegram number, wait for the code, and tell me what it says” — and Claude does it.
Two Install Paths: HTTP vs stdio
VirtualSMS Claude MCP ships in two transports. Both expose the same 18 tools, the same rate limits, and the same billing. Pick whichever fits your workflow.
Option A — StreamableHTTP (zero-install)
The hosted server lives at https://mcp.virtualsms.io/mcp and authenticates via the x-api-key header. No npm install, no Node dependency, works the same on macOS, Linux, Windows, and inside Docker. This is the fastest way to get Claude doing claude mcp sms verification across a team.
Paste this into ~/.config/Claude/claude_desktop_config.json (or the equivalent path on your OS):
{
"mcpServers": {
"virtualsms": {
"type": "streamableHttp",
"url": "https://mcp.virtualsms.io/mcp",
"headers": { "x-api-key": "vsms_your_api_key_here" }
}
}
}Restart Claude Desktop. The virtualsms server appears in the MCP tool list and the 18 tools become callable from any conversation.
Option B — stdio (local Node)
The stdio variant runs the server as a local Node subprocess. Lower latency, no network hop, but each MCP client launches its own copy of the process. Best for single-machine setups and offline-first workflows. Same 18 tools, same API.
{
"mcpServers": {
"virtualsms": {
"command": "npx",
"args": ["-y", "virtualsms-mcp"],
"env": { "VIRTUALSMS_API_KEY": "vsms_your_api_key_here" }
}
}
}If you’re on Claude Code (the terminal CLI), skip the JSON entirely — install at user scope with one command so it loads in every project:
claude mcp add --scope user virtualsms \ -- npx -y virtualsms-mcp \ -e VIRTUALSMS_API_KEY=vsms_your_api_key_here
The full Claude-specific install walk-through, including IDE-extension and automation tips, lives at /mcp/claude-skill. For non-Claude clients (Cursor, Codex, Windsurf, OpenClaw, Hermes, Cline, Zed, Continue.dev) the same JSON block ports across — see the main MCP page for client-specific config paths.
The 18-Tool Catalog
The MCP server exposes 18 tools in three groups. Discovery tools are unauthenticated and free to call; account and order tools require your API key. Four of the order-management tools — find_cheapest, search_service, swap_number, and wait_for_code — are unique to the VirtualSMS MCP and do not exist in any other SMS provider’s server.
| Group | Tool | Purpose |
|---|---|---|
| Discovery (no auth) | list_services | Every supported verification service |
list_countries | Every country with real-SIM stock | |
check_price | Live price + stock for a service × country | |
find_cheapest | Lowest-priced country for a service, right now | |
search_service | Natural-language service search (“telega” → Telegram) | |
| Account | get_balance | Current USD balance |
get_profile | Email, tier, API-key metadata | |
get_stats | Order count, success rate, 30-day spend | |
get_transactions | Filterable transaction history | |
| Orders | buy_number | Purchase a one-time activation number |
wait_for_code | WebSocket-backed wait — returns code on arrival | |
check_sms | Poll an order; auto-extracts the code | |
get_order | Full order details + every SMS received | |
cancel_order | Cancel an order; full refund if no SMS | |
cancel_all_orders | Bulk cleanup at end of session | |
list_active_orders | Every active activation right now | |
order_history | Past orders with filters | |
swap_number | Exchange the order for a fresh number, no extra charge |
For non-MCP integrations — bulk batches, headless servers, or non-AI code — the same operations are available on the VirtualSMS REST API. MCP is the right surface when an AI agent is in the loop; the REST API is the right surface when imperative code is.
Workflow 1: WhatsApp Account Verification, End-to-End
The most common automation: a Claude agent that needs to register a WhatsApp account during a longer task. Once the MCP server is installed, the entire flow collapses into a single prompt:
Buy the cheapest WhatsApp activation number, wait for the verification SMS, and return the code. Cancel automatically if nothing arrives within 5 minutes.
What happens under the hood:
find_cheapest— Claude calls it withservice=whatsappand gets the lowest-stock-priced country (typically UK, Poland, or Russia depending on time of day).buy_number— purchases a real SIM in that country. The number is reserved within ~1 second.wait_for_code— opens a WebSocket and blocks until the SMS lands. No polling, no rate-limit risk, returns within 30–60 seconds in most cases.cancel_order— only fires if the 5-minute timeout hits. Auto-refunded. Claude knows to bail without touching billing.
Real-SIM matters here. WhatsApp’s verification flow checks the inbound number’s carrier prefix against a known VoIP block-list before it even sends the SMS. Run the same prompt against a Twilio-backed MCP server (none exist for SMS verification, but if one did) and the agent would loop on wait_for_code until it hit the timeout. Every time.
Workflow 2: Bulk Service Signup Pipeline
Claude with parallel tool-use can fan out across multiple service signups at once. Useful when you’re building a multi-platform presence, doing competitive intelligence sign-ups, or QA-testing your own product’s verification flow.
For each service in [discord, telegram, instagram, google], find the cheapest country, buy a number, wait for the code, and return a JSON map of service -> code. Stop after 10 minutes total.
Claude issues four parallel find_cheapest calls, then four parallel buy_number calls, then opens four wait_for_code WebSockets simultaneously. The 120-rpm rate limit is generous enough that even fan-out across 50 services in a tight batch lands inside the budget. The agent returns a structured JSON map of service → code.
For volumes above a few thousand activations per day, the same pattern is more efficient on the REST API with imperative concurrency control — see virtual numbers for developer QA for the imperative pattern. MCP is the right surface when reasoning is in the loop (deciding which service to retry, which country to swap to); REST is the right surface when the loop is fixed.
Workflow 3: Telegram Bot Deployment
Telegram bot operators need a phone-verified Telegram account before they can register a bot through @BotFather. With the MCP server, that step disappears into the deployment script:
Buy a Telegram number from Germany under $1.50, wait for the SMS code, and report it back. If the number is flagged or the SMS doesn't arrive, swap_number once before giving up.
The interesting tool here is swap_number. Telegram occasionally rate-limits a specific number for a few minutes after registration. Rather than failing the entire workflow, Claude swaps to a fresh number from the same country at no extra cost and retries. This is a tool that doesn’t exist on any other SMS-verification MCP and is the reason most Telegram-bot sign-up scripts run on VirtualSMS.
End-to-end the workflow runs in under two minutes including the swap. Telegram verification numbers on real SIM start at $0.20 per activation depending on country.
Troubleshooting Common Errors
401 Unauthorized
Error: 401 Unauthorized — invalid or missing API key
The API key is missing or malformed. For HTTP transport, confirm the x-api-key header is being sent — some MCP clients lowercase header names, which is fine, but a few strip them entirely. For stdio, confirm VIRTUALSMS_API_KEY is set in the env block of the JSON config (not in your shell’s exported env). Keys start with vsms_ and you can rotate them from the dashboard at any time.
429 Rate Limit Exceeded
Error: 429 Too Many Requests — rate limit exceeded Limit: 120 requests per minute per API key
The default ceiling is 120 requests per minute per API key. Heavy fan-out (50+ parallel buy_number calls) can hit this. Three options: throttle the agent with an explicit delay between calls, batch through the REST API which has separate quotas, or email [email protected] to request a production-tier raise — we lift the cap on accounts running real workloads.
SMS never arrives (then auto-refunds)
If wait_for_code times out at 20 minutes, the order auto-cancels and refunds. This usually means the target service flagged the country’s number range. The fix is one tool call: swap_number for a fresh number, or rerun the workflow with a different country picked by find_cheapest + a country exclusion. Our broader SMS verification blocking guide covers the eight most common failure modes and their fixes.
✅ Pre-launch checklist: verify get_balance returns a value (auth is wired), call list_services (server is reachable), then run a single find_cheapest service=telegram as a smoke test before the agent goes live.
Get a summary or follow-up answer in your favourite AI assistant.
Frequently Asked Questions
How do I install the Claude MCP server for SMS verification?
Two ways. For Claude Desktop or Claude Code, paste a stdio config block referencing npx -y virtualsms-mcp with your VIRTUALSMS_API_KEY env var. For zero-install, point any MCP-compatible client at https://mcp.virtualsms.io/mcp and pass your key in the x-api-key header. Both flavors expose the same 18 tools and the same rate limits.
Does Claude Code support phone-verification tools natively?
Not natively, but Claude Code is fully MCP-compatible. After running the one-line claude mcp add --scope user command from the docs, the virtualsms server loads in every Claude Code project and 18 SMS-verification tools become available to the agent — buy_number, wait_for_code, check_sms, swap_number, get_balance, and 13 more.
Can MCP servers actually access real phone numbers?
Yes. The VirtualSMS MCP server is a thin protocol layer over the same backend that powers the dashboard and REST API — every tool call provisions a real, individually-routed SIM card on a real mobile carrier. Verification SMS from WhatsApp, Telegram, Google, Discord, and 2,000+ other services land on a number that looks identical to a personal consumer phone.
What's the difference between HTTP and stdio MCP transport?
stdio runs the server as a local Node subprocess (npx -y virtualsms-mcp) — fast, no network hop, but each MCP client launches its own copy. StreamableHTTP is zero-install: every client points at https://mcp.virtualsms.io/mcp with an x-api-key header. Pick stdio for offline-first / single-machine setups; pick HTTP for cloud agents, CI runners, and team-shared configs.
Is there a free tier for the Claude MCP SMS server?
The MCP server itself is MIT-licensed and free to install and run. You only pay per activation — billing is identical to dashboard or REST-API usage, starting at $0.05 per SMS code. Discovery tools (list_services, list_countries, check_price, find_cheapest) are unauthenticated and free to call.
What's the rate limit on Claude MCP tool calls?
120 requests per minute per API key by default. That covers every normal interactive Claude session and most parallel batch workflows. If you regularly hit the ceiling — for example, fanning 50 concurrent verifications across an agent crew — email [email protected] and we raise the limit on production accounts.
Related Articles
Install Claude MCP in 5 Minutes
18 SMS tools · Real SIM cards · 2500+ services · 145+ countries · 120 rpm/key · Free MIT-licensed server, pay only per activation
