OpenVan MCP Server
OpenVan MCP Server gives AI agents read-only, no-auth access to vanlife and road-trip planning data with interactive cards.
Plan whole campervan/car trips between 2–10 waypoints: distance, driving days, overnights, fuel/toll/vignette/ferry budget, country entry and vehicle rules, Schengen limits, road/city access rules, holidays, safety, power plugs, warnings, checklist, and a shareable roadbook.
Get country briefings and practical country data: entry/visa/stay rules, weather, fuel, tolls/vignettes, holidays, safety, power plugs, customs, and food prices.
Query and compare fuel prices by country, fuel type, and region, including cheapest/most expensive rankings.
Check travel weather: country and city suitability scores, 7-day forecasts, climate by date/location, and best-weather country rankings.
Find vanlife events and search recent vanlife news stories with summaries and links.
Compare/rank food-price indices and convert currencies.
Check visa rules for passports, destinations, routes, and temporary vehicle import rules.
Estimate toll costs for routes and get toll/vignette rates by country and vehicle class.
Get holidays, peak traffic days, travel hazards, active wildfire detections, power plugs/voltage, and customs rules.
Look up, validate, and draw license plates by country, region, and plate type.
Provides access to NASA FIRMS VIIRS satellite fire detections from the last 48 hours, allowing retrieval of active fires within a bounding box, sorted by fire radiative power.
OpenVan.camp Public API

Free, no-auth API for vanlife data: fuel prices, route fuel cost, toll roads, holidays and peak traffic days, travel hazards, power plugs, customs rules, 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
Attribution required: show Data: <a href="https://openvan.camp/">OpenVan.camp</a> wherever you display the data — see Attribution
JavaScript/TypeScript SDK: @openvancamp/sdk — npm install @openvancamp/sdk. Zero-config, typed, Node.js / browser / edge. SDK docs →
Python SDK: openvan — pip install openvan. No dependencies, Python 3.9+, works with pandas. Python docs →
Daily CSV snapshots: openvancamp/openvan-travel-data — fuel prices, exchange rates, food cost index and weather scores as CSV/JSON, one commit a day, with history.
MCP Server (for AI agents): mcp-server/ — 30 read-only tools with interactive cards in Claude and ChatGPT (incl. plan_road_trip — a whole-trip roadbook), 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.camp MCP server; no API key is required.
Plugin for coding agents (Claude Code, Codex): the hosted MCP server plus two agent skills — openvan-travel answers trip questions with the right tools, openvan-api writes code on this API with attribution, per-grade fuel units and caching done right. Claude Code: /plugin install openvan-camp --marketplace openvancamp/openvan-camp-public-api (or /plugin marketplace add openvancamp/openvan-camp-public-api, then /plugin install openvan-camp@openvan-camp). Codex: codex plugin marketplace add openvancamp/openvan-camp-public-api, then install OpenVan.camp from the Plugins Directory. Skills only, for any agent: npx skills add openvancamp/openvan-camp-public-api.
In your AI assistant, no code: Claude connector · ChatGPT app · Telegram bot @OpenVanCampBot — the same data as interactive cards in the chat. How to connect →
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: OpenStreetMap MCP Server
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 | — |
| Whole-trip roadbook from 2–10 place names: day-by-day plan, budget, per-country entry and vehicle rules; returns a shareable page | — |
| Build status of a roadbook (poll until | — |
| Toll roads by country: payment system, per-km rates by vehicle class, vignettes | 84 countries |
| Toll cost for a route of 2–10 place names (car, van, heavy), EUR range | — |
| Public holidays, school holidays (regional) and peak traffic days | 212 countries |
| UK FCDO travel advice level and current GDACS natural disasters | — |
| NASA FIRMS active fires of the last 48 hours in a bounding box (up to 10°×10°) | worldwide |
| Plug types, mains voltage and frequency, campsite hook-up (CEE17) | 229 countries |
| Customs rules on entry by car: food, cash, alcohol, tobacco, fuel canister | — |
| 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 | — |
| One city: score today and for the coming 7 days | — |
| Typical weather on any day of the year anywhere (ERA5 2021–2025): temperature, precipitation days, sky, sea, solar, VanSky index, months, best month | worldwide |
| The same for a VanSky city | — |
| 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 |
| Plate types of a country (private, taxi, motorcycle, diplomatic…); empty where not broken down | — |
| 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 URLsPlate types — special plates have their own colour and number format. GET /api/plates/{code}/types
lists them (on Russian plates: private, diplomatic red, police blue, military black, taxi_bus yellow,
motorcycle, trailer, tractor, export_transit), each with an example number. Pass type to the image,
/random and /validate; the response says which type was used:
curl "https://openvan.camp/api/plates/ru/random?type=police" # a valid blue police plate + image URLs
curl "https://openvan.camp/api/plates/ru/validate?number=У7962®ion=790&type=police"<img src="https://openvan.camp/api/plates/ru/plate.svg?number=190Т307®ion=23&type=diplomatic" alt="190 Т 307 23">To 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.
Roadbook — /api/roadbook/from-places
A whole trip plan — the same roadbook people build in the wizard: route, driving days and overnights, budget (fuel, tolls, vignettes, ferries), and for every country on the way the entry and vehicle rules for the given passports and plates, holidays, safety and power. Identical requests return the same roadbook.
# 1. Create (all inputs are optional)
curl -X POST "https://openvan.camp/api/roadbook/from-places?source=your-app" \
-H "Content-Type: application/json" \
-d '{"places":["Munich","Venice"],"locale":"en","inputs":{"travelers":["DE"],"cons":10,"fuel":"diesel"}}'
# → {"code":"wqhk8","url":"/en/roadbook/wqhk8-munich-venice","status":"pending","points":[...]}
# 2. Poll until "ready" (long routes take up to a minute), then open https://openvan.camp + url
curl https://openvan.camp/api/roadbook/wqhk8/status10 roadbooks per minute per IP. The MCP tool plan_road_trip does all of this and returns the plan itself.
Holidays, Hazards, Power Plugs, Customs
Trip-planning data for a country you are about to drive into. Every list endpoint has a
/countries index; pass locale for translated names.
# Public, school (with ISO 3166-2 regions) and peak traffic days; kind=public|school|traffic
curl "https://openvan.camp/api/holidays/countries/FR?from=2026-10-01&to=2026-11-15"
# FCDO travel advice level + current GDACS disasters (flood, earthquake, cyclone, wildfire…)
curl https://openvan.camp/api/hazards/countries/TR
# NASA FIRMS fire detections of the last 48 h; bbox = minLon,minLat,maxLon,maxLat, up to 10°×10°
curl "https://openvan.camp/api/hazards/fires?bbox=-1,38,1,40"
# Plug types, voltage, frequency, campsite hook-up connector
curl https://openvan.camp/api/electricity/countries/GB
# Customs rules on entry by car, optionally from a given country; each rule quotes the official source
curl "https://openvan.camp/api/customs/countries/NO?from=DE"A country without holiday or customs data returns an error that says so — it does not mean "no holidays" or "nothing is restricted"
Hazards describe the situation now, not a forecast; fire data for a new area may return "being loaded, retry in a minute" on the first request
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",
"required": true,
"attribution_url": "https://openvan.camp/",
"attribution_html": "Data: <a href=\"https://openvan.camp/\">OpenVan.camp</a> (CC BY 4.0)",
"instructions": "Attribution is required by the CC BY 4.0 license. ..."
}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
Attribution is required by the CC BY 4.0 license. Wherever you show the data — website, app, bot, dashboard, article — place a visible link next to it:
Data: <a href="https://openvan.camp/">OpenVan.camp</a> (CC BY 4.0)The same snippet comes in every response as _attribution.attribution_html, and in the X-Attribution-Required response header.
Building with an AI coding agent? Tell it to keep this link in the UI it generates — or just let it read _attribution.instructions from any response.
Identify 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",
"required": true,
"attribution_url": "https://openvan.camp/",
"attribution_html": "Data: <a href=\"https://openvan.camp/\">OpenVan.camp</a> (CC BY 4.0)",
"instructions": "Attribution is required by the CC BY 4.0 license. ...",
"your_source": "myapp.com"
}
}This helps us understand how the data is being used and acknowledge active projects.
Built with OpenVan
Public projects using the API:
Project | What it does | Uses |
Fuel-price map that ranks an "efficient fill": tank cost plus the fuel burned driving there (cyfuel.cybush.uk) | fuel prices | |
Driving and fuel log web app | fuel prices | |
Logistics platform with EU diesel prices by country | fuel prices |
Built something with the data? Open a pull request adding it to this table, or tell us in Discussions.
Badge for your README:
[](https://openvan.camp/)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
Python SDK:
python-sdk/—pip install openvanDaily CSV snapshots with history: openvancamp/openvan-travel-data
Claude, ChatGPT and Telegram: openvan.camp/en/assistant
Developer page: openvan.camp/en/developers
For AI agents (MCP, 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
Available Tools
30 toolscheck_license_plateCheck A License PlateARead-onlyIdempotentInspect
Validate a plate number against the country's format (look-alike letters are normalized) and say which region its code belongs to. Pass type to check against a specific plate type's format. Never identifies the owner or the vehicle's location. Use it to check a specific plate number.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Plate type key from get_license_plate_country, e.g. on Russian plates diplomatic (red), police (blue), military (black), taxi_bus (yellow). Default: the country's standard plate. | |
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| number | Yes | Plate number without the region, e.g. A123BC. Look-alike Latin letters are normalized. | |
| region | No | Region code if the country shows one, e.g. 77. | |
| country | Yes | ISO 3166-1 alpha-2 country code, e.g. RU. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: look-alike letter normalization, region-code inference, and a privacy boundary stating it never identifies the owner or vehicle location.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded, and covers the main behavior in the first sentence. The final sentence, "Use it to check a specific plate number," is somewhat redundant with the opening sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given full schema coverage, an output schema, and complete annotations, the description adds the necessary remaining context: validation scope, normalization, region inference, type filtering, and privacy limits. Nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented in the schema. The description reinforces the type parameter's purpose and mentions normalization, but adds little beyond the schema's own parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: validate a plate number against a country format and identify the region code. It is clear what the tool does, but it does not explicitly differentiate itself from sibling tools such as get_license_plate_country or get_license_plate_image.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear use case: "Use it to check a specific plate number," and explains that the type parameter checks against a specific plate type's format. It does not explicitly name when not to use it or which sibling tool to choose instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_visa_rulesCheck Visa RulesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| plate | No | Plate origin for the green card rule. | |
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| weight | No | Vehicle weight class for the vehicle rule: le35 (<=3.5 t) or gt35. | |
| passport | Yes | ISO 3166-1 alpha-2 code of the passport, e.g. RU. | |
| destination | Yes | Destination: ISO alpha-2 code, slug or zone code, e.g. TR. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only, idempotent, open-world behavior, so the bar is lower. The description adds real value beyond them by disclosing that answers carry a confidence level and source and instructing the agent to propagate them rather than asserting rules as certain — a meaningful epistemic caveat not encoded anywhere in structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the scope, then a distinct instruction about confidence/source. Dense but every clause earns its place by naming a returned dimension. The first sentence is long and list-heavy, but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description needn't explain return shape, and annotations cover the safety profile. It fills the remaining gaps — the domains checked and the uncertainty/attribution requirement. The only missing element is disambiguation from sibling country/vehicle-rule tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents passport, destination, locale, plate, and weight in detail. The description adds only indirect hints — 'passport and destination' framing and the mention of 'temporary vehicle import,' which gestures at plate/weight — but never names or explains any parameter. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (entry rules for one passport/destination) and enumerates exactly what is returned: entry mode, allowed stay length, day-counting method, visa-run reset behavior, and temporary vehicle import. It does not distinguish itself from close siblings such as get_route_visa_rules, get_customs_rules, or get_vehicle_import_rules, which is the only thing keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'entry rules for one passport and destination' but there is no explicit when-to-use or when-not-use guidance, and no routing to alternatives. With siblings like get_route_visa_rules and get_vehicle_import_rules in the same family, an agent could easily pick the wrong one; the description gives no help there.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_food_pricesCompare Food PricesARead-onlyIdempotentInspect
Compare food price index between two countries (world average = 100). Higher number = more expensive food. Use it when someone asks where food is cheaper between two countries.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Destination country ISO alpha-2 code. | |
| from | Yes | Home country ISO alpha-2 code. | |
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so safety and idempotency are covered. The description adds genuine value beyond that by explaining the index semantics (world average = 100, higher = more expensive), which is interpretation an agent needs and cannot get from the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences: the first establishes purpose and scale, the second establishes the usage trigger. Nothing is redundant and the most important framing (the index scale) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, annotations covering the safety profile, and full schema documentation, the description only needs to add interpretation and routing. It handles the index semantics and a usage trigger well, though it stops short of distinguishing this tool from its food-related siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both 'from'/'to' ISO codes and the 'locale' enum fully documented (including the fallback behavior when locale is omitted). The description adds no parameter-level detail beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (compare) and resource (food price index) and explains the scale so the agent knows what the number means. It does not differentiate itself from food-related siblings like get_country_food_prices, rank_food_prices, or the analogous compare_fuel_prices, leaving the agent to infer the distinction from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger: 'when someone asks where food is cheaper between two countries.' This clearly sets context but names no alternatives or exclusions, so the agent must independently figure out when to prefer get_country_food_prices or rank_food_prices instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_fuel_pricesCompare Fuel PricesARead-onlyIdempotentInspect
Compare current prices for one fuel type across 2-10 countries. Returns sorted table cheapest-first. Use it when someone asks which of two or more named countries has cheaper or more expensive fuel.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| fuel_type | No | Fuel type to compare. e.g. gasoline, diesel, lpg, cng, e85. | diesel |
| country_codes | Yes | Array of 2-10 ISO 3166-1 alpha-2 country codes to compare. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is settled. The description contributes beyond that by disclosing the return ordering (sorted cheapest-first), which meaningfully changes how an agent presents results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero filler: capability and scope first, return shape second, usage trigger third. Every sentence carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the annotations cover safety semantics. What remains uncovered is edge behavior with unrecognized or unsupported country codes; a brief note on that would close the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so country_codes bounds, the fuel_type enum with its diesel default, and the locale enum are already fully documented in structured fields. The description only restates the count range and single-fuel-type scoping, adding no new syntax or edge-case meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (compare fuel prices) and scopes it precisely: one fuel type across 2-10 countries. This implicitly separates it from get_fuel_prices (single country) and find_cheapest_fuel, though neither sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition: use when someone asks which of two or more named countries has cheaper or more expensive fuel. It does not state when NOT to use it (e.g., a single country query should go to get_fuel_prices), so an agent must infer the exclusion from the 2-10 country constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_route_tollsEstimate Tolls For A RouteARead-onlyIdempotentInspect
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. Use it only for the toll cost between named places when no other trip details are asked; for a whole trip use plan_road_trip.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| waypoints | Yes | 2-10 place names in travel order: cities or countries (a country means its capital), e.g. ["Rome", "Paris"]. | |
| vehicle_class | No | car; van = campervan/motorhome up to 3.5 t (default); heavy = over 3.5 t. | van |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description still adds real behavioral context beyond them: output is a EUR range with per-country breakdown, and it flags partial results when a country on the route lacks data — an important caveat an agent should relay. It does not mention latency or rate limits, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with zero padding: capability and output first, the partial-data caveat second, the routing constraint last. No restatement of the title and nothing that could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value structure need not be explained, and annotations carry the safety profile; the description supplies output granularity and the partial-result caveat. Slightly incomplete in not indicating that a country waypoint resolves to its capital (left to the schema) or roughly how partial results appear, but nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so waypoint limits, the locale behavior, and the vehicle_class enum/default are fully documented in structured fields. The description mostly restates the 2-10 place-name bound already in the schema and adds no meaning for vehicle_class or locale. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Estimate toll cost for a road trip'), the input shape (2-10 place names), and the output form (EUR range with per-country breakdown). It also names the sibling it is not — plan_road_trip — so the agent can distinguish the two without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: 'Use it only for the toll cost between named places when no other trip details are asked; for a whole trip use plan_road_trip.' Both the when and the when-not with a named alternative are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_cheapest_fuelFind Cheapest FuelARead-onlyIdempotentInspect
Rank countries by the price of a fuel type in a region (or worldwide): the cheapest first, or with order=most_expensive the most expensive first. Useful for route planning. Use it for «where is fuel cheapest» and, with order=most_expensive, «where is fuel the most expensive», in a region or worldwide.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many countries to return. | |
| order | No | cheapest first (default) or most_expensive first — «where is fuel the most expensive». | cheapest |
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| region | No | Region to search. Default: world (all countries). | world |
| fuel_type | No | Fuel type. e.g. gasoline, diesel, lpg, cng, e85. | diesel |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds ranking-order behavior and route-planning relevance, but does not discuss data freshness, coverage limits, or response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the ranking behavior and remains fairly short. The final sentence repeats the cheapest/most-expensive examples and region/worldwide scope already implied earlier, adding some redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage, an output schema, and safety annotations, the description provides enough context to call the tool correctly. It does not need to explain return values, though mentioning locale usage could have made it fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all five parameters are already documented in the input schema. The description reinforces the order and region behavior but adds little beyond the schema for limit, locale, or fuel_type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action: ranking countries by fuel price within a region or worldwide, with optional ordering. It does not explicitly distinguish itself from siblings like compare_fuel_prices or get_fuel_prices, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage contexts such as «where is fuel cheapest» and «where is fuel the most expensive», including the order parameter needed for the latter. It does not state when not to use it or name alternative tools, so it lacks full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_active_firesActive Fires In An AreaARead-onlyIdempotentInspect
NASA FIRMS VIIRS satellite fire detections of the last 48 hours in a bounding box up to 10°×10°, strongest first, with fire radiative power in MW. Use it for wildfires right now near a place or in a country: bbox is west,south,east,north in degrees — longitude first (Portugal ≈ -9.6,36.9,-6.1,42.2).
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | Bounding box west,south,east,north in degrees, at most 10° on each side, e.g. 29,36,33,38 (around Antalya). | |
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new behavior: the upstream source, the 48-hour freshness window, the hard 10°×10° size cap, and the ranking/unit of returned values. It doesn't say what happens when the bbox exceeds 10° (error vs. rejection), which is the one operational gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what the tool returns before the usage and format guidance. Every clause carries information — source, window, limit, ordering, units, usage, format, example — with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With rich annotations, an output schema and full schema description coverage, the description needs only to frame the data and the input format, which it does. The only omission is failure behavior when the bounding box exceeds the 10° cap, which matters for an open-world remote query.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline would be 3, but the description goes further by calling out the ordering hazard explicitly ("longitude first") and supplying a second real-world example (Portugal) alongside the schema's Antalya example. That targets the single most common failure mode for bbox strings; the `locale` parameter is left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource (satellite fire detections), plus the source (NASA FIRMS VIIRS), the temporal window (last 48 hours), the spatial scope (bounding box up to 10°×10°), the sort order (strongest first) and the unit (MW). No sibling tool in the list deals with fires, so the agent can identify this immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use it for wildfires right now near a place or in a country" gives a clear positive trigger with the recency constraint built in. It doesn't name an alternative or state exclusions, but no sibling covers fire detections, so the missing exclusion is low-risk.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_city_climateTypical Weather On Any DateARead-onlyIdempotentInspect
What the weather is usually like in a city or at any point on a given day of the year, from the ERA5 climate archive 2021–2025 (median of 35 archive days: the date ±3 days over five years): day and night temperature, on how many of the 35 days there was precipitation, the usual sky, sea or large-lake water temperature, solar radiation for panels and the VanSky climate index; plus all 12 months and the best month to travel. Climate, not a forecast. Use it for dates beyond the coming week ("weather in Batumi in mid-September", "is the sea warm in Antalya in May") and for "when is the best time to go"; for today and this week use get_city_travel_weather. Omit date to get the month overview.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | Latitude of any point, instead of a city. | |
| lng | No | Longitude of any point, instead of a city. | |
| city | No | City or town name in any language, e.g. Batumi, Antalya. Omit when passing lat and lng. | |
| date | No | Day of the year, MM-DD or YYYY-MM-DD (the year is ignored), e.g. 09-18. Omit for an overview of all 12 months and the best month. | |
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| country_code | No | ISO 3166-1 alpha-2 country code to disambiguate the city (Barcelona ES vs Barcelona VE). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description does add genuinely useful methodology context (ERA5 2021–2025, median of 35 archive days, date ±3 days over five years) and the 'climate not forecast' caveat that a naive agent would otherwise miss. It stops short of describing response shape or any limits, but the data-provenance caveat is the main behavioral risk here and is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the 'climate, not a forecast' distinction, then usage routing. The opening sentence is very dense with a long clause list of returned quantities, but each element is informative and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation; the description covers provenance, the climate-vs-forecast caveat, the date/omit-date decision, the city-vs-coordinates decision, and the sibling boundary. Nothing an agent needs to select or call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents lat/lng vs city, the MM-DD / YYYY-MM-DD pattern with year-ignored, and the locale fallback. The description mostly reiterates this (omit date → month overview, city vs point), adding little syntax the schema does not already carry. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (typical weather / climate normals) with explicit scope: city or any lat/lng point, on a given day of the year, from a named archive. It explicitly names the sibling it is not (get_city_travel_weather) and marks the boundary ('Climate, not a forecast'), so an agent can route between the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('dates beyond the coming week', 'when is the best time to go'), explicit when-not ('for today and this week use get_city_travel_weather'), plus concrete example queries. It also states the omit-date behavior, so the parameter-level decision is guided too.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_city_travel_weatherTravel Weather In A CityARead-onlyIdempotentInspect
How suitable the weather in one city or town is for travelling and sleeping in a campervan, as a 0-100 score for today and for the coming 7 days, with sleep, driving and solar scores and daily scores. Use this, not get_country_travel_weather, when the user names a place (Barcelona, Málaga, Alicante). Use it for the weather in one named city, town or place today, tomorrow or this week.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | City or town name in any language, e.g. Barcelona, Málaga, Alicante. | |
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| country_code | No | ISO 3166-1 alpha-2 country code to disambiguate (Barcelona ES vs Barcelona VE). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: the 0-100 scoring model, the component breakdown, and the 7-day forecast horizon. It stops short of mentioning localization behavior or how place names are resolved, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The output format and scoring model are front-loaded in the opening sentence, which is the right priority. The two closing 'Use this...' sentences overlap somewhat in intent (place-naming vs. time scope), a small amount of repetition that keeps it from being maximally tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description correctly spends its budget on scope, forecast horizon and the score semantics instead. With 100% schema coverage and rich annotations, the remaining gaps (units, locale fallback behavior) are already handled by the schema's parameter descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters (city, locale, country_code) are already documented in the schema, setting the baseline at 3. The description repeats the place-name examples that the city parameter already carries but adds nothing about locale selection or country_code disambiguation, so it does not exceed the schema's own value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (weather suitability for one city/town), a concrete output form (0-100 score for today plus the coming 7 days), and the component scores (sleep, driving, solar, daily). It explicitly contrasts itself with get_country_travel_weather, so an agent can distinguish it from the most confusable sibling without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit routing rule — 'Use this, not get_country_travel_weather, when the user names a place' — with concrete examples (Barcelona, Málaga, Alicante) and a time-scope condition (today, tomorrow, this week). The when-not case is stated directly rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_country_food_pricesGet Food Price IndexARead-onlyIdempotentInspect
Food price index for one country (world average = 100): how expensive groceries are there, with its yearly history. Use it when someone asks how expensive food, groceries or living is in a country.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| country_code | Yes | ISO 3166-1 alpha-2 country code. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, so safety is covered; the description adds genuinely non-obvious behavior – the index is normalized to a world average of 100 and the response carries a yearly history rather than a single point value. It stops short of describing pagination or history span, which keeps it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, and the scale anchor is front-loaded before the usage cue. Nothing here repeats the name or title verbatim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out; the description supplies the interpretive key (100 = world average) that makes the numbers meaningful. Coverage of the locale parameter's purpose is left entirely to the schema, a minor gap for a 2-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds nothing about country_code (ISO alpha-2) or the locale parameter's effect on language and units. With the schema doing all the parameter work, baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Food price index for one country') and adds the scale (world average = 100) plus the fact that yearly history is included. The 'one country' framing implicitly separates it from compare_food_prices/rank_food_prices, but neither sibling is named outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger: 'Use it when someone asks how expensive food, groceries or living is in a country.' That is clear context, but it names no alternatives or exclusions even though compare_food_prices and rank_food_prices exist and would be the natural competitors for multi-country questions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_country_travel_briefCountry Road-Trip BriefingARead-onlyIdempotentInspect
Everything to know before driving into one country by campervan or car, in one call: entry rule and how long the person and the vehicle may stay (with passport), travel weather now and this week, fuel prices, tolls and vignettes, public holidays in the next 30 days, safety advice, power plugs, customs limits and food prices. Use it when someone asks what to know about a country, the nuances or a guide for travelling there, or is preparing a trip to it; use the single-topic tools for one narrow question.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| passport | No | Traveller's passport, ISO alpha-2 — adds the entry rule and how long the person and the vehicle may stay. Only if the user gave it. | |
| country_code | Yes | ISO 3166-1 alpha-2 code of the country, e.g. ES. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world and non-destructive behavior, so the description is free to add value elsewhere — and it does, disclosing the response's breadth and time semantics ('weather now and this week', 'holidays in the next 30 days', 'with passport'). It does not state data freshness beyond those windows, upstream sources, or rate limits, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the payoff ('Everything to know ... in one call') before the coverage list and the routing rule. The coverage enumeration is long but each item is a real capability, not filler; a bulleted or grouped phrasing would read slightly faster.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present the description need not explain return shape, and the annotations carry the safety profile, so the remaining job — telling an agent what topics the brief aggregates and when to prefer it — is done. The one gap is that it never warns the caller how broad the payload may be relative to a narrow sibling call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns a bump by tying the optional `passport` parameter to a concrete effect ('adds the entry rule and how long the person and the vehicle may stay'). Locale and country_code semantics remain entirely schema-side.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+scope: everything to know before driving into one country by campervan or car, in one call. The enumerated coverage (entry rule, weather, fuel, tolls, holidays, hazards, plugs, customs, food prices) makes it unmistakable against the many single-topic siblings such as get_visa_rules or get_fuel_prices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the triggering intents (asking what to know about a country, the nuances, a guide, preparing a trip) and an explicit exclusion routing to 'the single-topic tools for one narrow question.' Alternatives are named as a class with the condition that selects them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_country_travel_weatherTravel Weather In A CountryARead-onlyIdempotentInspect
How suitable the weather in a whole country is for travelling and sleeping in a campervan, as a 0-100 score: overall travel score, sleep score, solar panel yield, driving conditions, awning safety, condensation risk, a 7-day forecast, and the 3 best and 3 toughest cities for the coming week. Country-level: for a named city use get_city_travel_weather. Use it when someone asks what the weather is like in a country, where in a country it is warmer, colder or sunnier, which of its cities are best or worst this week, or whether it is too cold or rainy to sleep in a van there now.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| country_code | Yes | ISO 3166-1 alpha-2 country code, e.g. DE. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered; the description adds real behavioral value by enumerating the specific metrics and the geographic scope (country-level aggregation, best/worst cities for the coming week). It stops short of noting rate limits, data freshness, or that results are forecast-based rather than historical, but the additions are substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core concept (0-100 suitability score) is front-loaded, followed by the returned metrics and then routing/trigger guidance. The metric enumeration is long but each item earns its place by telling the agent what questions the tool answers; minor tightening would raise this to a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and rich annotations, the description needn't document return structure — and it doesn't. It covers scope, sibling routing, and example use cases, leaving only minor gaps (forecast horizon semantics beyond '7-day', data source/freshness) that are not essential to correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — country_code is documented as ISO 3166-1 alpha-2 and locale as the display language — so the schema does the heavy lifting. The description only implies country-level input via 'Country-level' and adds no format or enumeration detail beyond the schema, warranting the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (country-level travel weather) and what the tool returns: a 0-100 travel/sleep score, solar yield, driving conditions, awning safety, condensation risk, 7-day forecast, and best/worst 3 cities. It explicitly contrasts with the sibling get_city_travel_weather, so an agent can distinguish the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative (get_city_travel_weather for a named city) and enumerates concrete triggering questions: what the weather is like in a country, where it is warmer/colder/sunnier, which cities are best/worst this week, whether it is too cold or rainy to sleep in a van. When-to-use and when-not-to-use are both explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_currency_rateConvert CurrencyARead-onlyIdempotentInspect
Convert an amount between two currencies using live rates (150+ currencies, daily updates). Use it for exchange rates and converting an amount between currencies.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Target currency ISO 4217 code, e.g. USD. | |
| from | Yes | Source currency ISO 4217 code, e.g. EUR. | |
| amount | No | Amount to convert. Default 1. | |
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by mentioning live rates, 150+ currencies, and daily updates. It does not disclose rate source, timestamp precision, rounding, fees, or caching behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is short and front-loads the main purpose in the first sentence. The second sentence partially repeats the first by restating exchange-rate and amount-conversion usage, but the overall structure is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple read-only conversion tool with an output schema, full parameter description coverage, and annotations covering safety and external-data behavior. The description is sufficient for correct invocation, with only minor gaps around rate provenance and freshness details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents from, to, amount, and locale in detail. The description reinforces the core conversion semantics but adds little beyond the schema, and it does not mention the locale parameter or its UI-language effect.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: convert an amount between two currencies using live rates. It also states coverage (150+ currencies) and freshness (daily updates). It does not explicitly differentiate from siblings, though none of the listed siblings appear to be direct currency-conversion alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says to use it for exchange rates and converting an amount between currencies, which gives a clear implied usage context. However, it does not give explicit when-not conditions, prerequisites, or alternatives, so the guidance remains minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_customs_rulesCustoms Rules On Entry By CarARead-onlyIdempotentInspect
Customs rules when driving into a country, optionally from a given country: food bans, cash declaration, alcohol and tobacco limits, goods value, fuel in a canister. Each rule carries a verbatim official quote and source link. A country without data returns an error saying so — never present that as "nothing is restricted". Use it for what you may bring in by car: alcohol, tobacco, cash, meat and other food, goods limits.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | ISO 3166-1 alpha-2 code of the country you come from, e.g. UA. Matters: no customs inside the EU, and some bans have exemptions by origin. | |
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| country_code | Yes | ISO 3166-1 alpha-2 code of the country you enter, e.g. PL. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/openWorld annotations, the description discloses that every rule carries a verbatim official quote and source link, and warns that a country without data returns an error which must not be reported as 'nothing is restricted' — a genuine failure-mode trap an agent would otherwise fall into. It does not cover rule freshness or caching, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, the error caution is second, and the use case closes it. The final sentence partly restates the topic list already given in sentence one, which is mild redundancy but keeps the text scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full parameter documentation, the description carries only the burden of scope and failure semantics, which it does well. It leaves locale/language behavior to the schema, which is acceptable given the parameter description covers it explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already explains country_code, from, and locale in detail (including the 'no customs inside the EU' nuance). The description only lightly gestures at the optional origin country ('optionally from a given country') and adds nothing on locale, so it earns the baseline rather than more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('customs rules when driving into a country') and enumerates the exact scope: food bans, cash declaration, alcohol/tobacco limits, goods value, fuel canister. This is clearly distinguishable from siblings like get_vehicle_import_rules or check_visa_rules without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing sentence gives clear usage framing ('what you may bring in by car: alcohol, tobacco, cash, meat and other food, goods limits') and the error warning sets an expectation for missing-data cases. It stops short of naming an alternative sibling or a when-not-to-use condition, so it doesn't reach the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventGet Event DetailsARead-onlyIdempotentInspect
Get full details for a single vanlife event by its slug.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Event slug, e.g. caravan-salon-duesseldorf-2026. | |
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | en |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds domain scope ('vanlife event') and detail level ('full details'), but does not add extra behavioral context such as error handling for invalid slugs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It efficiently communicates the core operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists and annotations are rich, so the description need not explain return values or safety. It is mostly complete for this simple lookup, though it could better distinguish from list_events.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both slug and locale are fully documented in the schema. The description mentions slug but adds no meaning beyond the schema for locale or slug format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: retrieving full details for a single vanlife event by slug. It is clear and specific, though it does not explicitly distinguish this tool from the sibling list_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'single ... event by its slug' implies usage when a slug is known and detail is needed, but it gives no explicit when/when-not guidance or mention of list_events as an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fuel_pricesGet Fuel PricesARead-onlyIdempotentInspect
Current retail fuel prices for all API-supported countries. Covers gasoline, diesel, LPG, CNG, E85, kerosene and grade variants. Pass country_code to get one country in detail; omit it for a summary list. Use it for the price of petrol, diesel, LPG/autogas/propane or CNG in one country; without a country it gives an overview.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| country_code | No | ISO 3166-1 alpha-2 country code, e.g. DE. If omitted, returns all countries. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=true, so the safety profile is fully covered. The description adds useful behavioral context about the detail-vs-summary shaping of results, but says nothing about freshness of prices, rate limits, or coverage gaps for unsupported countries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the resource and coverage, then the mode switch. The third sentence largely restates sentence one in colloquial terms; it aids synonym matching but is redundant on strict reading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the safety profile is fully annotation-covered, so the description only needs to convey scope and the filter/no-filter behavior, which it does. Minor gap: no mention of price staleness or unsupported countries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, including a detailed locale description and country_code semantics, so the schema carries the parameter burden. The description only restates the country_code conditional (detail vs list) and ignores locale entirely, adding little beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verb+resource and enumerates the fuel types (gasoline, diesel, LPG, CNG, E85, kerosene), plus distinguishes the two modes (single country detail vs all-country summary). It never names or contrasts with sibling tools like compare_fuel_prices or find_cheapest_fuel, so an agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear conditional: pass country_code for one country in detail, omit it for a summary list, and names colloquial synonyms (petrol, autogas/propane) that help query matching. However it offers no guidance against the closely related siblings compare_fuel_prices and find_cheapest_fuel, which is exactly where mis-selection risk is highest.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_holidaysHolidays And Peak Traffic DaysARead-onlyIdempotentInspect
Public holidays, school holidays (often regional, with ISO 3166-2 region codes) and official peak traffic days (France, Bison Futé) in one country for a period of up to 400 days. A country without data returns an error saying so — never present that as "no holidays". Use it for public holidays, days off, school holidays and peak traffic days.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End of the period, YYYY-MM-DD. Defaults to from + 90 days; at most 400 days after from. | |
| from | No | Start of the period, YYYY-MM-DD. Defaults to today. | |
| kind | No | Only one kind: public holidays, school holidays (often regional), or traffic = official peak traffic days — France only (Bison Futé). For «when are the roads busy» elsewhere omit it: public and school holidays are the busy days. Omit for all. | |
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| country_code | Yes | ISO 3166-1 alpha-2 country code, e.g. FR. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: it warns that a country without data returns an error and must never be reported as 'no holidays', notes the 400-day cap, and flags that school holidays are often regional while traffic days are France-only. These are exactly the failure modes an agent would otherwise mishandle.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with scope, then the critical error caveat. The final sentence duplicates ground covered by the first and could be merged, but there is no padding beyond that.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values needn't be described. Combined with annotations and full param coverage, the description supplies the remaining essentials: data-coverage failure semantics, the date-window limit, and the geographic restriction on traffic days.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains country_code, from, to, kind and locale in detail. The description adds only the 400-day bound (already in the schema) and a passing mention of ISO 3166-2 region codes, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource set — public holidays, school holidays and official peak traffic days (Bison Futé) — scoped to one country over a period of up to 400 days. The scope and content are unambiguous and distinguish it from sibling tools like list_events or get_country_travel_brief.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing sentence 'Use it for public holidays, days off, school holidays and peak traffic days' gives an intended-use list, but it largely restates the purpose line and names no alternative tool or exclusion condition relative to the ~29 siblings. Usage is implied rather than routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_license_plate_countryLicense Plate Format And Region CodesARead-onlyIdempotentInspect
How a country's license plate looks and reads (standard, size, format), its plate types (standard, diplomatic, police, taxi…) with example numbers, and every region code on its plates, grouped by region — e.g. which region is 77 or 199 on Russian plates. Use it for what a plate region code means (77, 777, AA…) and a country's plate format.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| country | Yes | ISO 3166-1 alpha-2 country code, e.g. RU. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety and openness profile is fully covered. The description adds only that region codes are grouped by region and that examples are included — useful but modest behavior/return-shape context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first front-loads the three content buckets (format, types, region codes), the second states the use case. It is dense but every clause adds scope information; nothing is redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the required country param is schema-documented. The description covers scope and examples adequately; the only gap is minor (no mention of how locale affects the card output, which lives in the schema anyway).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both the country ISO code and the locale enum are fully documented in the schema. The description implies the country input via 'a country's license plate' but adds no syntax or format detail beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names concrete resource facets: plate appearance (standard, size, format), plate types with examples, and region codes grouped by region. It is clearly a lookup tool, distinguishable from check_license_plate and list_license_plate_countries by its 'explain what a code means' framing, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The final sentence gives an explicit use case: 'Use it for what a plate region code means (77, 777, AA…) and a country's plate format.' That is a clear context statement, but there are no exclusions or named alternatives (e.g. when to prefer check_license_plate for validation instead).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_license_plate_imageLicense Plate ImageARead-onlyIdempotentInspect
Draw an illustrative image of a country's standard civilian license plate (PNG shown inline, plus SVG/PNG links). The number must match the country's standard format. Official, police, military and diplomatic plates are not drawn. Use it to draw or show a picture of a plate.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| number | Yes | Plate number without the region, in the country's standard format. | |
| region | No | Region code if the country shows one. | |
| country | Yes | ISO 3166-1 alpha-2 country code, e.g. RU. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds real context beyond them: the response includes an inline PNG plus SVG/PNG links, and the number must conform to the country's standard format. It doesn't say what happens when the number is malformed or the country is unsupported, which keeps it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the core action and output format. The final sentence ('Use it to draw or show a picture of a plate') largely restates the opening, so not every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema and annotations carry return values and safety, and the description covers the drawing scope, exclusions and output links. It leaves open the failure behavior for invalid formats and doesn't clarify when region should be supplied, minor gaps for a two-required-parameter render tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces that the number must match the country's standard format, which adds mild validation semantics, but it says nothing about the optional region parameter or the locale fallback behavior beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Draw an illustrative image of a country's standard civilian license plate', and names the output artifacts (inline PNG plus SVG/PNG links). It also scopes out official, police, military and diplomatic plates. It does not name the sibling check_license_plate or list_license_plate_countries to sharpen the distinction, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use it to draw or show a picture of a plate' gives a clear trigger, and 'Official, police, military and diplomatic plates are not drawn' provides an explicit when-not-to-use boundary. No alternative sibling is named for the excluded cases, so the routing guidance is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_power_plugsPower Plugs And VoltageARead-onlyIdempotentInspect
Plug types (IEC A–N), mains voltage and frequency for one country, with the source of the value, plus the campsite hook-up connector in Europe (CEE17). Use it for socket and plug types, adapters, mains voltage and campsite hook-ups.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| country_code | Yes | ISO 3166-1 alpha-2 country code, e.g. GB. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a read-only, idempotent, open-world, non-destructive lookup, so the safety profile is covered. The description adds useful context about source attribution and Europe-only CEE17 campsite connectors, but it does not discuss invalid country codes, missing data, or other edge behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with returned data and followed by direct usage guidance. There is no redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has rich annotations, an output schema, and fully documented parameters; the description supplies the remaining purpose and usage context. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so country_code and locale are already fully documented in the schema. The description reinforces the one-country scope but adds no parameter syntax, format, or locale behavior beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and scope: plug types, mains voltage/frequency for one country, the source value, and European CEE17 campsite connectors. It clearly distinguishes this lookup from unrelated sibling tools such as visa, fuel, or weather tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use this tool for socket/plug types, adapters, mains voltage, and campsite hook-ups, giving clear positive guidance. It does not state when not to use it or name alternatives, but no direct sibling overlap exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_route_visa_rulesVisa Rules For A RouteARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| weight | No | Vehicle weight class for the vehicle rules. | |
| countries | Yes | Countries in travel order, comma separated ISO alpha-2 codes or slugs, up to 12, e.g. RU,GE,TR. | |
| passports | No | Passports to answer for, comma separated, up to 10, e.g. RU,BY. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description contributes one extra behavioral fact — that the result includes 'the tightest leg of the route' alongside per-country rules — but says nothing about rate limits, error behavior for unsupported passports, or partial-route coverage, so it is helpful but thin beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero waste that front-loads what is returned and what makes it special (route-wide coverage, batched passports, tightest leg). Nothing is repeated from the schema and no filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is read-only with a full output schema and completely described parameters, so the description only has to establish purpose and scale — which it does. The remaining gaps are the unstated country cap (12 in schema vs 10 passports stated) and the absence of routing guidance versus check_visa_rules, both minor given the rich schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the locale parameter carries unusually rich guidance (set on every call, affects answer language and units, fallback behavior), so the structured data already does the heavy lifting. The description adds only the passports cap ('up to 10'), which matches the schema, and says nothing about the weight or locale parameters, making this a baseline-plus score rather than a value-add.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource precisely (visa rules per country along a route) and adds real scope detail: multi-country in one call and up to 10 passports. It implicitly separates itself from check_visa_rules by emphasizing the batch/route case, but never names that sibling, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'one call' and 'for up to 10 passports' signal the multi-passport, multi-country scenario. There is no explicit when-to-use / when-not-to-use statement, no prerequisite (e.g. passports required to get a meaningful answer), and no pointer to check_visa_rules for a single country.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_toll_ratesToll Road Rates By CountryARead-onlyIdempotentInspect
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. Use it for toll roads, motorway fees, whether a vignette is needed and what it costs in one country.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| country_code | Yes | ISO 3166-1 alpha-2 country code, e.g. FR. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is fully covered structurally. The description adds data-provenance context ('each with verification date and source'), which is mildly useful, but says nothing about freshness lag, coverage gaps, or response shape. With annotations carrying most of the burden, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what the tool returns and followed by when to use it. The first sentence is dense but every clause maps to actual returned content, so there is little waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex reference tool, the description adequately enumerates the returned data categories (rates by class, vignette durations, concession sections, bridges/tunnels, provenance), and an output schema exists to cover structure. It leaves minor gaps around freshness and coverage but is complete enough to invoke confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with the locale parameter extensively documented in the schema itself. The description adds no parameter-level detail (e.g. that country_code gates all returned reference data), so it sits at the baseline where the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('Toll reference for one country') and enumerates its contents – payment system, per-km rates by vehicle class, vignette prices, concession sections, bridges/tunnels – so the agent knows exactly what it returns. It implicitly contrasts with route-based siblings like estimate_route_tolls by emphasizing single-country reference data, but never names that alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives clear usage context: toll roads, motorway fees, vignette need and cost, scoped to one country. That is enough to route correctly in most cases, but there are no explicit exclusions and no sibling named (e.g. estimate_route_tolls for multi-country route totals), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_travel_hazardsTravel Hazards In A CountryARead-onlyIdempotentInspect
Situation now in one country: UK FCDO travel advice level and current GDACS natural disasters (flood, earthquake, tropical cyclone, wildfire, drought, volcano) with alert level green/orange/red. Not a forecast. Use it when someone asks whether it is safe to go to a country now, about travel warnings or natural disasters.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| country_code | Yes | ISO 3166-1 alpha-2 country code, e.g. TR. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds real value beyond them by naming the upstream sources (FCDO, GDACS), the alert-level vocabulary and the temporal framing ('now', 'Not a forecast'). It says nothing about freshness/latency or coverage gaps, which for a live-hazard tool would be the differentiating detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences with no filler; the data contents come first, then the temporal caveat, then the use case. The opening fragment ('Situation now in one country:') is slightly telegraphic rather than a clean sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is unnecessary; the description covers sources, hazard types, alert semantics, time scope and the question it answers. It is complete enough for a two-parameter read tool, with only the missing sibling routing as a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented, and the description only implies the single-country scope of country_code. The locale parameter, which materially affects the answer language and units, is not touched on in the description, but the schema carries that burden adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Situation now in one country') and enumerates exactly what is returned: the UK FCDO travel advice level plus GDACS disaster types with green/orange/red alert levels. The explicit 'Not a forecast' clause distinguishes it from forecast-oriented siblings such as get_country_travel_weather and get_city_climate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear triggering condition: 'Use it when someone asks whether it is safe to go to a country now, about travel warnings or natural disasters.' It does not, however, name the near neighbours (get_country_travel_brief, get_active_fires) or state when those should be preferred instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vehicle_import_rulesTemporary Vehicle Import RulesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| country | Yes | Country: ISO alpha-2 code, slug or zone code, e.g. georgia or GE. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the bar is lower, and the description still adds a genuinely useful behavior: a country without a supportable rule returns nothing rather than a guess. It also names the returned data points, which is context beyond the safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the scope and the return contents, and the no-guess fallback behavior closes it. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present the description needn't enumerate return structure, and it still sketches the returned facts and the empty-result case. Only the relationship to neighboring customs/visa tools is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (country formats, locale enum) are fully documented in the schema, so the baseline of 3 applies. The description adds no parameter-specific meaning such as accepted country identifier forms or locale behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope: temporary admission rules for a foreign-plated vehicle in one country, and enumerates the facts returned (allowed days, per entry or per window, carnet, green card). This is clearly distinguishable from siblings like get_customs_rules or check_visa_rules without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The one-country scoping and the field list imply when this tool is the right one, but no sibling is named and there is no explicit when-not guidance (e.g. difference from get_customs_rules). Usage is inferred rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_best_weather_countriesCountries With The Best Travel WeatherARead-onlyIdempotentInspect
List the N countries where today's weather is best for travelling by campervan, highest 0-100 travel score first. Use it when no country is named and someone asks where to go for warm or good weather right now — worldwide or in a region (region=europe…); with sort=warmest only when they literally ask where it is warmest or hottest (it ranks by temperature alone, so deserts come first; «warm and pleasant», «warm and dry» → the default score). These are today's conditions and the coming days, not a forecast for a later month: for «in November» say so.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | score = best overall travel weather (default, also for «warm and pleasant»); warmest = highest daytime temperature today — only for a literal «where is it warmest/hottest». | score |
| limit | No | How many top-scoring countries to return. | |
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| region | No | Only countries of this region — «best weather in Europe». Default: world. | world |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, so the safety profile is covered; the description adds genuinely new behavior: the ranking is by a 0-100 travel score, warmest-sort ranks by temperature alone so deserts lead, and the data covers today plus the coming days rather than an arbitrary month. These are real pitfalls an agent could otherwise stumble into.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and ranking, then the routing rules. Some material duplicates the schema's sort description («it ranks by temperature alone»), which is mild waste, but nearly every sentence carries disambiguation value for a query-phrasing-heavy tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained; the description instead covers the time-window caveat and sort semantics, which is what an agent needs. Locale's critical "set it on every call" instruction lives only in the schema, leaving a small gap in the prose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: the "deserts come first" consequence of warmest-sort and the mapping of natural-language phrasings («warm and dry») to the default score. It does not cover locale, which is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List the N countries where today's weather is best for travelling by campervan") plus the ranking rule ("highest 0-100 travel score first"). It is clearly distinguishable from per-country siblings like get_country_travel_weather because it is a ranked global/regional listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the triggering condition ("when no country is named and someone asks where to go for warm or good weather right now"), the regional variant, and the narrow case for sort=warmest versus the default, including disambiguation of «warm and pleasant». It also states an exclusion: current conditions only, not a later-month forecast — handle those by saying so.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_eventsList Vanlife EventsARead-onlyIdempotentInspect
List vanlife events: expos (Caravan Salon), festivals, meetups, forums, road trips. Filter by status, type, country, or free-text search.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Event type filter. | |
| limit | No | ||
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | en |
| search | No | Free-text search in event name. | |
| status | No | Event time status. | upcoming |
| country | No | ISO 3166-1 alpha-2 country code. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered by structured data. The description adds domain examples (Caravan Salon) but no behavioral context such as the default status filter, pagination/limit behavior, or that results reflect a live open-world dataset. Adequate but thin given annotations carry most of the load.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no waste, and the resource scope is front-loaded before the filter list. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the input schema is well documented, so the description needn't explain return values. The main residual gap is the absence of a pointer to get_event and the default-status behavior, which would help an agent call it correctly on the first try.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents type, status, country, search and even the locale default behavior. The description merely restates the filter names without adding syntax, format, or interaction detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ('List') and resource ('vanlife events') and enumerates the event categories (expos, festivals, meetups, forums, road trips), which concretely scopes the tool. It does not differentiate from the sibling get_event, which clearly retrieves a single event, so an agent must infer the list-vs-lookup split.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence names the available filters, which implies usage, but there is no explicit when-to-use guidance and no mention of the alternative get_event for fetching a single event. Nothing says the default status is 'upcoming', so an agent could misread results as all-time.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_license_plate_countriesLicense Plate CountriesCRead-onlyIdempotentInspect
Countries whose license plates are available: international code, number of regions and an example plate.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds only the shape of the returned records, which the output schema already provides, and says nothing about completeness of the list, ordering, or size — the traits that would actually matter beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact line with zero filler; the useful content (what the list yields) is front-loaded. It reads as a caption rather than a sentence, which is the source of its slight clarity loss, not its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, and locale is fully documented in the schema, so nothing critical is missing. Still, for a discovery tool that gates the other license-plate siblings, it gives no hint of list size, pagination, or how to proceed after listing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the locale enum documents its own behavior (answer and card language, fallback to app language) more thoroughly than the description does. The description mentions no parameters at all, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The fragment 'Countries whose license plates are available' conveys that this enumerates the supported country set and names the returned fields (code, region count, example plate). However, it never uses an explicit verb and never contrasts itself with the singular siblings get_license_plate_country / check_license_plate, so the agent must infer that this is the 'list all supported' variant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusion, and no mention of the closely named alternatives (get_license_plate_country, check_license_plate, get_license_plate_image). The agent is left to deduce the discovery-then-detail workflow from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_road_tripPlan A Road TripARead-onlyIdempotentInspect
Plan a road trip by campervan or car between 2-10 places with the OpenVan.camp roadbook: distance, driving time and a day-by-day plan with overnights, budget (fuel, tolls, vignettes, ferries), and for every country on the way the entry rule for the given passports, residence permit and plates, how long you and the vehicle may stay (Schengen 90/180), road rules and city access (low-emission zones and stickers such as Umweltplakette and Crit'Air, Italian ZTL), holidays on the trip dates, safety and power plugs, plus the main warning and a checklist. Returns a link to the full roadbook the user can open, edit and share. Use this first when the user describes a trip from A to B.
| Name | Required | Description | Default |
|---|---|---|---|
| fuel | No | Fuel, e.g. diesel, gasoline, lpg. | |
| kids | No | Number of children travelling (adds the documents children need abroad to the checklist). | |
| pets | No | Number of pets travelling (adds pet passport, microchip, rabies and EU titre-test steps to the checklist). | |
| tank | No | Tank volume, litres. | |
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| plates | No | Country of the vehicle's plates, ISO alpha-2 (entry bans and green card depend on it). | |
| weight | No | Vehicle weight: le35 (up to 3.5 t) or gt35. | |
| currency | No | Currency of the budget, ISO 4217. Default EUR. | |
| passports | No | Passports of the travellers, comma separated ISO alpha-2 codes, e.g. RU or DE,RU. Enables visa terms and the Schengen counter. | |
| residence | No | Residence permit of the travellers, ISO alpha-2, in the same order as passports (one code applies to all), e.g. DE. A Schengen residence permit removes the visa and the 90/180 counter in Schengen. | |
| waypoints | Yes | 2-10 places in travel order: cities or countries (a country means its capital), e.g. ["Munich", "Venice"]. | |
| round_trip | No | Return to the start along the same route. | |
| start_date | No | Departure date, YYYY-MM-DD. Enables holidays, weather by day and visa deadlines. | |
| avoid_tolls | No | Route avoiding toll roads. | |
| consumption | No | Consumption, litres per 100 km. | |
| hours_per_day | No | Driving hours per day for the day-by-day plan. Default 6. | |
| vehicle_class | No | car; van = campervan/motorhome up to 3.5 t (default); heavy = over 3.5 t. | van |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent/non-destructive, so the safety profile is covered. The description adds what annotations cannot: the result is a link to a full roadbook the user can open, edit and share, and it discloses the conditional enrichment (holidays and visa deadlines only with a start_date, entry rules keyed to passports/residence/plates). No rate limits or failure modes are mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with front-loaded purpose, followed by a short routing instruction; nothing is filler and every clause names a distinct output. It is long, but the length buys real coverage for a 17-parameter tool, though the mid-sentence enumeration could be split for faster scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full schema coverage, the description only needs to convey scope, enrichment conditions and the returned artifact — all of which it does. Nothing an agent needs to decide and invoke this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every one of the 17 parameters is already documented in the schema, including defaults and enums. The description only restates the waypoint count constraint and that passports/residence/plates drive entry rules, adding little beyond the structured data — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+constraint ('Plan a road trip by campervan or car between 2-10 places') and then enumerates concrete outputs: distance, driving time, day-by-day plan, budget, per-country entry rules, 90/180 stays, LEZ/ZTL rules, holidays, plugs, checklist, shareable link. This is unmistakably distinct from every single-purpose sibling such as check_visa_rules or estimate_route_tolls.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing sentence 'Use this first when the user describes a trip from A to B' gives explicit routing guidance relative to the narrower sibling tools. It does not state when NOT to use it (e.g. a single-country visa question should go to check_visa_rules), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rank_food_pricesRank Countries By Food PricesARead-onlyIdempotentInspect
Rank countries by food price index (world average = 100) in a region or worldwide: the cheapest first, or with order=most_expensive the most expensive first. Use it when someone asks where food or groceries are cheapest or most expensive.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many countries to return. | |
| order | No | cheapest first (default) or most_expensive first. | cheapest |
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | |
| region | No | Only countries of this region. Default: world. | world |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuine context beyond that by defining the index baseline (world average = 100), which tells the agent how to interpret the ranking values. Return format is left to the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler: the ranking semantics and sort direction come first, followed by the usage trigger. Every sentence carries information the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, annotations covering the safety profile, and full schema coverage of all parameters, the description needs only to establish purpose and usage, which it does. The minor gap is that it does not note the limit interplay with ranking (top-N cheapest), though that is largely inferable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (limit, order, locale, region) are already documented in the schema. The description only restates the order behavior ('order=most_expensive'), adding no syntax or constraint detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (rank), resource (countries by food price index), the scale semantics (world average = 100), and scope (region or worldwide). This clearly separates it from sibling tools like compare_food_prices and get_country_food_prices, which per their names retrieve or compare rather than rank.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the triggering question explicitly: 'Use it when someone asks where food or groceries are cheapest or most expensive.' That is a clear use-case signal, though it does not name a specific alternative (e.g., compare_food_prices) or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_storiesSearch Vanlife NewsARead-onlyIdempotentInspect
Search recent news about campervans, motorhomes and road travel collected by OpenVan.camp from public news sources. Returns for each story only a headline, a short summary of up to 300 characters, date, category, countries and a link to the story page on openvan.camp, which credits the original publishers. Never returns full article text. Filter by words in the headline, category, country and language.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| locale | No | Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language. | en |
| search | No | Words to look for in story headlines. | |
| country | No | ISO 3166-1 alpha-2 country code. | |
| category | No | Story category. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, idempotent, non-destructive, open-world safety profile. The description adds real value beyond that by disclosing the exact return shape (headline, ≤300-char summary, date, category, countries, link) and the important constraint that full article text is never returned, along with source-attribution context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then return shape, then filters; no filler sentences. The middle sentence is long but each clause (fields returned, no full text, attribution) carries distinct information, so it earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param, zero-required search tool with an output schema and full annotations, the description covers purpose, data provenance, return shape and filtering. Only explicit usage/exclusion guidance is missing, which keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 80% schema description coverage, the schema already documents the parameters well, including a detailed locale description. The description's line about filtering by words, category, country and language just restates the schema fields without adding syntax or behavioral nuance, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Search) and resource (recent news about campervans, motorhomes, road travel) plus the data source (OpenVan.camp from public news sources). It is clearly distinct from the sibling tools, which are all travel-data utilities rather than news search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says what can be filtered by (words in headline, category, country, language), which implies how to use it, but there is no explicit when-to-use vs. when-not guidance or mention of alternatives. Since no sibling covers news, the omission is less costly, but the guidance remains only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
30 tool updates
v0.9.7- Changed
check_license_plate2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
check_visa_rules2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
compare_food_prices2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
compare_fuel_prices2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
estimate_route_tolls2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
find_cheapest_fuel2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
get_active_fires2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Added
get_city_climate - Changed
get_city_travel_weather2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
get_country_food_prices2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
get_country_travel_brief2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
get_country_travel_weather2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
get_currency_rate2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
get_customs_rules2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
get_event2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
get_fuel_prices2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
get_holidays5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / to / $refRemoved value: -"#/properties/from" - added
Input schema / properties / to / patternAdded value: +"^\\d{4}-\\d{2}-\\d{2}$" - added
Input schema / properties / to / typeAdded value: +"string" - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
get_license_plate_country2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
get_license_plate_image2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
get_power_plugs2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
get_route_visa_rules2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
get_toll_rates2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
get_travel_hazards2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
get_vehicle_import_rules2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
list_best_weather_countries3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / limit / defaultRemoved value: -10 - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
list_events3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / limit / defaultRemoved value: -15 - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
list_license_plate_countries2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
plan_road_trip2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
rank_food_prices3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / limit / defaultRemoved value: -10 - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
search_stories3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / limit / defaultRemoved value: -10 - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
1 tool update
v0.9.4- Removed
get_roadbook_build_status
34 tool updates
v0.6.4- Changed
check_license_plate2 fields changed- changed
Input schema / properties / locale / descriptionPrevious value: -"Language of country and region names. Default en."New value: +"Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
check_visa_rules2 fields changed- added
Input schema / properties / localeAdded value: +{ + "description": "Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language.", + "enum": [ + "en", + "ru", + "de", + "fr", + "es", + "pt", + "tr" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Added
compare_food_prices - Changed
compare_fuel_prices3 fields changed- changed
Input schema / properties / fuel_type / descriptionPrevious value: -"Fuel type to compare. Uses the same keys as /api/fuel/prices prices."New value: +"Fuel type to compare. e.g. gasoline, diesel, lpg, cng, e85." - added
Input schema / properties / localeAdded value: +{ + "description": "Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language.", + "enum": [ + "en", + "ru", + "de", + "fr", + "es", + "pt", + "tr" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
compare_vanbasket - Changed
estimate_route_tolls3 fields changed- changed
Input schema / properties / locale / descriptionPrevious value: -"Language of bridge/section names: en, ru, de, fr, es, pt, tr."New value: +"Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language." - changed
Input schema / properties / waypoints / descriptionPrevious value: -"2-10 place names in travel order: cities, addresses or countries (a country means its capital), e.g. [\"Rome\", \"Paris\"]."New value: +"2-10 place names in travel order: cities or countries (a country means its capital), e.g. [\"Rome\", \"Paris\"]." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
find_cheapest_fuel5 fields changed- changed
Input schema / properties / fuel_type / descriptionPrevious value: -"Fuel type. Uses the same keys as /api/fuel/prices prices."New value: +"Fuel type. e.g. gasoline, diesel, lpg, cng, e85." - changed
Input schema / properties / limit / descriptionPrevious value: -"How many cheapest countries to return."New value: +"How many countries to return." - added
Input schema / properties / localeAdded value: +{ + "description": "Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language.", + "enum": [ + "en", + "ru", + "de", + "fr", + "es", + "pt", + "tr" + ], + "type": "string" +} - added
Input schema / properties / orderAdded value: +{ + "default": "cheapest", + "description": "cheapest first (default) or most_expensive first — «where is fuel the most expensive».", + "enum": [ + "cheapest", + "most_expensive" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
get_active_fires2 fields changed- added
Input schema / properties / localeAdded value: +{ + "description": "Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language.", + "enum": [ + "en", + "ru", + "de", + "fr", + "es", + "pt", + "tr" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Added
get_city_travel_weather - Added
get_country_food_prices - Added
get_country_travel_brief - Added
get_country_travel_weather - Changed
get_currency_rate2 fields changed- added
Input schema / properties / localeAdded value: +{ + "description": "Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language.", + "enum": [ + "en", + "ru", + "de", + "fr", + "es", + "pt", + "tr" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
get_customs_rules2 fields changed- changed
Input schema / properties / locale / descriptionPrevious value: -"Language of the summaries: en, ru, de, fr, es, pt, tr."New value: +"Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
get_event2 fields changed- added
Input schema / properties / locale / descriptionAdded value: +"Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
get_fuel_prices2 fields changed- added
Input schema / properties / localeAdded value: +{ + "description": "Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language.", + "enum": [ + "en", + "ru", + "de", + "fr", + "es", + "pt", + "tr" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
get_holidays3 fields changed- changed
Input schema / properties / kind / descriptionPrevious value: -"Only one kind: public holidays, school holidays (often regional), or traffic = official peak traffic days (France, Bison Futé). Omit for all."New value: +"Only one kind: public holidays, school holidays (often regional), or traffic = official peak traffic days — France only (Bison Futé). For «when are the roads busy» elsewhere omit it: public and school holidays are the busy days. Omit for all." - changed
Input schema / properties / locale / descriptionPrevious value: -"Language of names: en, ru, de, fr, es, pt, tr."New value: +"Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
get_license_plate_country2 fields changed- changed
Input schema / properties / locale / descriptionPrevious value: -"Language of country and region names. Default en."New value: +"Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
get_license_plate_image5 fields changed- removed
Input schema / properties / customRemoved value: -{ - "description": "Draw any text (e.g. a name) in the plate layout instead of requiring a real format.", - "type": "boolean" -} - added
Input schema / properties / localeAdded value: +{ + "description": "Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language.", + "enum": [ + "en", + "ru", + "de", + "fr", + "es", + "pt", + "tr" + ], + "type": "string" +} - changed
Input schema / properties / number / descriptionPrevious value: -"Plate number without the region, or any text with custom=true."New value: +"Plate number without the region, in the country's standard format." - removed
Input schema / properties / typeRemoved value: -{ - "description": "Plate type key from get_license_plate_country, e.g. on Russian plates diplomatic (red), police (blue), military (black), taxi_bus (yellow). Default: the country's standard plate.", - "type": "string" -} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
get_power_plugs2 fields changed- changed
Input schema / properties / locale / descriptionPrevious value: -"Language of the country name: en, ru, de, fr, es, pt, tr."New value: +"Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Added
get_roadbook_build_status - Changed
get_route_visa_rules2 fields changed- added
Input schema / properties / localeAdded value: +{ + "description": "Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language.", + "enum": [ + "en", + "ru", + "de", + "fr", + "es", + "pt", + "tr" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
get_toll_rates2 fields changed- changed
Input schema / properties / locale / descriptionPrevious value: -"Language of names: en, ru, de, fr, es, pt, tr."New value: +"Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
get_travel_hazards2 fields changed- changed
Input schema / properties / locale / descriptionPrevious value: -"Language of the country name: en, ru, de, fr, es, pt, tr."New value: +"Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
get_vanbasket - Removed
get_vansky_weather - Changed
get_vehicle_import_rules2 fields changed- added
Input schema / properties / localeAdded value: +{ + "description": "Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language.", + "enum": [ + "en", + "ru", + "de", + "fr", + "es", + "pt", + "tr" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Added
list_best_weather_countries - Changed
list_events2 fields changed- changed
Input schema / properties / locale / descriptionPrevious value: -"Language for localized fields."New value: +"Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Changed
list_license_plate_countries2 fields changed- changed
Input schema / properties / locale / descriptionPrevious value: -"Language of country and region names. Default en."New value: +"Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
- Removed
list_vansky_top - Added
plan_road_trip - Added
rank_food_prices - Changed
search_stories7 fields changed- changed
Input schema / properties / category / descriptionPrevious value: -"Category slug, e.g. camping, travel, gear, festival, industry."New value: +"Story category." - added
Input schema / properties / category / enumAdded value: +[ + "law", + "ban", + "opening", + "closing", + "incident", + "industry", + "lifestyle", + "builds", + "festival", + "expo", + "review", + "other" +] - changed
Input schema / properties / limit / maximumPrevious value: -50New value: +20 - added
Input schema / properties / locale / descriptionAdded value: +"Language the user writes in (en, ru, de, fr, es, pt, tr). Set it on every call: the answer and the interactive card are shown in this language and units; without it the card falls back to the app's interface language." - changed
Input schema / properties / search / descriptionPrevious value: -"Full-text search in story title."New value: +"Words to look for in story headlines." - added
Input schema / properties / search / maxLengthAdded value: +100 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": {}, + "type": "object" +}
2 tool updates
v0.6.2- Changed
check_license_plate1 field changed- added
Input schema / properties / typeAdded value: +{ + "description": "Plate type key from get_license_plate_country, e.g. on Russian plates diplomatic (red), police (blue), military (black), taxi_bus (yellow). Default: the country's standard plate.", + "type": "string" +}
- Changed
get_license_plate_image1 field changed- added
Input schema / properties / typeAdded value: +{ + "description": "Plate type key from get_license_plate_country, e.g. on Russian plates diplomatic (red), police (blue), military (black), taxi_bus (yellow). Default: the country's standard plate.", + "type": "string" +}
25 tool updates
v0.6.0- First observed
check_license_plate - First observed
check_visa_rules - First observed
compare_fuel_prices - First observed
compare_vanbasket - First observed
estimate_route_tolls - First observed
find_cheapest_fuel - First observed
get_active_fires - First observed
get_currency_rate - First observed
get_customs_rules - First observed
get_event - First observed
get_fuel_prices - First observed
get_holidays - First observed
get_license_plate_country - First observed
get_license_plate_image - First observed
get_power_plugs - First observed
get_route_visa_rules - First observed
get_toll_rates - First observed
get_travel_hazards - First observed
get_vanbasket - First observed
get_vansky_weather - First observed
get_vehicle_import_rules - First observed
list_events - First observed
list_license_plate_countries - First observed
list_vansky_top - First observed
search_stories
TDQS
Scored across 30 tools
Most tools are cleanly separated by resource and action, and overlapping families (weather country/city/climate/ranking, food compare/get/rank, fuel get/compare/rank, plate list/get/check/image, visa vs route-visa vs vehicle-import) are explicitly cross-referenced in their descriptions. The main ambiguity is plan_road_trip, an aggregator that overlaps with fuel, toll, weather, visa, holiday and customs tools — though it is told to be used first for whole-trip requests, which mitigates misselection.
Every name is snake_case with a leading verb (plan_, get_, list_, search_, compare_, rank_, find_, check_, estimate_) and a clear noun phrase. Verb choice tracks action type consistently across parallel families (compare_food_prices / compare_fuel_prices, list_events / list_license_plate_countries).
30 tools is heavy, but the surface spans genuinely different data domains (fuel, weather, climate, food, currency, visas, tolls, holidays, hazards, fires, customs, plates, events, news), so it is not padding. Still, the count pushes past the comfortable range, and some families (four plate tools, three food-price tools, three fuel-price tools) could likely be collapsed.
Coverage is broad and lifecycle-consistent for a read-only travel-information API: trip planning, per-country briefs and drill-downs, rules, costs, and safety all have entry points. Notable gaps remain — no campsite/stopover or place-lodging search (core to vanlife), no story-detail fetch, and no write/share operations beyond the returned roadbook link.
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.
AI Reasoning Cache & Consensus Layer with 11 MCP tools via Streamable HTTP.
Staylist World is a hotel comparison service your AI assistant can call directly. The free MCP server (https://staylist.world/mcp, Streamable HTTP, no auth) covers 80,000+ hotels with ratings, review summaries, published policies and booking links. No API key, no sign-up. Tools: search_hotels by city, name or need; get_hotel for overviews, amenities and published policies; get_booking_link; list_destinations; and get_reviews. There is also a REST API and Markdown versions of hotel pages. Unknown facts are marked as unknown. New: get_reviews returns a hotel's 1–2 star guest reviews from the last 24 months with the count out of all reviews; or paste staylist.world/reviews?hotel=<name> into any assistant.
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
- AlicenseAqualityCmaintenanceSearch for Airbnb listings and get detailed information about specific properties. Effortlessly plan your next trip with structured data and no API key required, while respecting Airbnb's guidelines.21,484 npm548MIT
- AlicenseAqualityDmaintenanceEnhances LLM capabilities with location-based services and geospatial data, enabling users to geocode addresses, find nearby points of interest, get directions, optimize meeting points, and analyze neighborhoods.12230MIT
- AlicenseAqualityAmaintenanceMCP server that exposes any Pumperly instance to LLMs, enabling real-time fuel price queries, station search, route planning, and geocoding.547 npm3GPL 3.0
- AlicenseAqualityCmaintenanceEnables users to get weather forecasts, snow conditions, air quality, and location search via the Open-Meteo API, with guided prompts for ski trips and outdoor activities.11MIT