// for agents, and the people who run them
Yes, an AI agent can buy a travel eSIM here. eSIM Tabby is a Model Context Protocol server: connect it to Claude, Cursor, ChatGPT or any other MCP client, and the agent searches plans by country, pays by hosted card checkout or USDC over x402, and hands back the activation QR code — without leaving the conversation.
One URL works everywhere the Model Context Protocol does:
Claude web or desktop
Settings → Connectors → Add custom connector. Name it eSIM Tabby and paste the URL. Claude runs the sign-in flow the first time you use it.
Claude Code
Cursor
Settings → MCP → Add new MCP server, or add this to
.cursor/mcp.json:
ChatGPT
Settings → Connectors → Create (a plan with connectors is required). Set the MCP server URL to the address above and choose OAuth for authentication.
Anything else
Any client that speaks streamable HTTP and OAuth works the same way. Machine-readable details live in the server card, and current prices in the plan catalog.
| search_esim_plans | Find travel eSIM data plans available for a destination. |
|---|---|
| get_plan_details | Full details of one eSIM plan, including current price. |
| create_checkout | Start a purchase — the step after the user picks a plan from search_esim_plans. |
| pay_order | Pay for an order in USDC over x402, without opening a browser. |
| get_order_status | Check an order. Call this after the user says they've paid. |
| get_esim_activation | Get the QR code and activation details for a purchased eSIM. |
| list_topup_options | Data top-ups that can be added to an eSIM the user already has. |
| create_topup_checkout | Buy more data for an eSIM the user already has — the step after list_topup_options. |
| get_esim_usage | How much data an active eSIM has used, and how much is left. |
| cancel_order | Cancel an order and refund it. Only possible while the eSIM is uninstalled. |
| list_my_orders | List this account's eSIM orders, newest first. |
| Card | USDC over x402 | |
| who it's for | A human at the keyboard | An agent that holds a wallet |
| what comes back | A hosted Stripe checkout link to open in a browser | An x402_url to pay, or the pay_order tool for
clients that sign x402 natively |
| how it settles | Card entered on Stripe's page; we never see the number | The wallet signs a USDC transfer, a facilitator broadcasts it — no browser, no custody on our side |
| confirming | The agent polls get_order_status after you say you've paid |
Settlement is synchronous; the QR code is one call away |
An order keeps the rail it started on. To switch, cancel it and start a new one — there are never two live ways to pay the same order.
The first tool call runs a standard OAuth flow — your client opens it, you sign in, and the agent gets a token scoped to your account. Card details are entered on Stripe's hosted page and never pass through us; a wallet signs for itself and we hold no keys. Anything bought in a conversation shows up in the app, and vice versa.