openvancamp/openvan-camp
Live road-trip and vanlife travel data for AI agents: whole-trip roadbooks, fuel prices in 170+ countries, toll roads, visa and vehicle-import rules, holidays, travel hazards, power plugs, customs, weather for van travel, food costs, currency, events and license plates. Skills for answering travel questions and for building on the free OpenVan.camp API, plus the hosted MCP server. No key.
Changelog
2026-10-26
Added — API 1.9.0: VanSky rankings and methodology
GET /api/vansky/weather/{code}/{city}now returns the city as on its page:today_scoreandweek_scorewith labels, the place among the cities of the country this week (rank),comfortable_days,worst_day,best_window, and for every forecast day the score breakdown (sub_scores,weighted_score,adjustments).include=hourlyadds 3-hour steps and sea data.GET /api/vansky/weather/{code}/cities: cities of a country ranked by the week score (as on the site) or by today (sort=today), withlimitandoffset.GET /api/vansky/ranking: countries ranked by the week score or by today (by=today), optionally in one region.GET /api/vansky/methodology: the VanSky formula as data (curves, weights, penalties, night and heat rules, bonuses, week score, country score), enough to recompute any score; a test keeps it equal to the calculator.
Changed — MCP server v0.11.0
get_city_travel_weatheradds the city's place among the cities of its country, comfortable days, the best stretch and the worst day, today's score breakdown, a forecast with day and night temperature and rain, and advice as text; the card shows the place in the country.list_best_weather_countriestakesperiod=week(the OpenVan.camp ranking) and reads the light/api/vansky/rankinginstead of every country.- Fixed:
region=north_america,south_americaandasiareturned no countries. New regionsmiddle_eastandcis.
Added — JS SDK v1.4.0, Python SDK v0.3.0
weather.cities(code, …),weather.ranking({ by, region, limit }),weather.methodology()andweather.city(code, slug, locale, { hourly: true })in JS;weather.city,weather.cities,weather.ranking,weather.methodologyin Python.
Changed — plugin v1.0.4
- Skills mention the week ranking (
period=week) and the new endpoints.
Changed — API 1.8.1: VanSky day and week scores
van_score(today) now equals the first forecast day (forecast[0].van_score): both are computed the same way, with sea temperature on every day and air quality on day 0. Before, today and the first day could differ by a point.precip_prob_max: where the weather model gives no probability, it is estimated from the precipitation amount. Before, such days came with 0 % even when rain was forecast, so rainy days scored too high; scores of rainy days and weeks are lower now.sunrise/sunsetare the local time of the place with its UTC offset (2026-10-26T07:38+04:00). Some country responses used to carry UTC times without an offset.GET /api/vansky/weather/{code}takeslocale; each recommendation hastextin that language (numbers in °C, km/h, m) next to the translationkey.- Forecast over Europe, the Mediterranean, North Africa and the Middle East now uses the 7 km ICON-EU model; temperatures near the coast are closer to the land.
2026-10-25
Added — API 1.8.0: typical weather (climate)
GET /api/vansky/climate?lat=&lng=&date=MM-DDandGET /api/vansky/climate/{code}/{city}: what the weather is usually like on any day of the year, anywhere on Earth. Each value is the median of 35 archive days (the date ±3 days over 2021–2025) from the ERA5 reanalysis, counted in local solar days on a 0.25° grid. The day gives day and night temperature, on how many of the 35 days there was precipitation (≥ 1.5 mm), the usual sky by daylight cloud cover, sea or large-lake water temperature, solar radiation (p25/median/p75) and the VanSky climate index; every response also has the 12 months (average clear / cloudy / overcast / precipitation days, temperatures, water, index) and the best month. Withoutdateyou get all 366 days as column arrays.- Data: ERA5, Copernicus Climate Change Service (C3S), CC BY 4.0; responses carry
data_license.
Added — MCP server v0.10.0
- New tool
get_city_climate(30 read-only tools): the typical weather on a date in a city or at any point, the 12 months and the best month, with an interactive card. Use it for dates beyond the 7-day forecast and for "when is the best time to go";get_city_travel_weatherstays for today and this week.
Added — JS SDK v1.3.0, Python SDK v0.2.0
weather.climate(lat, lng, { date })andweather.cityClimate(code, slug, { date, locale })in JS;weather.climate(lat, lng, date)andweather.city_climate(code, slug, date, locale)in Python.
Changed — plugin v1.0.3
openvan-travelroutes later dates and "best time to go" toget_city_climate;openvan-apilists the climate endpoints.
2026-10-23
Fixed — JS SDK v1.2.1, Python SDK v0.1.1
fuel.cheapest()normalised gallons by the country'sunitinstead of the grade'sunits[grade]. Colombia's record says liters while diesel and petrol are sold per gallon, so Colombia ranked 170th of 171 for cheap diesel instead of 18th.- JS types:
FuelCountry.units.
Fixed — MCP server v0.9.7
- The npm package now plans trips with the same roadbook engine as the hosted server: visa counting windows and dated entry rules, toll and vignette fixes, speed rules and disclosed coverage gaps (engine synced from openvan.camp).
- Dependencies: MCP SDK 1.32 on the hosted server too;
npm auditreports 0 issues.
Changed — plugin v1.0.2
openvan-travel: source links are offered where they help the user, instead of an instruction to end every answer with one.
Added — plugin v1.0.1 for Claude Code and Codex
- The repository installs as a plugin: the hosted MCP server plus two agent skills.
openvan-traveltells an agent which tool answers which travel question and that "no data" never means "nothing applies";openvan-apihelps it write code on this API — visible attribution,source, per-grade fuel units and currencies, caching, async roadbooks. - Claude Code:
/plugin install openvan-camp --marketplace openvancamp/openvan-camp-public-api. Codex:codex plugin marketplace add openvancamp/openvan-camp-public-api. Skills only:npx skills add openvancamp/openvan-camp-public-api. - CI validates the skills against the Agent Skills spec and keeps the plugin manifests on one version.
- Codex reads the MCP server from the root
mcp.json(streamable-http);.mcp.jsonstays for Claude Code.
2026-10-18
Fixed — MCP server v0.9.6
- Cards in hosts that pass only the text of a result (MCP inspectors, catalogs) no longer show a "No data for this request" header above real data; the header stays for errors and empty answers.
Changed — MCP server v0.9.5
- The internal
get_roadbook_build_statustool is no longer listed intools/listfor clients without cards (Glama and other catalogs); the trip card can still call it. - Food prices: country names and links follow the user's language.
Changed — MCP server v0.9.4
- MCP Registry name moved to the organization:
io.github.openvancamp/openvan-travel(wasio.github.Kopaev/openvan-travel, now deprecated). No changes to tools or the endpointhttps://mcp.openvan.camp/mcp.
2026-10-13
Added — MCP server v0.9.3
get_country_travel_brief— one call and one card for a country: entry rules and allowed stay for your passport, weather, fuel, road rules, public holidays for the next 30 days, safety, power plugs, customs, food prices and the country's licence-plate code (7 languages).list_best_weather_countriestakesregionandsort("where is it warmer");rank_food_pricesranks countries by food prices.plan_road_tripacceptskidsandpets: documents for children and animals reach the checklist. The trip answer and card add road rules for your vehicle, winter rules, international driving permit model (UN 1949/1968 conventions), emergency numbers, city entry rules (German Umweltplakette, French Crit'Air and low-emission zones) and Russian border crossings with opening hours and passport checks.
Fixed — MCP server v0.9.3
- Country names are normalised to ISO codes on input for every client (
Armenia,Турция,Deutschland, comma-separated lists); obsolete codes (DD, SU) are not accepted. nullfor an optional argument means "not set" (OpenAI strict mode and Python wrappers sendlocale: null).- A
limitabove the maximum is clamped instead of rejected. - Clients that do not send
Accept: text/event-streamno longer get HTTP 406. - Holidays: countries without traffic-specific data return public holidays as traffic days instead of "no holidays".
- Tool descriptions no longer use internal product names.
Added — MCP server v0.9.2
find_cheapest_fueltakesorder=most_expensive(with its own card in 7 languages).- Tool descriptions say when to call each tool in plain words — the same for Claude, ChatGPT and the Telegram bot.
Fixed — MCP server v0.9.2
get_active_fires: bounding box is longitude-first, as documented.
Fixed — MCP server v0.9.1
- The service is called "OpenVan.camp" everywhere (card buttons in 7 languages, tool answers, connector title).
- New card URI version, so hosts load the updated card texts.
2026-10-11
Added — MCP server v0.9.0
- Server
instructions,title,websiteUrland icons in the initialize result: the model is told to callplan_road_tripfirst for an A→B trip and to always passlocale. - Every tool declares an
outputSchemaand returnsstructuredContent. - "No data" answers (unknown country, event or city, missing customs/holiday/toll data, no road route) are normal results
with
structuredContent.nodatainstead ofisError; errors are kept for rate limits, outages and invalid arguments. - When the model omits
locale, ChatGPT'sopenai/localerequest meta is used. _meta.ui.domainis sent to ChatGPT only (Claude derives the card domain from the connector URL).- Trip card: passport chips (recalculates visas for another passport), full-screen mode where the host supports it,
recalculations are reported to the model (
ui/update-model-context, ChatGPT widget state) and survive a re-render. - Fuel card remembers the chosen currency.
Fixed — MCP server v0.8.3
- Card templates now live at versioned URIs (
ui://openvan/<version>/…): hosts cache a card's HTML by its URI, so card updates did not reach users who connected earlier. localeis the first argument of every tool with one clear description (the card's language and units follow it).- Localization: place names in trip and toll-route cards come in the conversation language; territories without an ISO
name (Northern Cyprus, Iraqi Kurdistan); visa confidence; event cards follow
locale; English-only source texts are hidden on other languages; numbers are formatted for the conversation language. - Readable errors instead of
HTTP 404 from /api/…; cards no longer hang on "building" when the tool fails; empty event/news results get a card; a vehicle class without tariff data says so instead of showing nothing. - City search ranks bigger places first (Paris → France, London → England).
Changed — MCP server v0.8.2
- Trip card: currency switch (EUR, USD and the currencies of the countries on the way); switching re-runs
plan_road_tripwith that currency. The typical-camper fuel estimate stays marked until the user sets their own consumption or fuel.
Changed — MCP server v0.8.1
plan_road_tripwithout a consumption estimates fuel for a typical camper (the same default as the OpenVan roadbook wizard, diesel 10 l/100 km) instead of leaving the fuel cost empty; the assumption is marked in the card and in the text.- The trip card has a Your vehicle panel: fuel type and consumption, and Recalculate re-runs
plan_road_tripfrom the card. - While the roadbook is being built, the trip card shows the build steps (route, tolls, borders and cities, campsites,
weather, news) with what was found — the same progress as the roadbook page. Powered by
get_roadbook_build_status, a helper tool visible only to the card (_meta.ui.visibility: ["app"]).
2026-10-10
Added — MCP server v0.8.0
- Interactive cards (MCP Apps) for every tool, rendered right in
the chat by Claude and ChatGPT: country and city weather with the best and toughest cities of the coming week and how the
index works, fuel and toll tables with a currency / vehicle-class switch, visa terms with a leave-by date, event and news
carousels, holidays, hazards, plugs, customs, license plates, and the whole trip. Hosts without MCP Apps get text as before.
Cards take the conversation language from the new optional
localeargument. plan_road_trip— a whole trip between 2–10 places built with the OpenVan roadbook: day-by-day plan with overnights, budget (fuel, tolls, vignettes, ferries), per-country entry and vehicle rules for the given passports and plates (Schengen 90/180 counter), holidays on the trip dates, safety, power, customs, the main warning, a checklist and a link to the shareable roadbook. The plan is computed by the roadbook's own engine (engine/, copied bynpm run sync-engine).get_city_travel_weather— travel weather of one city or town (score today and for the coming 7 days).get_country_travel_weathernow also returns the 3 best and 3 toughest cities for the coming week.- 27 tools total.
Fixed
- Currency and fuel tools reported the rates as updated "recently": the date is now read from
meta.updated_at.
Added — API (spec 1.7.0, 43 paths)
POST /api/roadbook/from-placesandGET /api/roadbook/{code}/status— roadbook from place names.GET /api/vansky/weather/{code}/{city}— VanSky weather of one city.
Added — SDK v1.2.0
ov.roadbook.create(),.status(),.plan()andov.weather.city().
2026-10-06
Changed — MCP server v0.7.1
search_stories:categoryis now a fixed list of the real categories (the old description listed slugs that never existed); each summary is cut to 300 characters;limitmax 20. The tool returns only a headline, a short summary and a link to the story page on openvan.camp, which credits the original publishers — never full article text.
Changed — MCP server v0.7.0
- Clearer tool names (internal brand names replaced with what the tool does):
get_vansky_weather→get_country_travel_weather,list_vansky_top→list_best_weather_countries,get_vanbasket→get_country_food_prices,compare_vanbasket→compare_food_prices. The hosted server atmcp.openvan.campstill accepts the old names; update scripts that call them. get_license_plate_imagedraws only a country's standard civilian plate: thetypeandcustomparameters are removed.check_license_platestill validates any plate type. The REST API is unchanged.estimate_route_tolls:waypointsare cities or countries, not street addresses.- Fuel tools: price units and currencies per fuel grade (imperial gallon, kg/m³ for gas grades are no longer compared per liter).
2026-10-04
Added
- License plate types in the MCP server (v0.6.2):
check_license_plateandget_license_plate_imagetaketype— e.g. on Russian platesdiplomatic(red),police(blue),military(black),taxi_bus(yellow).get_license_plate_countrylists the country's plate types with example numbers. An unknown type or a number outside the type's format returns a clear error instead of a bare 422. - API:
GET /api/plates/{code}/randomand/validatenow returntype— the plate type the number was generated or checked as (the requested key, or the country's default).openapi.yamlupdated.
2026-10-03
Added
-
Release workflow (
.github/workflows/release.yml): pushingmcp-server-vX.Y.Zorsdk-vX.Y.Zpublishes the package to npm with provenance, the MCP server to the official MCP Registry, and creates the GitHub Release. Can be re-run for an existing tag. -
README: npm / license / Glama badges and a Built with OpenVan section listing public projects that use the API, with a badge snippet for your own README.
-
MCP Registry:
io.github.Kopaev/openvan-travel0.6.0 published. -
Python SDK
openvan0.1.0 — the same 13 resources as the JavaScript SDK in snake_case, standard library only, Python 3.9+. Released with thepython-vX.Y.Ztag through PyPI Trusted Publishing. -
CI (
.github/workflows/ci.yml): Python SDK unit tests on 3.9 and 3.13, builds of the JS SDK and the MCP server.
Fixed (MCP server v0.6.1)
npx -y @openvancamp/mcp-serverfailed with "could not determine executable to run" in every earlier version: the package had two binaries (openvan-mcp,openvan-mcp-sse) and npx could not pick one. Amcp-serverbinary matching the package name is added, so the documented command and Claude Desktop / Cursor configs work. The old binary names still work.
Fixed (SDK v1.1.1)
weather.top()called/api/vansky/top, which does not exist, and always failed with 404. It now ranks/api/vansky/weatherbyvan_score.weather.score(code)sent?country=, which the API ignores, and returned all 164 countries. It now calls/api/vansky/weather/{code}and returns one country.- New
weather.all().
2026-10-02
Added
- Holidays API:
/api/holidays/countries,/api/holidays/countries/{code}— public holidays, school holidays (regional, with ISO 3166-2 codes) and official peak traffic days, 212 countries. - Travel hazards API:
/api/hazards/countries/{code}(UK FCDO advice level + current GDACS disasters) and/api/hazards/fires?bbox=(NASA FIRMS fires of the last 48 hours). - Power plugs API:
/api/electricity/countries,/api/electricity/countries/{code}— plug types, voltage, frequency and campsite hook-up connector, 229 countries. - Customs API:
/api/customs/countries,/api/customs/countries/{code}?from=— rules on entry by car, each with a verbatim official quote and source link. /api/plates/{code}/types— plate types of a country.openapi.yamlregenerated — spec 1.6.0, 40 paths.- MCP server v0.6.0 — five new read-only tools:
get_holidays,get_travel_hazards,get_active_fires,get_power_plugs,get_customs_rules, 25 tools total. - SDK v1.1.0 — new resources
tolls,visa,plates,holidays,hazards,electricity,customs, plusfuel.routeCost().OpenVanErrornow carries the API's message andbody. - Examples cover every section of the API.
Fixed
- SDK
fuel.cheapest()and all fuel examples converted every grade with the country currency; now they use the per-gradecurrenciesmap (Venezuela: diesel in USD, gasoline in VES), normalize gallons to liters and skip currencies without a rate instead of comparing local prices as EUR.
2026-09-29
Added
- Toll roads API:
/api/tolls/countries,/api/tolls/countries/{code},/api/tolls/route. Per-km rates by vehicle class (car, van up to 3.5 t, heavy over 3.5 t), vignettes, concession sections, toll bridges and tunnels, each with verification date and source; route estimate from place names as a EUR range with apartialflag.openapi.yamlregenerated — spec 1.4.0, 31 paths. - MCP server v0.5.0 — two new read-only tools:
get_toll_rates,estimate_route_tolls, 20 tools total.
Fixed (MCP server v0.5.1)
- Fuel prices: new
currenciesmap — the currency of each grade. Venezuela prices diesel in USD and gasoline in VES; converting every grade with the countrycurrencygave €376/l instead of €0.44. MCP fuel tools now convert per grade. - Toll route estimate: a country with no toll data is reported in
unknown_countries(withpartial: true) instead of a confident €0; newunchecked_countries,route_countriesandpoints(where each place name resolved). Ambiguous names now resolve to the largest city (Athens → Greece). Clear422/503errors with amessage. - MCP: every tool answer carries the CC BY 4.0 attribution; API error messages reach the agent
instead of a bare
HTTP 404.
2026-09-28
Changed
- Repository moved to
github.com/openvancamp/openvan-camp-public-api. The oldgithub.com/Kopaev/openvan-camp-public-apiURL redirects, so existing clones and links keep working. - MCP server v0.4.1 and SDK v1.0.3 — repository URL updated; no functional changes.
The MCP registry name stays
io.github.Kopaev/openvan-travel. smithery.yamlbrought up to date: 18 tools,@openvancamp/mcp-server.- README: endpoint table now lists route cost, weather, visa rules and news search; coverage numbers refreshed.
2026-09-27
Added
- License plates API:
/api/plates,/api/plates/{code},/api/plates/{code}/validate,/api/plates/{code}/random,/api/plates/{code}/plate.svg,/api/plates/{code}/plate.png. Plate images are drawn by the same engine as openvan.camp (typeface as vector outlines, no fonts to install);custom=1draws any text in the plate layout.openapi.yamlregenerated — spec 1.3.0, 28 paths. - MCP server v0.4.0 — four new read-only tools:
list_license_plate_countries,get_license_plate_country,check_license_plate,get_license_plate_image(PNG inline + SVG/PNG links), 18 tools total.
2026-09-01
Added
- Visa & border rules API documented in
openapi.yaml:/api/visa/check,/api/visa/route,/api/visa/passport/{code},/api/visa/map/{code},/api/visa/rank,/api/visa/vehicle/{place},/api/visa/history. The endpoints have been live since July; only the published contract lagged. - MCP server v0.3.0 — three new read-only tools:
check_visa_rules,get_route_visa_rules,get_vehicle_import_rules(14 tools total). Visa answers carryconfidenceand the source layer. - Also documented:
/api/news/search(semantic search),/api/news/digest,POST /api/route-cost,/api/event/{slug}/articles,/api/vanbasket/countries/{code},/api/vansky/weather/{code}.
Changed
openapi.yamlis now generated fromhttps://openvan.camp/.well-known/openapi.json— one source of truth instead of three specs drifting apart. It listed 10 of 22 public endpoints before this.- Fuel coverage figures corrected across the docs: 121 → 169 countries.
2026-07-27
Fixed
- MCP server v0.2.5 —
npx -y @openvancamp/mcp-servernow resolves a binary (addedmcp-serverbin alias). npm0.2.3and0.2.4were both published from trees with issues (missing bin alias, then a stale hardcodedVERSIONconstant in the User-Agent string) — both deprecated in favor of0.2.5. - Gallon-priced countries (US/EC/DO/HN/SV) now normalize to EUR/liter in
compare_fuel_pricesandcheapest_fueltools.
Added
mcp-server/Dockerfilefor Glama build evaluation.
2026-05-22
Changed
- MCP server v0.2.3 —
server.jsondescription now explicitly mentionsopenvan.campand links tohttps://openvan.camp/en/developers. Catalogs (Glama, Agenstry, PulseMCP, Smithery) render the description field, so this gives us a backlink from every downstream listing.
2026-04-08
Added
- Stories API — new endpoints for vanlife news stories:
GET /api/stories— paginated list withlocale,category,country,searchfiltersGET /api/story/{slug}— full story withsources[]array containing direct publisher links, source names, publication dates, and language codes- 8200+ stories in 7 languages (en, ru, de, fr, es, pt, tr)
Fixed
GET /api/vanbasket/countrieswas returning500 Internal Server Error— fixedGET /api/eventswithout?locale=was returning Russian content (inherited from web middleware) — now correctly defaults toen- Invalid
?locale=xxsilently falls back toeninstead of returning Russian (documented)
Changed
- Fuel prices coverage expanded: 87 → 121 countries
- VanBasket coverage: 92 countries (stable)
- Total events in database: 695
2026-03-28
Added
sourcesarray per country in/api/fuel/prices— lists the data sources used for weighted averages- Coverage expanded to 87 countries (added Pakistan, Nepal, Ghana)
Changed
- Replaced single
sourcefield withsourcesarray (array of strings) country_namenow always returns English regardless of client locale
2026-03-20
Removed
- Redundant fields
prices_eurandlocal_pricesfrom fuel prices response — usepricescombined with/api/currency/ratesto convert
2026-01-15
Added
price_changes— weekly delta for each fuel typeis_excluded— flag for heavily subsidized countries (Venezuela, Libya, etc.)sources_count— number of sources used for this country's weighted averagetotal_countriesin metadata is now dynamic
2025-12-01
Initial release
GET /api/fuel/prices— 40 countriesGET /api/currency/rates— 150+ currencies- CC BY 4.0 license