Roamzy is the first eSIM provider with a public, machine-readable, security-hardened API for AI agents. Claude, Cursor, Continue, ChatGPT — any MCP client or any HTTP client — can query coverage, estimate costs, and purchase a global eSIM on the user's behalf. USDT payments, per-megabyte billing, 193 countries.
🚀 Try without sign-up. Install the MCP server with NO Roamzy account required — on the first tool call it auto-mints an anonymous account. The eSIM works immediately on USDT payment. Attach to a permanent Google or Telegram account whenever you want, or never.
Install the MCP server with no Roamzy account required. The agent auto-creates an anonymous account on first use — you can claim it later by signing in with Google or Telegram (optional; the eSIM works either way).
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"roamzy": {
"command": "npx",
"args": ["-y", "@roamzy/mcp-server"]
}
}
}
That's it — no env block needed. The MCP server detects no ROAMZY_API_TOKEN
and mints an anonymous account on the first authenticated tool call (~1s round-trip to roamzy.io).
Open source on GitHub (MIT) ·
Published on npm as @roamzy/mcp-server ·
Behind a firewall? Pin https://roamzy.io/mcp/roamzy-mcp-latest.tgz instead — same code.
You: Buy me an eSIM for Japan with $20 USDT through Roamzy
Claude: [calls roamzy_create_order] → returns msisdn, pay_url, claim_url
Claude: Your eSIM number will be 2040400002. To complete:
1. Pay $20 USDT at https://nowpayments.io/...
2. After payment (~5-15 min), I'll fetch your QR code.
3. (Optional) Attach this eSIM to your Roamzy account anytime at
https://roamzy.io/claim.html?token=rc_... — just sign in with
Google or Telegram + enter your eSIM number.
Once USDT settles (typical 5-15 min), the agent fetches roamzy_get_esim
and renders the QR PNG inline in chat. Scan it with your phone camera; the eSIM
activates instantly.
| Limit | Anonymous | Claimed account |
|---|---|---|
| Daily cap | $30 USDT | $50 USDT (raisable to $1000) |
| Monthly cap | $100 USDT | $500 USDT (raisable to $10k) |
| Cool-off (first 7 days) | $30 hard | $50 hard |
| Big-txn confirmation | $50 | $200 (raisable) |
| Max active eSIMs | 1 until claimed | 5 |
Tighter for anonymous because the account has no OAuth identity yet — limits blast radius if the MCP token leaks before you claim. Claiming promotes you to the normal-account tier instantly.
If you want spending limits visible in a dashboard from day one, or you're scripting agents at scale, create a token first.
Sign in at /dashboard/settings, open API & Agents, click Create new token. The plain text shows once — save it then.
{
"mcpServers": {
"roamzy": {
"command": "npx",
"args": ["-y", "@roamzy/mcp-server"],
"env": {
"ROAMZY_API_TOKEN": "rk_live_xxx",
"ROAMZY_ENABLE_PURCHASE": "false"
}
}
}
}
You: How much does an eSIM cost in Japan for 1 GB through Roamzy?
Claude: [calls roamzy_estimate(country_slug="esim-japan", mb_estimated=1024)]
→ Estimated cost: $4.50 USDT. Min top-up to reach this is $20.
To enable purchases, set ROAMZY_ENABLE_PURCHASE to "true" in the env block above. By default, purchase tools are not exposed even if the token has purchase scope — defense-in-depth against config typos.
| Tool | Endpoint | Purpose |
|---|---|---|
roamzy_status | GET /status | Check API health + pause flags. Agents poll this before purchase attempts. |
roamzy_list_countries | GET /catalog | All 193 countries with current per-MB rates. |
roamzy_country_detail | GET /countries/:slug | Single-country snapshot. |
roamzy_estimate | POST /estimate | Cost projection for {country, MB budget}. |
roamzy_me | GET /me | Verify token + user info. |
roamzy_list_esims | GET /esims | User's eSIMs with status and balance. |
roamzy_get_esim | GET /esims/:id | eSIM details with QR image URL + LPA URL. |
roamzy_order_status | GET /orders/:id | Poll a pending order. |
ROAMZY_ENABLE_PURCHASE="true" in config)| Tool | Endpoint | Purpose |
|---|---|---|
roamzy_create_order | POST /orders | Reserve eSIM and create USDT payment intent. Returns pay_url for the user to complete. |
Agents act with autonomy. Defense-in-depth keeps blast radius small.
Plain text appears once at creation. The server stores only the SHA-256 hash. A 12-character prefix-hint (rk_live_abc1…) is kept for display. One-click revoke is immediate.
Every token has daily and monthly USDT caps. Purchase scope is off by default — the token can read catalogs and check status but cannot spend. Big transactions (above $200) require manual confirmation.
A new token cannot exceed $50 USDT spend in its first week, regardless of configured daily limit. If a token leaks before you notice, blast radius is bounded.
Per-token revoke (user dashboard, immediate). Per-user agent-block (admin endpoint, blocks all of one user's tokens). Global agent pause (admin endpoint, 503s every Bearer token). Status visible at /api/v1/status.
Payment confirmations from NowPayments are verified with HMAC-SHA-512. The ledger has a unique constraint on (refType, refId) so a replayed webhook cannot double-credit a balance.
Settlement is USDT via NowPayments. No card storage compliance, no chargebacks, no fiat onboarding KYC. Once an agent gets the pay_url, the user pays directly from their wallet.
| Roamzy | Other eSIM providers | |
|---|---|---|
| Product structure | Single global eSIM, per-country rates | 1500+ country/region bundle variants |
| Billing | Per-megabyte USDT | Pre-paid daily packages, fiat |
| Public agent API | Yes — REST + MCP server | No (B2B-only or none) |
| Payment | USDT-only, no card | Stripe / Apple Pay / fiat cards |
| Activation | QR image URL + LPA URL | QR only, manual install |
| Spending defense | 5-layer (daily / monthly / cool-off / big-txn / global) | None (consumer flow) |
| Source code | Token formats, schemas public | Closed |
Which AI agents can use Roamzy?
Any MCP-compatible client — Claude Desktop, Cursor, Continue, Cline, Windsurf. And any HTTP client beyond MCP: LangChain tools, OpenAI function calling, n8n, Zapier, custom Python scripts, all hit /api/v1/* directly.
What payment methods are supported?
USDT only, via NowPayments. Default chain is TRC-20 (TRON); BSC, Solana, and others are selectable. No fiat, no card-on-file. Crypto rails are agent-native — no shipping address, no card-storage compliance, settlement final once the chain confirms.
How does the agent deliver the eSIM to the user?
After payment, GET /api/v1/esims/:id returns three activation surfaces. qr_image_url (PNG URL, primary — agents render inline in chat for the user to scan with their phone camera). qr_payload (raw QR text for clients that render their own QR). lpa_url (one-tap install URL for iOS 17.4+ / Android 14+ when the agent runs on the eSIM-target device).
Do I need an account first?
No — anonymous-first is the recommended flow. The MCP server creates an anonymous account on first use, no sign-up (see the quick start above). You can optionally claim it later with Google or Telegram to manage it in a browser; or, for managed environments, pre-create a Bearer token at /dashboard → Settings → API & Agents.
How is this different from Airalo / Holafly?
Three structural differences. (1) One SKU — single global eSIM with per-country rates, instead of 1500+ bundle variants. (2) Per-megabyte billing — agents map USDT budgets cleanly to data, no pre-paid daily expiry math. (3) Public agent API — full REST + MCP server, instead of B2B-restricted enterprise integration.
Where is the OpenAPI spec?
/api/v1/openapi.json (machine-readable). Interactive Swagger UI at /api/v1/docs. Long-form agent guidance at /llms.txt and /llms-full.txt. JSON manifest at /.well-known/agents.json.
@roamzy/mcp-server on npm — install via npx -y @roamzy/mcp-server