Skip to content

openvancamp/openvan-camp

v1.0.4MIT

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_score and week_score with 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=hourly adds 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), with limit and offset.
  • 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_weather adds 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_countries takes period=week (the OpenVan.camp ranking) and reads the light /api/vansky/ranking instead of every country.
  • Fixed: region=north_america, south_america and asia returned no countries. New regions middle_east and cis.

Added — JS SDK v1.4.0, Python SDK v0.3.0

  • weather.cities(code, …), weather.ranking({ by, region, limit }), weather.methodology() and weather.city(code, slug, locale, { hourly: true }) in JS; weather.city, weather.cities, weather.ranking, weather.methodology in 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 / sunset are 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} takes locale; each recommendation has text in that language (numbers in °C, km/h, m) next to the translation key.
  • 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-DD and GET /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. Without date you 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_weather stays for today and this week.

Added — JS SDK v1.3.0, Python SDK v0.2.0

  • weather.climate(lat, lng, { date }) and weather.cityClimate(code, slug, { date, locale }) in JS; weather.climate(lat, lng, date) and weather.city_climate(code, slug, date, locale) in Python.

Changed — plugin v1.0.3

  • openvan-travel routes later dates and "best time to go" to get_city_climate; openvan-api lists the climate endpoints.

2026-10-23

Fixed — JS SDK v1.2.1, Python SDK v0.1.1

  • fuel.cheapest() normalised gallons by the country's unit instead of the grade's units[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 audit reports 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-travel tells an agent which tool answers which travel question and that "no data" never means "nothing applies"; openvan-api helps 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.json stays 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_status tool is no longer listed in tools/list for 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 (was io.github.Kopaev/openvan-travel, now deprecated). No changes to tools or the endpoint https://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_countries takes region and sort ("where is it warmer"); rank_food_prices ranks countries by food prices.
  • plan_road_trip accepts kids and pets: 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.
  • null for an optional argument means "not set" (OpenAI strict mode and Python wrappers send locale: null).
  • A limit above the maximum is clamped instead of rejected.
  • Clients that do not send Accept: text/event-stream no 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_fuel takes order=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, websiteUrl and icons in the initialize result: the model is told to call plan_road_trip first for an A→B trip and to always pass locale.
  • Every tool declares an outputSchema and returns structuredContent.
  • "No data" answers (unknown country, event or city, missing customs/holiday/toll data, no road route) are normal results with structuredContent.nodata instead of isError; errors are kept for rate limits, outages and invalid arguments.
  • When the model omits locale, ChatGPT's openai/locale request meta is used.
  • _meta.ui.domain is 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.
  • locale is 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_trip with 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_trip without 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_trip from 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 locale argument.
  • 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 by npm 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_weather now 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-places and GET /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() and ov.weather.city().

2026-10-06

Changed — MCP server v0.7.1

  • search_stories: category is now a fixed list of the real categories (the old description listed slugs that never existed); each summary is cut to 300 characters; limit max 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 at mcp.openvan.camp still accepts the old names; update scripts that call them.
  • get_license_plate_image draws only a country's standard civilian plate: the type and custom parameters are removed. check_license_plate still validates any plate type. The REST API is unchanged.
  • estimate_route_tolls: waypoints are 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_plate and get_license_plate_image take type — e.g. on Russian plates diplomatic (red), police (blue), military (black), taxi_bus (yellow). get_license_plate_country lists 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}/random and /validate now return type — the plate type the number was generated or checked as (the requested key, or the country's default). openapi.yaml updated.

2026-10-03

Added

  • Release workflow (.github/workflows/release.yml): pushing mcp-server-vX.Y.Z or sdk-vX.Y.Z publishes 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-travel 0.6.0 published.

  • Python SDK openvan 0.1.0 — the same 13 resources as the JavaScript SDK in snake_case, standard library only, Python 3.9+. Released with the python-vX.Y.Z tag 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-server failed 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. A mcp-server binary 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/weather by van_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.yaml regenerated — 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, plus fuel.routeCost(). OpenVanError now carries the API's message and body.
  • 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-grade currencies map (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 a partial flag. openapi.yaml regenerated — 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 currencies map — the currency of each grade. Venezuela prices diesel in USD and gasoline in VES; converting every grade with the country currency gave €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 (with partial: true) instead of a confident €0; new unchecked_countries, route_countries and points (where each place name resolved). Ambiguous names now resolve to the largest city (Athens → Greece). Clear 422/503 errors with a message.
  • 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 old github.com/Kopaev/openvan-camp-public-api URL 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.yaml brought 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=1 draws any text in the plate layout. openapi.yaml regenerated — 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 carry confidence and 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.yaml is now generated from https://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-server now resolves a binary (added mcp-server bin alias). npm 0.2.3 and 0.2.4 were both published from trees with issues (missing bin alias, then a stale hardcoded VERSION constant in the User-Agent string) — both deprecated in favor of 0.2.5.
  • Gallon-priced countries (US/EC/DO/HN/SV) now normalize to EUR/liter in compare_fuel_prices and cheapest_fuel tools.

Added

  • mcp-server/Dockerfile for Glama build evaluation.

2026-05-22

Changed

  • MCP server v0.2.3 — server.json description now explicitly mentions openvan.camp and links to https://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 with locale, category, country, search filters
    • GET /api/story/{slug} — full story with sources[] 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/countries was returning 500 Internal Server Error — fixed
  • GET /api/events without ?locale= was returning Russian content (inherited from web middleware) — now correctly defaults to en
  • Invalid ?locale=xx silently falls back to en instead 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

  • sources array 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 source field with sources array (array of strings)
  • country_name now always returns English regardless of client locale

2026-03-20

Removed

  • Redundant fields prices_eur and local_prices from fuel prices response — use prices combined with /api/currency/rates to convert

2026-01-15

Added

  • price_changes — weekly delta for each fuel type
  • is_excluded — flag for heavily subsidized countries (Venezuela, Libya, etc.)
  • sources_count — number of sources used for this country's weighted average
  • total_countries in metadata is now dynamic

2025-12-01

Initial release

  • GET /api/fuel/prices — 40 countries
  • GET /api/currency/rates — 150+ currencies
  • CC BY 4.0 license