OpenVan MCP Server
OpenVan MCP Server is a read-only, no-auth vanlife/travel data server exposing 25 tools for trip planning across fuel, weather, borders, tolls, costs, and news.
Fuel: get current retail prices for all countries or one country; compare 2–10 countries for a fuel type; find the cheapest countries in a region.
Weather: get VanSky vanlife suitability scores (0–100) with 7-day forecast for a country; list top-scoring countries.
Events & news: list/filter vanlife expos, festivals, meetups and road trips; fetch one event by slug; search aggregated news stories by query, category or country.
Costs & money: compare food price index between two countries; get one country's index; convert amounts between 150+ currencies.
Visas & borders: check entry rules for one passport/destination; get visa rules for a whole route with up to 10 passports; get temporary vehicle import rules for one country.
Tolls & road logistics: get toll rates, payment systems and vignettes by country; estimate route toll costs in EUR for 2–10 waypoints; get holidays, school holidays and peak traffic days; get customs rules on entry by car; get plug types, voltage and hook-up connectors.
Safety: get current FCDO advice level and GDACS disasters for a country; find NASA FIRMS active fires in a bounding box.
License plates: list countries with plate data; get formats, region codes and plate types; validate a plate; render plate images (PNG/SVG), including custom text.
All tools are read-only and idempotent, so nothing on the server can be modified.
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/ — 29 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.
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 | — |
| 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
29 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 cover the safety profile (readOnlyHint, idempotentHint, openWorldHint, destructiveHint=false), and the description adds genuinely non-redundant behavior: look-alike letter normalization and the explicit privacy boundary that it never identifies the owner or the vehicle's location. It does not address rate limits or data sourcing, but the added behavioral detail is meaningful.
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 the core action and its result, followed by the type override and the privacy disclaimer. The final 'Use it to check a specific plate number' sentence partly restates the opener, which is mild redundancy but serves as a routing hint.
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 details need not be explained, and all five parameters are fully described in the schema. The description supplies purpose, normalization behavior, privacy boundaries and usage, leaving it essentially complete for an agent to call correctly.
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 country, number, region, locale and type in detail, including the enum for locale. The description only echoes the normalization note and the type-override behavior, adding marginal meaning beyond structured fields. 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 (validate) plus resource (plate number), and adds the concrete output (which region the code belongs to). It also declares scope boundaries ('check a specific plate number'). It does not explicitly name a sibling such as get_license_plate_country or get_license_plate_image, so the differentiation is implied 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?
Gives a clear usage directive ('Use it to check a specific plate number') and explains that passing type checks against a specific plate type's format. That is actionable context, but there are no exclusions and no alternatives named for cases where another sibling tool is the right choice.
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 declare readOnly, idempotent, non-destructive and open-world, so safety is covered. The description adds genuinely new behavioral context: answers are probabilistic and carry a confidence level plus source, and the agent is told to propagate that uncertainty rather than assert rules. That is exactly the kind of disclosure annotations cannot convey.
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, both dense and front-loaded: the first lists exactly what rules are resolved, the second delivers the critical output caveat. No filler, no restatement of the tool name or title.
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 structure need not be explained, and the description still adds the important caveat about confidence and sourcing. The one gap is boundary-setting: it claims 'temporary vehicle import' while a dedicated get_vehicle_import_rules sibling exists, leaving overlap unresolved for the agent.
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 passport, destination, plate, weight and locale are all documented in the schema itself (including the green-card and vehicle-weight purposes). The description adds no additional parameter meaning beyond restating that the call is pairwise. 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?
Names the resource precisely (entry rules for a single passport+destination pair) and enumerates the dimensions it resolves: entry mode, length of stay, day-counting method, visa-run reset, temporary vehicle import. The phrase 'for one passport and destination' implicitly separates it from route-oriented siblings, but it never names get_route_visa_rules or get_vehicle_import_rules despite obvious overlap. Solid purpose, weak explicit sibling differentiation.
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 the stated scope: use it for a specific passport/destination pair. However, there is no explicit when-to-use guidance, no exclusion of the sibling tools that also cover visa and vehicle-import rules, and no mention of prerequisites. The agent must infer boundaries from overlap.
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 the safety profile is covered. The description adds genuinely useful context by explaining how to read the index (world average = 100, higher = more expensive), but says nothing about output shape, latency, or auth. With annotations carrying the behavioral 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?
Three short sentences, front-loaded with what the tool does and immediately followed by the interpretation rule and the usage trigger. The index explanation is slightly redundant with the scale parenthetical but each sentence 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, return values need not be described, and annotations cover the safety profile. The description supplies the metric's interpretation and a usage trigger, which is sufficient for a 3-parameter read-only comparison tool; only sibling routing 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%, and the locale parameter's own schema text already explains language and units behavior in detail. The description adds no parameter-level meaning 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?
States a specific verb (compare) and resource (food price index) plus the scale semantics (world average = 100, higher = more expensive). This distinguishes it from get_country_food_prices and rank_food_prices by scope ('between two countries'), though it never names those siblings.
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 where food is cheaper between two countries.' No exclusions or named alternatives are provided, so the agent must infer when get_country_food_prices or rank_food_prices is the better fit.
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 readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds the ordering behavior (cheapest-first), which is genuinely useful, but says nothing about rate limits, staleness of 'current' prices, or auth. A 3 reflects modest added value on top of rich 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?
Three tight sentences with zero filler, front-loading the operation and scope before the return shape and the usage trigger. 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?
With an output schema present and annotations covering safety, the description carries only operation, scope, ordering, and a usage trigger, which is sufficient to invoke correctly. Minor gaps: no hint about how 'current' data is sourced or updated, and no contrast with the overlapping fuel 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 description coverage is 100%, including the locale guidance and fuel_type default, so the baseline is 3. The description only restates that one fuel type is compared and the 2-10 country range; it adds no meaning 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 (compare), resource (current fuel prices), and scope (one fuel type across 2-10 countries), plus the return shape (sorted table cheapest-first). An agent can distinguish this from siblings like get_fuel_prices or find_cheapest_fuel 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?
Gives an explicit trigger: 'Use it when someone asks which of two or more named countries has cheaper or more expensive fuel.' That is clear context, but it names no alternatives or exclusions, so an agent still has to guess how it differs from find_cheapest_fuel or rank_food_prices-style siblings.
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 declare readOnly, idempotent, openWorld, non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: 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 must surface to the user.
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 dense sentences, front-loaded with the core capability, then the routing rule and alternative. Every clause carries information; 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?
An output schema exists, yet the description still summarizes the return shape (EUR range, per-country breakdown, partial-result flags) and gives clear when-to-use routing. Nothing needed to 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%, so each parameter (locale, waypoints, vehicle_class) is already fully documented including enum meanings and defaults. The description's '2-10 place names' restates the schema's waypoint constraints but adds no format or unit detail beyond it, 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?
States a specific verb (estimate) and resource (toll cost) with precise scope: 2-10 place names, per-km tolls, vignettes, bridges/tunnels, EUR range with per-country breakdown. It is distinguishable from siblings like get_toll_rates (rates, not a route estimate) and plan_road_trip (whole-trip planning).
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 guidance: '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 inclusion condition and the named alternative are given.
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 read-only, idempotent, open-world, and non-destructive behavior. The description restates ordering and scope but adds little behavioral context beyond the schema, such as rate limits, caching, or output format (output schema exists).
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 core ranking action and order behavior, but repeats 'order=most_expensive' and 'region or worldwide' across clauses, adding mild redundancy. Still compact and readable.
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?
Covers purpose, usage context, and ordering. With a rich schema, output schema, and annotations handling safety and returns, the definition is nearly complete for an agent; it omits only a note on locale/language effect, which the schema covers.
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 fully documented in the schema. The description only restates the order and region parameters without adding syntax, defaults, or usage nuance 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?
States a specific verb ('Rank countries') and resource (fuel price by region), with the ordering behavior. It is clear what the tool does, though it does not explicitly differentiate itself from siblings like compare_fuel_prices 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?
Provides clear context: useful for route planning and for answering 'where is fuel cheapest/most expensive' in a region or worldwide. It does not mention when not to use it or name alternative tools, 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_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, so safety is covered. The description adds genuinely useful behavior: a hard 48-hour recency window, a 10°×10° size cap, strongest-first ordering, and FRP in megawatts — all of which shape how results should be interpreted and how big a box the agent may request.
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 tightly packed sentences, front-loaded with what the data is and how fresh it is, then the usage case and the bbox format in a parenthetical example. Zero 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 an output schema present, return values need no explanation, and the description covers source, recency, size limit, ordering, and units. It stops short of noting result caps or behavior when no detections exist, but that is a minor omission for this tool's complexity.
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 both parameters are already documented with ordering rules, an example, and enum values. The description repeats the west,south,east,north ordering with a second worked example (Portugal), which guards against a common lon/lat mix-up but adds no information the schema lacks — 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?
States a specific source (NASA FIRMS VIIRS), resource (satellite fire detections), and scope (last 48 hours, ≤10°×10° bbox, sorted strongest-first, FRP in MW). No sibling tool overlaps with wildfires, so the agent can identify it instantly.
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 clear temporal and spatial triggering context. It does not name alternatives or exclusions, but there is no competing fire tool in the sibling list, so little is left ambiguous.
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 readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds behavioral value by disclosing what the tool produces (a 0-100 suitability score with sleep, driving and solar sub-scores over a 7-day horizon), which is the kind of domain context annotations cannot express.
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 output plus the key routing rule, and no sentence is wasted. However, the final sentence largely restates the second ('use this ... when the user names a place' vs 'use it for the weather in one named city, town or place'), which is mild 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 an output schema present, the description needn't enumerate return fields, yet it still summarizes them; annotations cover the safety profile and the schema covers all three parameters. Nothing an agent needs to select and correctly invoke this tool 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%, including locale semantics ('set it on every call') and country_code disambiguation, so the schema already carries parameter meaning. The description only reinforces the city concept via examples and adds nothing about locale or country_code, making 3 the appropriate baseline.
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 (travel weather suitability for campervan travel/sleep at a named place), the scoring model (0-100, sleep/driving/solar, today + 7 days), and explicitly distinguishes itself from get_country_travel_weather. An agent can tell exactly what this returns and how it differs from siblings.
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 routing rule: 'Use this, not get_country_travel_weather, when the user names a place,' with concrete examples (Barcelona, Málaga, Alicante). It also scopes the time horizon (today, tomorrow, this week), so both the when-to-use and the when-to-use-something-else conditions are covered.
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 cover the safety profile (readOnly, idempotent, openWorld, non-destructive), so the bar is lower. The description adds genuinely useful behavior beyond them: the relative index scale and that a yearly history is returned, which tells the agent the response shape is a time series.
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 immediately followed by when to call it. No filler, no repetition of the title, and the index baseline is placed where it is needed.
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, and the description still sketches the payload (index plus yearly history). For a two-parameter read-only tool this is nearly complete; only the single-country vs comparison routing is left implicit.
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_code, locale) are fully documented in the schema, so the schema does the heavy lifting. The description adds only the scale interpretation, not any parameter-level guidance such as the locale's effect on output language.
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 ('food price index for one country') and clarifies scope with the index scale (world average = 100). It implicitly separates itself from siblings like compare_food_prices and rank_food_prices via 'for one country', but never names or explicitly contrasts them.
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 when someone asks how expensive food, groceries or living is in a country. It stops short of stating when not to use it, e.g. routing multi-country comparisons to compare_food_prices or rank_food_prices.
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 declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: this is an aggregation call that answers a broad question 'in one call', which tells the agent it is the breadth-first option rather than a narrow lookup. It stops short of noting freshness, latency, or how comprehensive each bundled section is, so it is strong but not exhaustive.
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 purpose is front-loaded and the usage routing comes last, which is the right order. However, the capability enumeration is a long, dense run of items that could be tightened; every clause is relevant but the sentence is heavy.
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 the tool's complexity, an output schema that handles return values, and annotations that cover the safety profile, the description supplies the missing pieces an agent needs: the scope of content, the trigger conditions, and the sibling alternative. It could be a 5 with a note on how authoritative or time-sensitive each bundled section is, but nothing essential to invoking it correctly is absent.
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 country_code, locale and passport in detail. The description only touches parameters indirectly with '(with passport)', which restates the schema's own note that passport adds entry-rule and stay-duration output. Baseline 3 is appropriate when the schema carries the parameter burden.
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 resource (a full pre-trip country briefing for driving a car/campervan) and enumerates exactly what is bundled, from entry rules and stay duration to fuel, tolls, holidays, safety, plugs, customs and food prices. It also distinguishes itself from the many sibling single-topic tools, so an agent can tell it apart from get_fuel_prices, get_toll_rates, check_visa_rules, etc., 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?
It explicitly names the trigger conditions ('asks what to know about a country, the nuances or a guide for travelling there, or is preparing a trip to it') and the exclusion ('use the single-topic tools for one narrow question'). When-to-use, when-not, and the alternative are all stated, leaving nothing to inference.
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 declare readOnlyHint, openWorldHint, idempotentHint and destructiveHint=false, covering the safety profile. The description adds useful scope context (country-level aggregation, 0-100 scoring model, 7-day forecast window) beyond the annotations, but does not disclose caching, latency, rate limits, or failure modes. Given the rich annotations, 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?
Single dense paragraph but front-loaded with the core purpose and output list, then the routing rule, then the usage triggers. Slightly long and could be split, but every clause carries information; no obvious 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?
An output schema exists, so the description needn't explain return values, and it correctly summarizes the outputs instead. For a read-only, two-parameter tool with full schema coverage and rich annotations, the description covers purpose, scope distinction, and usage triggers. Remaining gap: no mention of latency, geographic coverage, or data freshness, which would help an agent set expectations.
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% – both country_code and locale are fully documented in the schema, including the ISO format and the locale fallback behavior. The description does not add syntax or format details for the parameters beyond what the schema provides. Baseline 3 is correct when the schema carries the full parameter burden.
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 (travel weather for a whole country) and enumerates the exact outputs (travel score, sleep score, solar yield, driving conditions, etc.). It explicitly distinguishes itself from the sibling get_city_travel_weather by scope.
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 city-level queries and lists concrete user questions that should trigger this tool: 'what the weather is like in a country', 'where in a country it is warmer/colder/sunnier', 'which cities are best or worst this week', 'whether it is too cold or rainy to sleep in a van now'. This is explicit when-to-use guidance with a clear boundary against the sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_currency_rateConvert CurrencyBRead-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, idempotentHint, openWorldHint, and destructiveHint=false, so the safety and caching profile is covered. The description adds two genuinely useful facts beyond that — 150+ currency coverage and daily rate updates (data freshness) — but says nothing about rate type, latency, or rate limits.
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 short sentences, well front-loaded, but the second sentence largely duplicates the first ('converting an amount between currencies') and adds only the vague 'exchange rates' use case. Roughly half the text does not earn 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, so return-value explanation is unnecessary, and annotations carry the safety profile while the schema carries full parameter detail. What remains — purpose, currency coverage, and update cadence — is present, leaving only minor gaps around rate semantics.
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 all four parameters, including the enum-rich locale field with its per-call instruction, are documented in the schema itself. The description contributes no parameter-level meaning, 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 states a specific verb and resource: converting an amount between two currencies, and adds live-rate scope (150+ currencies, daily updates). It doesn't differentiate from siblings because no sibling operates on currency, so nothing further is needed.
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, 'Use it for exchange rates and converting an amount between currencies,' is a restatement of the purpose rather than conditional guidance. No when-not-to-use, no prerequisites, and no alternative tool is named — though the sibling list contains no competing currency tool.
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?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds real behavioral context: each rule ships with a verbatim official quote and source link, and a country without data returns an error rather than an empty result. That error semantics disclosure is the kind of thing annotations cannot express.
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 most decision-relevant detail (error behavior) before the usage sentence. The content list is repeated twice (once as 'food bans, cash declaration, alcohol and tobacco limits…' and again as 'alcohol, tobacco, cash, meat and other food, goods limits'), which is mild redundancy rather than padding.
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 the description need not explain return structure; it still usefully notes the quote/source-link payload and the error-on-missing-data behavior. With 100% parameter coverage and full annotations, the agent has everything needed to call it correctly, leaving little beyond a sibling comparison 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%, so country_code, from and locale are fully documented in the schema. The description adds only the implicit point that the 'from' country is optional and origin-sensitive; it contributes no syntax or format beyond what the schema already provides. Baseline 3 is correct.
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 covered domains (food bans, cash declaration, alcohol/tobacco limits, goods value, fuel canister). It does not explicitly name a sibling such as get_vehicle_import_rules, so the boundary is left implicit, but the purpose is unmistakable.
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 what you may bring in by car: alcohol, tobacco, cash, meat and other food, goods limits' gives clear positive context, and the error-case warning ('never present that as nothing is restricted') is genuinely useful guidance. There is no explicit when-not-to-use or named alternative, 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_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=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds nothing beyond what those hints provide — no mention of rate limits, auth, or whether a missing slug errors versus returns empty.
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 front-loaded sentence with the verb, resource, and retrieval key all present and no filler. Every word 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?
With an output schema present, return values need no explanation, and rich annotations cover the safety profile; the description therefore only needs to establish scope, which it does. Minor gap in not acknowledging the missing-event behavior or the list_events prerequisite.
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 parameter has a rich description covering language/units fallback behavior. The description adds no parameter meaning beyond what the schema already documents, 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?
States a specific verb (get), resource (vanlife event), and scope (single, by slug), which cleanly distinguishes it from the list_events sibling without needing the schema. It falls short of 5 only because it does not name the sibling or a distinguishing boundary 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 word 'single ... by its slug' implies the tool is for retrieving one known event, and the required slug implies a prior list/search step, but neither is stated. No alternatives (list_events) or prerequisites are named, leaving usage to inference.
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 readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds useful scope behavior: coverage across all API-supported countries, the full fuel-type set, and that omitting country_code downgrades the response to a summary list. It says nothing about data freshness beyond 'current' or rate limits, so it is 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?
Front-loaded with the resource, then the fuel coverage, then the parameter behavior. The final sentence largely repeats the country_code behavior already stated one sentence earlier, which is mild redundancy, though the petrol/gasoline/autogas synonyms add value for query matching.
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 description covers scope, fuel types, and both operating modes. The main gap is that it never routes the agent away from the closely related compare_fuel_prices and find_cheapest_fuel siblings, which are the most likely mis-selection candidates.
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 both locale and country_code in detail. The description's 'Pass country_code to get one country in detail; omit it for a summary list' restates what the schema field description already says, and it ignores locale entirely. 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 and resource ('Current retail fuel prices') and enumerates the covered fuel types, so the agent knows exactly what data comes back. It also distinguishes the two operating modes (single country vs. overview). It stops short of naming the directly competing siblings (compare_fuel_prices, find_cheapest_fuel), so an agent could still pick the wrong fuel tool.
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 context: 'Use it for the price of petrol, diesel, LPG/autogas/propane or CNG in one country; without a country it gives an overview.' This maps intent (single price vs. overview) to the presence of country_code. No exclusions or named alternatives are given, so it does not reach a 5.
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?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower; the description still adds the 400-day range limit and, importantly, the error-on-missing-data behavior that an agent must not misreport. This is genuine beyond-annotation 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?
Three compact sentences with no filler, and the scope (three holiday kinds, one country, up to 400 days) is front-loaded before the error caveat. Slightly dense but 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?
An output schema exists, so return-shape explanation is not needed. With annotations covering safety and the schema covering all five parameters at 100% coverage, the description supplies exactly the missing pieces: scope, the range limit, and the error-interpretation caveat.
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 from/to defaults, the 400-day cap, the kind enum, and locale. The description adds only the note that school holidays are often regional with ISO 3166-2 codes and that traffic days are France-only, which mostly duplicates the schema's kind description. 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 names a specific resource set — public holidays, school holidays, and official peak traffic days — scoped to one country over a bounded period, which is unambiguous. It lacks an explicit verb framing and does not name a sibling, but no sibling tool covers holidays, so confusion risk is low.
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 use cases directly ("Use it for public holidays, days off, school holidays and peak traffic days") and gives an operational rule about error results — "never present that as 'no holidays'". It does not name a when-not case or a competing tool, but the guidance is concrete and actionable.
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, idempotentHint, destructiveHint=false and openWorldHint, so the safety and determinism profile is fully covered. The description adds domain content about what is returned but no operational behavior such as caching, freshness, or fallback behavior when a region code is unknown. Useful, but nothing beyond what the annotations and output schema already convey.
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 content-bearing enumeration first and the usage directive second, with no filler. The first sentence is dense with parenthetical lists but every clause maps to a real output field, so little is wasted.
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 the description need not explain return structure, and it correctly focuses on scope and content instead. For a two-parameter, read-only lookup this is close to complete; the only gap is the missing sibling disambiguation against check_license_plate and list_license_plate_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 description coverage is 100%, and both parameters (ISO alpha-2 country, locale enum) are already described thoroughly in the schema, including the instruction to set locale on every call. The description adds no parameter-level detail (e.g. country-code case sensitivity), so the schema does all the work; 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?
The description concretely enumerates the resource contents: a country's plate format (standard, size, format), plate types (diplomatic, police, taxi), and region codes grouped by region, with concrete examples (77, 199). This tells the agent exactly what data comes back. It never differentiates itself from the closely named siblings check_license_plate or list_license_plate_countries, so it stops just 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?
The second sentence gives explicit trigger conditions — 'Use it for what a plate region code means ... and a country's plate format.' That is clear, actionable context. However, it offers no exclusions and does not name the alternative tools (e.g. check_license_plate for validating an actual plate), which the routing agent would benefit from.
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 the read-only, idempotent, non-destructive profile, so the description only needs to add context — and it does: output is an inline PNG plus SVG/PNG links, the number must match the country's standard format, and several plate classes are refused. No auth, rate-limit, or failure behavior is described, but for a stateless rendering tool that is minor.
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 front-loaded sentences with no filler; the scope restriction appears before the closing usage line. The final sentence ('Use it to draw or show a picture of a plate') partially restates the opening, costing a little tightness.
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, and all four parameters are fully described in the schema. The description covers scope, format constraint, and output media; only error behavior for a malformed/invalid plate number is left unspecified.
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 the 'number' constraint ('must match the country's standard format') but adds nothing about region handling or the locale parameter, which the schema already documents thoroughly.
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 immediately scopes it to civilian standard plates, excluding official, police, military and diplomatic ones. This separates it cleanly from siblings like check_license_plate (validation) and get_license_plate_country (metadata).
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 positive trigger, and the official/police/military/diplomatic exclusion defines when-not for plate categories. However, it never names the alternative tools (check_license_plate, list_license_plate_countries) an agent might confuse this with, so routing still requires inference.
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 cover the safety profile (readOnly, idempotent, non-destructive, openWorld). The description adds genuinely new behavioral facts: that the response includes the source of the value, and that the CEE17 campsite hook-up data is Europe-specific — a real geographic scope limit not visible in the annotations or 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?
Front-loaded with the returned data types, which is the right ordering. The second sentence largely restates the first ('socket and plug types', 'mains voltage', 'campsite hook-ups'), so a small amount of redundancy keeps it from 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?
An output schema exists, so return values need no further explanation, and the read-only annotations carry the safety burden. With the required country_code, the locale behavior, and the Europe-only caveat all accounted for, an agent has everything needed to call this correctly.
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%, with both country_code (ISO 3166-1 alpha-2) and locale fully documented in-schema. The description only echoes 'one country', adding no format or syntax detail beyond the schema, 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 names a precise resource set — IEC plug types A–N, mains voltage and frequency, value provenance, and the CEE17 campsite connector — scoped to 'one country'. No sibling tool touches plugs/voltage, so an agent can select this unambiguously from the tool list.
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 explicitly enumerates the query intents it serves (socket/plug types, adapters, mains voltage, campsite hook-ups), giving clear when-to-use context. It stops short of exclusions or naming an alternative, though no sibling overlaps this domain.
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 covered. The description adds the batch limits (up to 10 passports) and hints at a 'tightest leg' aggregate in the response, which is modest extra context but no auth, rate-limit, or failure-mode 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?
A single sentence with the route-scoping benefit front-loaded and no filler. It is dense but readable; the closing 'plus the tightest leg of the route' clause is informative though slightly compressed.
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 100%-covered input schema handles parameters. The description covers what the tool does for a 4-param, one-required read tool; only cross-tool routing guidance is thin.
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 locale, weight, countries and passports are all already documented with semantics and enums. The description restates the passport limit (10) but adds no format or meaning beyond the schema; baseline 3 is correct.
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 (visa rules) scoped to a route, plus the batch capability (up to 10 passports) and the distinguishing 'tightest leg' output. It differentiates itself from siblings like check_visa_rules by implication of route-wide batching, but never names the 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?
Usage is implied by the framing ('in one call', multi-country, multi-passport), which suggests this is the batch/route variant, but there is no explicit when-to-use vs. check_visa_rules guidance or exclusion criteria. An agent must infer the routing from the phrasing alone.
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 readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered. The description adds useful content context (verification date and source per entry, vehicle classes) but says nothing about pagination, rate limits, or response structure beyond what the output schema likely provides.
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 resource and its contents, then usage. The long content enumeration is dense but each item adds informational value; no filler sentences.
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-value explanation is unnecessary, and annotations cover safety. The description sufficiently conveys scope and content for a two-parameter read tool; only the relationship to the route-toll sibling is left implicit.
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 country_code and locale are already well documented in the schema. The description implies country scoping and the vehicle-class dimension but adds no syntax or format detail beyond the schema, 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?
States a specific resource (toll reference for one country) and enumerates concrete contents: payment system, per-km rates by vehicle class, vignette prices, concession sections, toll bridges/tunnels. It does not name or distinguish itself from the sibling estimate_route_tolls, which covers a closely related route-based use case.
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 context: use it for toll roads, motorway fees, and whether/at what cost a vignette is needed in one country. However, it never names the obvious alternative (estimate_route_tolls) or states when a per-route estimate is preferable, so there are no explicit exclusions.
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 readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description earns credit by disclosing the external data provenance (FCDO + GDACS), the alert-level scale, and importantly that this is a point-in-time snapshot rather than a forecast — a real behavioral constraint not captured by 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?
Three compact clauses: scope and contents first, the freshness caveat second, usage triggers last. No filler and nothing repeated from the schema or annotations.
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 details are not needed. Given the read-only, single-lookup nature of the tool and the annotation coverage of safety, the description supplies everything needed to select and call it correctly: source, scope, freshness semantics, and the alert scale.
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 are well documented in the schema itself (country_code format, locale language/units behavior). The description adds nothing about either parameter, 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?
States a specific verb and resource scoped to 'one country' and enumerates the two concrete data streams it returns (UK FCDO advisory level and GDACS disaster events with green/orange/red alert levels). This distinguishes it cleanly from siblings like get_country_travel_brief, get_active_fires, or get_country_travel_weather.
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 triggering intents ('whether it is safe to go to a country now', 'travel warnings or natural disasters') and a negative boundary ('Not a forecast'). It does not name a sibling to use instead for related needs (e.g. fire-specific or weather queries), so routing when this is the wrong choice is left partly to inference.
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 and non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: it discloses the coverage caveat that an unverified country 'returns nothing rather than a guess', telling the agent that an empty result means no data rather than an error or a zero-day allowance.
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 dense sentences with zero filler: the second sentence, the coverage caveat, is arguably the most decision-relevant information and is given equal weight. Nothing is repeated from the schema or annotations and nothing is padded.
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 only two well-documented parameters, rich read-only annotations, and an output schema handling return shape, the description needs to cover only purpose and surprising behavior — and it does both, including the empty-result semantics. Nothing an agent needs to invoke 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 description coverage is 100% — both 'country' and 'locale' are documented in the schema, including the locale enum and its fallback behavior. The description adds only 'in one country', which restates the single-country scoping already implied by the required country parameter. Baseline 3 is correct when the schema carries the parameter semantics.
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 — temporary admission rules for a foreign-plated vehicle in one country — and enumerates the exact facts returned (allowed days, per entry vs per window, carnet, green card). An agent can tell it apart from general customs or visa tools on field content. It stops short of 5 because no sibling (e.g. get_customs_rules, check_visa_rules) is explicitly contrasted.
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 the tool name and the phrase 'in one country', which makes the country-scoped lookup obvious. However, there is no explicit statement of when to use this versus get_customs_rules or check_visa_rules, and no prerequisites or exclusions are given. Adequate but with a clear routing gap.
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/non-destructive, so safety is covered. The description adds genuinely new behavioral context the annotations cannot convey: the temporal scope ("today's conditions and the coming days, not a forecast for a later month") and the warning that warmest ranking puts deserts first.
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 action, then progressively narrower guidance. Somewhat dense with parenthetical examples and guillemets, but every clause carries routing information rather than 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 an output schema present, return values need no explanation, and the description covers scope, ranking mode, region handling, and the key temporal pitfall. The only omission is any mention of locale/units behavior, which is left to the schema description.
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 is 3, but the description goes beyond the schema by explaining intent mapping ("warm and pleasant" → default score; region=europe example) and the consequence of sort=warmest. It does not add format details for limit/locale 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?
Starts with a concrete verb+resource: "List the N countries where today's weather is best for travelling by campervan, highest 0-100 travel score first." It also implicitly separates itself from the per-place siblings (get_country_travel_weather, get_city_travel_weather) by being the global ranking tool.
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 when-to-use conditions: "when no country is named and someone asks where to go for warm or good weather right now," plus the region variant and a precise exclusion rule for sort=warmest that disambiguates "warm and pleasant." It also states the negative case (later-month forecasts are out of scope).
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, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds domain scope (what counts as an event) but omits a meaningful behavioral trait: the schema default status='upcoming' means past events are excluded unless overridden, which an agent would not learn from the description.
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, front-loaded with the resource and scope, then the filter options. 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?
An output schema exists, so return values need not be explained, and the annotations carry the safety profile. The only real gap is the undisclosed default status filter, which is a minor but relevant omission for a list 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 83% and the enums and locale parameter are already richly documented in the schema. The description names the filterable dimensions but adds no syntax, defaults, or format detail (e.g. the 2-letter country code, the limit cap) beyond what the schema provides, 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 verb ('List') and resource ('vanlife events'), then enumerates the event categories it covers (expos, festivals, meetups, forums, road trips) and the filter dimensions. This clearly separates it from the singular sibling get_event.
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 filter list ('status, type, country, or free-text search') implies how to narrow results, but there is no explicit when-to-use guidance, no mention of the alternative get_event for fetching a single event, and no exclusions. Usage is inferable but not stated.
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 CountriesARead-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, openWorldHint and destructiveHint=false, covering the safety profile for this catalog lookup. The description only adds that results include a code, region count and sample plate — useful for interpreting output, but not much behavioral depth 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 sentence that front-loads what the tool returns and contains no filler or 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 an output schema present the description need not explain return structure, and it already summarizes the payload fields. For a single optional-parameter read-only catalog tool this is essentially complete, lacking only sibling routing guidance.
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 single optional 'locale' parameter is fully documented in the schema, including its fallback behavior. The description adds nothing about the parameter, 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 names a clear verb-resource pairing (listing countries for which license plate data exists) and even previews the returned fields (international code, region count, example plate). It does not explicitly differentiate itself from close siblings like get_license_plate_country or check_license_plate, but the plural/list framing makes its role legible.
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: the agent must infer that this is a discovery/enumeration step before drilling into a specific country via get_license_plate_country. There is no explicit when-to-use or when-not-to-use statement, nor any reference to alternatives.
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/idempotent/non-destructive, so the safety profile is covered; the description adds real value by disclosing what the output contains and that it 'Returns a link to the full roadbook the user can open, edit and share'. It does not mention that generation may be asynchronous or require polling get_roadbook_build_status, which is the one behavioral trait still hidden.
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 and the trailing sentences about the returned link and the 'use this first' routing rule are well placed. The middle sentence is a long comma-heavy enumeration of outputs that is dense to parse, though each item does earn 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?
With an output schema present, return values need not be explained, yet the description still summarizes them; all 17 parameters are covered by the schema. The only meaningful omission is the async/roadbook-build workflow implied by the get_roadbook_build_status sibling, which the description does not address.
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 all 17 parameters are individually documented with formats, enums, ranges and defaults. The description restates only the 2-10 waypoint bound and the budget categories, adding no syntax or semantics beyond the schema, 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 gives a specific verb and resource ('Plan a road trip by campervan or car between 2-10 places with the OpenVan.camp roadbook') and enumerates the concrete outputs (distance, driving time, day-by-day plan, budget, per-country entry rules, Schengen 90/180, LEZ stickers, holidays, plugs). It is clearly distinguishable from narrower siblings such as get_route_visa_rules, estimate_route_tolls or get_country_travel_brief, which cover only single slices of what this tool bundles.
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 this first when the user describes a trip from A to B' gives an explicit trigger and priority ordering relative to the sibling lookup tools. It stops short of naming when NOT to use it, and given the existence of get_roadbook_build_status it never explains the follow-up workflow if the roadbook is still building.
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 and openWorldHint, so safety is covered; the description adds the index interpretation (100 = world average) and the consequential locale behavior (answer and interactive card language/units, fallback to app interface language). It omits tie-breaking or coverage caveats, but adds real 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, zero filler, with the ranking behavior and index scale front-loaded before the routing sentence. Every clause 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?
A read-only listing tool with zero required parameters, documented defaults, three enums and an output schema that carries the return shape. Nothing needed for correct invocation is missing, and the locale caveat covers the one behavior the schema underplays.
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%, with enums and defaults documented for order, region, locale and limit, which sets the baseline at 3. The description restates the order semantics but adds no syntax or edge-case detail beyond what the schema already provides for any parameter.
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 (rank) and resource (countries by food price index), defines the index scale (world average = 100), and specifies the scope (region or worldwide). The 'use it when someone asks where food or groceries are cheapest' framing also implicitly separates it from sibling tools like compare_food_prices and get_country_food_prices, which answer different questions.
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 a user asks where food/groceries are cheapest or most expensive. That is clear context for invocation, but it never names the alternative siblings (compare_food_prices, get_country_food_prices) or states when those should be preferred, so there is no explicit exclusion.
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 declare readOnlyHint=true, openWorldHint=true, idempotentHint=true and destructiveHint=false, so safety is covered. The description adds genuinely useful behavior beyond that: the exact fields returned per story, the 300-character summary cap, publisher credit/linking, and the explicit 'Never returns full article text' constraint, which shapes agent expectations about completeness of 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 tightly packed sentences: scope and provenance first, return shape second, filter axes last. Every clause carries information and nothing is repeated from the schema.
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 fully specified, yet the description still summarizes them. Scope, source, filtering, and the no-full-text limitation are all covered, leaving nothing an agent needs in order to call this correctly.
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 80%, so the schema already documents each filter (including a detailed locale explanation) and the 1-20 limit bounds. The description restates the filter axes (headline words, category, country, language) without adding format or syntax detail, 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?
States a specific verb (Search) and resource (recent news about campervans, motorhomes and road travel), names the data source (OpenVan.camp from public news sources), and enumerates the filter dimensions. No sibling tool in the list covers news, so the agent can distinguish it 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?
The description establishes the content domain clearly, which implies when it is useful, but it never states when to use it versus other tools nor any exclusions or prerequisites. With no sibling overlap this is minor, yet the guideline burden is left to inference.
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.
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 29 tools
Tools are largely distinct, with clusters around fuel, food, weather, visa, and license plates clearly separated by scope (single country, compare, rank, route). Minor overlap remains where broad tools like get_country_travel_brief or plan_road_trip could be chosen for narrow questions, but descriptions guide selection well.
All tools use consistent snake_case verb_noun naming (get_, list_, compare_, find_, rank_, estimate_, check_, plan_, search_). There are no mixed conventions or vague verbs.
29 tools is heavy for a single travel-info server. Several topic areas (fuel, food, weather, visa, license plates) could be consolidated into fewer parameterized tools, though each tool is distinct and the broad domain justifies some of the surface.
The surface covers trip planning, country briefs, fuel, weather, visas, tolls, holidays, hazards, customs, plugs, and plates, which is very comprehensive for travel information. Obvious gaps include campsite/aire search and real-time road conditions, but agents can work around these.
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,186 npm550MIT
- 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.12229MIT
- AlicenseAqualityAmaintenanceMCP server that exposes any Pumperly instance to LLMs, enabling real-time fuel price queries, station search, route planning, and geocoding.5119 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