openvan-travel
Vanlife & RV data: fuel, tolls, visas, weather, currency, events, news, license plates. openvan.camp
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": {
"openvan-travel": {
"url": "https://mcp.openvan.camp/mcp"
}
}
}Remote endpoints
https://mcp.openvan.camp/mcpstreamable-httpWhat it can do
Tool inventory
Tools (20)
🟢get_fuel_prices(country_code)
Current retail fuel prices for all API-supported countries. Supports the same price keys as /api/fuel/prices, including gasoline, diesel, LPG, CNG, E85, kerosene and grade variants. Pass country_code to get one country in detail; omit it for a summary list.
Input Schema
{
"type": "object",
"properties": {
"country_code": {
"type": "string",
"minLength": 2,
"maxLength": 2,
"description": "ISO 3166-1 alpha-2 country code, e.g. DE. If omitted, returns all countries."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢compare_fuel_prices(country_codes, fuel_type)
Compare current prices for one fuel type across 2-10 countries. Returns sorted table cheapest-first.
Input Schema
{
"type": "object",
"properties": {
"country_codes": {
"type": "array",
"items": {
"type": "string",
"minLength": 2,
"maxLength": 2
},
"minItems": 2,
"maxItems": 10,
"description": "Array of 2-10 ISO 3166-1 alpha-2 country codes to compare."
},
"fuel_type": {
"type": "string",
"enum": [
"gasoline_regular",
"gasoline",
"gasoline_premium",
"gasoline_super",
"diesel_regular",
"diesel",
"diesel_premium",
"lpg",
"cng",
"e85",
"kerosene",
"premium"
],
"default": "diesel",
"description": "Fuel type to compare. Uses the same keys as /api/fuel/prices prices."
}
},
"required": [
"country_codes"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢find_cheapest_fuel(region, fuel_type, limit)
Find the cheapest countries for a given fuel type in a region (or worldwide). Useful for route planning.
Input Schema
{
"type": "object",
"properties": {
"region": {
"type": "string",
"enum": [
"europe",
"asia",
"africa",
"north_america",
"south_america",
"oceania",
"world"
],
"default": "world",
"description": "Region to search. Default: world (all countries)."
},
"fuel_type": {
"type": "string",
"enum": [
"gasoline_regular",
"gasoline",
"gasoline_premium",
"gasoline_super",
"diesel_regular",
"diesel",
"diesel_premium",
"lpg",
"cng",
"e85",
"kerosene",
"premium"
],
"default": "diesel",
"description": "Fuel type. Uses the same keys as /api/fuel/prices prices."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"default": 5,
"description": "How many cheapest countries to return."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_vansky_weather(country_code)
Get VanSky vanlife weather suitability score (0-100) for a country: van_score, sleep_score, solar yield, driving conditions, awning safety, condensation risk, 7-day forecast.
Input Schema
{
"type": "object",
"properties": {
"country_code": {
"type": "string",
"minLength": 2,
"maxLength": 2,
"description": "ISO 3166-1 alpha-2 country code, e.g. DE."
}
},
"required": [
"country_code"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_vansky_top(limit)
List the top N countries with the highest VanSky van-travel suitability score today.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"default": 10,
"description": "How many top-scoring countries to return."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_events(status, type, country, search, locale, ...)
List vanlife events: expos (Caravan Salon), festivals, meetups, forums, road trips. Filter by status, type, country, or free-text search.
Input Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"upcoming",
"ongoing",
"past",
"all"
],
"default": "upcoming",
"description": "Event time status."
},
"type": {
"type": "string",
"enum": [
"expo",
"festival",
"forum",
"meetup",
"roadtrip"
],
"description": "Event type filter."
},
"country": {
"type": "string",
"minLength": 2,
"maxLength": 2,
"description": "ISO 3166-1 alpha-2 country code."
},
"search": {
"type": "string",
"description": "Free-text search in event name."
},
"locale": {
"type": "string",
"enum": [
"en",
"ru",
"de",
"fr",
"es",
"pt",
"tr"
],
"default": "en",
"description": "Language for localized fields."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 15
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_event(slug, locale)
Get full details for a single vanlife event by its slug.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Event slug, e.g. caravan-salon-duesseldorf-2026."
},
"locale": {
"type": "string",
"enum": [
"en",
"ru",
"de",
"fr",
"es",
"pt",
"tr"
],
"default": "en"
}
},
"required": [
"slug"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢search_stories(search, category, country, locale, limit)
Search aggregated vanlife news stories (7 languages, 400+ sources). Filter by search query, category, country, locale.
Input Schema
{
"type": "object",
"properties": {
"search": {
"type": "string",
"description": "Full-text search in story title."
},
"category": {
"type": "string",
"description": "Category slug, e.g. camping, travel, gear, festival, industry."
},
"country": {
"type": "string",
"minLength": 2,
"maxLength": 2,
"description": "ISO 3166-1 alpha-2 country code."
},
"locale": {
"type": "string",
"enum": [
"en",
"ru",
"de",
"fr",
"es",
"pt",
"tr"
],
"default": "en"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 10
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢compare_vanbasket(from, to)
Compare food price index between two countries (world average = 100). Higher number = more expensive food.
Input Schema
{
"type": "object",
"properties": {
"from": {
"type": "string",
"minLength": 2,
"maxLength": 2,
"description": "Home country ISO alpha-2 code."
},
"to": {
"type": "string",
"minLength": 2,
"maxLength": 2,
"description": "Destination country ISO alpha-2 code."
}
},
"required": [
"from",
"to"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_vanbasket(country_code)
Get VanBasket food price index details for one country.
Input Schema
{
"type": "object",
"properties": {
"country_code": {
"type": "string",
"minLength": 2,
"maxLength": 2,
"description": "ISO 3166-1 alpha-2 country code."
}
},
"required": [
"country_code"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_currency_rate(from, to, amount)
Convert an amount between two currencies using live rates (150+ currencies, daily updates).
Input Schema
{
"type": "object",
"properties": {
"from": {
"type": "string",
"minLength": 3,
"maxLength": 3,
"description": "Source currency ISO 4217 code, e.g. EUR."
},
"to": {
"type": "string",
"minLength": 3,
"maxLength": 3,
"description": "Target currency ISO 4217 code, e.g. USD."
},
"amount": {
"type": "number",
"exclusiveMinimum": 0,
"default": 1,
"description": "Amount to convert. Default 1."
}
},
"required": [
"from",
"to"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢check_visa_rules(passport, destination, weight, plate)
Entry rules for one passport and destination: entry mode, allowed length of stay, how the days are counted (per entry or in a rolling window), whether a visa run resets the counter, and temporary vehicle import. Answers carry a confidence level and source — pass those on instead of stating a rule as certain.
Input Schema
{
"type": "object",
"properties": {
"passport": {
"type": "string",
"minLength": 2,
"maxLength": 2,
"description": "ISO 3166-1 alpha-2 code of the passport, e.g. RU."
},
"destination": {
"type": "string",
"description": "Destination: ISO alpha-2 code, slug or zone code, e.g. TR."
},
"weight": {
"type": "string",
"enum": [
"le35",
"gt35"
],
"description": "Vehicle weight class for the vehicle rule: le35 (<=3.5 t) or gt35."
},
"plate": {
"type": "string",
"enum": [
"eu",
"non_eu",
"eaeu",
"third"
],
"description": "Plate origin for the green card rule."
}
},
"required": [
"passport",
"destination"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_route_visa_rules(countries, passports, weight)
Visa rules for every country of a route in one call, for up to 10 passports at once, plus the tightest leg of the route.
Input Schema
{
"type": "object",
"properties": {
"countries": {
"type": "string",
"description": "Countries in travel order, comma separated ISO alpha-2 codes or slugs, up to 12, e.g. RU,GE,TR."
},
"passports": {
"type": "string",
"description": "Passports to answer for, comma separated, up to 10, e.g. RU,BY."
},
"weight": {
"type": "string",
"enum": [
"le35",
"gt35"
],
"description": "Vehicle weight class for the vehicle rules."
}
},
"required": [
"countries"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_vehicle_import_rules(country)
Temporary admission rules for a foreign-plated vehicle in one country: allowed days, per entry or per window, carnet requirement, green card. A country without a rule we can stand behind returns nothing rather than a guess.
Input Schema
{
"type": "object",
"properties": {
"country": {
"type": "string",
"description": "Country: ISO alpha-2 code, slug or zone code, e.g. georgia or GE."
}
},
"required": [
"country"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_toll_rates(country_code, locale)
Toll reference for one country: payment system, per-km rates by vehicle class (car, campervan up to 3.5 t, over 3.5 t), vignette prices for every duration, concession sections and toll bridges/tunnels, each with verification date and source.
Input Schema
{
"type": "object",
"properties": {
"country_code": {
"type": "string",
"minLength": 2,
"maxLength": 2,
"description": "ISO 3166-1 alpha-2 country code, e.g. FR."
},
"locale": {
"type": "string",
"description": "Language of names: en, ru, de, fr, es, pt, tr."
}
},
"required": [
"country_code"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢estimate_route_tolls(waypoints, vehicle_class, locale)
Estimate toll cost for a road trip from 2-10 place names: per-km tolls, vignettes, bridges and tunnels, as a EUR range with a per-country breakdown. Flags partial results when a country on the route has no data.
Input Schema
{
"type": "object",
"properties": {
"waypoints": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"minItems": 2,
"maxItems": 10,
"description": "2-10 place names in travel order: cities, addresses or countries (a country means its capital), e.g. [\"Rome\", \"Paris\"]."
},
"vehicle_class": {
"type": "string",
"enum": [
"car",
"van",
"heavy"
],
"default": "van",
"description": "car; van = campervan/motorhome up to 3.5 t (default); heavy = over 3.5 t."
},
"locale": {
"type": "string",
"description": "Language of bridge/section names: en, ru, de, fr, es, pt, tr."
}
},
"required": [
"waypoints"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_license_plate_countries(locale)
Countries whose license plates are available: international code, number of regions and an example plate.
Input Schema
{
"type": "object",
"properties": {
"locale": {
"type": "string",
"enum": [
"en",
"ru",
"de",
"es",
"fr",
"pt",
"tr"
],
"description": "Language of country and region names. Default en."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_license_plate_country(country, locale)
How a country's license plate looks and reads (standard, size, format) and every region code on its plates, grouped by region — e.g. which region is 77 or 199 on Russian plates.
Input Schema
{
"type": "object",
"properties": {
"country": {
"type": "string",
"minLength": 2,
"maxLength": 2,
"description": "ISO 3166-1 alpha-2 country code, e.g. RU."
},
"locale": {
"type": "string",
"enum": [
"en",
"ru",
"de",
"es",
"fr",
"pt",
"tr"
],
"description": "Language of country and region names. Default en."
}
},
"required": [
"country"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢check_license_plate(country, number, region, locale)
Validate a plate number against the country's format (look-alike letters are normalized) and say which region its code belongs to. Never identifies the owner or the vehicle's location.
Input Schema
{
"type": "object",
"properties": {
"country": {
"type": "string",
"minLength": 2,
"maxLength": 2,
"description": "ISO 3166-1 alpha-2 country code, e.g. RU."
},
"number": {
"type": "string",
"description": "Plate number without the region, e.g. A123BC. Look-alike Latin letters are normalized."
},
"region": {
"type": "string",
"description": "Region code if the country shows one, e.g. 77."
},
"locale": {
"type": "string",
"enum": [
"en",
"ru",
"de",
"es",
"fr",
"pt",
"tr"
],
"description": "Language of country and region names. Default en."
}
},
"required": [
"country",
"number"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_license_plate_image(country, number, region, custom)
Draw a license plate as an image (PNG shown inline, plus SVG/PNG links) exactly as openvan.camp renders it. custom=true draws any text, e.g. a name, in the plate layout.
Input Schema
{
"type": "object",
"properties": {
"country": {
"type": "string",
"minLength": 2,
"maxLength": 2,
"description": "ISO 3166-1 alpha-2 country code, e.g. RU."
},
"number": {
"type": "string",
"description": "Plate number without the region, or any text with custom=true."
},
"region": {
"type": "string",
"description": "Region code if the country shows one."
},
"custom": {
"type": "boolean",
"description": "Draw any text (e.g. a name) in the plate layout instead of requiring a real format."
}
},
"required": [
"country",
"number"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence