esimker MCP
An official MCP server for esimker that enables AI agents to browse prepaid travel eSIM destinations, create checkout orders for human payment, and autonomously manage a prepaid crypto wallet to purchase and activate eSIMs without user accounts.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://esimker.com/api/mcpWhat its tools do
12 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (8)
Can change data (4)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to esimker.com ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search for available eSIM destinations and plans
- Create a checkout link for a human to pay
- Mint a prepaid wallet and fund it with crypto
- Purchase an eSIM using wallet balance and retrieve activation code
Source and maintenance
Protocol and capabilities
- Server
- esimker 2
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 12 advertised
- Resources
- 0 advertised
- Resource templates
- 0 advertised
- Prompts
- 0 advertised
{
"tools": {
"listChanged": false
},
"prompts": {
"listChanged": false
},
"resources": {
"subscribe": false,
"listChanged": false
},
"experimental": {}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
12 advertised
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).
{
"type": "object",
"title": "search_destinationsArguments",
"properties": {
"query": {
"type": "string",
"title": "Query",
"default": ""
}
}
}{
"type": "object",
"title": "search_destinationsOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Result"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": 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.
{
"type": "object",
"title": "get_plansArguments",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"title": "Slug"
}
}
}{
"type": "object",
"title": "get_plansDictOutput",
"additionalProperties": true
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": 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.
{
"type": "object",
"title": "get_payment_methodsArguments",
"properties": {}
}{
"type": "object",
"title": "get_payment_methodsDictOutput",
"additionalProperties": true
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}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.
{
"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": null
},
"plan_id": {
"type": "integer",
"title": "Plan Id",
"maximum": 2147483647,
"minimum": 1
},
"period_num": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Period Num",
"default": null
},
"topup_iccid": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Topup Iccid",
"default": null
},
"payment_method": {
"enum": [
"crypto",
"card"
],
"type": "string",
"title": "Payment Method",
"default": "crypto"
}
}
}{
"type": "object",
"title": "create_checkoutDictOutput",
"additionalProperties": true
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}get_order
An order by its token. status goes pending (unpaid) → paid → provisioning → ready; also expired, underpaid, failed_provisioning, gift_waiting, and payment_held — the payment processor's compliance check stopped the payment and holds the money: nothing is issued, the person must not pay again and should write to support. 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.
{
"type": "object",
"title": "get_orderArguments",
"required": [
"token"
],
"properties": {
"token": {
"type": "string",
"title": "Token"
}
}
}{
"type": "object",
"title": "get_orderDictOutput",
"additionalProperties": true
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": 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).
{
"type": "object",
"title": "list_topupsArguments",
"required": [
"iccid"
],
"properties": {
"iccid": {
"type": "string",
"title": "Iccid"
}
}
}{
"type": "object",
"title": "list_topupsOutput",
"required": [
"result"
],
"properties": {
"result": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Result"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}get_usage
Remaining data and status of an eSIM we issued.
{
"type": "object",
"title": "get_usageArguments",
"required": [
"iccid"
],
"properties": {
"iccid": {
"type": "string",
"title": "Iccid"
}
}
}{
"type": "object",
"title": "get_usageDictOutput",
"additionalProperties": true
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": 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.
{
"type": "object",
"title": "create_walletArguments",
"required": [
"accept_terms"
],
"properties": {
"accept_terms": {
"type": "boolean",
"title": "Accept Terms"
}
}
}{
"type": "object",
"title": "create_walletDictOutput",
"additionalProperties": true
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}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.
{
"type": "object",
"title": "get_walletArguments",
"properties": {}
}{
"type": "object",
"title": "get_walletDictOutput",
"additionalProperties": true
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": 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.
{
"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": null
},
"amount_usd": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
],
"title": "Amount Usd"
},
"payment_method": {
"enum": [
"crypto",
"card"
],
"type": "string",
"title": "Payment Method",
"default": "crypto"
}
}
}{
"type": "object",
"title": "create_depositDictOutput",
"additionalProperties": true
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}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) | payment_held (the payment processor's compliance check stopped the payment and holds it: nothing is credited, do not pay again, the person should write to support) | expired. Poll every ~30 s after sending; crypto needs the network's confirmations. Needs the wallet code.
{
"type": "object",
"title": "get_depositArguments",
"required": [
"token"
],
"properties": {
"token": {
"type": "string",
"title": "Token"
}
}
}{
"type": "object",
"title": "get_depositDictOutput",
"additionalProperties": true
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}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.
{
"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": null
},
"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": null
},
"topup_iccid": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Topup Iccid",
"default": null
}
}
}{
"type": "object",
"title": "purchase_esimDictOutput",
"additionalProperties": true
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
0 advertised
Resources
0 advertised
90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 2 of 2 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1350 ms
- 95th percentile latency
- 1350 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1350 ms · metadata changed · 12 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http esimker-mcp https://esimker.com/api/mcpCodex
codex mcp add esimker-mcp --url https://esimker.com/api/mcpCursor
{
"mcpServers": {
"esimker-mcp": {
"url": "https://esimker.com/api/mcp"
}
}
}Cline
{
"mcpServers": {
"esimker-mcp": {
"type": "streamableHttp",
"url": "https://esimker.com/api/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"esimker-mcp": {
"type": "http",
"url": "https://esimker.com/api/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http esimker-mcp https://esimker.com/api/mcpClaude Desktop
https://esimker.com/api/mcpWindsurf
{
"mcpServers": {
"esimker-mcp": {
"serverUrl": "https://esimker.com/api/mcp"
}
}
}Let your agent find its tools
Find servers like esimker MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other commerce servers
Do you run esimker MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.