doctorSIM MCP Server

Connect Claude, ChatGPT, Grok, Grok Bot, or Cursor to mobile top-ups, travel eSIM, and gift cards in 200+ countries via the Model Context Protocol.

MCP endpoint auth.md SKILL.md Grok Bot install REST API v2

What you can do

Connecting to MCP

Remote connectors (Claude.ai, ChatGPT, Grok, Grok Bot) use OAuth Dynamic Client Registration + PKCE. Leave client ID/secret blank — the server issues a public client. Grok Bot: install guide.

SettingValue
MCP URLhttps://api.doctorsim.com/mcp
OAuth issuerhttps://www.doctorsim.com
API basehttps://api.doctorsim.com/v2
Auth guideauth.md

Full step-by-step registration flow: auth.md.

Available tools

Guest catalog and checkout tools work without Authorization. PRO credit debit, order history, line lookup, and webhooks need OAuth. preview_esim_order / create_esim_order are aliases of preview_order / create_order with the same dual noauth + oauth2 schemes.

ToolREST equivalentAuth
get_countriesGET /v2/countriesguest (noauth)
lookup_carrierGET /v2/topup/carriers/lookup/{phone}guest (noauth)
get_operatorsGET /v2/topup/operatorsguest (noauth)
get_operator_service_typesGET /v2/topup/operators/{id}/service-typesguest (noauth)
get_operator_ratesGET /v2/topup/operators/{id}/ratesguest (noauth)
search_productsGET /v2/products/searchguest (noauth)
get_giftcard_brandsGET /v2/giftcards/brandsguest (noauth)
get_giftcard_brand_productsGET /v2/giftcards/brands/{id}/productsguest (noauth)
get_esim_destinationsGET /v2/esim/destinationsguest (noauth)
get_esim_plansGET /v2/esim/productsguest (noauth)
get_esim_plan_detailGET /v2/esim/products/{catalog_id}guest (noauth)
preview_orderPOST /v2/orders/previewguest + oauth orders:read
create_orderPOST /v2/ordersguest + oauth orders:write
preview_esim_orderalias of preview_order (type=esim)guest + oauth orders:read
create_esim_orderalias of create_order (type=esim)guest + oauth orders:write
get_order_statusGET /v2/orders/{id}guest + oauth orders:read
get_esim_lineGET /v2/esim/lines/{iccid}oauth orders:read
get_esim_topup_plansGET /v2/esim/lines/{iccid}/topup-plansoauth orders:read
create_esim_topupPOST /v2/esim/lines/{iccid}/topupsoauth orders:write
list_ordersGET /v2/ordersoauth orders:read
get_balanceGET /v2/balancePRO oauth balance:read
list_webhooksGET /v2/webhooksPRO oauth webhooks:read
Travel eSIM country_iso: ISO-2 (es, us) is a strict catalog match — requesting es does not include Europe (eu) or global (ww) plans. Use region slugs eu, ww, as for those destinations.

How a purchase works

  1. Discover — top-up: lookup_carrier or get_countries + get_operators. Travel eSIM: get_esim_destinations then get_esim_plans.
  2. Price — top-up: get_operator_rates (copy token). eSIM: copy catalog_id + price_token.
  3. Guest / consumer — skip preview. Call create_order (or create_esim_order) as soon as the product is chosen. No Authorization header.
  4. PRO credits — preview_order first (mandatory), then create_order with OAuth. Debits prepaid credits.
  5. Monitor — guest: get_order_status with payment_link (preferred) or order_id. Do not show checkout_hash. Guest products arrive by email. PRO: list_orders / webhooks. Fulfilled eSIM (PRO): get_esim_line (OAuth).

Checkout modes

PRO: always call preview_order first — it is the debit breakdown before credits move. Guest: preview is optional; create the payment_link as soon as the product is chosen.
Accountcreate_order resultPaymentOrder ID
PRO account Credits debited; order placed immediately. Response always has order_id, status, credits_used. Pass idempotency_key (distinct per SKU). If order_id is missing, list_orders / get_order_status — never re-create. Prepaid PRO balance order_id in response
Regular account Returns payment_link and order_id when one exists (hash is machine-only) User pays on doctorsim.com (Stripe / PayPal / Bizum); enters email; delivery is email Show order_id when present; otherwise poll via payment_link

Consumer payment link formats:

https://www.doctorsim.com/en/mx/topup-phone/checkout/{64-char-hash}
https://www.doctorsim.com/en/esim/checkout/{64-char-hash}

Payment links expire in 6 hours.

Authentication summary

MethodWhoScopes
API keys (api_id:api_secret)PRO with API accessFull (balance, webhooks, orders)
OAuth JWTPROorders + balance (+ webhooks on request)
OAuth JWTRegular consumerorders:read orders:write only

Supported clients — install before you demo

Full per-surface steps live on the Agentic Core roadmap §4. Public Grok Bot steps: grok-bot.md.

ClientHow to connect
Claude.aiCustomize → Connectors → Add custom connector → MCP URL. Leave Client ID / Secret blank (lazy auth).
ChatGPTPrivate custom GPT / Apps MCP (same URL). Public directory waits on #10000 — do not create a new plugin.
Grok (grok.com) grok.com/connectors → New → Custom. Headers empty. If Grok asks for OAuth credentials, paste the published public Client ID from grok-bot.md.
Grok Bot Settings → Plugins → custom MCP (name doctorSIM, headers empty). Click Authenticate, then Sign in or Continue as guest. Do not paste an API key. Enable on any bot or @.
Grok Build marketplace After the human xAI catalog PR: /plugin → search doctorSIM. Until then use custom MCP.
Cursor / Claude Desktop Remote MCP or stdio — see SKILL.md. Cursor is connect-time: Authenticate on add.

Verify with: “List the doctorSIM tools you have” then a guest catalog question (e.g. eSIM plans for Spain). Expect ~20 tools. Guest catalog has no login prompt on Claude / ChatGPT; Grok / Grok Bot choose Continue as guest on add.

Order monitoring

PRO accounts: poll GET /v2/orders/{id} or register webhooks for async updates.

Consumer / guest: poll GET /v2/orders?payment_link={url} or ?checkout_hash={hash}. Show the buyer only the payment link and order id. Guest fulfillment is by email.