eSIMfly Business API: search eSIM plans, check usage, diagnose eSIMs, optionally order (confirmed)
Give your AI assistant hands on the eSIMfly Business API. With this Model Context Protocol server, Claude, Cursor, ChatGPT and other MCP clients can search eSIM plans with your wholesale prices, check balances and usage, diagnose "no data" problems from live network data — and, if you enable it, place orders and top-ups with an explicit confirmation step.
confirm: true.@esimfly/sdk — signing, retries and error codes handled.Docs: https://docs.esimfly.net · Credentials: Business Dashboard → Settings → API Keys.
Prefer not to run anything locally? eSIMfly hosts this same server at https://mcp.esimfly.net/mcp.
Add it as a remote MCP server in Claude.ai, ChatGPT, Claude Code (claude mcp add --transport http esimfly https://mcp.esimfly.net/mcp),
Cursor or VS Code and sign in with your eSIMfly business account — OAuth 2.1, no keys to paste, write
tools opt-in on the consent screen. Details: https://docs.esimfly.net/docs/mcp-server
The server runs locally over stdio; your API key never leaves your machine.
claude_desktop_config.json → mcpServers:
{
"mcpServers": {
"esimfly": {
"command": "npx",
"args": ["-y", "@esimfly/mcp"],
"env": {
"ESIMFLY_ACCESS_CODE": "esf_...",
"ESIMFLY_SECRET_KEY": "sk_..."
}
}
}
}
claude mcp add esimfly -e ESIMFLY_ACCESS_CODE=esf_... -e ESIMFLY_SECRET_KEY=sk_... -- npx -y @esimfly/mcp
.cursor/mcp.json (or the client's equivalent):
{
"mcpServers": {
"esimfly": {
"command": "npx",
"args": ["-y", "@esimfly/mcp"],
"env": { "ESIMFLY_ACCESS_CODE": "esf_...", "ESIMFLY_SECRET_KEY": "sk_..." }
}
}
}
docker build -t esimfly-mcp .
docker run -i --rm -e ESIMFLY_ACCESS_CODE=esf_... -e ESIMFLY_SECRET_KEY=sk_... esimfly-mcp
Add "ESIMFLY_MCP_ALLOW_WRITES": "true" to env. Without it the ordering, top-up, cancel,
suspend, SMS and webhook tools are not even registered.
diagnose_esim prompt)esimfly_integration_guide prompt)| Tool | What it does | Mode |
|---|---|---|
search_packages | Catalogue search by destination / type with your cost price | read |
get_balance | Account (or enterprise) balance | read |
list_esims | Your eSIMs with status, data left, validity | read |
get_esim_usage | Stored usage for one eSIM (cheap) | read |
get_esim_live_status | Live status from the network: install state, last network, device, usage | read (expensive) |
get_network_events | Last 7 days of attach / data-session events, wrong-network flag | read |
get_usage_report | Daily usage by country and operator (up to 90 days) | read |
list_orders / get_order | Order history and one order with its eSIM | read |
get_topup_packages | Top-up options for one eSIM | read |
get_webhook_settings | Webhook URL, events, recent deliveries | read |
create_order | Buy eSIMs — preview → confirm: true + idempotency key | write |
topup_esim | Add data to an eSIM — preview shows package and cost | write |
cancel_esim | Cancel an unused eSIM and refund to balance | write (destructive) |
suspend_esim / activate_esim | Block / restore network access | write |
send_sms | Text the device holding the eSIM | write |
set_webhook | Configure webhook URL and events | write |
Prompts: esimfly_integration_guide (optional stack), diagnose_esim (iccid).
ESIMFLY_MCP_ALLOW_WRITES=true.confirm returns a preview and makes no mutable API call;
create_order additionally requires the idempotency_key from its own preview, so an agent
cannot place the same order twice.readOnlyHint and cancel/suspend as destructiveHint, so hosts
that ask for user approval on risky tools do so.| Variable | Required | Description |
|---|---|---|
ESIMFLY_ACCESS_CODE | yes | API access code (esf_…) |
ESIMFLY_SECRET_KEY | yes | API secret key (sk_…) |
ESIMFLY_MCP_ALLOW_WRITES | no | true to register write tools |
ESIMFLY_BASE_URL | no | Override the API base URL |
import { createEsimflyMcpServer } from '@esimfly/mcp';
const server = createEsimflyMcpServer({ config: { accessCode, secretKey }, allowWrites: false });
// connect it to any MCP transport
Bump version in package.json, server.json and MCP_VERSION in src/server.ts, add a
CHANGELOG entry, push, then publish a GitHub Release tagged vX.Y.Z — the workflow publishes to
npm with Trusted Publishing (OIDC), and the MCP Registry entry is republished
automatically afterwards (GitHub OIDC, no tokens).
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
npx -y @esimfly/mcpMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-esimfly-official-esimfly-mcp": {
"command": "npx",
"args": [
"-y",
"@esimfly/mcp"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referenceio.github.eSimfly-Official/esimfly-mcp works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.