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

A
Description quality
100%
Schema completeness
97%
Naming quality
91%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,632Tokens (tool definitions)
~4.9 KBTypical response size
Significant attention impact (2.84% of 128k context)

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-http

What it can do

Tool inventory

Tools (7)

๐ŸŸข Read-only๐ŸŸก Write๐Ÿ”ด Deleteโšช Unknown
๐ŸŸข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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded7 tools