Skip to main content
Glama

Get plan details

get_plan_details
Read-onlyIdempotent

Full facts for one e-eSIM plan by product id: coverage list, data and speed rules (daily allowance, reduced speed, fair use), validity clock, expiry date, notice, carrier, price, reviews and link — quoted in the customer's bucket or currency when given.

Input Schema

NameRequiredDescriptionDefault
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.
product_idYesProduct id from search_esim_plans or recommend_plan.

Output Schema

NameRequiredDescriptionDefault
fupNoSame as fair_use (1.0.x name).
skuNoCatalogue SKU.
urlNoProduct page in pricing_bucket. Use verbatim.
dataNoTrip Surf: total data label, e.g. "5GB".
daysNoValidity in days.
nameNoShort plan name: destination · data · validity · type.
typeNoPlan type. Brand names — keep in English.
gradeNoAll You Can Surf tier (standard, premium, titanium). Present only the returned value; every grade has a daily full-speed allowance then a reduced speed.
priceNoFULL fixed price of the plan in currency; not per day, not per GB. The price shown is the price paid.
titleNoFull product title in the requested language.
topupNoTop-up possibility for this plan.
noticeNoSame as plan_note (1.0.x name).
ratingNoAverage customer rating (1-5). Present only when reviews exist.
carrierNoLocal network operator when specified (1.0.x name; also in networks). NEVER invent one when absent.
data_gbNoData amount in GB. Meaning given by data_period.
networkNoSame as network_generation (1.0.x name).
summaryNoShort description in the requested language, from the product page.
coverageNoSame as coverage_label (1.0.x name).
currencyNoISO 4217 currency of every price in this object.
fair_useNoAll You Can Surf fair-use policy in plain words (daily full-speed allowance, then the still-unlimited reduced speed). Present it as returned.
networksNoOperator name(s) for the plan, as the shop states them.
validityNoValidity label, e.g. "30 days".
family_idNoPlans sharing a family_id are day-length variants of the same package.
plan_noteNoCustomer-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.
voice_smsNoAlways "none": data only, no telephone number, no SMS.
covers_viaNoPresent when the plan was returned for a country it covers as part of a multi-country plan: the plan's own region name.
data_resetNoSame as daily_reset_time (1.0.x name).
expires_onNoHard 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.
product_idNoProduct id. Use it for get_plan_details and start_checkout.
data_periodNo"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).
price_basisNoAlways "total" on e-eSIM.
last_updatedNoDate the plan was last updated in the catalogue (YYYY-MM-DD).
review_countNoNumber of reviews. Present only when > 0.
coverage_noteNoCoverage caveat to present verbatim, e.g. traffic routed via Hong Kong.
throttle_kbpsNoThe same reduced speed in kbps. 0 = no throttle stated for this plan.
always_on_rateNoReduced 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.
coverage_countNoNumber of countries in coverage_countries.
coverage_labelNoHuman-readable coverage label as the shop shows it (localized).
price_is_finalNoAlways true: no tax or fee is added at checkout.
pricing_bucketNolanguage-region bucket the prices and links are quoted in, e.g. "en-us".
validity_clockNoWhat 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.
daily_high_speedNoDaily Surf / All You Can Surf: daily allowance at full speed, e.g. "2GB".
daily_reset_timeNoWhen the daily allowance refreshes (per_day plans only), e.g. "00:00 (UTC+8)" or "every 24 h after activation".
coverage_countriesNoEvery country the plan works in.
network_generationNoNetwork generation, e.g. "5G/4G". Never an operator name.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed54 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"
      +}
    • addedInput schema / properties / currency
      Added value: +{
      +  "description": "Optional ISO 4217 code. Every price in the result is quoted in it.",
      +  "type": "string"
      +}
    • changedInput schema / properties / language / description
      Previous value: -"ISO language of the conversation. Localizes names/labels and sets the landing-page language/currency of the link."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."
    • changedInput schema / properties / product_id / description
      Previous value: -"WooCommerce product id from search_esim_plans."New value: +"Product id from search_esim_plans or recommend_plan."
    • addedOutput schema / 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 / 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 / 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 / coverage / description
      Previous value: -"Human-readable coverage label (localized)."New value: +"Same as coverage_label (1.0.x name)."
    • addedOutput schema / properties / coverage_count
      Added value: +{
      +  "description": "Number of countries in coverage_countries.",
      +  "type": "integer"
      +}
    • changedOutput schema / 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 / coverage_countries / items / additionalProperties
      Added value: +true
    • addedOutput schema / 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 / coverage_countries / items / type
      Previous value: -"string"New value: +"object"
    • addedOutput schema / properties / coverage_label
      Added value: +{
      +  "description": "Human-readable coverage label as the shop shows it (localized).",
      +  "type": "string"
      +}
    • addedOutput schema / properties / coverage_note
      Added value: +{
      +  "description": "Coverage caveat to present verbatim, e.g. traffic routed via Hong Kong.",
      +  "type": "string"
      +}
    • addedOutput schema / 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 / currency / description
      Added value: +"ISO 4217 currency of every price in this object."
    • addedOutput schema / 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 / 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 / data
      Added value: +{
      +  "description": "Trip Surf: total data label, e.g. \"5GB\".",
      +  "type": "string"
      +}
    • changedOutput schema / 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 / 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 / data_period / enum
      Added value: +[
      +  "total",
      +  "per_day"
      +]
    • changedOutput schema / 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 / description
      Removed value: -{
      -  "type": "string"
      -}
    • changedOutput schema / 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 / 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 / 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 / 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 / last_updated
      Added value: +{
      +  "description": "Date the plan was last updated in the catalogue (YYYY-MM-DD).",
      +  "type": "string"
      +}
    • changedOutput schema / 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 / 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 / network_generation
      Added value: +{
      +  "description": "Network generation, e.g. \"5G/4G\". Never an operator name.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / networks
      Added value: +{
      +  "description": "Operator name(s) for the plan, as the shop states them.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / 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 / 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 / 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 / price_basis
      Added value: +{
      +  "description": "Always \"total\" on e-eSIM.",
      +  "enum": [
      +    "total"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / price_is_final
      Added value: +{
      +  "description": "Always true: no tax or fee is added at checkout.",
      +  "type": "boolean"
      +}
    • addedOutput schema / 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 / product_id / description
      Added value: +"Product id. Use it for get_plan_details and start_checkout."
    • addedOutput schema / properties / rating / description
      Added value: +"Average customer rating (1-5). Present only when reviews exist."
    • addedOutput schema / properties / review_count / description
      Added value: +"Number of reviews. Present only when > 0."
    • addedOutput schema / properties / sku
      Added value: +{
      +  "description": "Catalogue SKU.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / summary
      Added value: +{
      +  "description": "Short description in the requested language, from the product page.",
      +  "type": "string"
      +}
    • changedOutput schema / 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 / title
      Added value: +{
      +  "description": "Full product title in the requested language.",
      +  "type": "string"
      +}
    • addedOutput schema / 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 / 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 / type / enum
      Added value: +[
      +  "Daily Surf",
      +  "Trip Surf",
      +  "All You Can Surf"
      +]
    • addedOutput schema / properties / url / description
      Added value: +"Product page in pricing_bucket. Use verbatim."
    • addedOutput schema / properties / validity
      Added value: +{
      +  "description": "Validity label, e.g. \"30 days\".",
      +  "type": "string"
      +}
    • changedOutput schema / 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 / voice_sms
      Added value: +{
      +  "description": "Always \"none\": data only, no telephone number, no SMS.",
      +  "type": "string"
      +}
  2. Changed3 schema fields changed
    • addedOutput schema / 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 / 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 / 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

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, lowering the burden. The description adds real context beyond them: it is a per-product lookup, and quoting is governed by bucket/currency when supplied, which tells the agent how localization affects the result.

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

Conciseness4/5

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

One dense, front-loaded sentence that leads with the purpose and then the payload, with no filler sentences. It is long but every clause carries distinct information.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, yet the description usefully summarizes them. Combined with full schema coverage and safety annotations, an agent has what it needs, though the absence of any routing guidance to siblings is a minor gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The clause 'quoted in the customer's bucket or currency when given' restates and slightly reinforces the bucket/currency precedence already documented in the schema, but adds no new syntax or format detail.

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

Purpose4/5

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

States a specific verb and resource ('Full facts for one e-eSIM plan by product id') and enumerates the returned facts, so the agent knows exactly what this retrieves. It does not explicitly name a sibling or say how it differs from get_shop_facts, though the product_id framing implicitly positions it after search/recommend.

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

Usage Guidelines3/5

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

Usage is only implied: the workflow (search → recommend → fetch details) is inferable from the product_id source noted in the schema, but the description itself gives no when-to-use or when-not-to-use guidance and names no alternative sibling.

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