Get the App · 100% anonymous, no signup or email required

MCP Server Documentation

Reference for the PikaSim MCP server. New here? Start at Agentic eSIM Ordering.

New to MCP? The Model Context Protocol lets AI agents use tools hosted by external services. PikaSim's MCP server gives your AI agent real-time access to data eSIM and phone-number eSIM plans, coverage, and purchasing.

Quick Start

Get started in under a minute. Add PikaSim to your AI agent's MCP config:

{
  "mcpServers": {
    "pikasim": {
      "type": "streamable-http",
      "url": "https://pikasim.com/mcp"
    }
  }
}

That's it. Your AI agent can now search data eSIM and phone-number eSIM plans, check country coverage, and get pricing for 190+ countries. No API key needed for browsing.

Want to purchase too? Create a free agent wallet (a prepaid, crypto-funded balance at retail pricing), then connect https://pikasim.com/mcp/wallet instead — your client opens a PikaSim consent page where you paste the wallet code (OAuth, no key handling). CLI clients can alternatively attach the wallet's ak_live_ key as a Bearer header. Either unlocks purchasing, balance, order management, and SMS-number ordering.

Endpoint

POST https://pikasim.com/mcp

Stateless MCP endpoint using the Streamable HTTP transport. Each request creates a fresh server instance. No session management required.

Protocol

  • Transport: Streamable HTTP (JSON-RPC over HTTP POST)
  • Protocol Version: 2025-03-26
  • Content-Type: application/json
  • Accept: application/json, text/event-stream

GET and DELETE requests return 405 (this is a stateless server with no SSE sessions to manage).

Setup Guides

PikaSim is a remote MCP server (Streamable HTTP) with two URLs: https://pikasim.com/mcp for keyless browsing, and https://pikasim.com/mcp/wallet for purchasing (it connects a prepaid agent wallet via OAuth, or a Bearer key on CLI clients). Steps differ per client; use the matching one below.

Claude Desktop

Remote servers are added as connectors, not via claude_desktop_config.json (that file is for local stdio servers). Go to Settings → Connectors → Add custom connector and paste the URL.

To purchase (recommended): add https://pikasim.com/mcp/wallet, then click Connect. Claude opens a PikaSim consent page; paste your 32-character wallet code (from your agent wallet) and authorize. Claude receives a revocable access token bound to that wallet (no key pasted into a URL, no account, no email). After connecting, enable the connector for your chat from the tools menu.

https://pikasim.com/mcp/wallet   ← Connect → paste wallet code

To browse only (no wallet), add the keyless URL instead:

https://pikasim.com/mcp

Claude Code

One command (the flag value is http for Streamable HTTP):

# browse only
claude mcp add --transport http pikasim https://pikasim.com/mcp

# with purchasing via OAuth (recommended): add the wallet URL, then run /mcp
# inside Claude Code and pick "Authenticate" — a browser opens the PikaSim
# consent page where you paste your wallet code
claude mcp add --transport http pikasim https://pikasim.com/mcp/wallet

# with purchasing via key (scriptable alternative)
claude mcp add --transport http pikasim https://pikasim.com/mcp \
  --header "Authorization: Bearer ak_live_your_api_key_here"

ChatGPT

On a paid plan (Plus, Pro, Business, Enterprise, or Edu): Settings → Apps → Advanced settings → enable Developer mode, then Create app and enter the URL. Use https://pikasim.com/mcp to browse, or https://pikasim.com/mcp/wallet to purchase — the wallet URL triggers OAuth, so you authorize by pasting your wallet code on the PikaSim consent page (no key in the URL). Open the app to enable individual tools.

Deep Research: the plain https://pikasim.com/mcp endpoint also exposes search and fetch tools, so you can add PikaSim as a Deep Research source and have ChatGPT look up eSIM plans, prices, and coverage while researching a trip.

Grok (xAI)

On a paid plan: grok.com/connectors → New Connector → Custom, then paste the URL: https://pikasim.com/mcp to browse, or https://pikasim.com/mcp/ak_live_your_api_key_here to also purchase.

Gemini CLI

Edit ~/.gemini/settings.json. Gemini CLI uses the httpUrl key for Streamable HTTP and passes the key as a header. (The consumer Gemini app has no custom-connector option; use the CLI.)

{
  "mcpServers": {
    "pikasim": {
      "httpUrl": "https://pikasim.com/mcp",
      "headers": { "Authorization": "Bearer ak_live_your_api_key_here" }
    }
  }
}

Cursor

Settings → Tools & MCP → New MCP Server, or add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "pikasim": {
      "type": "streamableHttp",
      "url": "https://pikasim.com/mcp"
    }
  }
}

To purchase, use https://pikasim.com/mcp/wallet as the URL instead — Cursor detects the OAuth requirement and opens the PikaSim consent page (paste your wallet code). A key URL (https://pikasim.com/mcp/ak_live_…) also works.

VS Code (GitHub Copilot)

Add to .vscode/mcp.json (note the top-level key is servers and the type is http):

{
  "servers": {
    "pikasim": {
      "type": "http",
      "url": "https://pikasim.com/mcp"
    }
  }
}

Windsurf / Cline / Zed

  • Windsurf (~/.codeium/windsurf/mcp_config.json): mcpServers with "serverUrl": "https://pikasim.com/mcp"
  • Cline: mcpServers with "type": "streamableHttp", "url": "https://pikasim.com/mcp"
  • Zed: context_servers, or bridge with npx -y mcp-remote https://pikasim.com/mcp

Any MCP Client

Any agent or tool that supports MCP Streamable HTTP transport can connect to https://pikasim.com/mcp. Send JSON-RPC messages via POST with Accept: application/json, text/event-stream. For authenticated tools pass Authorization: Bearer ak_live_… or X-API-Key: ak_live_….

Public Tools (No Auth Required)

These tools are available to any AI agent with no API key. Use them to help users find the right data eSIM or phone-number eSIM plan.

Three product lines. PikaSim sells data eSIMs (data-only), phone-number eSIMs (a real carrier number with voice + SMS + data), and SMS verification numbers (receive-only numbers for verification codes — quick one-time codes or long-term rentals, no eSIM involved). The eSIM search and coverage tools return both eSIM lines by default; each result shows its packageCode in [brackets] for purchase_esim (data) or purchase_phone_plan (phone). The SMS tools are documented below alongside the eSIM tools.

search_esim_packages

Search plans by country, region, or keyword. Returns both product lines in separate buckets (DATA eSIMs and PHONE-NUMBER eSIMs), sorted by price. Use type to narrow to one line.

Parameters

NameTypeRequiredDescription
country string No ISO 3166-1 alpha-2 country code (e.g., JP, US, DE, TH)
region string No Region name (e.g., Europe, Asia, Global, Caribbean)
query string No Free-text search (e.g., "Japan 10GB", "Europe 30 days")
type string No Product line: data, phone, or all (default)

At least one parameter should be provided. If only query is set (no country/region), a text search is performed.

Example Response

DATA eSIMs (35):
  United States 100MB 7Days [P3YTYXBRV] | 100MB | 7 days | $0.75
  United States 1GB 7Days [PHAJHEAYP] | 1GB | 7 days | $2.25
  ...showing 10 of 35

PHONE-NUMBER eSIMs (15): real carrier number, voice + SMS + data:
  Phone-number plan [change-plus-7days-1gb]: 10 min + 10 SMS + 1GB data | 7 days | $X.XX | real carrier number
  ...showing 10 of 15

The code in [brackets] is the packageCode: pass it to purchase_esim (data) or purchase_phone_plan (phone).
(Prices above are illustrative. The tool returns live current prices.)

search_phone_plans

Search phone-number eSIMs only: plans with a real carrier phone number (not VoIP), voice, SMS, and data. US plans give a real +1 number on AT&T and T-Mobile; global plans cover 157 countries. Use this when a user wants to call or text, not just data.

Parameters

NameTypeRequiredDescription
country string No ISO 3166-1 alpha-2 country code (e.g., US for a real +1 number)
region string No Region name (e.g., Global)
query string No Free-text search (e.g., "US 5GB")

Example Response

Phone-number eSIMs: a real carrier number with voice + SMS + data (not VoIP):
  Phone-number plan [change-plus-7days-1gb]: 10 min + 10 SMS + 1GB data | 7 days | $X.XX | real carrier number
  Phone-number plan [change-plus-15days-2gb]: 20 min + 20 SMS + 2GB data | 15 days | $X.XX | real carrier number
  ...showing 10 of 15

The code in [brackets] is the packageCode: pass it to purchase_phone_plan.
(Prices above are illustrative. The tool returns live current prices.)

get_package_details

Get full details for a specific package including coverage map, network operators, speed, top-up support, and purchase URL.

Parameters

NameTypeRequiredDescription
packageCode string Yes Package code from search results (e.g., CKH001, PZN25QW0P)

Example Response

Package: Japan 3GB 15Days
Code: CKH123
Data: 3GB
Duration: 15 days
Price: $4.25 USD
Coverage: Japan (JP)
Speed: 3G/4G
Top-up: Supported

Networks:
  Japan: NTT Docomo (LTE), SoftBank (LTE)

Purchase: https://pikasim.com/esim/japan-3gb-15days

check_country_coverage

Check all available plans for a country, returned as two buckets: data eSIMs (count, price range, data amounts) and phone-number eSIMs (count, price range; a real carrier number with voice + SMS).

Parameters

NameTypeRequiredDescription
country string Yes ISO 3166-1 alpha-2 country code

Example Response

US (US) eSIM Coverage

DATA eSIMs (50): price range $0.75 - $224.20
  Available data amounts:
    100MB: from $0.75 (7 days)
    1GB: from $2.07 (7 days)
    5GB: from $8.28 (30 days)
    ...

PHONE-NUMBER eSIMs (15): a real +1 number on AT&T / T-Mobile, voice + SMS + data
  Cheapest: 1 GB - 10 SMS - 10 Mins - 7 days [change-plus-7days-1gb]
  Use search_phone_plans for the full list and live prices, then purchase_phone_plan.

Browse data plans: https://pikasim.com/esim/us
Browse phone plans: https://pikasim.com/usa-data-sms-call-plans

get_pricing

Get the price and accepted payment methods for a specific package.

Parameters

NameTypeRequiredDescription
packageCode string Yes Package code
currency string No Currency code (currently only USD supported)

Example Response

Japan 3GB 15Days [CKH123]
Price: $4.25 USD
Type: Data eSIM
Data: 3GB
Payment: Card (Visa/MC/Amex/Apple Pay/Google Pay) or Crypto

Purchase: https://pikasim.com/esim/japan-3gb-15days

get_phone_plan_pricing

Get the USD price and voice/SMS/data allowance for a specific phone-number eSIM. Accepts a packageCode from search_phone_plans.

Parameters

NameTypeRequiredDescription
packageCode string Yes Phone-plan code from search_phone_plans (e.g., change-plus-7days-1gb)
currency string No Currency code (currently only USD supported)

Example Response

1 GB - 10 SMS - 10 Mins - 7 days [change-plus-7days-1gb]
Price: $X.XX USD (live current price returned by the tool)
Type: Phone-number plan, real carrier number + voice + SMS + data
Voice: 10 minutes
SMS: 10
Data: 1GB
Phone Number: Included (assigned by the carrier on activation)
Payment: Card (Visa/MC/Amex/Apple Pay/Google Pay) or Crypto

Purchase: https://pikasim.com/esim/us-change-plus-7days-1gb

search_sms_services

Search the SMS verification service list — the websites/apps a receive-only number can get a code for (Discord, Google, Telegram, and 1,300+ more). Returns each service's serviceId in [brackets]. If a service is not listed, search "Other" — the catch-all works for any site.

Parameters

NameTypeRequiredDescription
query string No Service name to search for (e.g., "Discord"). Omit to list popular services.

get_sms_service_countries

List the countries offering a quick SMS number for one service, with the live price, delivery success rate, live stock (out-of-stock countries are flagged and sorted last), and whether the number is a real mobile (non-VoIP) or VoIP line. Accepts a serviceId or a service name (close matches are suggested). Returns each countryId in [brackets] for order_sms_verification.

Parameters

NameTypeRequiredDescription
serviceId string Yes The serviceId from search_sms_services

list_sms_rentals

List long-term SMS rental numbers: keep the same receive-only number for days to months and receive multiple SMS (fair-use 25/day). Shows each country's rentalId, duration tiers, live prices, and live stock per duration. US and UK numbers are real mobile (non-VoIP); Canada is VoIP. Not allowed for banking, financial, or crypto-exchange verification.

Parameters

None.

Authenticated Tools (PikaSim Wallet API Key)

These tools require a free PikaSim agent wallet. Pass your ak_live_ API key via the Authorization header. If no key is provided, these tools return a signup prompt instead of an error.

Agent wallets are free. Create one at pikasim.com/agent-wallet (terms-of-service only, no account or KYC), fund it with crypto, and generate an ak_live_ key. Pricing is retail. (Running a B2B reseller business instead? The reseller program is a separate track with its own pk_live_ key and 10% wholesale discount, and its keys also work here.)
Idempotent purchases. purchase_esim, purchase_phone_plan, order_sms_verification, and rent_sms_number accept an optional requestId (any unique string, e.g. a UUID). Send one with each new purchase and reuse the same value when retrying after a timeout or transport error — an identical retry returns the original order instead of charging again. Use a fresh id when deliberately buying another one.
Retired plan codes. Plan codes occasionally change when the underlying supplier renames a SKU. If a purchase or pricing lookup names a retired code, the tool response says so and names the current equivalent code — no charge is ever made for a retired code, and the replacement is never substituted automatically: re-call the purchase tool with the new code explicitly. Best practice: resolve codes via search_esim_packages / search_phone_plans shortly before purchasing rather than caching them long-term.

check_balance

View your wallet balance, credit limit, and total available funds.

Parameters

None.

Example Response

Wallet Balance: $47.50 USD
Credit Limit: $0.00 USD
Available: $47.50 USD

Fund your wallet: https://pikasim.com/reseller/dashboard

purchase_esim

Purchase a data eSIM. Deducts from your wallet balance and returns the eSIM activation details (ICCID, QR code, SM-DP+ address). For phone-number eSIMs use purchase_phone_plan instead.

Parameters

NameTypeRequiredDescription
packageCode string Yes Data eSIM package code (use search_esim_packages to find codes)

Example Response

Order placed successfully!
Order ID: ord_abc123def456
Package: CKH123
Status: completed
Cost: $3.83

eSIM Details:
  ICCID: 8901234567890123456
  SM-DP+: smdp.example.com
  Activation: LPA:1$smdp.example.com$ACTIVATION_CODE

Use get_esim_status to check activation status.
Real money. Each purchase deducts from your wallet. Make sure you have sufficient balance before calling this tool. Use check_balance first.

purchase_phone_plan

Purchase a phone-number eSIM: a plan with a real carrier phone number, voice, SMS, and data. Deducts from your wallet balance and returns the activation details. The real phone number is assigned by the carrier when the eSIM registers on the network and appears in the device settings after activation (not in the response).

Parameters

NameTypeRequiredDescription
packageCode string Yes Phone-plan package code (use search_phone_plans to find codes, e.g., change-plus-7days-1gb)

Example Response

Phone-number eSIM ordered successfully!
Order ID: ord_xyz789
Plan: change-plus-7days-1gb
Status: completed
Cost: $4.59

eSIM Details:
  ICCID: 8901234567890999888
  SM-DP+: smdp.example.com
  Activation: LPA:1$smdp.example.com$ACTIVATION_CODE

The phone number is assigned by the carrier when the eSIM registers on the network; it appears in the device settings after activation.
Use get_esim_status to check activation status.
Real money. Each purchase deducts from your wallet. Use check_balance first.

get_esim_status

Check the live status, data usage, and expiration of a purchased eSIM.

Parameters

NameTypeRequiredDescription
iccid string Yes ICCID of the eSIM (returned by purchase_esim)

Example Response

eSIM Status: 8901234567890123456
Status: IN_USE
Package: CKH123
Data Used: 0.45GB / 3.00GB
Remaining: 2.55GB
Expires: 2026-06-15T00:00:00Z

topup_esim

Add more data to an existing eSIM. Use get_topup_options first to find valid top-up package codes for the eSIM.

Parameters

NameTypeRequiredDescription
iccid string Yes ICCID of the eSIM to top up
packageCode string Yes Top-up package code

Example Response

Top-up successful!
ICCID: 8901234567890123456
Package: CKH123
Cost: $3.83

Use get_esim_status to verify the top-up was applied.

list_orders

List your recent eSIM orders with status and cost.

Parameters

NameTypeRequiredDescription
page number No Page number (default: 1)
limit number No Results per page (default: 20, max: 50)

Example Response

Orders (3):

ord_abc123 | CKH123 | completed | $3.83 | 2026-05-13
ord_def456 | PZN25QW0P | completed | $7.50 | 2026-05-12
ord_ghi789 | CKH456 | completed | $12.50 | 2026-05-10

Page 1 of 1

list_esims

The fleet view: every eSIM this wallet owns, newest first — ICCID, plan, order status, install link, and (for fleets of up to 8) live remaining data inline. Use it to answer "which eSIMs do I own and how much data is left" without already holding an ICCID; then get_esim_status for any single eSIM's full detail.

Parameters

NameTypeRequiredDescription
page number No 1-based page (50 eSIMs per page)

list_transactions

The wallet ledger: every debit and credit (deposits, purchases, refunds) with amount, running balance, and description, newest first. Reconciles spend where check_balance only gives the current number.

Parameters

NameTypeRequiredDescription
page number No 1-based page (25 transactions per page)
type string No Filter: deposit, order, or refund

create_deposit

Generate a payment invoice to fund your prepaid PikaSim Wallet (minimum $1). An agent holding crypto can pay without a human: the tool returns native destinations for Lightning, USDT (TRC-20/Tron), Monero, and Bitcoin inline, so pay the shown amount to any one of them. A human can instead use the returned payment page (card with 3D Secure, or any of 50+ altcoins via Trocador). Balance is prepaid credit for purchases and never expires.

Parameters

NameTypeRequiredDescription
amount number Yes Deposit amount in USD (must be positive, e.g., 50)

Example Response

Deposit invoice created!
Amount: $50.00 USD

Pay it yourself (no human needed if you hold crypto — pay the amount above to any ONE of these):
  Lightning invoice (BTC, fastest + cheapest): lnbc500...
  USDT (TRC-20 / Tron) address: TXk9...
  Monero (XMR) address: 89Ux...
  Bitcoin on-chain address: bc1q...

Or hand this off to a human / use another coin:
  Payment page (card + all crypto): https://pikasim.com/wallet/deposit/abc123
  Invoice ID: abc123

Balance updates automatically after payment confirms.

get_topup_options

List available top-up packages for an existing eSIM, including data amount, duration, price, and voice/SMS where applicable. Use this before topup_esim to find valid package codes.

Parameters

NameTypeRequiredDescription
iccid string Yes ICCID of the eSIM to get top-up options for

Example Response

Top-up options for 8901234567890123456 (4 packages):

CKH123 | Japan 1GB 7 Days | 1GB | 7 days | $1.58
CKH456 | Japan 3GB 15 Days | 3GB | 15 days | $3.83
CKH789 | Japan 5GB 30 Days | 5GB | 30 days | $6.75
CKH012 | Japan 10GB 30 Days | 10GB | 30 days | $11.25

Use topup_esim with the packageCode to apply a top-up.

cancel_esim

Cancel an unused eSIM and receive a refund to your wallet balance. Only works if the eSIM has not been installed or activated (status: GOT_RESOURCE with zero usage).

Parameters

NameTypeRequiredDescription
iccid string Yes ICCID of the eSIM to cancel

Example Response

eSIM 8901234567890123456 cancelled.
Refund: $3.83
New Balance: $51.33
eSIM cancelled successfully. Refund added to your balance.
Irreversible. Once cancelled, the eSIM cannot be reactivated. Only cancel eSIMs that have not been installed on any device.

order_sms_verification

Buy a quick SMS verification number: returns a temporary phone number to enter on the target service, then the incoming code is read with check_sms_verification. Single-use, valid 20 minutes, auto-refunds if no SMS arrives. Deducts from your wallet (typically $0.50–$5).

Parameters

NameTypeRequiredDescription
serviceId string Yes From search_sms_services
countryId string No From get_sms_service_countries (defaults to United States)

Example Response

Quick SMS number ordered!
Order ID: 6a4c...ae4d
Phone number (use this on the target service): +1 909 555 0123
Service: Discord | Country: United States
Cost: $X.XX | New balance: $XX.XX
Expires: 20 minutes from order

Now poll check_sms_verification with the Order ID every 15-30 seconds.

check_sms_verification

Poll a quick SMS order for the incoming verification code. Call every 15–30 seconds after ordering until the status is received, then relay the code (and full message text). Orders auto-refund after 20 minutes with no SMS.

Parameters

NameTypeRequiredDescription
orderId string Yes The Order ID from order_sms_verification

cancel_sms_verification

Cancel a quick SMS order that is still waiting for a code and refund it to the wallet immediately. Refused if the SMS was already delivered.

Parameters

NameTypeRequiredDescription
orderId string Yes The Order ID of the waiting order

list_sms_orders

List this wallet's SMS orders: quick verification orders (with Order IDs) and long-term rentals (with receipt IDs, numbers, and expiry dates).

Parameters

None.

rent_sms_number

Rent a long-term receive-only SMS number — the user keeps the same number for the whole rental and can receive multiple SMS (fair-use 25/day). Use list_sms_rentals first for the rentalId, valid day tiers, prices, and live stock. Extendable before expiry. Not allowed for banking/financial/crypto-exchange verification; refundable only within 2 hours and only if no messages arrived.

Parameters

NameTypeRequiredDescription
rentalId string Yes From list_sms_rentals (e.g., 11 for United States)
days number Yes One of the duration tiers shown by list_sms_rentals

get_sms_rental_messages

Read a rental number's inbox: all received messages, newest first, plus status and expiry.

Parameters

NameTypeRequiredDescription
receiptId string Yes The receipt ID from rent_sms_number or list_sms_orders

extend_sms_rental

Extend a rental so the user keeps the same number — days are added on top of the current expiry. Charges the live tier price (the tool checks the price first and reports what was charged). Extend before expiry; an expired rental usually cannot be recovered.

Parameters

NameTypeRequiredDescription
receiptId string Yes The rental receipt ID
days number Yes Days to add — one of the rental's duration tiers

cancel_sms_rental

Cancel a rental and refund the full amount to the wallet. Works only within 2 hours of purchase and only if the number has not received any message (this mirrors the provider refund window). If the window has passed or a code already arrived, it returns a clear reason and refunds nothing.

Parameters

NameTypeRequiredDescription
receiptId string Yes The rental receipt ID from rent_sms_number or list_sms_orders

Authentication

Public tools

No authentication needed. The public browsing tools (search, phone search, details, coverage, pricing) work for any AI agent with no API key, and always show retail prices.

OAuth (recommended for app clients)

PikaSim's MCP server supports OAuth 2.1 with Dynamic Client Registration and PKCE. There are two URLs:

  • Browse (no auth): https://pikasim.com/mcp — search, coverage, pricing. Connect with no key.
  • Purchase (OAuth): https://pikasim.com/mcp/wallet — connect this to buy. Clients that speak MCP OAuth (Claude and ChatGPT connectors) detect the OAuth requirement automatically and send you to a PikaSim consent page, where you paste your wallet code (the 32-character code from your agent wallet) to authorize. Your client then holds a revocable access token bound to that wallet.

The wallet code and your ak_live_ key never leave PikaSim, and no account, email, or KYC is involved. This is the cleanest way to connect for purchasing: no secret pasted into a URL, and you can disconnect at any time from your MCP client.

Authenticated tools (manual key)

For CLI clients or power users who prefer to manage the key directly, the purchasing/management tools also accept a PikaSim agent wallet API key (ak_live_). Pass it in one of these ways:

// Option 1: Authorization header (recommended for CLI configs)
Authorization: Bearer ak_live_your_api_key_here

// Option 2: X-API-Key header
X-API-Key: ak_live_your_api_key_here

// Option 3: key in the URL path (for connector UIs that only take a URL,
//            e.g. Claude Desktop, ChatGPT)
https://pikasim.com/mcp/ak_live_your_api_key_here

Treat the key URL like a password: anyone with it can spend the wallet balance. It is kept in your client's connector config and is never written to our server logs.

Fully autonomous (no browser, no human) — create_wallet

A terminal or headless agent does not need the browser flow at all. Connect the keyless endpoint https://pikasim.com/mcp and call the create_wallet tool with acceptTos: true. It returns a wallet code + an ak_live_ key + a spend-only welcome credit in one call. Reconnect with the key and buy:

1. create_wallet { "acceptTos": true }
   → wallet code, ak_live_… key, $1 welcome credit
2. reconnect:  Authorization: Bearer ak_live_…   (or URL https://pikasim.com/mcp/ak_live_…)
3. order_sms_verification / purchase_esim   → buys on the welcome credit, no deposit

No account, no email, no KYC, no browser, no human. Save the wallet code and key from the response — each is shown once.

Getting an API key (browser)

  1. Create an agent wallet at pikasim.com/agent-wallet (accept the terms of service, no account or KYC)
  2. Fund it with crypto (from $1) via the dashboard or the create_deposit tool — or skip this: a new wallet's spend-only welcome credit covers a first sub-$1 purchase
  3. Generate your ak_live_ API key from the dashboard

Agent-wallet keys start with ak_live_. Keep your key secret; if compromised, rotate it from the dashboard. Existing reseller pk_live_ keys also work here and bill at the reseller's wholesale pricing.

No key? No problem. If an authenticated tool is called without an API key, it returns a friendly message directing to signup instead of an error. Your AI agent can use the public tools freely and only prompt for a key when the user wants to purchase.

Examples

Test with cURL

Initialize the MCP connection:

curl -X POST https://pikasim.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2025-03-26",
      "capabilities": {},
      "clientInfo": {
        "name": "test-client",
        "version": "1.0"
      }
    }
  }'

List available tools

curl -X POST https://pikasim.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/list",
    "params": {}
  }'

Search packages for Japan

curl -X POST https://pikasim.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": {
      "name": "search_esim_packages",
      "arguments": { "country": "JP" }
    }
  }'

Check balance (authenticated)

curl -X POST https://pikasim.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer ak_live_your_api_key_here" \
  -d '{
    "jsonrpc": "2.0",
    "id": 4,
    "method": "tools/call",
    "params": {
      "name": "check_balance",
      "arguments": {}
    }
  }'

Purchase an eSIM (authenticated)

curl -X POST https://pikasim.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer ak_live_your_api_key_here" \
  -d '{
    "jsonrpc": "2.0",
    "id": 5,
    "method": "tools/call",
    "params": {
      "name": "purchase_esim",
      "arguments": { "packageCode": "CKH123" }
    }
  }'

Python MCP Client

from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

async def main():
    async with streamablehttp_client("https://pikasim.com/mcp") as (
        read_stream, write_stream, _
    ):
        async with ClientSession(read_stream, write_stream) as session:
            await session.initialize()

            # List tools
            tools = await session.list_tools()
            print(f"Available: {[t.name for t in tools.tools]}")

            # Search packages
            result = await session.call_tool(
                "search_esim_packages",
                arguments={"country": "JP"}
            )
            print(result.content[0].text)

import asyncio
asyncio.run(main())

Node.js MCP Client

import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport }
  from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const transport = new StreamableHTTPClientTransport(
  new URL("https://pikasim.com/mcp")
);

const client = new Client(
  { name: "my-agent", version: "1.0" },
  { capabilities: {} }
);

await client.connect(transport);

// Search for Japan eSIMs
const result = await client.callTool(
  "search_esim_packages",
  { country: "JP" }
);
console.log(result.content[0].text);

await client.close();

Rate Limits

ScopeLimitWindow
MCP endpoint (per IP) 60 requests 1 minute
Reseller API (per key) 60 requests (default) 1 minute
Order limit (per key) 100 orders (default) 1 day (UTC)

The MCP endpoint rate limit applies to all requests (including initialize and tools/list). Authenticated tool calls additionally count against your wallet rate limit.

Rate limit headers are included in responses: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

Error Handling

Errors follow standard JSON-RPC error codes:

CodeMeaningWhen
-32600 Invalid Request Malformed JSON-RPC message
-32601 Method Not Found Unknown method name
-32602 Invalid Params Missing or invalid tool arguments
-32603 Internal Error Server-side error
-32000 Server Error Rate limited, method not allowed, etc.

Tool-level errors (e.g., invalid package code, insufficient balance) are returned as successful tool responses with descriptive error text, not as JSON-RPC errors. This lets the AI agent understand and explain the issue to the user.

FAQ

Can my AI agent purchase eSIMs automatically?

Yes, with an agent-wallet API key. The purchase_esim and purchase_phone_plan tools deduct from your prepaid wallet, so purchases are instant. Fund your wallet first with create_deposit or via the agent wallet dashboard.

Is there a sandbox or test mode?

Not currently. All purchases use real money. Use check_balance before purchasing and start with small packages to verify your integration.

What countries are covered?

190+ countries. Use check_country_coverage with any ISO country code to see what's available. Global packages cover 120+ countries in a single plan.

Can the AI agent install the eSIM on my device?

No. The AI agent can purchase and retrieve the QR code / activation details, but the user must scan the QR code or enter the activation details on their device. Purchase responses include all necessary installation info.

What's the difference between this and the REST API?

The REST API is read-only (browsing packages). The MCP server adds tool-call semantics that AI agents understand natively, plus authenticated tools for purchasing and account management. Use the REST API for traditional integrations; use MCP for AI agent integrations.

Does the endpoint support SSE / long-lived sessions?

No. This is a stateless endpoint. Each POST creates a fresh server instance, processes the request, and responds. No session IDs, no SSE reconnection. This is the simplest and most reliable setup for remote MCP servers.

My agent gets "Not Acceptable" errors

You must include both content types in the Accept header: Accept: application/json, text/event-stream. This is required by the MCP Streamable HTTP transport specification. Most MCP client libraries handle this automatically.

Support

Questions about the MCP integration? Submit a support ticket or chat with us at pikasim.com/help.

Related Resources

Help