MCP Server

esimker eSIM store

com.esimker/esim

What this MCP does

Searches travel eSIM plans and enables purchases, top-ups, wallet funding, and checkout through card, crypto, or prepaid balance.

create_checkout
Create an order for a person to pay. Returns token, checkout_url (the gateway's page: hand it to the person) and order_url (the order page in `lang`, with the QR code once paid: show it to the buyer only, the token is a secret). Confirm the plan and the price first: every call creates a new unpaid order, so do not retry while a checkout is open. `email` (optional) also gets the eSIM by mail. `period_num` (1–365) only for daily_unlimited plans. `topup_iccid` with a plan_id from list_topups tops up an existing eSIM. A 403 means the caller's jurisdiction is embargoed. To pay from a wallet use purchase_esim.
Input schema
{'type': 'object', 'title': 'create_checkoutArguments', 'required': ['plan_id'], 'properties': {'lang': {'type': 'string', 'title': 'Lang', 'default': 'en'}, 'email': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Email', 'default': None}, 'plan_id': {'type': 'integer', 'title': 'Plan Id', 'maximum': 2147483647, 'minimum': 1}, 'period_num': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Period Num', 'default': None}, 'topup_iccid': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Topup Iccid', 'default': None}, 'payment_method': {'enum': ['crypto', 'card'], 'type': 'string', 'title': 'Payment Method', 'default': 'crypto'}}}
Output schema
{'type': 'object', 'title': 'create_checkoutDictOutput', 'additionalProperties': True}
create_deposit
Open a top-up of the wallet and get what is needed to pay it. Floors: $10 for a wallet's first deposit, $1 after that; cap $1000 per deposit. Crypto deposits earn a bonus (+2% from $25, +3% from $50, +5% from $100, capped at $25); every purchase returns 3% cashback. With payment_method "crypto" pass a currency from: BTC, ETH, TRX, USDTTRC, USDTETH, USDTBSC — the answer then carries `pay`: the address, the exact amount in the coin (network fee included) and expires_at (about 15 minutes; after that open a new deposit). Send exactly `pay.amount` to `pay.address` on `pay.network`, then poll get_deposit(token) until status is paid. checkout_url is the hosted pay page for a person; card deposits have only that. Needs the wallet code.
Input schema
{'type': 'object', 'title': 'create_depositArguments', 'required': ['amount_usd'], 'properties': {'lang': {'type': 'string', 'title': 'Lang', 'default': 'en'}, 'currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Currency', 'default': None}, 'amount_usd': {'anyOf': [{'type': 'number'}, {'type': 'string'}], 'title': 'Amount Usd'}, 'payment_method': {'enum': ['crypto', 'card'], 'type': 'string', 'title': 'Payment Method', 'default': 'crypto'}}}
Output schema
{'type': 'object', 'title': 'create_depositDictOutput', 'additionalProperties': True}
create_wallet
Mint a prepaid wallet with no account behind it and get its secret ONCE: `code` (32 hex characters) and the same secret as a 12-word `phrase`. Save the code before doing anything else and send it as `Authorization: Bearer <code>` on every wallet call; there is no recovery and no identity to prove. The balance is spent on eSIMs (retail price, cashback on every purchase) and never paid back out. accept_terms must be true (https://esimker.com/terms). Then create_deposit to fund it. Rate-limited and geo-blocked like checkout.
Input schema
{'type': 'object', 'title': 'create_walletArguments', 'required': ['accept_terms'], 'properties': {'accept_terms': {'type': 'boolean', 'title': 'Accept Terms'}}}
Output schema
{'type': 'object', 'title': 'create_walletDictOutput', 'additionalProperties': True}
get_deposit
One deposit of the wallet by its token: status pending → paid (credited, bonus included) | underpaid (nothing credited yet, the rest can still arrive) | expired. Poll every ~30 s after sending; crypto needs the network's confirmations. Needs the wallet code.
Read only Idempotent
Input schema
{'type': 'object', 'title': 'get_depositArguments', 'required': ['token'], 'properties': {'token': {'type': 'string', 'title': 'Token'}}}
Output schema
{'type': 'object', 'title': 'get_depositDictOutput', 'additionalProperties': True}
get_order
An order by its token. status goes pending (unpaid) → paid → provisioning → ready; also expired, underpaid, failed_provisioning, gift_waiting. When ready, esim.activation_code is the LPA string (render it as a QR code), with iccid, smdp and matching_id. After payment poll every ~10 s; delivery usually takes under a minute.
Read only Idempotent
Input schema
{'type': 'object', 'title': 'get_orderArguments', 'required': ['token'], 'properties': {'token': {'type': 'string', 'title': 'Token'}}}
Output schema
{'type': 'object', 'title': 'get_orderDictOutput', 'additionalProperties': True}
get_payment_methods
Checkout methods open right now: "crypto" (a hosted invoice: BTC, ETH, TRX, USDT), "card", and "wallet" (a prepaid balance, see create_wallet). `gateways` names the providers behind each method; a checkout that does not ask for one by name goes to the first, which is what these tools do.
Read only Idempotent
Input schema
{'type': 'object', 'title': 'get_payment_methodsArguments', 'properties': {}}
Output schema
{'type': 'object', 'title': 'get_payment_methodsDictOutput', 'additionalProperties': True}
get_plans
The plans of one destination (slug from search_destinations). Each plan: id (the plan_id for an order), name, gb, days, retail (USD; per day when daily_unlimited is true), daily_unlimited, location_codes (the countries it covers), networks, speed, supports_topup. Also the published rating.
Read only Idempotent
Input schema
{'type': 'object', 'title': 'get_plansArguments', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'title': 'Slug'}}}
Output schema
{'type': 'object', 'title': 'get_plansDictOutput', 'additionalProperties': True}
get_usage
Remaining data and status of an eSIM we issued.
Read only Idempotent
Input schema
{'type': 'object', 'title': 'get_usageArguments', 'required': ['iccid'], 'properties': {'iccid': {'type': 'string', 'title': 'Iccid'}}}
Output schema
{'type': 'object', 'title': 'get_usageDictOutput', 'additionalProperties': True}
get_wallet
The wallet behind the code: ref (a public handle for support), balance_usd, cashback_percent, the deposit rules that apply to it now (min_usd, max_usd, first, bonus tiers), the last 50 transactions, orders (with their tokens — the wallet is where a buyer's order links are kept) and deposits. Needs the wallet code.
Read only Idempotent
Input schema
{'type': 'object', 'title': 'get_walletArguments', 'properties': {}}
Output schema
{'type': 'object', 'title': 'get_walletDictOutput', 'additionalProperties': True}
list_topups
Top-up plans that fit an eSIM we issued: plan_id, name, gb, days, retail. Order one with create_checkout(plan_id, topup_iccid=iccid) or, from a wallet, purchase_esim(plan_id, client_ref, topup_iccid=iccid).
Read only Idempotent
Input schema
{'type': 'object', 'title': 'list_topupsArguments', 'required': ['iccid'], 'properties': {'iccid': {'type': 'string', 'title': 'Iccid'}}}
Output schema
{'type': 'object', 'title': 'list_topupsOutput', 'required': ['result'], 'properties': {'result': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'title': 'Result'}}}
purchase_esim
Charge the wallet and issue an eSIM, no checkout. `client_ref` (1–64 chars) is your own reference for this purchase and makes the call idempotent: a retry with the same value returns the existing order without a second charge, so reuse it after a timeout and never invent a new one for the same purchase. `period_num` (1–365, default 7) only for daily_unlimited plans; the charge is price × days. `topup_iccid` with a plan_id from list_topups tops up an eSIM. Returns the order (status paid) with order_url; poll get_order(token) for ready and the activation code. A 402 is a short balance: create_deposit first. A wallet pays for at most 50 orders in 24 hours (429 beyond that; a retry answered from client_ref does not count). Needs the wallet code.
Idempotent
Input schema
{'type': 'object', 'title': 'purchase_esimArguments', 'required': ['plan_id', 'client_ref'], 'properties': {'lang': {'type': 'string', 'title': 'Lang', 'default': 'en'}, 'email': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Email', 'default': None}, 'plan_id': {'type': 'integer', 'title': 'Plan Id', 'maximum': 2147483647, 'minimum': 1}, 'client_ref': {'type': 'string', 'title': 'Client Ref'}, 'period_num': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Period Num', 'default': None}, 'topup_iccid': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Topup Iccid', 'default': None}}}
Output schema
{'type': 'object', 'title': 'purchase_esimDictOutput', 'additionalProperties': True}
search_destinations
Destinations on sale. `query` matches the name in any of 18 languages, the slug or the ISO code; empty lists everything. Each item: dest_code, slug, name, min_retail (USD, the cheapest fixed plan), unlimited_from (USD per day of a Daily Unlimited pass, or null), plan_count. Continue with get_plans(slug).
Read only Idempotent
Input schema
{'type': 'object', 'title': 'search_destinationsArguments', 'properties': {'query': {'type': 'string', 'title': 'Query', 'default': ''}}}
Output schema
{'type': 'object', 'title': 'search_destinationsOutput', 'required': ['result'], 'properties': {'result': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'title': 'Result'}}}
Changed
purchase_esim
Sept. 21, 2026, 2:59 a.m.
Changed
create_checkout
Sept. 21, 2026, 2:59 a.m.
Added
purchase_esim
Sept. 17, 2026, 12:34 p.m.
Added
get_deposit
Sept. 17, 2026, 12:34 p.m.
Added
create_deposit
Sept. 17, 2026, 12:34 p.m.
Added
get_wallet
Sept. 17, 2026, 12:34 p.m.
Added
create_wallet
Sept. 17, 2026, 12:34 p.m.
Added
get_usage
Sept. 17, 2026, 12:34 p.m.
Added
list_topups
Sept. 17, 2026, 12:34 p.m.
Added
get_order
Sept. 17, 2026, 12:34 p.m.
Added
create_checkout
Sept. 17, 2026, 12:34 p.m.
Added
get_payment_methods
Sept. 17, 2026, 12:34 p.m.
Added
get_plans
Sept. 17, 2026, 12:34 p.m.
Added
search_destinations
Sept. 17, 2026, 12:34 p.m.