← WebMCP Directory

Tool tree

simfuse.app

Travel & EventsTools verified
Website
Buy a travel eSIM and get online the moment you land. QR code by email in seconds, plans for 205+ countries, no physical SIM, no roaming bills. Pay with Apple Pay or Google Pay.
Explore capabilities

    page: Every page

    plan-tripAction

    Answer "which eSIM should I buy for this trip?". Give it the stops, a country code and the days spent in each, and it compares one plan covering the whole route against one plan per country against a mix of the two, on live prices, then flags the cheapest option that covers everything and explains the choice in a sentence you can quote. It also estimates the data each stop needs, names any country SimFuse cannot cover, and returns package ids that go straight into create-checkout-session. Use it whenever a trip has two or more countries, and for a single country when the traveller wants a recommendation rather than a list. Read-only: nothing is reserved and nothing is charged, and the totals are today's catalog prices, not a quote held for later.

    View tool JSON
    {
      "name": "plan-trip",
      "kind": "act",
      "impl": "imperative",
      "description": "Answer \"which eSIM should I buy for this trip?\". Give it the stops, a country code and the days spent in each, and it compares one plan covering the whole route against one plan per country against a mix of the two, on live prices, then flags the cheapest option that covers everything and explains the choice in a sentence you can quote. It also estimates the data each stop needs, names any country SimFuse cannot cover, and returns package ids that go straight into create-checkout-session. Use it whenever a trip has two or more countries, and for a single country when the traveller wants a recommendation rather than a list. Read-only: nothing is reserved and nothing is charged, and the totals are today's catalog prices, not a quote held for later.",
      "inputSchema": {
        "properties": {
          "stops": {
            "description": "The trip, one entry per country, in travel order. 1 to 12 stops, e.g. [{\"country\":\"JP\",\"days\":7},{\"country\":\"KR\",\"days\":5}].",
            "minItems": 1,
            "maxItems": 12,
            "items": {
              "properties": {
                "country": {
                  "description": "ISO 3166-1 alpha-2 country code, e.g. \"JP\" for Japan. Look one up with list-destinations rather than guessing. Each country may appear once: give one stop with the total days rather than two visits.",
                  "minLength": 2,
                  "maxLength": 2,
                  "type": "string"
                },
                "days": {
                  "description": "Days spent in that country, 1 to 365. Count the nights of the stay.",
                  "minimum": 1,
                  "maximum": 365,
                  "type": "integer"
                },
                "usage": {
                  "description": "Optional. How heavily data is used during this stop: \"light\" (about 300 MB a day, maps and messaging), \"regular\" (about 800 MB a day) or \"heavy\" (about 2 GB a day, video and hotspot). Overrides the trip-wide `usage` for this stop only.",
                  "enum": [
                    "light",
                    "regular",
                    "heavy"
                  ],
                  "type": "string"
                }
              },
              "type": "object",
              "required": [
                "country",
                "days"
              ]
            },
            "type": "array"
          },
          "usage": {
            "description": "Optional. Trip-wide data usage for stops that do not set their own: \"light\" (about 300 MB a day), \"regular\" (about 800 MB a day) or \"heavy\" (about 2 GB a day). Defaults to \"regular\".",
            "default": "regular",
            "enum": [
              "light",
              "regular",
              "heavy"
            ],
            "type": "string"
          },
          "start": {
            "description": "Optional. Departure date as YYYY-MM-DD, e.g. \"2026-04-18\". Only used to date the stops in the answer; it does not change prices. Defaults to today.",
            "minLength": 10,
            "maxLength": 10,
            "type": "string"
          },
          "currency": {
            "description": "Optional. ISO 4217 three-letter code every price is quoted in, e.g. \"USD\", \"EUR\", \"GBP\". Defaults to EUR. An unknown code falls back to EUR rather than failing.",
            "minLength": 3,
            "maxLength": 3,
            "type": "string"
          }
        },
        "type": "object",
        "required": [
          "stops"
        ]
      },
      "page": "/"
    }
    list-destinationsAnswer

    Find the countries SimFuse sells eSIMs for, with the cheapest plan price ("from" price) for each in the currency you ask for. Start here when someone names a place: it turns "Portugal" into the two-letter country code the other tools take, and shows what that destination starts at. For one destination, follow it with list-plans; for a trip covering two or more countries, use plan-trip instead. Read-only, and it answers from the SimFuse catalog alone.

    View tool JSON
    {
      "name": "list-destinations",
      "kind": "answer",
      "impl": "imperative",
      "description": "Find the countries SimFuse sells eSIMs for, with the cheapest plan price (\"from\" price) for each in the currency you ask for. Start here when someone names a place: it turns \"Portugal\" into the two-letter country code the other tools take, and shows what that destination starts at. For one destination, follow it with list-plans; for a trip covering two or more countries, use plan-trip instead. Read-only, and it answers from the SimFuse catalog alone.",
      "inputSchema": {
        "properties": {
          "search": {
            "description": "Optional. Match destinations by name, ISO 3166-1 alpha-2 or alpha-3 code, case-insensitively. A partial name works: \"port\" matches Portugal. Omit to list every destination.",
            "maxLength": 100,
            "type": "string"
          },
          "currency": {
            "description": "Optional. ISO 4217 three-letter code the \"from\" prices are quoted in, e.g. \"USD\", \"EUR\", \"GBP\". Defaults to EUR. An unknown code falls back to EUR rather than failing.",
            "minLength": 3,
            "maxLength": 3,
            "type": "string"
          },
          "limit": {
            "description": "Optional. Maximum destinations to return, 1 to 300. Defaults to 300, which is the whole list.",
            "minimum": 1,
            "maximum": 300,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "page": "/"
    }
    list-regionsAnswer

    Discover available eSIM regions, including worldwide scopes, with their canonical slugs, display names, member countries and starting prices. Only published regions with active displayed regional plans are listed. Pass a returned region slug to list-plans as region, not destination. Country membership describes the region, not a promise that every plan covers every member: check get-plan-coverage for a specific plan. Read-only; no account or key is needed.

    View tool JSON
    {
      "name": "list-regions",
      "kind": "answer",
      "impl": "imperative",
      "description": "Discover available eSIM regions, including worldwide scopes, with their canonical slugs, display names, member countries and starting prices. Only published regions with active displayed regional plans are listed. Pass a returned region slug to list-plans as region, not destination. Country membership describes the region, not a promise that every plan covers every member: check get-plan-coverage for a specific plan. Read-only; no account or key is needed.",
      "inputSchema": {
        "properties": {
          "search": {
            "description": "Optional. Case-insensitive partial match on the canonical region slug or display name, e.g. \"asia\". Omit to list all available regions.",
            "maxLength": 100,
            "type": "string"
          },
          "currency": {
            "description": "Optional. ISO 4217 code for starting prices, e.g. \"EUR\" or \"USD\". Defaults to EUR; unknown codes fall back to the base currency.",
            "minLength": 3,
            "maxLength": 3,
            "type": "string"
          },
          "limit": {
            "description": "Optional. Maximum regions to return, 1 to 300. Defaults to 300. total reports the match count before this limit.",
            "minimum": 1,
            "maximum": 300,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "page": "/"
    }
    get-destination-infoAnswer

    Details for one destination: its name and codes, region, how many eSIM plans are sold there, the cheapest and most expensive, the smallest and largest data bundles, and its storefront page. Takes a country name ("Japan") or two-letter code ("JP"). Use this to describe a destination before pulling its full plan ladder with list-plans. Whether a plan can be topped up varies by plan and is reported by list-plans, not here.

    View tool JSON
    {
      "name": "get-destination-info",
      "kind": "answer",
      "impl": "imperative",
      "description": "Details for one destination: its name and codes, region, how many eSIM plans are sold there, the cheapest and most expensive, the smallest and largest data bundles, and its storefront page. Takes a country name (\"Japan\") or two-letter code (\"JP\"). Use this to describe a destination before pulling its full plan ladder with list-plans. Whether a plan can be topped up varies by plan and is reported by list-plans, not here.",
      "inputSchema": {
        "properties": {
          "destination": {
            "description": "The destination: a country name (\"Japan\") or a two-letter code (\"JP\").",
            "type": "string"
          },
          "currency": {
            "description": "Three-letter currency code for the prices (e.g. \"USD\", \"EUR\"). Defaults to EUR.",
            "type": "string"
          }
        },
        "type": "object",
        "required": [
          "destination"
        ]
      },
      "page": "/"
    }
    list-plansAnswer

    Show the eSIM plans on sale for one country or region, or search the whole catalog, narrowing by data allowance, validity and price. Use destination with a country code from list-destinations, or region with a slug from list-regions; never both. Use it when the traveller wants to compare what is available or find a plan inside a budget. Prices are live retail prices in the currency you ask for. For a trip covering two or more countries, use plan-trip first: it compares one plan for the whole route against one plan per country and picks the cheapest complete answer. Pass a plan id from here to get-plan, get-plan-coverage or create-checkout-session. Read-only, and it answers from the SimFuse catalog alone.

    View tool JSON
    {
      "name": "list-plans",
      "kind": "answer",
      "impl": "imperative",
      "description": "Show the eSIM plans on sale for one country or region, or search the whole catalog, narrowing by data allowance, validity and price. Use destination with a country code from list-destinations, or region with a slug from list-regions; never both. Use it when the traveller wants to compare what is available or find a plan inside a budget. Prices are live retail prices in the currency you ask for. For a trip covering two or more countries, use plan-trip first: it compares one plan for the whole route against one plan per country and picks the cheapest complete answer. Pass a plan id from here to get-plan, get-plan-coverage or create-checkout-session. Read-only, and it answers from the SimFuse catalog alone.",
      "inputSchema": {
        "properties": {
          "destination": {
            "description": "Optional. ISO 3166-1 alpha-2 destination country code, e.g. \"US\", \"GB\", \"DE\". Look it up with list-destinations rather than guessing. Cannot be combined with region. Omit both destination and region to search the whole catalog.",
            "minLength": 2,
            "maxLength": 2,
            "type": "string"
          },
          "region": {
            "description": "Optional. Canonical region slug, e.g. \"europe\", \"southeast-asia\" or \"global\", to search that regional shelf. Cannot be combined with destination. Unknown regions return no plans.",
            "minLength": 1,
            "maxLength": 100,
            "pattern": "^[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*$",
            "type": "string"
          },
          "min_data_amount_mb": {
            "description": "Optional. Only plans with at least this much data, in MEGABYTES: 1 GB is 1024, 10 GB is 10240.",
            "minimum": 0,
            "type": "integer"
          },
          "max_data_amount_mb": {
            "description": "Optional. Only plans with at most this much data, in megabytes.",
            "minimum": 0,
            "type": "integer"
          },
          "min_validity_days": {
            "description": "Optional. Only plans valid for at least this many days, e.g. 14 for a two-week trip.",
            "minimum": 0,
            "type": "integer"
          },
          "max_validity_days": {
            "description": "Optional. Only plans valid for at most this many days.",
            "minimum": 0,
            "type": "integer"
          },
          "min_price_cents": {
            "description": "Optional. Only plans at or above this retail price, in minor units (cents) of `currency`: 500 is 5.00.",
            "minimum": 0,
            "type": "integer"
          },
          "max_price_cents": {
            "description": "Optional. Only plans at or below this retail price, in minor units (cents) of `currency`: 2500 is 25.00.",
            "minimum": 0,
            "type": "integer"
          },
          "currency": {
            "description": "Optional. ISO 4217 three-letter code prices are quoted and filtered in, e.g. \"USD\", \"EUR\", \"GBP\". Defaults to EUR. An unknown code falls back to EUR rather than failing.",
            "minLength": 3,
            "maxLength": 3,
            "type": "string"
          },
          "limit": {
            "description": "Optional. Maximum plans to return, 1 to 100. Defaults to 25.",
            "minimum": 1,
            "maximum": 100,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "page": "/"
    }
    get-planAnswer

    Read everything about one eSIM plan by its id: data allowance, how long it stays valid, what happens after a fair-use cap, whether hotspot and top-ups are supported, the network it runs on, and the retail price in the currency you ask for. Use it to answer a specific question about a plan already found with list-plans or plan-trip, and before buying, to confirm the plan really matches what the traveller asked for. Ask get-plan-coverage instead when the question is which countries it works in. Read-only: it reserves nothing and charges nothing.

    View tool JSON
    {
      "name": "get-plan",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read everything about one eSIM plan by its id: data allowance, how long it stays valid, what happens after a fair-use cap, whether hotspot and top-ups are supported, the network it runs on, and the retail price in the currency you ask for. Use it to answer a specific question about a plan already found with list-plans or plan-trip, and before buying, to confirm the plan really matches what the traveller asked for. Ask get-plan-coverage instead when the question is which countries it works in. Read-only: it reserves nothing and charges nothing.",
      "inputSchema": {
        "properties": {
          "plan_id": {
            "description": "The plan id: a 26-character ULID as returned by list-plans or plan-trip, e.g. \"01JVQ2S6D4X8N0RMB7YQZ5K3TA\". Slugs and supplier codes are not accepted, and an id must never be invented.",
            "type": "string"
          },
          "currency": {
            "description": "Optional. ISO 4217 three-letter code the price is quoted in, e.g. \"USD\", \"EUR\", \"GBP\". Defaults to EUR. An unknown code falls back to EUR rather than failing.",
            "minLength": 3,
            "maxLength": 3,
            "type": "string"
          }
        },
        "type": "object",
        "required": [
          "plan_id"
        ]
      },
      "page": "/"
    }
    build-planAction

    Build an eSIM plan to the traveller's liking for one destination: how much data, for how many days, optionally which network it runs on and whether calls and texts are bundled. Returns the one real plan that matches, with its id and live price, never a made-up combination: a shape nobody sells is snapped to the nearest one that is, one axis at a time, and every change is spelled out in `adjustments` so you can read it back. Use it when the traveller knows what they want ("10 GB on Docomo for two weeks"); use plan-trip when they want a recommendation or the trip has several countries. To buy, pass `plan.id` to get-checkout-link when a person is paying, or to create-checkout-session when you are. Read-only: it reserves nothing and charges nothing.

    View tool JSON
    {
      "name": "build-plan",
      "kind": "act",
      "impl": "imperative",
      "description": "Build an eSIM plan to the traveller's liking for one destination: how much data, for how many days, optionally which network it runs on and whether calls and texts are bundled. Returns the one real plan that matches, with its id and live price, never a made-up combination: a shape nobody sells is snapped to the nearest one that is, one axis at a time, and every change is spelled out in `adjustments` so you can read it back. Use it when the traveller knows what they want (\"10 GB on Docomo for two weeks\"); use plan-trip when they want a recommendation or the trip has several countries. To buy, pass `plan.id` to get-checkout-link when a person is paying, or to create-checkout-session when you are. Read-only: it reserves nothing and charges nothing.",
      "inputSchema": {
        "properties": {
          "country_code": {
            "description": "ISO 3166-1 alpha-2 code of the destination, e.g. \"JP\". Look it up with list-destinations rather than guessing.",
            "minLength": 2,
            "maxLength": 2,
            "type": "string"
          },
          "data_mb": {
            "description": "Data allowance wanted, in megabytes: 1 GB is 1024 MB, so 5 GB is 5120. Pass 0 for an unlimited plan. Snapped to the nearest size sold when no plan has exactly this size.",
            "minimum": 0,
            "type": "integer"
          },
          "validity_days": {
            "description": "How many days the plan should stay valid, 1 to 365. Snapped to the nearest length sold for the chosen size.",
            "minimum": 1,
            "maximum": 365,
            "type": "integer"
          },
          "network": {
            "description": "Optional. The mobile network the plan should run on, by carrier name as `options.networks` lists them, e.g. \"NTT Docomo\" or \"au\". Matching is case-insensitive and a single carrier of a multi-network plan is enough. Omit for the cheapest network.",
            "type": "string"
          },
          "voice": {
            "description": "Optional. True to require a plan that bundles calls and texts. Defaults to false, data only. If no such plan exists the answer is data only and says so.",
            "default": false,
            "type": "boolean"
          },
          "currency": {
            "description": "Optional. ISO 4217 three-letter code the price is quoted in, e.g. \"USD\", \"EUR\", \"GBP\". Defaults to EUR. An unknown code falls back to EUR rather than failing.",
            "type": "string"
          }
        },
        "type": "object",
        "required": [
          "country_code",
          "data_mb",
          "validity_days"
        ]
      },
      "page": "/"
    }
    get-plan-coverageAnswer

    List every country one eSIM plan works in, plus any country of its own region that it leaves out. Use it to answer "does this plan also cover Austria?" for a regional or worldwide plan, where the plan name says a region and the traveller needs the actual list. For a single-country plan the answer is that one country. Ask get-plan instead for the data allowance, validity or price. Read-only.

    View tool JSON
    {
      "name": "get-plan-coverage",
      "kind": "answer",
      "impl": "imperative",
      "description": "List every country one eSIM plan works in, plus any country of its own region that it leaves out. Use it to answer \"does this plan also cover Austria?\" for a regional or worldwide plan, where the plan name says a region and the traveller needs the actual list. For a single-country plan the answer is that one country. Ask get-plan instead for the data allowance, validity or price. Read-only.",
      "inputSchema": {
        "properties": {
          "plan_id": {
            "description": "The plan id: a 26-character ULID as returned by list-plans or plan-trip, e.g. \"01JVQ2S6D4X8N0RMB7YQZ5K3TA\". Slugs and supplier codes are not accepted, and an id must never be invented.",
            "type": "string"
          }
        },
        "type": "object",
        "required": [
          "plan_id"
        ]
      },
      "page": "/"
    }
    check-coverageAnswer

    Answer "does this eSIM plan work in X?" for one destination, as a yes or no rather than a country list. Takes a plan id and a destination (a country name or two-letter code). Reports whether the destination is covered, and separately whether it is explicitly excluded from an otherwise regional plan. Use get-plan-coverage when you need the full list of countries instead.

    View tool JSON
    {
      "name": "check-coverage",
      "kind": "answer",
      "impl": "imperative",
      "description": "Answer \"does this eSIM plan work in X?\" for one destination, as a yes or no rather than a country list. Takes a plan id and a destination (a country name or two-letter code). Reports whether the destination is covered, and separately whether it is explicitly excluded from an otherwise regional plan. Use get-plan-coverage when you need the full list of countries instead.",
      "inputSchema": {
        "properties": {
          "plan_id": {
            "description": "The plan id (a ULID) as returned by list-plans.",
            "type": "string"
          },
          "destination": {
            "description": "The country to check: a name (\"Japan\") or a two-letter code (\"JP\").",
            "type": "string"
          }
        },
        "type": "object",
        "required": [
          "plan_id",
          "destination"
        ]
      },
      "page": "/"
    }
    get-checkout-linkAnswer

    Get the page where a person buys one specific eSIM plan, for an assistant to hand them a link. The page sells exactly this plan with Apple Pay, Google Pay and card, takes the email at payment, and sends the eSIM there. Nothing is charged or reserved by this call and the buyer needs no account. Use this whenever a PERSON is going to pay. Use create-checkout-session instead when the agent is settling the purchase itself, or for more than one plan or unit.

    View tool JSON
    {
      "name": "get-checkout-link",
      "kind": "answer",
      "impl": "imperative",
      "description": "Get the page where a person buys one specific eSIM plan, for an assistant to hand them a link. The page sells exactly this plan with Apple Pay, Google Pay and card, takes the email at payment, and sends the eSIM there. Nothing is charged or reserved by this call and the buyer needs no account. Use this whenever a PERSON is going to pay. Use create-checkout-session instead when the agent is settling the purchase itself, or for more than one plan or unit.",
      "inputSchema": {
        "properties": {
          "plan_id": {
            "description": "The plan id (a ULID) as returned by list-plans, get-plan or plan-trip.",
            "type": "string"
          },
          "currency": {
            "description": "Three-letter currency code for the price quoted back to you (e.g. \"USD\", \"EUR\"). Defaults to EUR. The page itself prices in the buyer's own currency.",
            "type": "string"
          },
          "source": {
            "description": "The name of the assistant or app sending the buyer, recorded as the campaign source on the link (e.g. \"claude\"). Optional.",
            "type": "string"
          }
        },
        "type": "object",
        "required": [
          "plan_id"
        ]
      },
      "page": "/"
    }
    create-checkout-sessionSensitive Action

    Get the checkout page for each plan the person in this browser wants to buy. In this browser the person pays, so this returns links to SimFuse plan pages (Apple Pay, Google Pay and card, eSIM delivered by email, no account needed) rather than an agent payment session. Nothing is charged or reserved. Pass the plan ids returned by plan-trip, list-plans or get-plan.

    View tool JSON
    {
      "name": "create-checkout-session",
      "kind": "transact",
      "impl": "imperative",
      "description": "Get the checkout page for each plan the person in this browser wants to buy. In this browser the person pays, so this returns links to SimFuse plan pages (Apple Pay, Google Pay and card, eSIM delivered by email, no account needed) rather than an agent payment session. Nothing is charged or reserved. Pass the plan ids returned by plan-trip, list-plans or get-plan.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "description": "The plans to buy.",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Plan id (a ULID) from plan-trip, list-plans or get-plan."
                },
                "quantity": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "How many of this plan. Defaults to 1."
                }
              },
              "required": [
                "id"
              ]
            },
            "minItems": 1
          },
          "currency": {
            "type": "string",
            "description": "Three-letter currency code for the prices quoted back, e.g. \"EUR\". The page prices itself in the buyer's own currency."
          }
        },
        "required": [
          "items"
        ]
      },
      "page": "/"
    }
    get-order-statusAnswer

    Check an eSIM order after payment: whether it completed and whether its eSIMs have been provisioned yet. Identified by the order id together with the email that bought it, both of which are on the buyer's confirmation email. Provisioning usually finishes within a minute of payment, so an order that is paid but lists no eSIMs yet is normal: check again shortly. Once an eSIM is listed, use get-esim-activation to fetch its QR code and install details.

    View tool JSON
    {
      "name": "get-order-status",
      "kind": "answer",
      "impl": "imperative",
      "description": "Check an eSIM order after payment: whether it completed and whether its eSIMs have been provisioned yet. Identified by the order id together with the email that bought it, both of which are on the buyer's confirmation email. Provisioning usually finishes within a minute of payment, so an order that is paid but lists no eSIMs yet is normal: check again shortly. Once an eSIM is listed, use get-esim-activation to fetch its QR code and install details.",
      "inputSchema": {
        "properties": {
          "order_id": {
            "description": "The order id from the buyer's confirmation email or order page.",
            "type": "string"
          },
          "email": {
            "description": "The email address the order was bought with. Required: the order id alone does not identify a buyer.",
            "type": "string"
          }
        },
        "type": "object",
        "required": [
          "order_id",
          "email"
        ]
      },
      "page": "/"
    }
    get-esim-activationAnswer

    Fetch the installable eSIM(s) for a paid order: the QR code image, the LPA activation string, the SM-DP+ address and activation code for manual entry, one-tap install links for iPhone and Android, and a hosted install page to send the buyer. Identified by the order id together with the email that bought it. Returns an empty esims list while provisioning is still in flight, which normally clears within a minute of payment.

    View tool JSON
    {
      "name": "get-esim-activation",
      "kind": "answer",
      "impl": "imperative",
      "description": "Fetch the installable eSIM(s) for a paid order: the QR code image, the LPA activation string, the SM-DP+ address and activation code for manual entry, one-tap install links for iPhone and Android, and a hosted install page to send the buyer. Identified by the order id together with the email that bought it. Returns an empty esims list while provisioning is still in flight, which normally clears within a minute of payment.",
      "inputSchema": {
        "properties": {
          "order_id": {
            "description": "The order id from the buyer's confirmation email or order page.",
            "type": "string"
          },
          "email": {
            "description": "The email address the order was bought with. Required: the order id alone does not identify a buyer.",
            "type": "string"
          }
        },
        "type": "object",
        "required": [
          "order_id",
          "email"
        ]
      },
      "page": "/"
    }
    check-esim-usageAnswer

    How much data an eSIM has used and how much is left, for one eSIM on a paid order. Identified by the order id and the email that bought it, plus the ICCID from get-order-status or get-esim-activation. Allowances are in megabytes. Readings are served from a cache refreshed every couple of minutes: checked_at says when the reading was taken. An unlimited plan reports its full-speed allowance for the current period rather than a total.

    View tool JSON
    {
      "name": "check-esim-usage",
      "kind": "answer",
      "impl": "imperative",
      "description": "How much data an eSIM has used and how much is left, for one eSIM on a paid order. Identified by the order id and the email that bought it, plus the ICCID from get-order-status or get-esim-activation. Allowances are in megabytes. Readings are served from a cache refreshed every couple of minutes: checked_at says when the reading was taken. An unlimited plan reports its full-speed allowance for the current period rather than a total.",
      "inputSchema": {
        "properties": {
          "order_id": {
            "description": "The order id from the buyer's confirmation email or order page.",
            "type": "string"
          },
          "email": {
            "description": "The email address the order was bought with.",
            "type": "string"
          },
          "iccid": {
            "description": "The ICCID of the eSIM to read, as returned by get-order-status.",
            "type": "string"
          }
        },
        "type": "object",
        "required": [
          "order_id",
          "email",
          "iccid"
        ]
      },
      "page": "/"
    }
    list-topup-optionsAnswer

    Data top-ups that can be added to an eSIM the buyer already has, narrowed to what its network will actually accept. Identified by the order id and the email that bought it, plus the ICCID. Read-only: a top-up is bought in the SimFuse app, not through this server, and the response carries the link that opens this eSIM there. Do not pass these package ids to create-checkout-session, which would buy a separate new eSIM rather than add data to this one.

    View tool JSON
    {
      "name": "list-topup-options",
      "kind": "answer",
      "impl": "imperative",
      "description": "Data top-ups that can be added to an eSIM the buyer already has, narrowed to what its network will actually accept. Identified by the order id and the email that bought it, plus the ICCID. Read-only: a top-up is bought in the SimFuse app, not through this server, and the response carries the link that opens this eSIM there. Do not pass these package ids to create-checkout-session, which would buy a separate new eSIM rather than add data to this one.",
      "inputSchema": {
        "properties": {
          "order_id": {
            "description": "The order id from the buyer's confirmation email or order page.",
            "type": "string"
          },
          "email": {
            "description": "The email address the order was bought with.",
            "type": "string"
          },
          "iccid": {
            "description": "The ICCID of the eSIM to top up, as returned by get-order-status.",
            "type": "string"
          },
          "currency": {
            "description": "Three-letter currency code for the prices (e.g. \"USD\", \"EUR\"). Defaults to EUR.",
            "type": "string"
          }
        },
        "type": "object",
        "required": [
          "order_id",
          "email",
          "iccid"
        ]
      },
      "page": "/"
    }
    open-trip-plannerAction

    Open the visual trip planner in this browser tab, pre-filled with the given route, so the user can see and edit the comparison. Use after plan-trip when the user wants to look at the options.

    View tool JSON
    {
      "name": "open-trip-planner",
      "kind": "act",
      "impl": "imperative",
      "description": "Open the visual trip planner in this browser tab, pre-filled with the given route, so the user can see and edit the comparison. Use after plan-trip when the user wants to look at the options.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "stops": {
            "type": "string",
            "description": "The route as comma-separated COUNTRY:DAYS stops, e.g. \"JP:14,KR:4\". An optional per-stop usage suffix works too: \"JP:14:heavy\"."
          }
        },
        "required": [
          "stops"
        ]
      },
      "page": "/"
    }