Skip to main content
Glama

Find eSIM plans

search_esim_plans
Read-onlyIdempotent

Find e-eSIM eSIM plans for one destination or several (countries or regions, any language). Returns the best-value plans first with full facts, coverage lists and a direct link; multi-country plans that include the destination are returned too and marked covers_via. Use when a user wants mobile data abroad; use recommend_plan when they describe a whole trip.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sortNovalue = best price per GB delivered / cheapest All You Can Surf per day first (default); price = cheapest first; data = most data first.
typeNoPlan type. Default any.
limitNoPlans to return. Default 10; all_plans_url lists everything.
bucketNoOptional language-region bucket the customer shops in, e.g. "en-gb", "de-de". Wins over language; prices and links are quoted in it.
currencyNoOptional ISO 4217 code. Every price in the result is quoted in it.
languageNoISO language of the conversation, e.g. en, de, ja. Plan names and country names come back in it when available. Bare "en" is quoted in en-us / USD.
min_daysNoOnly plans valid for at least this many days.
destinationNoCountry or region in any language, e.g. "Thailand", "Japon", "Europa", or a 2-letter ISO code. For a city, pass its country.
destinationsNoSeveral countries for one trip; only plans covering ALL of them are returned. Overrides destination.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
isoNoResolved ISO code or region slug of the (first) destination.
noteNoPresent when part of the request could not be honoured (e.g. more than 5 destinations).
plansNo
coveredNo
messageNoPresent when nothing matched: says why and what to try.
currencyNo
returnedNo
from_priceNoLowest price in this result set, shop-formatted (per-day plans count with their day price).
destinationNo
destinationsNoHow each requested destination was understood.
all_plans_urlNo
pricing_bucketNo
total_availableNoPlans matched before limit; the rest are on all_plans_url.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed71 schema fields changed
    • addedInput schema / properties / bucket
      Added value: +{
      +  "description": "Optional language-region bucket the customer shops in, e.g. \"en-gb\", \"de-de\". Wins over language; prices and links are quoted in it.",
      +  "type": "string"
      +}
    • changedInput schema / properties / currency / description
      Previous value: -"Optional ISO 4217 override for quoted prices. Normally derived from language."New value: +"Optional ISO 4217 code. Every price in the result is quoted in it."
    • changedInput schema / properties / destination / description
      Previous value: -"Country or region in ANY language, e.g. \"Thailand\", \"Japon\", \"Europa\". City names are mapped to their country by you first."New value: +"Country or region in any language, e.g. \"Thailand\", \"Japon\", \"Europa\", or a 2-letter ISO code. For a city, pass its country."
    • addedInput schema / properties / destinations
      Added value: +{
      +  "description": "Several countries for one trip; only plans covering ALL of them are returned. Overrides destination.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 5,
      +  "type": "array"
      +}
    • changedInput schema / properties / language / description
      Previous value: -"ISO language of the conversation, e.g. en, de, ja, th. Localizes names/labels and sets the landing-page language and currency."New value: +"ISO language of the conversation, e.g. en, de, ja. Plan names and country names come back in it when available. Bare \"en\" is quoted in en-us / USD."
    • addedInput schema / properties / limit
      Added value: +{
      +  "description": "Plans to return. Default 10; all_plans_url lists everything.",
      +  "maximum": 50,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / min_days
      Added value: +{
      +  "description": "Only plans valid for at least this many days.",
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / sort
      Added value: +{
      +  "description": "value = best price per GB delivered / cheapest All You Can Surf per day first (default); price = cheapest first; data = most data first.",
      +  "enum": [
      +    "value",
      +    "price",
      +    "data"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / type / description
      Previous value: -"Plan type filter. daily_surf = fresh allowance each day; trip_surf = one pool for the trip; all_you_can_surf = unlimited-style. Default any."New value: +"Plan type. Default any."
    • changedInput schema / required
      Previous value: -[
      -  "destination"
      -]New value: +[]
    • removedOutput schema / properties / destination / description
      Removed value: -"Resolved destination label (localized)."
    • addedOutput schema / properties / destinations
      Added value: +{
      +  "description": "How each requested destination was understood.",
      +  "items": {
      +    "additionalProperties": true,
      +    "properties": {
      +      "iso": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "query": {
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / from_price / description
      Previous value: -"Lowest full plan price in currency."New value: +"Lowest price in this result set, shop-formatted (per-day plans count with their day price)."
    • changedOutput schema / properties / from_price / type
      Previous value: -"number"New value: +"string"
    • addedOutput schema / properties / iso
      Added value: +{
      +  "description": "Resolved ISO code or region slug of the (first) destination.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / message / description
      Added value: +"Present when nothing matched: says why and what to try."
    • addedOutput schema / properties / note
      Added value: +{
      +  "description": "Present when part of the request could not be honoured (e.g. more than 5 destinations).",
      +  "type": "string"
      +}
    • addedOutput schema / properties / plans / items / description
      Added value: +"One eSIM plan. Every field is present only when the catalogue holds a value for it; an absent field is unknown, never \"no\"."
    • addedOutput schema / properties / plans / items / properties / always_on_rate
      Added value: +{
      +  "description": "Reduced speed after the allowance, e.g. \"5 Mbps\" / \"128 kbps\" (for the rest of that day on per_day plans; for the rest of the trip on Trip Surf). All You Can Surf stays unlimited in volume at this speed.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / plans / items / properties / carrier / description
      Previous value: -"Local network operator, when specified. NEVER invent one if empty."New value: +"Local network operator when specified (1.0.x name; also in networks). NEVER invent one when absent."
    • changedOutput schema / properties / plans / items / properties / coverage / description
      Previous value: -"Human-readable coverage label (localized)."New value: +"Same as coverage_label (1.0.x name)."
    • addedOutput schema / properties / plans / items / properties / coverage_count
      Added value: +{
      +  "description": "Number of countries in coverage_countries.",
      +  "type": "integer"
      +}
    • changedOutput schema / properties / plans / items / properties / coverage_countries / description
      Previous value: -"Localized country names covered (details tool only, multi-country plans)."New value: +"Every country the plan works in."
    • addedOutput schema / properties / plans / items / properties / coverage_countries / items / additionalProperties
      Added value: +true
    • addedOutput schema / properties / plans / items / properties / coverage_countries / items / properties
      Added value: +{
      +  "iso": {
      +    "description": "ISO 3166-1 alpha-2, lowercase.",
      +    "type": "string"
      +  },
      +  "name": {
      +    "description": "Country name in the requested language.",
      +    "type": "string"
      +  }
      +}
    • changedOutput schema / properties / plans / items / properties / coverage_countries / items / type
      Previous value: -"string"New value: +"object"
    • addedOutput schema / properties / plans / items / properties / coverage_label
      Added value: +{
      +  "description": "Human-readable coverage label as the shop shows it (localized).",
      +  "type": "string"
      +}
    • addedOutput schema / properties / plans / items / properties / coverage_note
      Added value: +{
      +  "description": "Coverage caveat to present verbatim, e.g. traffic routed via Hong Kong.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / plans / items / properties / covers_via
      Added value: +{
      +  "description": "Present when the plan was returned for a country it covers as part of a multi-country plan: the plan's own region name.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / plans / items / properties / currency / description
      Added value: +"ISO 4217 currency of every price in this object."
    • addedOutput schema / properties / plans / items / properties / daily_high_speed
      Added value: +{
      +  "description": "Daily Surf / All You Can Surf: daily allowance at full speed, e.g. \"2GB\".",
      +  "type": "string"
      +}
    • addedOutput schema / properties / plans / items / properties / daily_reset_time
      Added value: +{
      +  "description": "When the daily allowance refreshes (per_day plans only), e.g. \"00:00 (UTC+8)\" or \"every 24 h after activation\".",
      +  "type": "string"
      +}
    • addedOutput schema / properties / plans / items / properties / data
      Added value: +{
      +  "description": "Trip Surf: total data label, e.g. \"5GB\".",
      +  "type": "string"
      +}
    • changedOutput schema / properties / plans / items / properties / data_gb / description
      Previous value: -"High-speed data in GB. PER DAY when data_period is per_day (Daily Surf); TOTAL for the whole validity when data_period is total (Trip Surf). 0 = no fixed high-speed cap stated."New value: +"Data amount in GB. Meaning given by data_period."
    • changedOutput schema / properties / plans / items / properties / data_period / description
      Previous value: -"per_day or total — how data_gb applies."New value: +"\"total\": data_gb is the whole plan (Trip Surf). \"per_day\": data_gb is the daily full-speed allowance (Daily Surf, All You Can Surf)."
    • addedOutput schema / properties / plans / items / properties / data_period / enum
      Added value: +[
      +  "total",
      +  "per_day"
      +]
    • changedOutput schema / properties / plans / items / properties / data_reset / description
      Previous value: -"When the daily allowance refreshes (per_day plans only). Empty when unknown."New value: +"Same as daily_reset_time (1.0.x name)."
    • removedOutput schema / properties / plans / items / properties / description
      Removed value: -{
      -  "type": "string"
      -}
    • changedOutput schema / properties / plans / items / properties / expires_on / description
      Previous value: -"Hard supplier end date (YYYY-MM-DD) after which the plan stops working and unused data is lost, whatever validity the customer picks. Say it plainly when present, and do not recommend a day count that cannot finish before it. Empty for the vast majority of plans."New value: +"Hard supplier end date (YYYY-MM-DD) after which the plan stops working and unused data is lost, whatever validity the customer picks. Say it plainly when present."
    • addedOutput schema / properties / plans / items / properties / fair_use
      Added value: +{
      +  "description": "All You Can Surf fair-use policy in plain words (daily full-speed allowance, then the still-unlimited reduced speed). Present it as returned.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / plans / items / properties / fup / description
      Previous value: -"All You Can Surf fair-use policy in plain words (daily full-speed allowance and the still-unlimited reduced speed afterwards). Present it as returned — every AYCS grade has such an allowance; empty for non-AYCS plans."New value: +"Same as fair_use (1.0.x name)."
    • changedOutput schema / properties / plans / items / properties / grade / description
      Previous value: -"All You Can Surf tier qualifier (empty for standard). Present only the returned value."New value: +"All You Can Surf tier (standard, premium, titanium). Present only the returned value; every grade has a daily full-speed allowance then a reduced speed."
    • addedOutput schema / properties / plans / items / properties / last_updated
      Added value: +{
      +  "description": "Date the plan was last updated in the catalogue (YYYY-MM-DD).",
      +  "type": "string"
      +}
    • changedOutput schema / properties / plans / items / properties / name / description
      Previous value: -"Plan name, localized to the requested language where a translation exists."New value: +"Short plan name: destination · data · validity · type."
    • changedOutput schema / properties / plans / items / properties / network / description
      Previous value: -"Network generation, e.g. 5G/4G. NEVER invent one if empty."New value: +"Same as network_generation (1.0.x name)."
    • addedOutput schema / properties / plans / items / properties / network_generation
      Added value: +{
      +  "description": "Network generation, e.g. \"5G/4G\". Never an operator name.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / plans / items / properties / networks
      Added value: +{
      +  "description": "Operator name(s) for the plan, as the shop states them.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / plans / items / properties / notice / description
      Previous value: -"Customer-facing caveat for this plan in plain words: a daily cut-off, a coverage exclusion, an activation or verification step. Present it as returned whenever it is non-empty — never omit or soften it. Empty when the plan has no caveat."New value: +"Same as plan_note (1.0.x name)."
    • addedOutput schema / properties / plans / items / properties / plan_note
      Added value: +{
      +  "description": "Customer-facing caveat for this plan in plain words: a daily cut-off, a coverage exclusion, an activation or verification step. Present it as returned whenever present.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / plans / items / properties / price / description
      Previous value: -"FULL fixed price in currency; not per-day or per-GB."New value: +"FULL fixed price of the plan in currency; not per day, not per GB. The price shown is the price paid."
    • addedOutput schema / properties / plans / items / properties / price_basis
      Added value: +{
      +  "description": "Always \"total\" on e-eSIM.",
      +  "enum": [
      +    "total"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / plans / items / properties / price_is_final
      Added value: +{
      +  "description": "Always true: no tax or fee is added at checkout.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / plans / items / properties / pricing_bucket
      Added value: +{
      +  "description": "language-region bucket the prices and links are quoted in, e.g. \"en-us\".",
      +  "type": "string"
      +}
    • addedOutput schema / properties / plans / items / properties / product_id / description
      Added value: +"Product id. Use it for get_plan_details and start_checkout."
    • addedOutput schema / properties / plans / items / properties / rating / description
      Added value: +"Average customer rating (1-5). Present only when reviews exist."
    • addedOutput schema / properties / plans / items / properties / review_count / description
      Added value: +"Number of reviews. Present only when > 0."
    • addedOutput schema / properties / plans / items / properties / sku
      Added value: +{
      +  "description": "Catalogue SKU.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / plans / items / properties / summary
      Added value: +{
      +  "description": "Short description in the requested language, from the product page.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / plans / items / properties / throttle_kbps / description
      Previous value: -"Speed in kbps after the high-speed allowance is used (for that day on per_day plans; for the rest of the trip on total plans). 0 = no throttle stated in this plan's specification."New value: +"The same reduced speed in kbps. 0 = no throttle stated for this plan."
    • addedOutput schema / properties / plans / items / properties / title
      Added value: +{
      +  "description": "Full product title in the requested language.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / plans / items / properties / topup
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "Top-up possibility for this plan.",
      +  "properties": {
      +    "how": {
      +      "description": "How the customer tops up.",
      +      "type": "string"
      +    },
      +    "kind": {
      +      "description": "Always \"none\" on e-eSIM: no top-ups or recharges exist; each plan is a self-contained eSIM.",
      +      "enum": [
      +        "data",
      +        "days",
      +        "none"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • changedOutput schema / properties / plans / items / properties / type / description
      Previous value: -"Daily Surf, Trip Surf or All You Can Surf. Brand names — keep in English."New value: +"Plan type. Brand names — keep in English."
    • addedOutput schema / properties / plans / items / properties / type / enum
      Added value: +[
      +  "Daily Surf",
      +  "Trip Surf",
      +  "All You Can Surf"
      +]
    • addedOutput schema / properties / plans / items / properties / url / description
      Added value: +"Product page in pricing_bucket. Use verbatim."
    • addedOutput schema / properties / plans / items / properties / validity
      Added value: +{
      +  "description": "Validity label, e.g. \"30 days\".",
      +  "type": "string"
      +}
    • changedOutput schema / properties / plans / items / properties / validity_clock / description
      Previous value: -"What the days count means for THIS plan: either 24-hour periods from activation, or calendar days ending at a fixed clock (e.g. \"ends 23:59 (UTC+8)\"). State it whenever it is present — a calendar-day plan bought in the evening loses most of its first day. Empty when unknown."New value: +"What the days count means for THIS plan: 24-hour periods from activation, or calendar days ending at a fixed clock (e.g. \"ends 23:59 (UTC+8)\"). State it; a 1-day calendar plan activated in the evening lasts only hours."
    • addedOutput schema / properties / plans / items / properties / voice_sms
      Added value: +{
      +  "description": "Always \"none\": data only, no telephone number, no SMS.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / pricing_bucket
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / returned
      Added value: +{
      +  "type": "integer"
      +}
    • removedOutput schema / properties / slug
      Removed value: -{
      -  "type": "string"
      -}
    • addedOutput schema / properties / total_available
      Added value: +{
      +  "description": "Plans matched before limit; the rest are on all_plans_url.",
      +  "type": "integer"
      +}
  2. Changed3 schema fields changed
    • addedOutput schema / properties / plans / items / properties / expires_on
      Added value: +{
      +  "description": "Hard supplier end date (YYYY-MM-DD) after which the plan stops working and unused data is lost, whatever validity the customer picks. Say it plainly when present, and do not recommend a day count that cannot finish before it. Empty for the vast majority of plans.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / plans / items / properties / notice
      Added value: +{
      +  "description": "Customer-facing caveat for this plan in plain words: a daily cut-off, a coverage exclusion, an activation or verification step. Present it as returned whenever it is non-empty — never omit or soften it. Empty when the plan has no caveat.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / plans / items / properties / validity_clock
      Added value: +{
      +  "description": "What the days count means for THIS plan: either 24-hour periods from activation, or calendar days ending at a fixed clock (e.g. \"ends 23:59 (UTC+8)\"). State it whenever it is present — a calendar-day plan bought in the evening loses most of its first day. Empty when unknown.",
      +  "type": "string"
      +}
  3. First observed

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, open-world), so the bar is lower. The description still adds useful behavior beyond them: ranking is best-value first, results include coverage lists and a direct link, and multi-country plans covering the destination appear and are flagged covers_via.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three well-packed sentences: scope first, then return/ranking behavior, then usage routing. Every clause carries information an agent needs; there is no filler or restatement of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter, 0-required search tool with a full output schema and complete annotation coverage, the description covers scope, ranking, result contents, multi-country handling, and sibling routing. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds semantic context the schema does not fully carry: destinations accepts multiple countries for one trip, plans must cover all of them, and the multi-country inclusion/flagging behavior of covers_via. Marginal but genuine added value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (find eSIM plans) and precisely defines the search scope: one destination or several, countries or regions, any language. It also distinguishes itself from recommend_plan, so an agent can route correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('when a user wants mobile data abroad') and names the alternative with its selecting condition ('use recommend_plan when they describe a whole trip'). It stops short of stating when *not* to use it relative to the other siblings (get_plan_details, start_checkout), but the routing guidance is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources