variotrip route eSIM configurator
One travel eSIM for up to 8 countries: live quotes by route, GB, days and networks, plus a buy link.
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-catalog": {
"url": "https://variotrip.com/wp-json/variotrip/mcp"
}
}
}Remote endpoints
https://variotrip.com/wp-json/variotrip/mcpstreamable-httpWhat it can do
Tool inventory
Tools (7)
๐ขget_shop_facts(language, bucket)
What variotrip is and how it works, in the shopโs own words: one mobile-data eSIM for the whole route, one shared data pool, the trip length, ranges, delivery, payment, hotspot, activation, top-ups (data, days or a country), router activation, e-mails, support. Use for any question that is not a price.
Input Schema
{
"type": "object",
"properties": {
"language": {
"type": "string",
"description": "ISO language of the conversation, e.g. en, de, ja. Localizes country names and sets the language/currency of links and prices."
},
"bucket": {
"type": "string",
"description": "Optional language-region bucket the customer shops in, e.g. en-gb, de-de (sets currency and link locale). Defaults from language."
}
}
}๐ขlist_destinations(language, bucket, currency)
Every country variotrip can put on a route, with the number of selectable networks and the starting price of a one-country route (1 GB ยท 7 days ยท cheapest network). Use to check coverage or to see which countries of a trip are available.
Input Schema
{
"type": "object",
"properties": {
"language": {
"type": "string",
"description": "ISO language of the conversation, e.g. en, de, ja. Localizes country names and sets the language/currency of links and prices."
},
"bucket": {
"type": "string",
"description": "Optional language-region bucket the customer shops in, e.g. en-gb, de-de (sets currency and link locale). Defaults from language."
},
"currency": {
"type": "string",
"description": "Optional ISO 4217 override for prices."
}
}
}๐ขget_networks(destination, language, bucket, currency)
The mobile networks the customer can tick for one country (operator name, 4G/5G) with the price of a reference one-country route on each network alone (1 GB ยท 7 days), so you can say which network is the cheapest and what the others add.
Input Schema
{
"type": "object",
"properties": {
"destination": {
"type": "string",
"description": "Country in ANY language or its ISO code, e.g. \"Japan\", \"Japon\", \"jp\". Map a city to its country first."
},
"language": {
"type": "string",
"description": "ISO language of the conversation, e.g. en, de, ja. Localizes country names and sets the language/currency of links and prices."
},
"bucket": {
"type": "string",
"description": "Optional language-region bucket the customer shops in, e.g. en-gb, de-de (sets currency and link locale). Defaults from language."
},
"currency": {
"type": "string",
"description": "Optional ISO 4217 override for prices."
}
},
"required": [
"destination"
]
}๐ขquote_route(route, gb, days, language, bucket, ...)
Use while the customer is still deciding โ "how much is โฆ?": the exact price of ONE eSIM for the whole route โ the countries in travel order (1โ8) with their networks, ONE data pool in GB for all of them and the trip length โ the server price the customer would pay. A single country is a route of one. Quote it as returned, never compute, add up or scale it yourself. The result carries a buy_url for reference; when the customer says they want to buy, call start_checkout.
Input Schema
{
"type": "object",
"properties": {
"route": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"description": "The countries of the trip in travel order (1โ8, each once).",
"items": {
"type": "object",
"properties": {
"destination": {
"type": "string",
"description": "Country in ANY language or its ISO code, e.g. \"Vietnam\", \"Viรชt Nam\", \"vn\". Map a city to its country first."
},
"networks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional: operator names (or codes) from get_networks for this country. Omit = its cheapest network."
}
},
"required": [
"destination"
]
}
},
"gb": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "The data pool for the WHOLE route in whole GB (1โ100), shared by every country. Omit = sized for normal use (1.5 GB ร days). Not sure? Call recommend_config."
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"description": "Trip length in days (1โ90) for the whole route, counted from the first connection anywhere on the route."
},
"language": {
"type": "string",
"description": "ISO language of the conversation, e.g. en, de, ja. Localizes country names and sets the language/currency of links and prices."
},
"bucket": {
"type": "string",
"description": "Optional language-region bucket the customer shops in, e.g. en-gb, de-de (sets currency and link locale). Defaults from language."
},
"currency": {
"type": "string",
"description": "Optional ISO 4217 override for prices."
}
},
"required": [
"route",
"days"
]
}Output Schema
{
"type": "object",
"properties": {
"route": {
"type": "array",
"description": "The countries on the eSIM in travel order with the networks of each.",
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"destination": {
"type": "string",
"description": "Country name (localized)."
},
"iso": {
"type": "string",
"description": "ISO 3166-1 alpha-2, lower case."
},
"networks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operator names included for this country."
},
"networks_unmatched": {
"type": "array",
"items": {
"type": "string"
},
"description": "Requested names this country does not have."
}
}
}
},
"countries": {
"type": "integer"
},
"data_gb": {
"type": "integer",
"description": "ONE data pool for every country on the route (whole GB), used wherever the customer is."
},
"days": {
"type": "integer",
"description": "Trip length, counted from the first connection anywhere on the route."
},
"price": {
"type": "number",
"description": "FULL price of this route in currency โ the amount paid. Not per day, per GB or per country."
},
"currency": {
"type": "string"
},
"price_basis": {
"type": "string",
"enum": [
"total"
]
},
"price_is_final": {
"type": "boolean"
},
"hotspot": {
"type": "boolean"
},
"activation_trigger": {
"type": "string",
"description": "first_connection (anywhere on the route)"
},
"topup": {
"type": "object",
"additionalProperties": true,
"properties": {
"kind": {
"type": "string",
"enum": [
"route"
]
},
"how": {
"type": "string"
}
},
"description": "How the customer adds data, days or a country later (not through the tools)."
},
"not_available": {
"type": "array",
"items": {
"type": "string"
},
"description": "Requested countries variotrip cannot add (left out of the quote)."
},
"note": {
"type": "string",
"description": "Present when something about the request had to be adjusted โ read it to the customer."
},
"buy_url": {
"type": "string",
"description": "The route builder pre-set to exactly this route. Use verbatim."
}
},
"additionalProperties": true
}๐ขrecommend_config(route, days, usage, gb_per_day, budget, ...)
Use when the customer describes a trip instead of a size: the countries (with the days in each, when known) and how they use data (usage light / normal / heavy, or gb_per_day). Sizes the shared pool from the trip length and returns three server-quoted routes โ exact, comfortable (ร1.5) and generous (ร2) โ each with the pool in GB, the full price, a one-line reason and its buy_url, plus an optional budget check. Same prices as quote_route.
Input Schema
{
"type": "object",
"properties": {
"route": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"description": "The countries of the trip in travel order (1โ8, each once).",
"items": {
"type": "object",
"properties": {
"destination": {
"type": "string",
"description": "Country in ANY language or its ISO code, e.g. \"Vietnam\", \"Viรชt Nam\", \"vn\". Map a city to its country first."
},
"networks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional: operator names (or codes) from get_networks for this country. Omit = its cheapest network."
},
"days_in_country": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"description": "Days the customer spends in this country. Without days, the trip length is the sum of the days_in_country given; with neither, the call fails with invalid_argument and asks for days."
}
},
"required": [
"destination"
]
}
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"description": "Trip length in days (1โ90). Give days, or days_in_country on the countries (then the trip length is their sum). With neither, the call fails with invalid_argument asking for days."
},
"usage": {
"type": "string",
"enum": [
"light",
"normal",
"heavy"
],
"description": "light โ 0.5 GB/day, normal โ 1.5 GB/day (default), heavy โ 4 GB/day."
},
"gb_per_day": {
"type": "number",
"minimum": 0.1,
"maximum": 100,
"description": "Optional: the customer's own estimate in GB per day (wins over usage)."
},
"budget": {
"type": "number",
"description": "Optional budget for the whole route in the quoted currency; options above it are marked."
},
"language": {
"type": "string",
"description": "ISO language of the conversation, e.g. en, de, ja. Localizes country names and sets the language/currency of links and prices."
},
"bucket": {
"type": "string",
"description": "Optional language-region bucket the customer shops in, e.g. en-gb, de-de (sets currency and link locale). Defaults from language."
},
"currency": {
"type": "string",
"description": "Optional ISO 4217 override for prices."
}
},
"required": [
"route"
]
}๐ขprice_grid(route, days, gb, language, bucket, ...)
The same route priced for several trip lengths (days, max 8) and several pool sizes (gb, max 6), in one call โ e.g. to compare with other providers or to find the best fit. Same server prices as quote_route; each cell has its own buy_url.
Input Schema
{
"type": "object",
"properties": {
"route": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"description": "The countries of the trip in travel order (1โ8, each once).",
"items": {
"type": "object",
"properties": {
"destination": {
"type": "string",
"description": "Country in ANY language or its ISO code, e.g. \"Vietnam\", \"Viรชt Nam\", \"vn\". Map a city to its country first."
},
"networks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional: operator names (or codes) from get_networks for this country. Omit = its cheapest network."
}
},
"required": [
"destination"
]
}
},
"days": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1,
"maximum": 90
},
"minItems": 1,
"maxItems": 8,
"description": "Up to 8 trip lengths, e.g. [7,14,21,30]."
},
"gb": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"maxItems": 6,
"description": "Optional: up to 6 pool sizes for the whole route in whole GB, e.g. [5,10,20]. Omit = sized for normal use from each trip length."
},
"language": {
"type": "string",
"description": "ISO language of the conversation, e.g. en, de, ja. Localizes country names and sets the language/currency of links and prices."
},
"bucket": {
"type": "string",
"description": "Optional language-region bucket the customer shops in, e.g. en-gb, de-de (sets currency and link locale). Defaults from language."
},
"currency": {
"type": "string",
"description": "Optional ISO 4217 override for prices."
}
},
"required": [
"route",
"days"
]
}๐ขstart_checkout(route, gb, days, language, bucket, ...)
Use only once the customer has decided to buy ("I'll take it", "how do I buy?"): the checkout handoff for one route (same input as quote_route). Returns the buy_url to give the customer, the final price and a ready-to-send checkout block (next_step, payment_methods, delivery) โ on the page the route builder shows exactly this route; they press "Get it" and pay securely. No account needed; the eSIM is delivered on screen and by e-mail right after payment. No in-chat order tracking, no discount codes. For prices while the customer is still comparing, use quote_route.
Input Schema
{
"type": "object",
"properties": {
"route": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"description": "The countries of the trip in travel order (1โ8, each once).",
"items": {
"type": "object",
"properties": {
"destination": {
"type": "string",
"description": "Country in ANY language or its ISO code, e.g. \"Vietnam\", \"Viรชt Nam\", \"vn\". Map a city to its country first."
},
"networks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional: operator names (or codes) from get_networks for this country. Omit = its cheapest network."
}
},
"required": [
"destination"
]
}
},
"gb": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "The data pool for the WHOLE route in whole GB (1โ100), shared by every country. Omit = sized for normal use (1.5 GB ร days). Not sure? Call recommend_config."
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"description": "Trip length in days (1โ90) for the whole route, counted from the first connection anywhere on the route."
},
"language": {
"type": "string",
"description": "ISO language of the conversation, e.g. en, de, ja. Localizes country names and sets the language/currency of links and prices."
},
"bucket": {
"type": "string",
"description": "Optional language-region bucket the customer shops in, e.g. en-gb, de-de (sets currency and link locale). Defaults from language."
},
"currency": {
"type": "string",
"description": "Optional ISO 4217 override for prices."
}
},
"required": [
"route",
"days"
]
}Output Schema
{
"type": "object",
"properties": {
"route": {
"type": "array",
"description": "The countries on the eSIM in travel order with the networks of each.",
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"destination": {
"type": "string",
"description": "Country name (localized)."
},
"iso": {
"type": "string",
"description": "ISO 3166-1 alpha-2, lower case."
},
"networks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operator names included for this country."
},
"networks_unmatched": {
"type": "array",
"items": {
"type": "string"
},
"description": "Requested names this country does not have."
}
}
}
},
"countries": {
"type": "integer"
},
"data_gb": {
"type": "integer",
"description": "ONE data pool for every country on the route (whole GB), used wherever the customer is."
},
"days": {
"type": "integer",
"description": "Trip length, counted from the first connection anywhere on the route."
},
"price": {
"type": "number",
"description": "FULL price of this route in currency โ the amount paid. Not per day, per GB or per country."
},
"currency": {
"type": "string"
},
"price_basis": {
"type": "string",
"enum": [
"total"
]
},
"price_is_final": {
"type": "boolean"
},
"hotspot": {
"type": "boolean"
},
"activation_trigger": {
"type": "string",
"description": "first_connection (anywhere on the route)"
},
"topup": {
"type": "object",
"additionalProperties": true,
"properties": {
"kind": {
"type": "string",
"enum": [
"route"
]
},
"how": {
"type": "string"
}
},
"description": "How the customer adds data, days or a country later (not through the tools)."
},
"not_available": {
"type": "array",
"items": {
"type": "string"
},
"description": "Requested countries variotrip cannot add (left out of the quote)."
},
"note": {
"type": "string",
"description": "Present when something about the request had to be adjusted โ read it to the customer."
},
"buy_url": {
"type": "string",
"description": "The route builder pre-set to exactly this route. Use verbatim."
},
"next_step": {
"type": "string",
"description": "What the customer does now: open buy_url, press \"Get it\", pay."
},
"payment_methods": {
"type": "array",
"items": {
"type": "string"
}
},
"delivery": {
"type": "string",
"description": "How and when the eSIM arrives."
},
"message": {
"type": "string",
"description": "A ready-to-send line for the customer."
}
},
"required": [
"buy_url",
"price",
"currency",
"next_step"
],
"additionalProperties": true
}Community
Evidence