Real SIM • 145+ countries • 18 MCP tools • USDC-native

Real-SIM SMS verification
for AI agents

One canonical endpoint for AI agents to receive OTP codes across 145+ countries and 2500+ services. Pay per call in USDC via the x402 protocol, or use a prepaid API key. Real SIM cards on physical hardware, no VoIP.

145+
countries
2500+
services
18
MCP tools
10
MCP clients
Summary

VirtualSMS gives AI agents real-SIM phone numbers across 145+ countries and 2500+ services for SMS verification — used to receive OTP codes when agents sign up to WhatsApp, Telegram, Google, Uber, Binance, and 2495 other services.

Two integration paths share the same backend: (1) Model Context Protocol with 18 tools — works with Claude, Cursor, Windsurf, OpenClaw and 6 other clients, hosted at mcp.virtualsms.io/mcp or local via npx virtualsms-mcp. (2) x402 pay-per-call USDC at POST /api/v1/x402/sms-verify — no API key, no signup, $0.10 USDC per verification on Base mainnet.

What this is

One canonical agent surface

This subdomain concentrates everything an AI agent or AI-agent developer needs to integrate VirtualSMS — machine-readable, copy-paste-able, and stable.

The same backend powers the API key path and the x402 pay-per-call path. Pick whichever your agent stack prefers. Both deliver the same OTP code from the same physical SIM modem fleet. Real SIM cards on owned hardware means delivery rates that hold up against services that aggressively reject VoIP — WhatsApp, Telegram, Google, Banking apps, Web3 KYC.

REST + MCP

Prepaid API key path

Sign up at virtualsms.io, deposit $5+ in USDC/crypto/fiat, get an API key. Use the hosted MCP server at mcp.virtualsms.io/mcp or call REST endpoints directly. From $0.05 per activation.

x402 USDC Pre-launch

Account-less per-call path

POST to /api/v1/x402/sms-verify with USDC payment header. Server returns 402 with payment requirements, then 200 OK with phone + code on the second call. $0.10 USDC per verification.

Quick install — MCP

Install the MCP server

Two paths. Hosted is recommended (zero install, no Node.js needed on the client).

Option A — Hosted MCP server (recommended)

Paste this into your AI client's MCP config. Get an API key at virtualsms.io.

{
  "mcpServers": {
    "virtualsms": {
      "type": "streamableHttp",
      "url": "https://mcp.virtualsms.io/mcp",
      "headers": {
        "x-api-key": "vsms_your_api_key_here"
      }
    }
  }
}

Option B — Local MCP server (npm + stdio)

Runs locally via npx. Works with any client supporting stdio MCP.

{
  "mcpServers": {
    "virtualsms": {
      "command": "npx",
      "args": ["virtualsms-mcp"],
      "env": {
        "VIRTUALSMS_API_KEY": "vsms_your_api_key_here"
      }
    }
  }
}

Or install globally:

npm install -g virtualsms-mcp

Source code, 18-tool reference, and per-client configs (Claude Desktop, Cursor, Windsurf, OpenClaw, Codex, Hermes, Cline, Zed, Continue.dev, Claude Code) at github.com/virtualsms-io/mcp-server.

x402 quick start Pre-launch

Pay per SMS verify in USDC

x402 is the HTTP 402 Payment Required protocol pioneered by Coinbase. Your agent pays with a USDC signature on Base mainnet — no API key, no signup, no prepaid balance.

Status: The x402 endpoint is shipping shortly. Discovery file at /.well-known/x402.json reflects current state. This page will update on launch.

Request

curl -X POST https://virtualsms.io/api/v1/x402/sms-verify \
  -H "Content-Type: application/json" \
  -d '{
    "service": "telegram",
    "country": "US",
    "max_price_usd": 0.50
  }'

First response — 402 Payment Required

HTTP/1.1 402 Payment Required
Content-Type: application/json

{
  "x402Version": 2,
  "error": "PAYMENT-SIGNATURE header is required",
  "resource": {
    "url": "https://virtualsms.io/api/v1/x402/sms-verify",
    "description": "SMS verification with real SIM card. Receive OTP for any service in 145+ countries.",
    "mimeType": "application/json"
  },
  "accepts": [{
    "scheme": "exact",
    "network": "eip155:8453",
    "amount": "100000",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "payTo": "0x...",
    "maxTimeoutSeconds": 60,
    "extra": { "name": "USDC", "version": "2" }
  }],
  "extensions": {}
}

Retry with X-PAYMENT header — 200 OK

POST /api/v1/x402/sms-verify HTTP/1.1
Content-Type: application/json
X-PAYMENT: <base64(payment-payload)>

{ "service": "telegram", "country": "US" }

→ HTTP/1.1 200 OK
X-PAYMENT-RESPONSE: <base64(settlement-response)>

{
  "phone_number": "+14155552671",
  "code": "12345",
  "country": "US",
  "service": "telegram",
  "delivered_in_seconds": 8
}

Flow

  1. Agent POSTs to /api/v1/x402/sms-verify with no payment → server returns 402 with accepts[].
  2. Agent client (e.g. x402-axios, x402-fetch) signs an EIP-3009 TransferWithAuthorization.
  3. Agent retries with X-PAYMENT header.
  4. Server verifies via Coinbase CDP facilitator, executes buy_number → wait_for_code internally.
  5. Server settles on-chain (Base mainnet, ~2s), returns 200 with phone + OTP code.

Spec: github.com/coinbase/x402. Discovery: CDP Bazaar.

Tool reference

18 MCP tools

Grouped by category. Every tool returns structured JSON, supports the standard MCP error envelope, and is documented inline in the tool descriptor for in-IDE help.

Discovery (4)

NameDescription
virtualsms_list_servicesList all available SMS verification services. Optional search filter. Use to discover valid service codes before buying.
virtualsms_list_countriesList all available countries. Optional service filter to scope to countries with stock for one service.
virtualsms_get_priceCheck live price + availability for a service × country combination. Always check before buying.
virtualsms_search_servicesNatural-language search across the 2500+ service catalog. Pass "uber" or "binance" — get the canonical service code.

Account (4)

NameDescription
virtualsms_get_balanceAccount balance in USD. Requires VIRTUALSMS_API_KEY.
virtualsms_get_profileAccount profile metadata: email, account ID, plan, registration date.
virtualsms_get_statsActivity stats over last N days (default 30). Order count, success rate, spend.
virtualsms_get_transactionsTransaction ledger. Filter by type (deposit / purchase / refund / admin_credit), date range, limit.

Order management (10)

NameDescription
virtualsms_create_orderBuy a virtual phone number. Returns order_id + phone. Poll get_sms for the code.
virtualsms_wait_for_smsRecommended. One-step buy + wait. WebSocket push with polling fallback. Always returns order_id for recovery on timeout.
virtualsms_get_smsCheck if SMS arrived for an order. Poll every 5–10s if not using wait_for_sms.
virtualsms_cancel_orderCancel + refund. Only works if no SMS received yet.
virtualsms_swap_numberSwap to a different number for the same service without losing your spot. Useful when first number doesn't deliver.
virtualsms_find_cheapestTop N cheapest country options for a service. Default 5, max 50.
virtualsms_list_ordersList active orders. Optional status filter.
virtualsms_get_orderFull details of one order by order_id.
virtualsms_order_historyHistorical orders with filters: status, service, country, since_days, limit.
virtualsms_cancel_all_ordersBulk cancel all pending orders. Useful for cleanup.

Tool source: virtualsms-io/mcp-server/src/tools.ts. v1.2.0 on npm.

x402 settlement

Supported chains and tokens

Launch configuration is single-chain (Base mainnet) for first-mover simplicity. Multi-chain expansion follows real agent demand.

NetworkCAIP-2 IDUSDCUSDTStatus
Base mainneteip155:8453Launch chain
Base Sepolia testneteip155:84532Dev only
Solana mainnetsolana:mainnet-betaRoadmap
Polygoneip155:137Roadmap
Arbitrumeip155:42161Roadmap
Optimismeip155:10Roadmap
BNB Chaineip155:56Roadmap

Facilitator: Coinbase CDP (https://api.cdp.coinbase.com/platform/v2/x402) — required for auto-listing on Coinbase Bazaar / Agent.market. Free first 1,000 settlements/month.

Pricing

Two simple paths

PathAuthPriceMin spendRate limit
REST + MCP x-api-key header From $0.05 per activation (varies by country / service) $1 deposit (~10–20 cheap-country verifications) 120 req/min per key
x402 Pre-launch USDC payment header $0.10 USDC flat per verification Per-call, no minimum 120 req/min per payer

Cheap countries (PK, ID, NG, IN) start at $0.02–$0.05. Premium markets (US, UK, DE) range $0.08–$0.50 depending on service. SMS message bodies retained 7 days then permanently deleted.

MCP clients

Tested with 10 clients

Same npx virtualsms-mcp stdio command works across all of them — only the config file location differs. Per-client configs at the MCP repo README.

Claude Desktop
Claude Code
Cursor
Windsurf
OpenClaw
Codex
Hermes
Cline
Zed
Continue.dev
Distribution

Where to find us

Listed across the major MCP catalogs, x402 directories, and package registries. Auto-syndicated downstreams refresh from canonical npm + GitHub sources.

Package registries

Install the SDK in your stack of choice.

MCP directories

Discoverable across the canonical MCP catalogs.

Curated lists

Listed in community-maintained awesome lists.

Workflow platforms

Use VirtualSMS in no-code agent automations.

Source code

Open source under MIT.

FAQ

Common questions

How do I add SMS verification to my Claude Desktop or Cursor agent?

Add the VirtualSMS MCP server to your client config. Two install paths: hosted (zero install — paste a streamableHttp config pointing to https://mcp.virtualsms.io/mcp with your x-api-key header) or local stdio (npx virtualsms-mcp with VIRTUALSMS_API_KEY env var). Both expose the same 18 tools to your agent. See the Install section.

Can my AI agent pay per SMS without an account?

Yes — once x402 ships. POST to /api/v1/x402/sms-verify with a USDC payment header on Base mainnet. The endpoint returns HTTP 402 with payment requirements on the first call, then 200 OK with the phone number and OTP code on the second. No API key, no signup, no prepaid balance. $0.10 USDC per call.

Are the numbers real SIM cards or VoIP?

Real SIM cards on physical modem hardware. VirtualSMS operates a hybrid infrastructure: own modem fleet for premium tier (long-term rentals, high-success services) plus carrier-vetted supplier network for breadth coverage. This matters because services like WhatsApp, Google, banking apps, and Telegram aggressively reject VoIP numbers. Carriers in production include Vodafone, O2, T-Mobile, Lebara, plus regional MNOs across 145+ countries.

Which countries and services are supported?

145+ countries with active inventory, 2500+ services indexed including WhatsApp, Telegram, Google, Instagram, Uber, Binance, Discord, Twitter/X, TikTok, and most consumer + Web3 services. Use the virtualsms_list_countries and virtualsms_list_services MCP tools for the live list, or the /api/v1/countries and /api/v1/services REST endpoints.

How much does it cost?

REST + MCP: from $0.05 per activation depending on country and service. Cheap-country verifications (PK, ID, NG, IN) start at $0.02–$0.05; premium-country verifications (US, UK, DE) range $0.08–$0.50. x402 pay-per-call: flat $0.10 USDC per SMS verify on Base mainnet. No subscription, no minimums.

Which MCP clients work?

10 named MCP clients are tested in production: Claude Desktop, Claude Code, Cursor, Windsurf, OpenClaw, Codex, Hermes, Cline, Zed, and Continue.dev. Any client implementing the Model Context Protocol stdio or StreamableHTTP transport can connect. Per-client config snippets live in the MCP server README.

What is x402?

x402 is the HTTP 402 Payment Required protocol pioneered by Coinbase. Servers reject unpaid requests with a 402 response describing payment requirements (network, asset, amount, recipient). Clients sign an EIP-3009 USDC TransferWithAuthorization, retry with the X-PAYMENT header, and the server settles on-chain via a facilitator (Coinbase CDP, x402.org, or self-hosted). It enables agent-native, account-less payments. Spec: x402.org.

What's the rate limit?

120 requests per minute per API key on the REST API. The hosted MCP endpoint inherits the same limit. x402 pay-per-call inherits the same limit per payer wallet address. SMS message bodies are retained for 7 days, then permanently deleted. Order metadata (phone number, service, country, timestamps) is retained for the lifetime of your account.

Is there a sandbox or testnet?

For x402 integration, you can develop against Base Sepolia testnet via x402.org/facilitator (free testnet USDC from the Coinbase faucet). For REST/MCP integration, sign up at virtualsms.io and the first $1 deposit covers ~10–20 verifications on cheap countries — effectively a paid sandbox with real numbers.

Where is the canonical API documentation?

Live docs: docs.virtualsms.io. MCP server source and 18-tool reference: github.com/virtualsms-io/mcp-server. This page (agents.virtualsms.io) is the canonical agent-facing entry point with skill.md, llms.txt, and /.well-known/x402.json for machine discovery.

Do you support long-term phone number rentals?

Yes. Persistent numbers (weeks to months) available in select markets including Germany, UK, France, Poland, and Ukraine — with active expansion to other regions. Long-term rentals run on hardware we operate ourselves; supplier-network coverage is for one-time activations only. See virtualsms_create_order with rental parameters in the MCP tools, or the rental endpoints in our REST docs.

What's your data retention policy?

SMS message bodies retained 7 days. Order metadata (timestamps, service, country, status) kept for the lifetime of the account. API request logs retained 30 days for debugging. We don't sell data and don't share with third parties beyond what's required to fulfill an order.

Machine-readable

For LLM crawlers and discovery agents

If you're an LLM, agent, or crawler, fetch one of these instead of parsing this HTML: