Skip to main content
Glama

Browse or buy eSIM top-ups

topup_esim
Destructive

Adds data to an existing eSIM by listing compatible top-ups with prices or purchasing a chosen top-up, requiring prior price approval to avoid overcharges.

Instructions

Add data to an existing eSIM. Without topup_product_id: lists compatible top-ups with prices (no charge). With topup_product_id: buys that top-up, charged to your balance immediately; requires max_price_cents (the top-up price you showed the user and they approved).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
esim_idYesesim_... id of the eSIM to top up
max_price_centsNoRequired with topup_product_id: the top-up price you showed the user and they approved, in US cents. Refused uncharged if the price is higher.
topup_product_idNoprod_... id from the top-up list; omit to browse

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
esimNo
topupsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv1.2.1
    • addedInput schema / properties / max_price_cents
      Added value: +{
      +  "description": "Required with topup_product_id: the top-up price you showed the user and they approved, in US cents. Refused uncharged if the price is higher.",
      +  "exclusiveMinimum": 0,
      +  "maximum": 1000000,
      +  "type": "integer"
      +}
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": {},
      +  "properties": {
      +    "esim": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "activation_code": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "charged_price_cents": {
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        "completed_at": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "countries": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "created_at": {
      +          "type": "string"
      +        },
      +        "currency": {
      +          "const": "USD",
      +          "type": "string"
      +        },
      +        "data_limit_gb": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "data_unlimited": {
      +          "type": "boolean"
      +        },
      +        "expires_at": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "iccid": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "id": {
      +          "type": "string"
      +        },
      +        "is_topup": {
      +          "type": "boolean"
      +        },
      +        "parent_order_id": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "product_id": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "qr_code_url": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "routing_location": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "smdp_address": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "status": {
      +          "enum": [
      +            "processing",
      +            "completed",
      +            "cancelled",
      +            "refunded",
      +            "expired"
      +          ],
      +          "type": "string"
      +        },
      +        "validity_days": {
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "status",
      +        "product_id",
      +        "is_topup",
      +        "parent_order_id",
      +        "iccid",
      +        "activation_code",
      +        "qr_code_url",
      +        "smdp_address",
      +        "data_limit_gb",
      +        "data_unlimited",
      +        "validity_days",
      +        "countries",
      +        "routing_location",
      +        "charged_price_cents",
      +        "currency",
      +        "created_at",
      +        "completed_at",
      +        "expires_at"
      +      ],
      +      "type": "object"
      +    },
      +    "topups": {
      +      "items": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "countries": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "country_count": {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          "currency": {
      +            "const": "USD",
      +            "type": "string"
      +          },
      +          "data_limit_gb": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "data_unlimited": {
      +            "type": "boolean"
      +          },
      +          "features": {
      +            "additionalProperties": {},
      +            "properties": {
      +              "has_5g": {
      +                "type": "boolean"
      +              },
      +              "has_calls": {
      +                "type": "boolean"
      +              },
      +              "has_hotspot": {
      +                "type": "boolean"
      +              },
      +              "has_sms": {
      +                "type": "boolean"
      +              },
      +              "supports_topup": {
      +                "type": "boolean"
      +              }
      +            },
      +            "required": [
      +              "has_5g",
      +              "has_hotspot",
      +              "has_calls",
      +              "has_sms",
      +              "supports_topup"
      +            ],
      +            "type": "object"
      +          },
      +          "id": {
      +            "type": "string"
      +          },
      +          "price_cents": {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          "region": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "routing_location": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "title": {
      +            "type": "string"
      +          },
      +          "validity_days": {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "title",
      +          "countries",
      +          "region",
      +          "country_count",
      +          "routing_location",
      +          "data_limit_gb",
      +          "data_unlimited",
      +          "validity_days",
      +          "features",
      +          "price_cents",
      +          "currency"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Changed4 schema fields changedv1.1.8
    • addedInput schema / properties / esim_id / description
      Added value: +"esim_... id of the eSIM to top up"
    • addedInput schema / properties / esim_id / pattern
      Added value: +"^(?:esim_[A-Za-z0-9_-]{1,64})$"
    • addedInput schema / properties / topup_product_id / description
      Added value: +"prod_... id from the top-up list; omit to browse"
    • addedInput schema / properties / topup_product_id / pattern
      Added value: +"^(?:prod_[A-Za-z0-9_-]{1,64})$"
  3. First observedv1.1.3

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations (destructiveHint=true, idempotentHint=false): it discloses that browsing is free, that buying charges the balance immediately, that max_price_cents is mandatory for a purchase, and that an over-priced request is refused without charging. That is exactly the mutation cost and failure behavior an agent needs.

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 compact clauses keyed on the presence or absence of topup_product_id, with the mode split and the charge warning front-loaded. No filler sentences.

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?

An output schema exists, so return values need not be described. For a 3-parameter mutation tool with full schema coverage and annotations, the description covers mode selection, billing consequence, and the price-safety guard, leaving no material gap.

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 already 100%, so the baseline is 3, but the description adds real meaning: topup_product_id's absence signals browse mode, and max_price_cents is framed as the user-approved displayed price with a refused-uncharged outcome if exceeded. This clarifies intent beyond the schema's type and range constraints.

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 ('Add data to an existing eSIM') and immediately distinguishes the two operating modes: listing compatible top-ups versus buying one. An agent can tell this apart from purchase_esim and search_esim_plans without opening a 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?

Explicitly states when each branch applies: omit topup_product_id to browse (no charge), supply it to buy. It also encodes the approval precondition (max_price_cents must be the price shown to and approved by the user). It does not, however, name or differentiate adjacent siblings such as purchase_esim or search_esim_plans.

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