variotrip MCP
An official MCP server by variotrip that allows AI agents to programmatically access live eSIM pricing, configure multi-country travel routes, and retrieve network availability without scraping. It provides read-only tools for quoting, destination listing, and route recommendation, while directing payment to the official storefront.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://variotrip.com/wp-json/variotrip/mcpWhat you can do with it
- Quote live prices for multi-country eSIM routes
- List available countries and mobile networks
- Recommend data configurations based on usage
- Retrieve shop facts and legal information
Source and maintenance
Protocol and capabilities
- Server
- variotrip 2.1.2
- MCP protocol
- 2025-06-18
- Tools
- 7 advertised
- Resources
- 3 advertised
- Resource templates
- 0 advertised
- Prompts
- 3 advertised
{
"tools": {},
"prompts": {},
"resources": {}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
7 advertised
get_shop_facts — Shop facts
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": {
"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."
},
"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."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_destinations — List destinations
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": {
"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."
},
"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."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_networks — Networks of a country
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",
"required": [
"destination"
],
"properties": {
"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."
},
"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."
},
"destination": {
"type": "string",
"description": "Country in ANY language or its ISO code, e.g. \"Japan\", \"Japon\", \"jp\". Map a city to its country first."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}quote_route — Quote a route
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",
"required": [
"route",
"days"
],
"properties": {
"gb": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"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",
"maximum": 90,
"minimum": 1,
"description": "Trip length in days (1–90) for the whole route, counted from the first connection anywhere on the route."
},
"route": {
"type": "array",
"items": {
"type": "object",
"required": [
"destination"
],
"properties": {
"networks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional: operator names (or codes) from get_networks for this country. Omit = its cheapest network."
},
"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."
}
}
},
"maxItems": 8,
"minItems": 1,
"description": "The countries of the trip in travel order (1–8, each once)."
},
"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."
},
"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."
}
}
}{
"type": "object",
"properties": {
"days": {
"type": "integer",
"description": "Trip length, counted from the first connection anywhere on the route."
},
"note": {
"type": "string",
"description": "Present when something about the request had to be adjusted — read it to the customer."
},
"price": {
"type": "number",
"description": "FULL price of this route in currency — the amount paid. Not per day, per GB or per country."
},
"route": {
"type": "array",
"items": {
"type": "object",
"properties": {
"iso": {
"type": "string",
"description": "ISO 3166-1 alpha-2, lower case."
},
"networks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operator names included for this country."
},
"destination": {
"type": "string",
"description": "Country name (localized)."
},
"networks_unmatched": {
"type": "array",
"items": {
"type": "string"
},
"description": "Requested names this country does not have."
}
},
"additionalProperties": true
},
"description": "The countries on the eSIM in travel order with the networks of each."
},
"topup": {
"type": "object",
"properties": {
"how": {
"type": "string"
},
"kind": {
"enum": [
"route"
],
"type": "string"
}
},
"description": "How the customer adds data, days or a country later (not through the tools).",
"additionalProperties": true
},
"buy_url": {
"type": "string",
"description": "The route builder pre-set to exactly this route. Use verbatim."
},
"data_gb": {
"type": "integer",
"description": "ONE data pool for every country on the route (whole GB), used wherever the customer is."
},
"hotspot": {
"type": "boolean"
},
"currency": {
"type": "string"
},
"countries": {
"type": "integer"
},
"price_basis": {
"enum": [
"total"
],
"type": "string"
},
"not_available": {
"type": "array",
"items": {
"type": "string"
},
"description": "Requested countries variotrip cannot add (left out of the quote)."
},
"price_is_final": {
"type": "boolean"
},
"activation_trigger": {
"type": "string",
"description": "first_connection (anywhere on the route)"
}
},
"additionalProperties": true
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}recommend_config — Recommend a route
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",
"required": [
"route"
],
"properties": {
"days": {
"type": "integer",
"maximum": 90,
"minimum": 1,
"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."
},
"route": {
"type": "array",
"items": {
"type": "object",
"required": [
"destination"
],
"properties": {
"networks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional: operator names (or codes) from get_networks for this country. Omit = its cheapest network."
},
"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."
},
"days_in_country": {
"type": "integer",
"maximum": 90,
"minimum": 1,
"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."
}
}
},
"maxItems": 8,
"minItems": 1,
"description": "The countries of the trip in travel order (1–8, each once)."
},
"usage": {
"enum": [
"light",
"normal",
"heavy"
],
"type": "string",
"description": "light ≈ 0.5 GB/day, normal ≈ 1.5 GB/day (default), heavy ≈ 4 GB/day."
},
"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."
},
"budget": {
"type": "number",
"description": "Optional budget for the whole route in the quoted currency; options above it are marked."
},
"currency": {
"type": "string",
"description": "Optional ISO 4217 override for prices."
},
"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."
},
"gb_per_day": {
"type": "number",
"maximum": 100,
"minimum": 0.1,
"description": "Optional: the customer's own estimate in GB per day (wins over usage)."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}price_grid — Price grid for a route
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",
"required": [
"route",
"days"
],
"properties": {
"gb": {
"type": "array",
"items": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"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."
},
"days": {
"type": "array",
"items": {
"type": "integer",
"maximum": 90,
"minimum": 1
},
"maxItems": 8,
"minItems": 1,
"description": "Up to 8 trip lengths, e.g. [7,14,21,30]."
},
"route": {
"type": "array",
"items": {
"type": "object",
"required": [
"destination"
],
"properties": {
"networks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional: operator names (or codes) from get_networks for this country. Omit = its cheapest network."
},
"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."
}
}
},
"maxItems": 8,
"minItems": 1,
"description": "The countries of the trip in travel order (1–8, each once)."
},
"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."
},
"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."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}start_checkout — Start secure checkout
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 the buy button (buy_button, e.g. "Get it" in English) 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",
"required": [
"route",
"days"
],
"properties": {
"gb": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"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",
"maximum": 90,
"minimum": 1,
"description": "Trip length in days (1–90) for the whole route, counted from the first connection anywhere on the route."
},
"route": {
"type": "array",
"items": {
"type": "object",
"required": [
"destination"
],
"properties": {
"networks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional: operator names (or codes) from get_networks for this country. Omit = its cheapest network."
},
"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."
}
}
},
"maxItems": 8,
"minItems": 1,
"description": "The countries of the trip in travel order (1–8, each once)."
},
"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."
},
"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."
}
}
}{
"type": "object",
"required": [
"buy_url",
"price",
"currency",
"next_step"
],
"properties": {
"days": {
"type": "integer",
"description": "Trip length, counted from the first connection anywhere on the route."
},
"note": {
"type": "string",
"description": "Present when something about the request had to be adjusted — read it to the customer."
},
"price": {
"type": "number",
"description": "FULL price of this route in currency — the amount paid. Not per day, per GB or per country."
},
"route": {
"type": "array",
"items": {
"type": "object",
"properties": {
"iso": {
"type": "string",
"description": "ISO 3166-1 alpha-2, lower case."
},
"networks": {
"type": "array",
"items": {
"type": "string"
},
"description": "Operator names included for this country."
},
"destination": {
"type": "string",
"description": "Country name (localized)."
},
"networks_unmatched": {
"type": "array",
"items": {
"type": "string"
},
"description": "Requested names this country does not have."
}
},
"additionalProperties": true
},
"description": "The countries on the eSIM in travel order with the networks of each."
},
"topup": {
"type": "object",
"properties": {
"how": {
"type": "string"
},
"kind": {
"enum": [
"route"
],
"type": "string"
}
},
"description": "How the customer adds data, days or a country later (not through the tools).",
"additionalProperties": true
},
"buy_url": {
"type": "string",
"description": "The route builder pre-set to exactly this route. Use verbatim."
},
"data_gb": {
"type": "integer",
"description": "ONE data pool for every country on the route (whole GB), used wherever the customer is."
},
"hotspot": {
"type": "boolean"
},
"message": {
"type": "string",
"description": "A ready-to-send line for the customer."
},
"currency": {
"type": "string"
},
"delivery": {
"type": "string",
"description": "How and when the eSIM arrives."
},
"countries": {
"type": "integer"
},
"next_step": {
"type": "string",
"description": "What the customer does now: open buy_url, press \"Get it\", pay."
},
"buy_button": {
"type": "string",
"description": "The label of the buy button on the page, in the language of the customer: name it exactly so."
},
"price_basis": {
"enum": [
"total"
],
"type": "string"
},
"not_available": {
"type": "array",
"items": {
"type": "string"
},
"description": "Requested countries variotrip cannot add (left out of the quote)."
},
"price_is_final": {
"type": "boolean"
},
"payment_methods": {
"type": "array",
"items": {
"type": "string"
}
},
"activation_trigger": {
"type": "string",
"description": "first_connection (anywhere on the route)"
}
},
"additionalProperties": true
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}Prompts
3 advertised
quote_my_route — Price one eSIM for my route
Quote one variotrip eSIM for a trip through several countries: the countries, one data pool in GB for all of them, and the trip length.
- route
- Countries in travel order, e.g. "Vietnam, Laos, Thailand" (required)
- gb
- Data for the whole trip in GB
- days
- Length of the whole trip in days (required)
size_my_trip — How much data for my trip?
Size and price a variotrip route from the trip: the countries, the days in each and how the customer uses data.
- route
- Countries with the days in each, e.g. "Japan 7 days, South Korea 5 days" (required)
- usage
- light, normal or heavy
compare_trip_lengths — Compare trip lengths
Show the same route priced for several trip lengths so the customer can pick the best fit.
- route
- Countries in travel order (required)
Resources
3 advertised
shop-facts — variotrip shop facts
How the route eSIM works: one data pool for every country, the trip length, the price rule, ranges, delivery, payment, hotspot, activation, top-ups (data, days or a country), e-mails, support, company — the same data get_shop_facts returns.
variotrip://shop-factsllms.txt — variotrip llms.txt
The shop’s guide for AI assistants: the route builder, policies, locales, links.
variotrip://llms.txtsetup-guide — eSIM installation guide
How a customer installs a variotrip eSIM on iPhone and Android, what happens at a border and when the days start.
variotrip://setup-guide30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 2797 ms
- 95th percentile latency
- 2797 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 2797 ms · metadata changed · 7 tool(s), 3 resource(s), 0 resource template(s), 3 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http variotrip-mcp https://variotrip.com/wp-json/variotrip/mcpCodex
codex mcp add variotrip-mcp --url https://variotrip.com/wp-json/variotrip/mcpCursor
{
"mcpServers": {
"variotrip-mcp": {
"url": "https://variotrip.com/wp-json/variotrip/mcp"
}
}
}Cline
{
"mcpServers": {
"variotrip-mcp": {
"type": "streamableHttp",
"url": "https://variotrip.com/wp-json/variotrip/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"variotrip-mcp": {
"type": "http",
"url": "https://variotrip.com/wp-json/variotrip/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http variotrip-mcp https://variotrip.com/wp-json/variotrip/mcpClaude Desktop
{
"mcpServers": {
"variotrip-mcp": {
"url": "https://variotrip.com/wp-json/variotrip/mcp"
}
}
}Windsurf
{
"mcpServers": {
"variotrip-mcp": {
"serverUrl": "https://variotrip.com/wp-json/variotrip/mcp"
}
}
}Let your agent find its tools
Find servers like variotrip MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other commerce servers
Do you run variotrip MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.