MyBestSim eSIM comparator
Compare prepaid travel eSIM plans by destination, data and trip length; plan multi-country trips.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"esim-comparator": {
"url": "https://mcp.mybestsim.com/mcp"
}
}
}Remote endpoints
https://mcp.mybestsim.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (4)
🟢search_esim_plans(destination, language, currency, dataGb, dataNeed, ...)
Use this when someone is choosing a travel eSIM or needs mobile data abroad for a given country or region, e.g. "cheapest eSIM for Japan", "10 GB for two weeks in Europe", "unlimited data in the USA". Returns a shortlist (up to 10, at most 2 per provider) from the MyBestSim comparator: data allowance, validity, price in the traveller's currency (pass currency; also USD and EUR), 5G/hotspot/calls/SMS, and the link to the full comparison page on mybestsim.com where the traveller buys from the provider. Pass durationDays and dataGb (or dataNeed) whenever the traveller mentions trip length or usage, and ask for them when unknown: without them a 7-day trip with standard use (0.7 GB/day) is assumed and reported in "assumptions"; with dataGb but no durationDays, plans valid for fewer than 7 days are excluded. For a trip through several countries or regions, call plan_trip_esim with every stage instead of searching each country. Prepaid travel eSIMs only: not home mobile contracts, physical SIM cards or a carrier's roaming pass.
Input Schema
{
"type": "object",
"properties": {
"destination": {
"type": "string",
"minLength": 2,
"maxLength": 80,
"description": "Where the traveller is going, as they named it: a country in English or another common language (\"Japan\", \"Japon\"), an ISO 3166-1 alpha-2 code (\"JP\"), a well-known city (\"Tokyo\"), or one of the regions Europe, Asia, Africa, North America, South America, World, Balkans. Never the traveller's home country."
},
"language": {
"type": "string",
"enum": [
"fr",
"en",
"de",
"es",
"it",
"nl",
"pt",
"ja",
"ko",
"sv",
"no",
"nn",
"da",
"fi",
"pl",
"cs",
"sk",
"sl",
"hu",
"ro",
"hr",
"bg",
"ru",
"uk",
"tr"
],
"description": "Language of the conversation (ISO 639-1). Links open our comparison page in that language when it exists, otherwise in English. Default \"en\"."
},
"currency": {
"type": "string",
"enum": [
"USD",
"EUR",
"GBP",
"CAD",
"AUD",
"JPY",
"CNY",
"KRW",
"INR",
"THB",
"IDR",
"MYR",
"SGD",
"PHP",
"VND",
"PKR",
"BDT",
"LKR",
"AED",
"SAR",
"ILS",
"TRY",
"ZAR",
"KES",
"NGN",
"EGP",
"MAD",
"BRL",
"MXN",
"COP",
"CLP",
"PEN",
"NZD",
"CHF",
"SEK",
"NOK",
"DKK",
"PLN",
"CZK",
"HUF",
"RON",
"BGN",
"RUB"
],
"description": "Currency to show prices in (ISO 4217, e.g. \"EUR\", \"GBP\", \"USD\"): pass the traveller's currency whenever you know it (their country, their words, prices they quoted). Default: the currency of the MyBestSim page in the conversation language (EUR for fr, de, es, it, nl, pt…; USD for en; GBP is never assumed). Prices are converted exactly as that page shows them."
},
"dataGb": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000,
"description": "Minimum data in GB, when the traveller gives a figure. Unlimited plans always qualify."
},
"dataNeed": {
"type": "string",
"enum": [
"light",
"standard",
"heavy"
],
"description": "Data appetite when no figure is given: light ≈ 0.3 GB/day (maps, messaging), standard ≈ 0.7 GB/day (social, some video), heavy ≈ 1.5 GB/day (streaming, hotspot). Multiplied by durationDays; without it a 7-day trip is assumed, and plans valid for fewer than 7 days are excluded. Ignored when dataGb is set."
},
"durationDays": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "Trip length in days: plans valid for fewer days are excluded. Default 7 (reported in assumptions)."
},
"unlimited": {
"type": "boolean",
"description": "true = unlimited plans only; false = fixed-data plans only; omit for both."
},
"maxPriceUsd": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000,
"description": "Maximum total price in USD."
},
"features": {
"type": "array",
"maxItems": 4,
"items": {
"type": "string",
"enum": [
"fiveG",
"hotspot",
"calls",
"sms"
]
},
"description": "Features every returned plan must include."
},
"sort": {
"type": "string",
"enum": [
"value",
"cheapest",
"data",
"days"
],
"description": "value (default) = the cheapest plan that covers the data need (given, or assumed standard use) for the trip length; with unlimited=true and no figure, the lowest price per GB of fair use; cheapest = lowest total price; data = most data; days = longest validity. The need and trip length filter every sort."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"description": "Number of plans to return (default 5)."
}
},
"required": [
"destination"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"destination": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"enum": [
"country",
"region"
]
}
},
"required": [
"code",
"name",
"kind"
]
},
"language": {
"type": "string"
},
"comparisonUrl": {
"type": "string"
},
"currency": {
"type": "string",
"description": "Currency of price, pricePerGb and totals (ISO 4217)."
},
"currencySymbol": {
"type": "string",
"description": "Symbol the MyBestSim page uses for that currency."
},
"sort": {
"type": "string"
},
"minDataGb": {
"type": [
"number",
"null"
]
},
"minDurationDays": {
"type": [
"integer",
"null"
],
"description": "Minimum validity applied (given, or assumed); null when none."
},
"assumptions": {
"type": "object",
"description": "What was assumed because the traveller did not say it (null = given). Ask for the real value to refine.",
"properties": {
"durationDays": {
"type": [
"integer",
"null"
],
"description": "Trip length assumed, in days."
},
"dataNeed": {
"type": [
"string",
"null"
],
"description": "Data use assumed (light, standard, heavy)."
},
"stageDays": {
"type": "boolean",
"description": "plan_trip_esim only: days of some stages were not given and were spread."
},
"relaxed": {
"type": "array",
"items": {
"type": "string",
"enum": [
"dataNeed",
"durationDays"
]
},
"description": "Assumptions dropped because no plan met them (search_esim_plans)."
},
"text": {
"type": [
"string",
"null"
]
}
},
"required": [
"durationDays",
"dataNeed",
"text"
]
},
"matched": {
"type": "integer",
"description": "Plans matching the criteria, before the shortlist."
},
"totalPlans": {
"type": "integer",
"description": "Plans listed on the comparison page of the destination."
},
"plans": {
"type": "array",
"items": {
"type": "object",
"properties": {
"planId": {
"type": "string",
"description": "Identifier to pass to get_esim_plan."
},
"provider": {
"type": "string"
},
"providerSlug": {
"type": "string"
},
"unlimited": {
"type": "boolean",
"description": "True for an unlimited-data plan. Its fair-use policy is not published here: present it as \"Unlimited\" without inventing a cap."
},
"dataGb": {
"type": [
"number",
"null"
],
"description": "Total data in GB; null when unlimited."
},
"dataLabel": {
"type": "string"
},
"durationDays": {
"type": "integer"
},
"price": {
"type": "number",
"description": "Price in the response currency, as the MyBestSim page shows it."
},
"pricePerGb": {
"type": [
"number",
"null"
],
"description": "Price per GB in the response currency; null when unlimited."
},
"priceUsd": {
"type": "number"
},
"priceEur": {
"type": [
"number",
"null"
]
},
"pricePerGbUsd": {
"type": [
"number",
"null"
],
"description": "Null when unlimited."
},
"coverage": {
"type": "string",
"enum": [
"country",
"regional",
"global"
]
},
"regionName": {
"type": [
"string",
"null"
]
},
"countryCount": {
"type": "integer"
},
"fiveG": {
"type": "boolean"
},
"hotspot": {
"type": "boolean"
},
"calls": {
"type": "boolean"
},
"sms": {
"type": "boolean"
},
"url": {
"type": "string",
"description": "MyBestSim comparison page that lists this plan."
}
},
"required": [
"planId",
"provider",
"providerSlug",
"unlimited",
"dataGb",
"dataLabel",
"durationDays",
"price",
"pricePerGb",
"priceUsd",
"priceEur",
"pricePerGbUsd",
"coverage",
"regionName",
"countryCount",
"fiveG",
"hotspot",
"calls",
"sms",
"url"
]
}
}
},
"required": [
"destination",
"language",
"comparisonUrl",
"currency",
"currencySymbol",
"sort",
"minDataGb",
"minDurationDays",
"assumptions",
"matched",
"totalPlans",
"plans"
]
}🟢plan_trip_esim(itinerary, totalDurationDays, dataGb, dataNeed, unlimited, ...)
Use this when one trip visits SEVERAL countries or regions, e.g. "Japan then China", "two weeks in France, Italy and Spain", "Thailand, Vietnam and Cambodia in March". Pass EVERY stage in travel order, with the days spent in each when known (or totalDurationDays), and the data need. Compares, at the real total price, every way to cover the trip: (a) one eSIM for every stage (regional or worldwide plan; coverage is checked country by country against the MyBestSim catalogue, never guessed from a plan name), (b) one plan per stage, and combinations (a regional plan for some stages, other plans for the rest; several regional plans). A plan is only proposed for stages it covers, for their whole duration and data need. Recommends the cheapest total; prefers fewer eSIMs unless installing more saves at least $2 per extra eSIM, and says so. Gives the reason, the number of eSIMs, total price, data and validity, and links to the MyBestSim pages where the traveller buys. List the countries themselves as stages: a region stage (Europe, Asia…) only matches plans listed on that region page. Ask how long they stay and how much data they use when they have not said: without it a 7-day trip with standard use is assumed and reported in "assumptions". Prepaid travel eSIMs only.
Input Schema
{
"type": "object",
"properties": {
"itinerary": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"description": "The stages of the trip in travel order (1 to 8). A stage is a country, a well-known city or one of the regions (Europe, Asia…).",
"items": {
"type": "object",
"properties": {
"destination": {
"type": "string",
"minLength": 2,
"maxLength": 80,
"description": "Country, ISO 3166-1 alpha-2 code, well-known city or region of this stage, as the traveller named it. Never their home country."
},
"durationDays": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "Days spent in this stage, when known."
}
},
"required": [
"destination"
],
"additionalProperties": false
}
},
"totalDurationDays": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "Whole trip length in days, when the stages are not dated one by one (a single plan must last this long)."
},
"dataGb": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000,
"description": "Data for the WHOLE trip in GB, when the traveller gives a figure (spread over the stages by days). Unlimited plans always qualify."
},
"dataNeed": {
"type": "string",
"enum": [
"light",
"standard",
"heavy"
],
"description": "Data appetite when no figure is given: light ≈ 0.3 GB/day, standard ≈ 0.7 GB/day, heavy ≈ 1.5 GB/day. Default standard. Ignored when dataGb is set."
},
"unlimited": {
"type": "boolean",
"description": "true = unlimited plans only; false = fixed-data plans only; omit for both."
},
"features": {
"type": "array",
"maxItems": 4,
"items": {
"type": "string",
"enum": [
"fiveG",
"hotspot",
"calls",
"sms"
]
},
"description": "Features every proposed plan must include."
},
"language": {
"type": "string",
"enum": [
"fr",
"en",
"de",
"es",
"it",
"nl",
"pt",
"ja",
"ko",
"sv",
"no",
"nn",
"da",
"fi",
"pl",
"cs",
"sk",
"sl",
"hu",
"ro",
"hr",
"bg",
"ru",
"uk",
"tr"
],
"description": "Language of the conversation (ISO 639-1). Links open our comparison page in that language when it exists, otherwise in English. Default \"en\"."
},
"currency": {
"type": "string",
"enum": [
"USD",
"EUR",
"GBP",
"CAD",
"AUD",
"JPY",
"CNY",
"KRW",
"INR",
"THB",
"IDR",
"MYR",
"SGD",
"PHP",
"VND",
"PKR",
"BDT",
"LKR",
"AED",
"SAR",
"ILS",
"TRY",
"ZAR",
"KES",
"NGN",
"EGP",
"MAD",
"BRL",
"MXN",
"COP",
"CLP",
"PEN",
"NZD",
"CHF",
"SEK",
"NOK",
"DKK",
"PLN",
"CZK",
"HUF",
"RON",
"BGN",
"RUB"
],
"description": "Currency to show prices in (ISO 4217, e.g. \"EUR\", \"GBP\", \"USD\"): pass the traveller's currency whenever you know it (their country, their words, prices they quoted). Default: the currency of the MyBestSim page in the conversation language (EUR for fr, de, es, it, nl, pt…; USD for en; GBP is never assumed). Prices are converted exactly as that page shows them."
}
},
"required": [
"itinerary"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"itinerary"
]
},
"language": {
"type": "string"
},
"currency": {
"type": "string",
"description": "Currency of price, pricePerGb and totals (ISO 4217)."
},
"currencySymbol": {
"type": "string",
"description": "Symbol the MyBestSim page uses for that currency."
},
"totalDays": {
"type": "integer"
},
"dataGb": {
"type": [
"number",
"null"
],
"description": "Data needed for the whole trip; null for unlimited-only."
},
"assumptions": {
"type": "object",
"description": "What was assumed because the traveller did not say it (null = given). Ask for the real value to refine.",
"properties": {
"durationDays": {
"type": [
"integer",
"null"
],
"description": "Trip length assumed, in days."
},
"dataNeed": {
"type": [
"string",
"null"
],
"description": "Data use assumed (light, standard, heavy)."
},
"stageDays": {
"type": "boolean",
"description": "plan_trip_esim only: days of some stages were not given and were spread."
},
"relaxed": {
"type": "array",
"items": {
"type": "string",
"enum": [
"dataNeed",
"durationDays"
]
},
"description": "Assumptions dropped because no plan met them (search_esim_plans)."
},
"text": {
"type": [
"string",
"null"
]
}
},
"required": [
"durationDays",
"dataNeed",
"text"
]
},
"stages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"destination": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"enum": [
"country",
"region"
]
}
},
"required": [
"code",
"name",
"kind"
]
},
"days": {
"type": "integer"
},
"dataGb": {
"type": [
"number",
"null"
],
"description": "Data needed for this stage; null for unlimited-only."
},
"comparisonUrl": {
"type": "string"
},
"totalPlans": {
"type": "integer"
}
},
"required": [
"destination",
"days",
"dataGb",
"comparisonUrl",
"totalPlans"
]
}
},
"singlePlan": {
"anyOf": [
{
"type": "object",
"description": "(a) One eSIM covering every stage; null when none qualifies.",
"properties": {
"total": {
"type": "number",
"description": "Sum of the plan prices in the response currency."
},
"totalUsd": {
"type": "number"
},
"totalEur": {
"type": [
"number",
"null"
]
},
"esimCount": {
"type": "integer"
},
"segments": {
"type": "array",
"items": {
"type": "object",
"description": "One eSIM and the stages it covers.",
"properties": {
"stages": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Indexes (0-based) of the stages covered, in travel order."
},
"days": {
"type": "integer",
"description": "Validity needed."
},
"dataGb": {
"type": [
"number",
"null"
]
},
"plan": {
"type": "object",
"properties": {
"planId": {
"type": "string",
"description": "Identifier to pass to get_esim_plan."
},
"provider": {
"type": "string"
},
"providerSlug": {
"type": "string"
},
"unlimited": {
"type": "boolean",
"description": "True for an unlimited-data plan. Its fair-use policy is not published here: present it as \"Unlimited\" without inventing a cap."
},
"dataGb": {
"type": [
"number",
"null"
],
"description": "Total data in GB; null when unlimited."
},
"dataLabel": {
"type": "string"
},
"durationDays": {
"type": "integer"
},
"price": {
"type": "number",
"description": "Price in the response currency, as the MyBestSim page shows it."
},
"pricePerGb": {
"type": [
"number",
"null"
],
"description": "Price per GB in the response currency; null when unlimited."
},
"priceUsd": {
"type": "number"
},
"priceEur": {
"type": [
"number",
"null"
]
},
"pricePerGbUsd": {
"type": [
"number",
"null"
],
"description": "Null when unlimited."
},
"coverage": {
"type": "string",
"enum": [
"country",
"regional",
"global"
]
},
"regionName": {
"type": [
"string",
"null"
]
},
"countryCount": {
"type": "integer"
},
"fiveG": {
"type": "boolean"
},
"hotspot": {
"type": "boolean"
},
"calls": {
"type": "boolean"
},
"sms": {
"type": "boolean"
},
"url": {
"type": "string",
"description": "MyBestSim comparison page that lists this plan."
}
},
"required": [
"planId",
"provider",
"providerSlug",
"unlimited",
"dataGb",
"dataLabel",
"durationDays",
"price",
"pricePerGb",
"priceUsd",
"priceEur",
"pricePerGbUsd",
"coverage",
"regionName",
"countryCount",
"fiveG",
"hotspot",
"calls",
"sms",
"url"
]
},
"pageUrl": {
"type": "string",
"description": "MyBestSim page to compare and buy, which lists the plan: the region page when the plan covers several stages and that page lists it, else the page of a stage that lists it."
}
},
"required": [
"stages",
"days",
"dataGb",
"plan",
"pageUrl"
]
}
},
"links": {
"type": "array",
"items": {
"type": "string"
},
"description": "MyBestSim pages to open, each listing the plan it is given for: the region page when it lists the plan covering several stages, else the country pages that list it."
}
},
"required": [
"total",
"totalUsd",
"totalEur",
"esimCount",
"segments",
"links"
]
},
{
"type": "null"
}
]
},
"singlePlanAlternatives": {
"type": "array",
"items": {
"type": "object",
"properties": {
"planId": {
"type": "string",
"description": "Identifier to pass to get_esim_plan."
},
"provider": {
"type": "string"
},
"providerSlug": {
"type": "string"
},
"unlimited": {
"type": "boolean",
"description": "True for an unlimited-data plan. Its fair-use policy is not published here: present it as \"Unlimited\" without inventing a cap."
},
"dataGb": {
"type": [
"number",
"null"
],
"description": "Total data in GB; null when unlimited."
},
"dataLabel": {
"type": "string"
},
"durationDays": {
"type": "integer"
},
"price": {
"type": "number",
"description": "Price in the response currency, as the MyBestSim page shows it."
},
"pricePerGb": {
"type": [
"number",
"null"
],
"description": "Price per GB in the response currency; null when unlimited."
},
"priceUsd": {
"type": "number"
},
"priceEur": {
"type": [
"number",
"null"
]
},
"pricePerGbUsd": {
"type": [
"number",
"null"
],
"description": "Null when unlimited."
},
"coverage": {
"type": "string",
"enum": [
"country",
"regional",
"global"
]
},
"regionName": {
"type": [
"string",
"null"
]
},
"countryCount": {
"type": "integer"
},
"fiveG": {
"type": "boolean"
},
"hotspot": {
"type": "boolean"
},
"calls": {
"type": "boolean"
},
"sms": {
"type": "boolean"
},
"url": {
"type": "string",
"description": "MyBestSim comparison page that lists this plan."
}
},
"required": [
"planId",
"provider",
"providerSlug",
"unlimited",
"dataGb",
"dataLabel",
"durationDays",
"price",
"pricePerGb",
"priceUsd",
"priceEur",
"pricePerGbUsd",
"coverage",
"regionName",
"countryCount",
"fiveG",
"hotspot",
"calls",
"sms",
"url"
]
},
"description": "Other single plans covering every stage (up to 2)."
},
"plansCoveringAllStages": {
"type": "integer",
"description": "Plans proven to cover every stage (listed on the page of each stage, or with a catalogue line in each country of the trip), before the length/data/feature criteria."
},
"perStage": {
"anyOf": [
{
"type": "object",
"description": "(b) The best plan for each stage; null when a stage has no qualifying plan.",
"properties": {
"total": {
"type": "number",
"description": "Sum of the plan prices in the response currency."
},
"totalUsd": {
"type": "number"
},
"totalEur": {
"type": [
"number",
"null"
]
},
"esimCount": {
"type": "integer"
},
"segments": {
"type": "array",
"items": {
"type": "object",
"description": "One eSIM and the stages it covers.",
"properties": {
"stages": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Indexes (0-based) of the stages covered, in travel order."
},
"days": {
"type": "integer",
"description": "Validity needed."
},
"dataGb": {
"type": [
"number",
"null"
]
},
"plan": {
"type": "object",
"properties": {
"planId": {
"type": "string",
"description": "Identifier to pass to get_esim_plan."
},
"provider": {
"type": "string"
},
"providerSlug": {
"type": "string"
},
"unlimited": {
"type": "boolean",
"description": "True for an unlimited-data plan. Its fair-use policy is not published here: present it as \"Unlimited\" without inventing a cap."
},
"dataGb": {
"type": [
"number",
"null"
],
"description": "Total data in GB; null when unlimited."
},
"dataLabel": {
"type": "string"
},
"durationDays": {
"type": "integer"
},
"price": {
"type": "number",
"description": "Price in the response currency, as the MyBestSim page shows it."
},
"pricePerGb": {
"type": [
"number",
"null"
],
"description": "Price per GB in the response currency; null when unlimited."
},
"priceUsd": {
"type": "number"
},
"priceEur": {
"type": [
"number",
"null"
]
},
"pricePerGbUsd": {
"type": [
"number",
"null"
],
"description": "Null when unlimited."
},
"coverage": {
"type": "string",
"enum": [
"country",
"regional",
"global"
]
},
"regionName": {
"type": [
"string",
"null"
]
},
"countryCount": {
"type": "integer"
},
"fiveG": {
"type": "boolean"
},
"hotspot": {
"type": "boolean"
},
"calls": {
"type": "boolean"
},
"sms": {
"type": "boolean"
},
"url": {
"type": "string",
"description": "MyBestSim comparison page that lists this plan."
}
},
"required": [
"planId",
"provider",
"providerSlug",
"unlimited",
"dataGb",
"dataLabel",
"durationDays",
"price",
"pricePerGb",
"priceUsd",
"priceEur",
"pricePerGbUsd",
"coverage",
"regionName",
"countryCount",
"fiveG",
"hotspot",
"calls",
"sms",
"url"
]
},
"pageUrl": {
"type": "string",
"description": "MyBestSim page to compare and buy, which lists the plan: the region page when the plan covers several stages and that page lists it, else the page of a stage that lists it."
}
},
"required": [
"stages",
"days",
"dataGb",
"plan",
"pageUrl"
]
}
},
"links": {
"type": "array",
"items": {
"type": "string"
},
"description": "MyBestSim pages to open, each listing the plan it is given for: the region page when it lists the plan covering several stages, else the country pages that list it."
}
},
"required": [
"total",
"totalUsd",
"totalEur",
"esimCount",
"segments",
"links"
]
},
{
"type": "null"
}
]
},
"optionsByEsimCount": {
"type": "array",
"description": "Cheapest real total for each possible number of eSIMs (every split of the stages compared), to show what one more or one fewer eSIM costs.",
"items": {
"type": "object",
"properties": {
"esimCount": {
"type": "integer"
},
"total": {
"type": "number",
"description": "In the response currency."
},
"totalUsd": {
"type": "number"
},
"stageGroups": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
},
"description": "Stages (0-based) covered by each eSIM of this option."
}
},
"required": [
"esimCount",
"total",
"totalUsd",
"stageGroups"
]
}
},
"combination": {
"anyOf": [
{
"type": "object",
"description": "Mix (a plan for some stages, other plans for the rest): the recommended mix, or the cheapest mix when it costs less than (a) and (b); null otherwise.",
"properties": {
"total": {
"type": "number",
"description": "Sum of the plan prices in the response currency."
},
"totalUsd": {
"type": "number"
},
"totalEur": {
"type": [
"number",
"null"
]
},
"esimCount": {
"type": "integer"
},
"segments": {
"type": "array",
"items": {
"type": "object",
"description": "One eSIM and the stages it covers.",
"properties": {
"stages": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Indexes (0-based) of the stages covered, in travel order."
},
"days": {
"type": "integer",
"description": "Validity needed."
},
"dataGb": {
"type": [
"number",
"null"
]
},
"plan": {
"type": "object",
"properties": {
"planId": {
"type": "string",
"description": "Identifier to pass to get_esim_plan."
},
"provider": {
"type": "string"
},
"providerSlug": {
"type": "string"
},
"unlimited": {
"type": "boolean",
"description": "True for an unlimited-data plan. Its fair-use policy is not published here: present it as \"Unlimited\" without inventing a cap."
},
"dataGb": {
"type": [
"number",
"null"
],
"description": "Total data in GB; null when unlimited."
},
"dataLabel": {
"type": "string"
},
"durationDays": {
"type": "integer"
},
"price": {
"type": "number",
"description": "Price in the response currency, as the MyBestSim page shows it."
},
"pricePerGb": {
"type": [
"number",
"null"
],
"description": "Price per GB in the response currency; null when unlimited."
},
"priceUsd": {
"type": "number"
},
"priceEur": {
"type": [
"number",
"null"
]
},
"pricePerGbUsd": {
"type": [
"number",
"null"
],
"description": "Null when unlimited."
},
"coverage": {
"type": "string",
"enum": [
"country",
"regional",
"global"
]
},
"regionName": {
"type": [
"string",
"null"
]
},
"countryCount": {
"type": "integer"
},
"fiveG": {
"type": "boolean"
},
"hotspot": {
"type": "boolean"
},
"calls": {
"type": "boolean"
},
"sms": {
"type": "boolean"
},
"url": {
"type": "string",
"description": "MyBestSim comparison page that lists this plan."
}
},
"required": [
"planId",
"provider",
"providerSlug",
"unlimited",
"dataGb",
"dataLabel",
"durationDays",
"price",
"pricePerGb",
"priceUsd",
"priceEur",
"pricePerGbUsd",
"coverage",
"regionName",
"countryCount",
"fiveG",
"hotspot",
"calls",
"sms",
"url"
]
},
"pageUrl": {
"type": "string",
"description": "MyBestSim page to compare and buy, which lists the plan: the region page when the plan covers several stages and that page lists it, else the page of a stage that lists it."
}
},
"required": [
"stages",
"days",
"dataGb",
"plan",
"pageUrl"
]
}
},
"links": {
"type": "array",
"items": {
"type": "string"
},
"description": "MyBestSim pages to open, each listing the plan it is given for: the region page when it lists the plan covering several stages, else the country pages that list it."
}
},
"required": [
"total",
"totalUsd",
"totalEur",
"esimCount",
"segments",
"links"
]
},
{
"type": "null"
}
]
},
"recommendation": {
"anyOf": [
{
"type": "object",
"properties": {
"strategy": {
"type": "string",
"enum": [
"single",
"perStage",
"combination"
]
},
"reason": {
"type": "string"
},
"total": {
"type": "number"
},
"totalUsd": {
"type": "number"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"strategy",
"reason",
"total",
"totalUsd",
"links"
]
},
{
"type": "null"
}
]
}
},
"required": [
"kind",
"language",
"currency",
"currencySymbol",
"totalDays",
"dataGb",
"assumptions",
"stages",
"singlePlan",
"singlePlanAlternatives",
"plansCoveringAllStages",
"perStage",
"optionsByEsimCount",
"combination",
"recommendation"
]
}🟢get_destination_overview(destination, language, currency)
Use this when someone asks how much a travel eSIM costs in a country or region, what the average or typical price is, or how much choice there is, before comparing individual plans. Returns the number of plans and providers listed on the MyBestSim comparison page, typical prices computed over all of them (median price of standard packages: 1 GB/7 days, 5, 10 and 20 GB/30 days, unlimited 7 and 30 days; median price per GB), the cheapest plan, the best price per GB, the cheapest unlimited plan if any, the available validities, and the link to the comparison page. Pass currency when you know the traveller's.
Input Schema
{
"type": "object",
"properties": {
"destination": {
"type": "string",
"minLength": 2,
"maxLength": 80,
"description": "Where the traveller is going, as they named it: a country in English or another common language (\"Japan\", \"Japon\"), an ISO 3166-1 alpha-2 code (\"JP\"), a well-known city (\"Tokyo\"), or one of the regions Europe, Asia, Africa, North America, South America, World, Balkans. Never the traveller's home country."
},
"language": {
"type": "string",
"enum": [
"fr",
"en",
"de",
"es",
"it",
"nl",
"pt",
"ja",
"ko",
"sv",
"no",
"nn",
"da",
"fi",
"pl",
"cs",
"sk",
"sl",
"hu",
"ro",
"hr",
"bg",
"ru",
"uk",
"tr"
],
"description": "Language of the conversation (ISO 639-1). Links open our comparison page in that language when it exists, otherwise in English. Default \"en\"."
},
"currency": {
"type": "string",
"enum": [
"USD",
"EUR",
"GBP",
"CAD",
"AUD",
"JPY",
"CNY",
"KRW",
"INR",
"THB",
"IDR",
"MYR",
"SGD",
"PHP",
"VND",
"PKR",
"BDT",
"LKR",
"AED",
"SAR",
"ILS",
"TRY",
"ZAR",
"KES",
"NGN",
"EGP",
"MAD",
"BRL",
"MXN",
"COP",
"CLP",
"PEN",
"NZD",
"CHF",
"SEK",
"NOK",
"DKK",
"PLN",
"CZK",
"HUF",
"RON",
"BGN",
"RUB"
],
"description": "Currency to show prices in (ISO 4217, e.g. \"EUR\", \"GBP\", \"USD\"): pass the traveller's currency whenever you know it (their country, their words, prices they quoted). Default: the currency of the MyBestSim page in the conversation language (EUR for fr, de, es, it, nl, pt…; USD for en; GBP is never assumed). Prices are converted exactly as that page shows them."
}
},
"required": [
"destination"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"destination": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"enum": [
"country",
"region"
]
}
},
"required": [
"code",
"name",
"kind"
]
},
"language": {
"type": "string"
},
"comparisonUrl": {
"type": "string"
},
"currency": {
"type": "string",
"description": "Currency of price, pricePerGb and totals (ISO 4217)."
},
"currencySymbol": {
"type": "string",
"description": "Symbol the MyBestSim page uses for that currency."
},
"planCount": {
"type": "integer"
},
"providerCount": {
"type": "integer"
},
"typicalPrices": {
"anyOf": [
{
"type": "object",
"description": "Typical prices on the comparison page, computed over ALL its plans (never a sample), in the response currency. For each standard package: median, lowest and highest price of the plans with exactly that data and validity (unlimited: any unlimited plan of that validity); planCount 0 = no such plan, prices null. medianPricePerGb: median of price ÷ GB over every fixed-data plan. Use these for \"average\" or \"typical\" price questions; a median is the middle plan, not the mean.",
"properties": {
"packages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"dataGb": {
"type": [
"number",
"null"
]
},
"unlimited": {
"type": "boolean"
},
"durationDays": {
"type": "integer"
},
"planCount": {
"type": "integer"
},
"median": {
"type": [
"number",
"null"
]
},
"low": {
"type": [
"number",
"null"
]
},
"high": {
"type": [
"number",
"null"
]
}
},
"required": [
"dataGb",
"unlimited",
"durationDays",
"planCount",
"median",
"low",
"high"
]
}
},
"medianPricePerGb": {
"type": [
"number",
"null"
]
},
"fixedDataPlanCount": {
"type": "integer"
}
},
"required": [
"packages",
"medianPricePerGb",
"fixedDataPlanCount"
]
},
{
"type": "null"
}
]
},
"cheapest": {
"anyOf": [
{
"type": "object",
"properties": {
"planId": {
"type": "string",
"description": "Identifier to pass to get_esim_plan."
},
"provider": {
"type": "string"
},
"providerSlug": {
"type": "string"
},
"unlimited": {
"type": "boolean",
"description": "True for an unlimited-data plan. Its fair-use policy is not published here: present it as \"Unlimited\" without inventing a cap."
},
"dataGb": {
"type": [
"number",
"null"
],
"description": "Total data in GB; null when unlimited."
},
"dataLabel": {
"type": "string"
},
"durationDays": {
"type": "integer"
},
"price": {
"type": "number",
"description": "Price in the response currency, as the MyBestSim page shows it."
},
"pricePerGb": {
"type": [
"number",
"null"
],
"description": "Price per GB in the response currency; null when unlimited."
},
"priceUsd": {
"type": "number"
},
"priceEur": {
"type": [
"number",
"null"
]
},
"pricePerGbUsd": {
"type": [
"number",
"null"
],
"description": "Null when unlimited."
},
"coverage": {
"type": "string",
"enum": [
"country",
"regional",
"global"
]
},
"regionName": {
"type": [
"string",
"null"
]
},
"countryCount": {
"type": "integer"
},
"fiveG": {
"type": "boolean"
},
"hotspot": {
"type": "boolean"
},
"calls": {
"type": "boolean"
},
"sms": {
"type": "boolean"
},
"url": {
"type": "string",
"description": "MyBestSim comparison page that lists this plan."
}
},
"required": [
"planId",
"provider",
"providerSlug",
"unlimited",
"dataGb",
"dataLabel",
"durationDays",
"price",
"pricePerGb",
"priceUsd",
"priceEur",
"pricePerGbUsd",
"coverage",
"regionName",
"countryCount",
"fiveG",
"hotspot",
"calls",
"sms",
"url"
]
},
{
"type": "null"
}
]
},
"bestPricePerGb": {
"anyOf": [
{
"type": "object",
"properties": {
"planId": {
"type": "string",
"description": "Identifier to pass to get_esim_plan."
},
"provider": {
"type": "string"
},
"providerSlug": {
"type": "string"
},
"unlimited": {
"type": "boolean",
"description": "True for an unlimited-data plan. Its fair-use policy is not published here: present it as \"Unlimited\" without inventing a cap."
},
"dataGb": {
"type": [
"number",
"null"
],
"description": "Total data in GB; null when unlimited."
},
"dataLabel": {
"type": "string"
},
"durationDays": {
"type": "integer"
},
"price": {
"type": "number",
"description": "Price in the response currency, as the MyBestSim page shows it."
},
"pricePerGb": {
"type": [
"number",
"null"
],
"description": "Price per GB in the response currency; null when unlimited."
},
"priceUsd": {
"type": "number"
},
"priceEur": {
"type": [
"number",
"null"
]
},
"pricePerGbUsd": {
"type": [
"number",
"null"
],
"description": "Null when unlimited."
},
"coverage": {
"type": "string",
"enum": [
"country",
"regional",
"global"
]
},
"regionName": {
"type": [
"string",
"null"
]
},
"countryCount": {
"type": "integer"
},
"fiveG": {
"type": "boolean"
},
"hotspot": {
"type": "boolean"
},
"calls": {
"type": "boolean"
},
"sms": {
"type": "boolean"
},
"url": {
"type": "string",
"description": "MyBestSim comparison page that lists this plan."
}
},
"required": [
"planId",
"provider",
"providerSlug",
"unlimited",
"dataGb",
"dataLabel",
"durationDays",
"price",
"pricePerGb",
"priceUsd",
"priceEur",
"pricePerGbUsd",
"coverage",
"regionName",
"countryCount",
"fiveG",
"hotspot",
"calls",
"sms",
"url"
]
},
{
"type": "null"
}
]
},
"cheapestUnlimited": {
"anyOf": [
{
"type": "object",
"properties": {
"planId": {
"type": "string",
"description": "Identifier to pass to get_esim_plan."
},
"provider": {
"type": "string"
},
"providerSlug": {
"type": "string"
},
"unlimited": {
"type": "boolean",
"description": "True for an unlimited-data plan. Its fair-use policy is not published here: present it as \"Unlimited\" without inventing a cap."
},
"dataGb": {
"type": [
"number",
"null"
],
"description": "Total data in GB; null when unlimited."
},
"dataLabel": {
"type": "string"
},
"durationDays": {
"type": "integer"
},
"price": {
"type": "number",
"description": "Price in the response currency, as the MyBestSim page shows it."
},
"pricePerGb": {
"type": [
"number",
"null"
],
"description": "Price per GB in the response currency; null when unlimited."
},
"priceUsd": {
"type": "number"
},
"priceEur": {
"type": [
"number",
"null"
]
},
"pricePerGbUsd": {
"type": [
"number",
"null"
],
"description": "Null when unlimited."
},
"coverage": {
"type": "string",
"enum": [
"country",
"regional",
"global"
]
},
"regionName": {
"type": [
"string",
"null"
]
},
"countryCount": {
"type": "integer"
},
"fiveG": {
"type": "boolean"
},
"hotspot": {
"type": "boolean"
},
"calls": {
"type": "boolean"
},
"sms": {
"type": "boolean"
},
"url": {
"type": "string",
"description": "MyBestSim comparison page that lists this plan."
}
},
"required": [
"planId",
"provider",
"providerSlug",
"unlimited",
"dataGb",
"dataLabel",
"durationDays",
"price",
"pricePerGb",
"priceUsd",
"priceEur",
"pricePerGbUsd",
"coverage",
"regionName",
"countryCount",
"fiveG",
"hotspot",
"calls",
"sms",
"url"
]
},
{
"type": "null"
}
]
},
"durationsDays": {
"type": "array",
"items": {
"type": "integer"
}
}
},
"required": [
"destination",
"language",
"comparisonUrl",
"currency",
"currencySymbol",
"planCount",
"providerCount",
"typicalPrices",
"cheapest",
"bestPricePerGb",
"cheapestUnlimited",
"durationsDays"
]
}🟢get_esim_plan(planId, destination, language, currency)
Use this when someone wants the detail of one plan returned by search_esim_plans or get_destination_overview: coverage (number of countries, region), features, validity and price. Needs the planId and the destination it was found under.
Input Schema
{
"type": "object",
"properties": {
"planId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "planId returned by search_esim_plans."
},
"destination": {
"type": "string",
"minLength": 2,
"maxLength": 80,
"description": "Where the traveller is going, as they named it: a country in English or another common language (\"Japan\", \"Japon\"), an ISO 3166-1 alpha-2 code (\"JP\"), a well-known city (\"Tokyo\"), or one of the regions Europe, Asia, Africa, North America, South America, World, Balkans. Never the traveller's home country."
},
"language": {
"type": "string",
"enum": [
"fr",
"en",
"de",
"es",
"it",
"nl",
"pt",
"ja",
"ko",
"sv",
"no",
"nn",
"da",
"fi",
"pl",
"cs",
"sk",
"sl",
"hu",
"ro",
"hr",
"bg",
"ru",
"uk",
"tr"
],
"description": "Language of the conversation (ISO 639-1). Links open our comparison page in that language when it exists, otherwise in English. Default \"en\"."
},
"currency": {
"type": "string",
"enum": [
"USD",
"EUR",
"GBP",
"CAD",
"AUD",
"JPY",
"CNY",
"KRW",
"INR",
"THB",
"IDR",
"MYR",
"SGD",
"PHP",
"VND",
"PKR",
"BDT",
"LKR",
"AED",
"SAR",
"ILS",
"TRY",
"ZAR",
"KES",
"NGN",
"EGP",
"MAD",
"BRL",
"MXN",
"COP",
"CLP",
"PEN",
"NZD",
"CHF",
"SEK",
"NOK",
"DKK",
"PLN",
"CZK",
"HUF",
"RON",
"BGN",
"RUB"
],
"description": "Currency to show prices in (ISO 4217, e.g. \"EUR\", \"GBP\", \"USD\"): pass the traveller's currency whenever you know it (their country, their words, prices they quoted). Default: the currency of the MyBestSim page in the conversation language (EUR for fr, de, es, it, nl, pt…; USD for en; GBP is never assumed). Prices are converted exactly as that page shows them."
}
},
"required": [
"planId",
"destination"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"destination": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"enum": [
"country",
"region"
]
}
},
"required": [
"code",
"name",
"kind"
]
},
"language": {
"type": "string"
},
"comparisonUrl": {
"type": "string"
},
"currency": {
"type": "string",
"description": "Currency of price, pricePerGb and totals (ISO 4217)."
},
"currencySymbol": {
"type": "string",
"description": "Symbol the MyBestSim page uses for that currency."
},
"plan": {
"type": "object",
"properties": {
"planId": {
"type": "string",
"description": "Identifier to pass to get_esim_plan."
},
"provider": {
"type": "string"
},
"providerSlug": {
"type": "string"
},
"unlimited": {
"type": "boolean",
"description": "True for an unlimited-data plan. Its fair-use policy is not published here: present it as \"Unlimited\" without inventing a cap."
},
"dataGb": {
"type": [
"number",
"null"
],
"description": "Total data in GB; null when unlimited."
},
"dataLabel": {
"type": "string"
},
"durationDays": {
"type": "integer"
},
"price": {
"type": "number",
"description": "Price in the response currency, as the MyBestSim page shows it."
},
"pricePerGb": {
"type": [
"number",
"null"
],
"description": "Price per GB in the response currency; null when unlimited."
},
"priceUsd": {
"type": "number"
},
"priceEur": {
"type": [
"number",
"null"
]
},
"pricePerGbUsd": {
"type": [
"number",
"null"
],
"description": "Null when unlimited."
},
"coverage": {
"type": "string",
"enum": [
"country",
"regional",
"global"
]
},
"regionName": {
"type": [
"string",
"null"
]
},
"countryCount": {
"type": "integer"
},
"fiveG": {
"type": "boolean"
},
"hotspot": {
"type": "boolean"
},
"calls": {
"type": "boolean"
},
"sms": {
"type": "boolean"
},
"url": {
"type": "string",
"description": "MyBestSim comparison page that lists this plan."
}
},
"required": [
"planId",
"provider",
"providerSlug",
"unlimited",
"dataGb",
"dataLabel",
"durationDays",
"price",
"pricePerGb",
"priceUsd",
"priceEur",
"pricePerGbUsd",
"coverage",
"regionName",
"countryCount",
"fiveG",
"hotspot",
"calls",
"sms",
"url"
]
}
},
"required": [
"destination",
"language",
"comparisonUrl",
"currency",
"currencySymbol",
"plan"
]
}Community
Evidence