OpenVan MCP Server
OpenVan.camp Public API
Free, no-auth API for vanlife data: fuel prices, route fuel cost, currency rates, food cost index, weather suitability scores, visa and vehicle-import rules, vanlife events, news stories, and license plates of the world — all in one place, no registration required.
Base URL: https://openvan.camp
Auth: None required
CORS: Enabled
License: data is CC BY 4.0; code in this repository (SDK, MCP server, examples) is MIT
JavaScript/TypeScript SDK: @openvancamp/sdk — npm install @openvancamp/sdk. Zero-config, typed, Node.js / browser / edge. SDK docs →
MCP Server (for AI agents): mcp-server/ — 18 read-only tools, hosted at https://mcp.openvan.camp/mcp, or locally npx -y @openvancamp/mcp-server for Claude Desktop / Cursor / Windsurf. Install docs → · AI agents guide →
Gemini CLI extension: install this repository with gemini extensions install https://github.com/openvancamp/openvan-camp-public-api. The root gemini-extension.json connects Gemini CLI directly to the hosted OpenVan MCP server; no API key is required.
Custom GPT: OpenVan Travel Assistant — live in ChatGPT GPT Store.
What is authoritative
Resource | Purpose |
This README | Quick overview and code examples |
Interactive documentation with "Try it out" | |
Full OpenAPI 3.0 contract (always up to date) | |
Postman collection |
The OpenAPI spec at /docs.openapi is generated from the live codebase and is the authoritative contract. Numbers in this README (country counts, story totals) are approximate and updated periodically — check /api/fuel/prices meta or /api/stories pagination for current totals.
Related MCP server: euenergy-mcp
Endpoints
Endpoint | Description | Coverage |
| Retail fuel prices (gasoline, diesel, LPG, E85) | 160+ countries |
| Fuel cost for a route of 2–10 waypoints, per-country prices | — |
| Exchange rates relative to EUR | 150+ currencies |
| Food price index relative to world average (100 = world avg) | 90+ countries |
| Compare food costs between two countries | — |
| Single country + historical snapshots | — |
| Vanlife weather suitability scores (0–100) with 7-day forecast | 160+ countries |
| One country, with marine and solar data | — |
| Entry rules: entry mode, length of stay, how days are counted, vehicle import | 199 destinations |
| Visa rules for a whole route, up to 10 passports | — |
| All destinations for one passport | — |
| Temporary vehicle import rules for a country | — |
| Vanlife events: expos, festivals, meetups, road trips | 1,100+ events |
| Full event details with geo coordinates | — |
| Source articles linked to an event | — |
| News stories aggregated from 200+ publishers | 31,000+ stories |
| Full story with all source articles and direct links | — |
| Semantic search over stories | — |
| License plates of the world: formats, region codes, example plates | 199 countries |
| Ready plate image (also | — |
Quick Start
# Fuel prices
curl https://openvan.camp/api/fuel/prices
# Currency rates (EUR-based)
curl https://openvan.camp/api/currency/rates
# Food price index
curl https://openvan.camp/api/vanbasket/countries
# Upcoming vanlife events in Germany
curl "https://openvan.camp/api/events?country=DE&status=upcoming&locale=en"
# Latest vanlife news stories in English
curl "https://openvan.camp/api/stories?locale=en"Fuel Prices — /api/fuel/prices
Weekly retail prices from 45+ official government sources.
Cache TTL: 6 hours. Please poll no faster than every 10 minutes.
curl https://openvan.camp/api/fuel/prices{
"success": true,
"data": {
"DE": {
"country_code": "DE",
"country_name": "Germany",
"region": "europe",
"currency": "EUR",
"local_currency": "EUR",
"unit": "liter",
"prices": {
"gasoline": 1.79,
"diesel": 1.69,
"lpg": 0.89,
"e85": null,
"premium": null
},
"price_changes": { "gasoline": -0.02, "diesel": 0.01, "lpg": 0.0 },
"fetched_at": "2026-04-05T10:00:00+00:00",
"sources": ["EU Weekly Oil Bulletin", "Fuelo.net"],
"sources_count": 2,
"is_excluded": false
}
},
"meta": {
"total_countries": 121,
"updated_at": "2026-04-05 10:00:00",
"cache_ttl_hours": 6
}
}Notes:
unitis"liter"for most countries,"gallon"for US and Ecuadoris_excluded: truemeans the country has heavy fuel subsidies (prices don't reflect market rates)price_changes= delta vs last week's prices
Currency Rates — /api/currency/rates
EUR-based exchange rates from multiple open-source providers with automatic fallback.
Cache TTL: 25 hours. Refreshed daily at 07:00 UTC.
curl https://openvan.camp/api/currency/rates{
"success": true,
"rates": {
"EUR": 1,
"USD": 1.08,
"GBP": 0.85,
"TRY": 38.5,
"GEL": 2.95,
"KZT": 510,
"RUB": 98.5
},
"cached": true,
"updated_at": "2026-04-08T07:00:00+00:00"
}Convert to any currency:
const priceInUSD = (priceEUR / rates.EUR) * rates.USD;
const priceInTRY = (priceEUR / rates.EUR) * rates.TRY;VanBasket Food Price Index — /api/vanbasket/*
Relative cost of a food basket compared to world average (World = 100).
Based on World Bank ICP 2021 data, adjusted with IMF CPI.
Data source: CC BY 4.0
# All countries
curl https://openvan.camp/api/vanbasket/countries
# Compare two countries
curl "https://openvan.camp/api/vanbasket/compare?from=DE&to=TR"
# Single country with historical snapshots
curl https://openvan.camp/api/vanbasket/countries/DE{
"success": true,
"data": {
"CH": { "country_code": "CH", "country_name": "Switzerland", "vanbasket_index": 162.3, "pct_vs_world": 62.3 },
"DE": { "country_code": "DE", "country_name": "Germany", "vanbasket_index": 118.7, "pct_vs_world": 18.7 },
"TR": { "country_code": "TR", "country_name": "Turkey", "vanbasket_index": 82.4, "pct_vs_world": -17.6 },
"GE": { "country_code": "GE", "country_name": "Georgia", "vanbasket_index": 64.1, "pct_vs_world": -35.9 }
},
"meta": {
"total_countries": 92,
"world_avg": 100,
"base_year": 2021,
"source": "World Bank ICP 2021",
"license": "CC BY 4.0"
}
}Compare response:
{
"success": true,
"data": {
"from": { "country_code": "DE", "country_name": "Germany", "vanbasket_index": 118.7 },
"to": { "country_code": "TR", "country_name": "Turkey", "vanbasket_index": 82.4 },
"diff_percent": -30.6,
"budget_100": 69,
"cheaper": true
}
}budget_100: if you spend €100 on food in the from country, you'd spend €69 in the to country.
Events — /api/events
Vanlife events: exhibitions, festivals, meetups, road trips. Updated in real time.
Query params:
Param | Values | Default |
|
|
|
|
|
|
|
| — |
| ISO 3166-1 alpha-2 | — |
| text | — |
| integer |
|
| integer (max 100) |
|
# Upcoming events in Germany
curl "https://openvan.camp/api/events?country=DE&status=upcoming&locale=en"
# Event details
curl "https://openvan.camp/api/event/fit-camper-2026?locale=en"
# Source articles linked to an event
curl "https://openvan.camp/api/event/fit-camper-2026/articles?locale=en"{
"events": [
{
"id": 493,
"slug": "fit-camper-2026",
"event_name": "Fit Your Camper",
"event_type": "expo",
"event_type_label": "Exhibition",
"start_date": "2026-04-09",
"end_date": "2026-04-12",
"city": "Bologna",
"country_code": "IT",
"country": { "code": "it", "name": "Italy", "flag_emoji": "🇮🇹" },
"venue_name": "BolognaFiere",
"status": "upcoming",
"articles_count": 7,
"url": "https://openvan.camp/en/event/fit-camper-2026"
}
],
"pagination": { "total": 48, "page": 1, "limit": 30, "pages": 2 }
}Notes:
Unknown or missing
localesilently falls back toen/api/event/{slug}/articlesreturns source articles filtered bylocale; if none match, all articles are returned (may be in the original publisher language)
Stories / News — /api/stories
Vanlife news stories aggregated from 200+ publishers and translated into 7 languages. Each story clusters multiple source articles covering the same topic.
Query params:
Param | Values | Default |
|
|
|
| category slug (e.g. | — |
| ISO 3166-1 alpha-2 | — |
| text | — |
| integer |
|
| integer (max 50) |
|
# Latest stories in English
curl "https://openvan.camp/api/stories?locale=en"
# German vanlife news in Germany
curl "https://openvan.camp/api/stories?locale=de&country=DE"
# Full story with all source links
curl "https://openvan.camp/api/story/free-overnight-parking-netherlands?locale=en"{
"slug": "free-overnight-parking-netherlands",
"title": "Free Overnight Parking for Motorhomes in the Netherlands",
"summary": "The Dutch motorhome community is pushing for more designated free overnight spots...",
"image_url": "https://...",
"category": { "slug": "travel", "name": "Travel" },
"countries": [{ "code": "nl", "name": "Netherlands", "flag_emoji": "🇳🇱" }],
"first_published_at": "2026-04-01T10:00:00+00:00",
"last_updated_at": "2026-04-03T08:00:00+00:00",
"articles_count": 5,
"url": "https://openvan.camp/en/news/travel/free-overnight-parking-netherlands",
"sources": [
{
"title": "Gratis overnachten in je camper: de beste plekken",
"original_url": "https://www.campermagazine.nl/overnachten/gratis-plaatsen",
"source_name": "CamperMagazine.nl",
"published_at": "2026-04-01T10:00:00+00:00",
"language": "nl",
"image_url": "https://..."
}
]
}Notes:
titleandsummaryare translated to the requestedlocalesources[].languageis always the original publisher language, regardless oflocalesources[].original_urlis the direct link to the publisher article
License Plates — /api/plates/*
License plates of the world: plate formats, every region code grouped by region (with ISO 3166-2 units), validation, and the plate itself as an image. Images are drawn by the same engine as openvan.camp/en/license-plates — the plate typeface is inside as vector outlines, so there are no fonts to install.
The simplest integration is a plain image:
<img src="https://openvan.camp/api/plates/ru/plate.svg?number=A123BC®ion=77" alt="A123BC 77">plate.png?width=800— PNG, 200–2000 px wide, transparent backgroundLook-alike Latin letters are normalized (
A123BC→А123ВСon Russian plates)A number outside the country format returns
422; addcustom=1to draw any text (e.g. a name)Images are served
Cache-Control: public, max-age=31536000, immutable; image URLs returned by the API carryv=<engine version>, so an engine update arrives under a new URL
curl https://openvan.camp/api/plates # countries
curl "https://openvan.camp/api/plates/ru?locale=en" # format, regions, codes, engine
curl "https://openvan.camp/api/plates/ru/validate?number=A123BC®ion=799" # valid? which region?
curl https://openvan.camp/api/plates/ru/random # random plate + image URLsTo draw plates in the browser yourself (e.g. an interactive generator), load the scripts listed in
data.engine.scripts of /api/plates/{code} in order and call
Plates.render(code, number, region) → {svg} (an SVG element) or {error}.
Images and the engine are available for countries whose plate typeface may be redistributed
(glyphs_license: free or sharealike); for the rest the data endpoints still work.
Rate limit: 60 requests/minute for images and /random, 120 for the rest.
Response Format
All JSON endpoints follow a consistent envelope:
{ "success": true, "data": { ... }, "meta": { ... }, "_attribution": { ... } }Every response includes an _attribution object:
"_attribution": {
"data_source": "openvan.camp",
"license": "CC BY 4.0",
"attribution_url": "https://openvan.camp/",
"attribution_html": "Data: <a href=\"https://openvan.camp/\">OpenVan.camp</a> (CC BY 4.0)"
}Errors:
{ "success": false, "error": "Description of the error." }If you call without Accept: application/json, some error responses may return HTML. Always send the header:
Accept: application/jsonRate Limiting
120 requests per minute per IP. Please be responsible:
Cache fuel prices for at least 6 hours
Cache currency rates for at least 1 hour
Cache stories/events for at least 15 minutes
Attribution
Required by CC BY 4.0. Suggested format:
Data: <a href="https://openvan.camp/">OpenVan.camp</a> — CC BY 4.0Identify your integration
Pass ?source=yoursite.com with any request — no registration needed. Your value is echoed back as _attribution.your_source so you can verify it's working:
curl "https://openvan.camp/api/fuel/prices?source=myapp.com"{
"success": true,
"data": { "..." },
"meta": { "..." },
"_attribution": {
"data_source": "openvan.camp",
"license": "CC BY 4.0",
"attribution_url": "https://openvan.camp/",
"attribution_html": "Data: <a href=\"https://openvan.camp/\">OpenVan.camp</a> (CC BY 4.0)",
"your_source": "myapp.com"
}
}This helps us understand how the data is being used and acknowledge active projects.
JavaScript / TypeScript SDK
npm install @openvancamp/sdk
# or: pnpm add @openvancamp/sdkimport { OpenVan } from "@openvancamp/sdk";
const ov = new OpenVan();
// Cheapest diesel in Europe (top 5, EUR-normalized)
const top5 = await ov.fuel.cheapest("diesel", 5);
top5.forEach(c => console.log(c.country_name, c.prices.diesel, c.currency));
// Is Portugal cheaper than Germany for van living?
const comp = await ov.basket.compare("DE", "PT");
console.log(`Portugal is ${Math.abs(comp.diff_percent)}% cheaper`);
// Vanlife weather suitability — top 10 countries right now
const weather = await ov.weather.top({ limit: 10 });ESM-native, fully typed (TypeScript included), works in Node.js ≥ 18, browser, Cloudflare Workers, Deno, Bun. No API key.
npm: @openvancamp/sdk · Full SDK docs →
Resources
Interactive docs: openvan.camp/docs
OpenAPI 3.0 spec: https://openvan.camp/docs.openapi
Postman collection: https://openvan.camp/docs.postman
JavaScript SDK: https://www.npmjs.com/package/@openvancamp/sdk
Developer page: openvan.camp/en/developers
For AI agents (MCP, Custom GPT, llms.txt): openvan.camp/ai
The same data on the site
Fuel prices by country · Passport & visa checker · Roadbook trip planner · VanSky weather · Food cost index · Vanlife events · Vanlife news
This server cannot be deployed
Maintenance
Related MCP Connectors
Remote streamable-HTTP MCP server running on a single Cloudflare Worker. Your assistant gets live Airbnb, Amazon, Booking.com, Google Flights, Maps and Reddit data, social search on X, Instagram and TikTok, the Meta Ad Library, and image/video generation without any keys. Connect your own accounts to let it send WhatsApp or Telegram messages, work an IMAP inbox, manage Meta Ads campaigns and publish to X and LinkedIn. OAuth 2.1 with PKCE; stored credentials are AES-256-GCM encrypted.
17 Base data tools for agents over Streamable HTTP MCP. Pay per call in USDC via x402; no API key.
AI Reasoning Cache & Consensus Layer with 11 MCP tools via Streamable HTTP.
The official Model Context Protocol server for Ambee. It gives any MCP-compatible AI assistant — Claude, ChatGPT, Cursor, VS Code, Ollama, and more direct access to live air quality, pollen, and weather data. To get started, including information on signing up and obtaining your Ambee key, check out the Ambee documentation on https://docs.ambeedata.com
Related MCP Servers
- FlicenseAqualityDmaintenanceA Model Context Protocol (MCP) server that provides weather data using the OpenWeather One Call API 3.0. This server allows AI agents to access current weather, forecasts, and historical weather data for any location.313 npm-
- FlicenseNot gradedqualityCmaintenanceA read-only MCP server that exposes European day-ahead electricity prices for ~41 bidding zones via tools like hourly prices, cheapest hours, current price, and cross-zone summary, enabling AI agents to query energy market data.1-
- AlicenseCqualityDmaintenanceA Model Context Protocol server exposing 58 online tools (crypto, data, image, text, etc.) and workflow execution, enabling MCP clients like Claude Desktop to invoke them via natural language.584 npmMIT
- FlicenseAqualityCmaintenanceMCP server that exposes real-time weather, forecasts, air quality, and multi-city comparison tools via the OpenWeather API for LLM agents.4-