Skip to main content
Glama

@worldcitisim/mcp-esim

MCP server that lets Claude and other MCP-compatible agents search and buy WorldCitiSim eSIM plans. Wraps https://shop.worldcitisim.com/wp-json/esim/v1/*.

Install

Claude Desktop / Claude Code

claude mcp add --scope user wcs-esim npx -y @worldcitisim/mcp-esim

Or paste into ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "worldcitisim-esim": {
      "command": "npx",
      "args": ["-y", "@worldcitisim/mcp-esim"]
    }
  }
}

Cursor / Windsurf / other MCP clients

Same shape — command: "npx", args: ["-y", "@worldcitisim/mcp-esim"].

ChatGPT Developer Mode

Settings → Developer Mode → Add MCP server → same npx command.

Related MCP server: PikaSim

Tools exposed

Tool

Purpose

esim_search_plans

Filter catalog by country / region / days / GB. Returns matching plans with their first 5 variations.

esim_get_plan

Fetch one plan by slug with all variations.

esim_create_order

Create a pending order. payment_method: "stripe" (default) returns a Stripe Checkout URL for the user to tap; payment_method: "btc" returns an on-chain btc block (address + amount + QR) to show the user directly. Both return an order_token for polling.

esim_check_order

Poll an order's status. Returns activation data (ICCID, QR URL) once payment clears.

Example interaction

User: I'm going to Japan for 10 days, what eSIM should I get?

Claude calls: esim_search_plans({ country: "japan", min_days: 7, max_days: 15 })
→ returns matching plans with variations priced and in stock.

Claude picks the best match, presents 2–3 options to the user.

User: the 10GB one

Claude: "Pay by card or Bitcoin?"

User: card

Claude calls: esim_create_order({ email: "user@example.com", variation_id: 44941 })
→ returns { order_id, order_token, payment_link_url }.

Claude: "Tap this link to pay: <Stripe URL>. You'll get the eSIM QR in your email within ~30 seconds."

User pays. Claude optionally polls esim_check_order until status=completed.

For Bitcoin, Claude calls esim_create_order({ ..., payment_method: "btc" }) and gets back a btc block — { address, sats_amount, btc_amount, qr_data_uri, expires_at } — which it shows the user to pay from any on-chain wallet. No redirect. If BTC is declined for a small order during a network-fee spike, the call returns a btc_unavailable error and Claude offers card instead. Either way, esim_check_order polls until status=completed.

Environment

  • WCS_ESIM_API_BASE — override the API base URL. Default: https://shop.worldcitisim.com/wp-json/esim/v1.

Runtime

  • Node 20.11+ (for native fetch + ESM).

  • No secrets. No Stripe credentials touch this process. Payment happens on Stripe's hosted checkout page; the MCP just hands the agent the URL.

  • Catalog is client-side cached 5 minutes + ETag-aware; multiple search calls within a minute don't hit the network.

Development

npm install
npm run dev                 # stdio MCP server on this terminal
npm run build               # compile to dist/

Point a Claude Code session at the local dev build:

claude mcp add wcs-esim-dev node "$(pwd)/dist/index.js"

License

MIT

Available Tools

4 tools
esim_check_orderA

Poll an order's status. Returns status: pending while waiting for payment, status: processing or completed once paid, with activation data (ICCID, QR URL, install instructions).

ParametersJSON Schema
NameRequiredDescriptionDefault
order_idYes
order_tokenYesThe opaque token returned by esim_create_order.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses return states and activation data but omits error conditions, rate limits, or side effects. Adequate but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with purpose, includes necessary detail on statuses and data. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but description adequately explains return values and states. Could mention error handling or non-existent orders for full completeness given complexity is low.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 2 params with 50% coverage (order_id lacks description). The description adds context for order_token's origin but nothing for order_id. Baseline 3 due to partial compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool polls an order's status, specifying verb and resource. It distinguishes from siblings which create, search, or get plans, so an agent can easily differentiate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use after creating an order by mentioning the token from esim_create_order. However, it doesn't explicitly state when not to use or compare to alternatives, though siblings are distinct enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

esim_create_orderA

Create a pending order. With payment_method: "stripe" (default) you get back a payment_link_url — present it to the user to tap and pay on Stripe's hosted page. With payment_method: "btc" you get back a btc block (on-chain address + amount + QR data URI + expiry) — present the address and amount to the user to pay from any Bitcoin wallet; no redirect. If the user hasn't said how they want to pay, ask: card or Bitcoin. The eSIM QR code arrives at email within ~30 seconds of payment clearing. Use esim_check_order to poll status.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesBuyer's email address. The eSIM QR code will be delivered here.
variation_idYesThe specific variation ID to buy (from esim_search_plans or esim_get_plan).
payment_methodNoHow the buyer pays. 'stripe' (default) → hosted card checkout, returns a payment_link_url. 'btc' → on-chain Bitcoin, returns a btc block (address + sats + QR) to show the user directly. BTC may be declined for small orders during network-fee spikes — the call then returns a btc_unavailable error and you should offer card instead.stripe
agent_sourceNoOptional: identifier for the calling agent (e.g. 'claude-code', 'cursor'). Used for our analytics; not seen by the buyer.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behavior: creates pending order, returns different outputs per payment method, mentions possible btc_unavailable error, and states eSIM delivery time (~30 seconds). No hidden traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single well-structured paragraph: concise yet comprehensive, with each sentence serving a purpose. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description covers return values for both payment methods, error case, and delivery timing. Suggests polling for status. Complete for the tool's role.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds significant value by explaining payment_method behavior in detail (stripe returns payment_link_url, btc returns btc block with elements) and the btc_unavailable error, surpassing the schema's enums and descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a pending order' and differentiates between payment methods, distinguishing it from sibling tools like esim_check_order (polling) and esim_search_plans (searching).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on when to use each payment method, instructs to ask user if they haven't specified payment method, and advises using esim_check_order for polling. Also covers the btc_unavailable error fallback.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

esim_get_planA

Fetch the full detail of one plan by slug, including all variations (every days × GB permutation with its price).

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesPlan slug, e.g. 'spain' or 'europe'.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description adds behavioral context about returning 'all variations' and pricing, but omits potential issues like not found errors or authorization requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with the main action, no extraneous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given low complexity (1 param, no output schema), the description adequately explains what the tool returns, though it lacks error handling notes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter 'slug' is well-described in the input schema itself (with examples), and the description adds no further semantic value beyond referencing 'by slug'. Schema coverage is 100%, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description precisely states the verb 'Fetch' and the resource 'full detail of one plan', and effectively distinguishes from sibling tools like esim_search_plans, esim_create_order, and esim_check_order.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context (retrieve details for a specific plan) without explicit alternatives or not-to-use conditions, but the context is clear enough for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

esim_search_plansA

Search the WorldCitiSim eSIM catalog. Returns plans matching the given filters (country ISO code, region, desired days, desired GB). Plans have variations — each variation is one specific (days × GB × price) combo. The user picks one variation_id to buy.

ParametersJSON Schema
NameRequiredDescriptionDefault
countryNoTwo-letter ISO 3166-1 alpha-2 country code (e.g. 'JP', 'ES', 'US') OR a plan slug ('spain', 'japan', 'europe', 'global'). Matched case-insensitively against plan slugs and display names.
regionNoRegion slug: 'europe' | 'mena' | 'caribbean' | 'balkans' | 'latam' | 'asia' | 'global'.
min_daysNoMinimum plan duration in days.
max_daysNoMaximum plan duration in days.
min_gbNoMinimum data allowance in GB. Use -1 for 'unlimited'.
limitNoMax plans to return (default 5, max 20).

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses that it returns matching plans and mentions variations, but lacks details on pagination, limit behavior, or what happens on empty results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four concise sentences with no fluff, front-loading the purpose and explaining variations efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters and no output schema, the description adequately explains the search functionality and output structure (plans with variations). Lacks details on response format but sufficient for a search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds context about variations but doesn't add significant parameter-level meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Search the WorldCitiSim eSIM catalog' and explains the output (plans with variations) and user action (pick variation_id). It distinguishes from siblings like esim_get_plan.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for searching plans but does not explicitly state when to use vs siblings or when not to use. No alternatives mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.2.1
    • First observedesim_check_order
    • First observedesim_create_order
    • First observedesim_get_plan
    • First observedesim_search_plans

TDQS

A4.2/5.0

Scored across 4 tools

Disambiguation5/5

Each tool targets a distinct operation: searching plans, fetching plan details, creating orders, and checking order status. No overlap in purpose.

Naming Consistency5/5

All tools follow a consistent esim_verb_noun pattern (search_plans, get_plan, create_order, check_order).

Tool Count5/5

Four tools cover the eSIM purchase workflow adequately without being excessive or insufficient.

Completeness4/5

Core lifecycle (search, detail, order, status) is covered. Minor gaps like cancellation or order listing exist, but the main flow is complete.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Buy and manage a global eSIM through chat. One universal eSIM for 192 countries, per-MB billing in USDT or USDC across TRON, Solana, BSC, Polygon, Optimism, Arbitrum, TON. Anonymous-flow by default — no account required.
    12
    667 npm
    3
    MIT
  • -
    license
    Not graded
    quality
    B
    maintenance
    Lets AI agents search and buy travel eSIMs from ALT eSIM for 200+ destinations, with Stripe payment links and email delivery of QR codes.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Search and buy travel eSIMs for 200+ countries, with specialized China plans that deliver uncensored internet without a VPN. Exposes five read-only tools to search plans, check device eSIM compatibility, get plan details, get help, and generate a secure on-site checkout link.
    MIT

Appeared in Searches