MCP server for the WorldCitiSim eSIM API — lets Claude and other MCP-compatible agents search plans and create eSIM orders.
Four tools with complete input schemas and descriptions. Naming follows verb_noun pattern (esim_search_plans, esim_get_plan, esim_create_order, esim_check_order). Descriptions are detailed (150-350 chars) and explain WHAT, WHEN, and WHAT-RETURNS. All parameters have type definitions and descriptions. However, output schemas are not documented, LLMs cannot see what fields to expect from responses. Error handling guidance is minimal (only btc_unavailable mentioned in esim_create_order). No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles (3 READ_ONLY, 1 WRITE). Parameter descriptions are strong but lack explicit constraints (e.g., email format, variation_id range). Missing pagination guidance for esim_search_plans despite limit parameter.
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).
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.
Fetch the full detail of one plan by slug, including all variations (every days × GB permutation with its price).
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.
Output schemas not documented. LLMs cannot see what fields esim_search_plans, esim_get_plan, esim_create_order, and esim_check_order return. This forces agents to guess field names and types, risking failed downstream calls and wasted tokens.
No tool annotations (readOnlyHint/destructiveHint). esim_create_order is marked WRITE but lacks destructiveHint annotation. Three READ_ONLY tools lack readOnlyHint. Agents cannot infer safety/idempotency without annotations.
Minimal error handling guidance. Only esim_create_order mentions btc_unavailable error. No guidance for network failures, invalid variation_id, email validation, or API timeouts. Agents lack recovery paths.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Parameter constraints not explicit. email parameter lacks format validation hint. variation_id lacks range documentation. country accepts both ISO codes and slugs but no enum or pattern constraint. Agents may pass invalid values.
Pagination not addressed. esim_search_plans accepts limit (default 5, max 20) but no offset/cursor or total_count guidance. If catalog grows, agents cannot iterate through all plans.