variotrip route eSIM configurator
One travel eSIM for up to 8 countries: live quotes by route, GB, days and networks, plus a buy link.
使うべきか
品質と安全性
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"esim-catalog": {
"url": "https://variotrip.com/wp-json/variotrip/mcp"
}
}
}リモートエンドポイント
https://variotrip.com/wp-json/variotrip/mcpstreamable-httpできること
ツール一覧
ツール(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.
入力スキーマ
{
"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.
入力スキーマ
{
"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.
入力スキーマ
{
"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.
入力スキーマ
{
"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"
]
}出力スキーマ
{
"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.
入力スキーマ
{
"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.
入力スキーマ
{
"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.
入力スキーマ
{
"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"
]
}出力スキーマ
{
"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
}コミュニティ
エビデンス