Public access, no credentials
MCP endpoint: https://aerocell.app/mcp. Transport: Streamable HTTP, stateless. The three search tools and JSON routes require no AeroCell account, OAuth, API key, bearer token or cookie. An AI client's own account requirements may still apply.
The MCP client performs initialization and discovers tool schemas through tools/list. POST requests must accept both application/json and text/event-stream. A normal browser GET shows a short guide; it does not execute a search.
Country results use the existing recommendation catalog with a five-minute cache. Regional results fetch the existing bundle catalog. Allowances and prices can change before checkout.
Connect an AI client
These configuration examples were checked against the linked official documentation on 12 October 2026. They are untested client examples. Local automated tests use the official MCP TypeScript SDK to initialize, list tools and search; a passing SDK test does not establish compatibility in every AI application.
Codex CLI / IDE extension
codex mcp add aerocell --url https://aerocell.app/mcp
codex mcp listAlternative entry in ~/.codex/config.toml:
[mcp_servers.aerocell]
url = "https://aerocell.app/mcp"Official OpenAI connection documentation. Untested with AeroCell in this client.
Claude Code
claude mcp add --transport http aerocell https://aerocell.app/mcp
claude mcp get aerocellOfficial Claude Code MCP documentation. Untested with AeroCell in this client.
VS Code / GitHub Copilot
Save this in .vscode/mcp.json, then start the server from the file's controls and enable its tools in agent mode.
{
"servers": {
"aerocell": {
"type": "http",
"url": "https://aerocell.app/mcp"
}
}
}Official VS Code MCP documentation. Untested with AeroCell in this client.
Test prompt: “Find plans for Japan from 15 to 25 October 2026 with at least 3 GB, under $25.” For itineraries, pass every country code and inspect the returned coverage list.
Three read-only MCP tools
All tools return JSON as structuredContent and as text content. The samples below show the structured JSON. MCP tool failures return isError: true with a useful message; invalid schema inputs can also produce protocol errors. None of the tools places orders.
find_esim_plans
Find current single-country plans.
| Parameter | Type | Behavior |
|---|---|---|
| country_code | string, required | Two-letter ISO 3166-1 alpha-2 code, such as JP, FR or GB. Case-insensitive. The catalog also accepts XK. |
| start_date / end_date | string, optional | Provide both real YYYY-MM-DD dates. Inclusive range: 1–366 days. Dates constrain validity; they do not reserve inventory or schedule activation. |
| min_data_gb | number ≥ 0 | Minimum allowance. Displayed GB uses 1024³ bytes and one-decimal rounding. |
| max_price_usd | number > 0 | Maximum live total plan price in USD. |
| require_trip_coverage | boolean | Defaults to true with dates. False allows shorter plans; inspect covers_trip. |
| limit | integer 1–20 | Default 8. Cheapest first, then more data. total_matching counts all matches before this limit. |
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "find_esim_plans",
"arguments": {
"country_code": "JP",
"start_date": "2026-10-15",
"end_date": "2026-10-25",
"min_data_gb": 3,
"max_price_usd": 25,
"limit": 8
}
}
}Illustrative response, not a live offer. All sample prices, operator names and EXAMPLE IDs are fixtures. Retrieve real IDs through search.
{
"country": {
"code": "JP",
"name": "Japan"
},
"trip_days": 11,
"currency": "USD",
"updated_at": "2026-10-12T12:00:00Z",
"total_matching": 1,
"browse_url": "https://aerocell.app/plans",
"note": "Illustrative fixture only. Fetch live prices and real plan IDs before recommending or opening checkout.",
"plans": [
{
"id": "EXAMPLE-JP-5GB",
"name": "Example Japan 5 GB",
"data_gb": 5,
"validity_days": 15,
"price_usd": 9,
"network": "5G",
"operators": [
"Example operator"
],
"covers_trip": true,
"plan_page_url": "https://aerocell.app/plans/japan",
"checkout_url": "https://aerocell.app/checkout/EXAMPLE-JP-5GB"
}
]
}get_esim_plan
| Parameter | Type | Behavior |
|---|---|---|
| country_code | string, required | The same country code used in find_esim_plans. |
| plan_id | string, required | ID from that country search, 1–100 letters, digits, underscores or hyphens. Regional IDs are not supported by this tool; refresh them through regional search. |
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_esim_plan",
"arguments": {
"country_code": "JP",
"plan_id": "EXAMPLE-JP-5GB"
}
}
}Replace the EXAMPLE ID with a real country-search ID. Illustrative detail response:
{
"country": {
"code": "JP",
"name": "Japan"
},
"currency": "USD",
"updated_at": "2026-10-12T12:00:00Z",
"plan": {
"id": "EXAMPLE-JP-5GB",
"name": "Example Japan 5 GB",
"data_gb": 5,
"validity_days": 15,
"price_usd": 9,
"network": "5G",
"operators": [
"Example operator"
],
"covers_trip": null,
"plan_page_url": "https://aerocell.app/plans/japan",
"checkout_url": "https://aerocell.app/checkout/EXAMPLE-JP-5GB"
},
"note": "Illustrative fixture only. Fetch live prices and real plan IDs before recommending or opening checkout."
}find_regional_esim_plans
| Parameter | Type | Behavior |
|---|---|---|
| country_codes | string[], conditional | 1–30 distinct codes for every itinerary country. Required unless region is supplied. Every requested country must appear in each bundle's coverage list. |
| region | string, conditional | global, europe, asia_pacific, southeast_asia, latin_america, middle_east_north_africa or gulf. Can combine with country_codes. Required unless country_codes is supplied. |
| start_date / end_date | string, optional | Provide both real YYYY-MM-DD dates. Inclusive range: 1–366 days. Dates constrain validity; they do not reserve inventory or schedule activation. |
| min_data_gb | number ≥ 0 | Minimum allowance. Displayed GB uses 1024³ bytes and one-decimal rounding. |
| max_price_usd | number > 0 | Maximum live total plan price in USD. |
| require_trip_coverage | boolean | Defaults to true with dates. False allows shorter plans; inspect covers_trip. |
| limit | integer 1–20 | Default 8. Cheapest first, then more data. total_matching counts all matches before this limit. |
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "find_regional_esim_plans",
"arguments": {
"country_codes": [
"FR",
"IT",
"ES"
],
"region": "europe",
"start_date": "2026-10-15",
"end_date": "2026-10-25",
"min_data_gb": 3,
"max_price_usd": 25
}
}
}Illustrative response. country_codes is the bundle's exact published coverage list. Region names alone do not establish itinerary coverage.
{
"requested_country_codes": [
"FR",
"IT",
"ES"
],
"region": "europe",
"trip_days": 11,
"currency": "USD",
"updated_at": "2026-10-12T12:00:00Z",
"total_matching": 1,
"browse_url": "https://aerocell.app/plans",
"note": "Illustrative fixture only. Fetch live prices and real plan IDs before recommending or opening checkout.",
"plans": [
{
"id": "EXAMPLE-EU-5GB",
"name": "Example Europe 5 GB",
"data_gb": 5,
"validity_days": 15,
"price_usd": 9,
"network": "5G",
"operators": [
"Example operator"
],
"covers_trip": true,
"plan_page_url": "https://aerocell.app/plans/europe",
"checkout_url": "https://aerocell.app/checkout/EXAMPLE-EU-5GB",
"region_code": "EU-3",
"country_codes": [
"FR",
"IT",
"ES"
],
"country_count": 3
}
]
}The same searches over JSON
All three routes use the same live search functions as MCP. Send HTTP GET requests; receive the same structured result schemas. No login required. Browser access allows CORS without credentials.
curl --get 'https://aerocell.app/api/v1/esim/plans' \
--data-urlencode 'country_code=JP' \
--data-urlencode 'start_date=2026-10-15' \
--data-urlencode 'end_date=2026-10-25' \
--data-urlencode 'min_data_gb=3' \
--data-urlencode 'max_price_usd=25' \
--data-urlencode 'limit=8'curl --get 'https://aerocell.app/api/v1/esim/regional-plans' \
--data-urlencode 'country_codes=FR,IT,ES' \
--data-urlencode 'region=europe' \
--data-urlencode 'start_date=2026-10-15' \
--data-urlencode 'end_date=2026-10-25' \
--data-urlencode 'min_data_gb=3' \
--data-urlencode 'max_price_usd=25'Plan details require country_code. This runnable example needs jq and uses a real returned plan ID:
PLAN_ID=$(curl -fsS 'https://aerocell.app/api/v1/esim/plans?country_code=JP&limit=1' | jq -r '.plans[0].id // empty')
if [ -n "$PLAN_ID" ]; then
curl -fsS "https://aerocell.app/api/v1/esim/plans/$PLAN_ID?country_code=JP"
fiFor JSON queries, country_codes is one comma-separated parameter; numeric fields are decimal numbers; booleans are exactly true or false. Unknown, empty and repeated parameters are rejected. Detail requests accept only country_code.
Download the public OpenAPI 3.1 specification for full route schemas and examples.
Comparison websites
Import GET /api/v1/esim/catalog to list AeroCell alongside other providers. This public JSON feed requires no account or API key and allows browser access without credentials. It returns the complete purchasable catalog in one response, including country and regional plans and every day-pass duration from 1–90 days. There is no search limit or pagination. Hidden products and existing-customer top-ups are excluded.
curl -fsS -D catalog-headers.txt \
'https://aerocell.app/api/v1/esim/catalog' \
-o aerocell-catalog.jsonPoll every 15 minutes. Save the response's ETag header and send it as If-None-Match on subsequent requests. HTTP 304 means your previous catalog remains current; HTTP 200 supplies a complete replacement. catalog_version changes when public plan content changes. Respect Retry-After on HTTP 429 or 503, keep your previous import, and retry. An error must never be imported as an empty catalog.
curl -sS -D catalog-headers.txt \
-H 'If-None-Match: "<saved-etag>"' \
'https://aerocell.app/api/v1/esim/catalog' \
-o catalog-response.json
# Inspect the HTTP status before replacing your saved catalog.Illustrative response, not a live offer. The example contains a fixture; fetch the endpoint for the complete live catalog.
{
"schema_version": 1,
"provider": "AeroCell",
"currency": "USD",
"price_basis": "Retail before coupons; daily variants show the total duration price.",
"total_plans": 1,
"plans": [
{
"id": "EXAMPLE-JP-5GB",
"package_code": "EXAMPLE-JP-5GB",
"name": "Illustrative Japan 5GB (not a live offer)",
"country_codes": [
"JP"
],
"data_gb": 5,
"allowance_period": "plan",
"is_unlimited": false,
"allowance_behavior": "total",
"reduced_speed_kbps": null,
"maximum_speed_kbps": null,
"validity_days": 15,
"is_daily": false,
"price_usd": 9,
"operators": [
{
"name": "Example operator",
"network": "5G"
}
],
"plan_page_url": "https://aerocell.app/plans/japan",
"checkout_url": "https://aerocell.app/checkout/EXAMPLE-JP-5GB"
}
],
"catalog_version": "3cedf68183c3a264aa809b94f0ffa23cd572c44831a56586e612918c4df24dc4",
"generated_at": "2026-10-13T00:00:00.000Z",
"source_updated_at": "2026-10-13T00:00:00.000Z",
"refresh_after_seconds": 900
}Allowances, duration and freshness
data_gb is the high-speed allowance for allowance_period, using 1024³ bytes per GB. A daily allowance repeats each day; do not present it as a total trip allowance. daily_throttled plans continue at the published reduced_speed_kbps after that day's quota. daily_cutoff plans stop until the quota resets. is_unlimited does not mean unlimited high-speed data. Null speed fields mean unspecified, not uncapped.
Each plan has a stable id, exact country_codes, operator network summaries and AeroCell purchase links. Day-pass IDs append their selected duration to package_code; their price_usd is the total for that duration, including ordinary duration discounts and before coupons. The checkout URL already selects the duration. The fixed-plan storefront minimum of 1,000,000,000 bytes is preserved; daily plans with smaller high-speed quotas are included.
source_updated_at is the oldest provider catalog retrieval used in the response, not a provider price-change timestamp. Snapshot contents refresh within five minutes; provider data is cached for up to 15 minutes. Missing required facts or expired source data produce HTTP 503 instead of a partial catalog.
Registered partner links
Registered partners can fetch GET /api/partners/comparison-catalog from their server using an existing scoped feed credential: Authorization: Bearer <feed-key>. This returns the same plans with partner purchase links when referral tracking is enabled. tracking_enabled reports whether those links carry attribution. Prices are unchanged. Keep the key on your server; it does not authorize purchases or reporting access. Contact [email protected] for partner access.
Response fields & errors
price_usd is the current catalog price; currency is USD. data_gb, validity_days, network and operators describe the plan. Operators are a catalog summary of up to four names, not a complete per-country network map. Regional bundles include country_codes, country_count and region_code.
covers_trip is null without dates. It indicates validity length only. updated_at for country results is the upstream catalog snapshot time; for regional results it is the catalog retrieval time, not a provider price-change timestamp. Returned plan_page_url, browse_url and checkout_url open AeroCell.
| Parameter | Type | Behavior |
|---|---|---|
| 200 | Success | No matches is also 200: plans: [], total_matching: 0. |
| 400 | Invalid input | Missing country, invalid dates, duplicate codes, unsupported region or invalid filters. |
| 404 | Not found | Plan is unavailable for the supplied country, or API route does not exist. |
| 405 | Method not allowed | Read-only plan routes accept GET and CORS OPTIONS. |
| 502 | Invalid catalog response | Upstream returned an invalid response; no guessed prices are substituted. |
| 503 | Catalog unavailable | Retry later; Retry-After suggests 30 seconds. |
{
"error": {
"code": "invalid_input",
"message": "Provide both start_date and end_date."
}
}Checkout & privacy
Open the returned checkout link on aerocell.app. The traveler completes any required sign-in and checkout there. Refresh current prices, check device eSIM compatibility and confirm regional coverage before purchase. These interfaces do not process payments, create purchases, or expose account, order or eSIM installation credentials.
The MCP and JSON request handlers have no search-history database, per-user session store or request analytics. Searches use request memory. Travel dates are applied locally and are not forwarded to the upstream catalog; single-country lookups forward the destination country code. The upstream country catalog cache contains plan data, not visitor dates or IP addresses.
The included API proxy configuration disables access logging for the new JSON search routes. JSON GET URLs contain search fields, so clients and hosting infrastructure may see them. Source inspection does not establish deployed proxy, CDN, backup or log-retention settings. See the existing privacy policy for the website's practices.
Built by Mezsondra LTD
AeroCell: Affordable eSIMs is operated by Mezsondra LTD. Contact [email protected] for integration help.
Support · Privacy policy · Terms · About AeroCell
Discovery files help applications understand these interfaces; they do not guarantee that AI platforms will discover, list or recommend AeroCell.