Skip to main content
Glama

OpenVan.camp Public API

OpenVan.camp — free road-trip data API for every country

MCP server on npm SDK on npm npm downloads Data: CC BY 4.0 CI Published packages work OpenVan.camp MCP server on Glama

Free, no-auth API for vanlife data: fuel prices, route fuel cost, toll roads, holidays and peak traffic days, travel hazards, ferry and river crossings with operator sites and timetables, 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/ — 32 read-only tools with interactive cards in Claude and ChatGPT (incl. plan_road_trip — a whole-trip roadbook), hosted at https://mcp.openvan.camp/mcp, or locally npx -y @openvancamp/mcp-server for Claude Desktop / Cursor / Windsurf. Install docs → · AI agents guide →

Gemini CLI extension: install this repository with gemini extensions install https://github.com/openvancamp/openvan-camp-public-api. The root gemini-extension.json connects Gemini CLI directly to the hosted OpenVan.camp MCP server; no API key is required.

Plugin for coding agents (Claude Code, Codex): the hosted MCP server plus two agent skills — openvan-travel answers trip questions with the right tools, openvan-api writes code on this API with attribution, per-grade fuel units and caching done right. Claude Code: /plugin install openvan-camp --marketplace openvancamp/openvan-camp-public-api (or /plugin marketplace add openvancamp/openvan-camp-public-api, then /plugin install openvan-camp@openvan-camp). Codex: codex plugin marketplace add openvancamp/openvan-camp-public-api, then install OpenVan.camp from the Plugins Directory. Skills only, for any agent: npx skills add openvancamp/openvan-camp-public-api.

In your AI assistant, no code: Claude connector · ChatGPT app · Telegram bot @OpenVanCampBot — the same data as interactive cards in the chat. How to connect →


What is authoritative

Resource

Purpose

This README

Quick overview and code examples

/docs

Interactive documentation with "Try it out"

/docs.openapi

Full OpenAPI 3.0 contract (always up to date)

/docs.postman

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

GET /api/fuel/prices

Retail fuel prices (gasoline, diesel, LPG, E85)

170+ countries

POST /api/route-cost

Fuel cost for a route of 2–10 waypoints, per-country prices

—

POST /api/roadbook/from-places

Whole-trip roadbook from 2–10 place names: day-by-day plan, budget, per-country entry and vehicle rules; returns a shareable page

—

GET /api/roadbook/{code}/status

Build status of a roadbook (poll until ready)

—

GET /api/tolls/countries

Toll roads by country: payment system, per-km rates by vehicle class, vignettes

80+ countries

GET /api/tolls/route

Toll cost for a route of 2–10 place names (car, van, heavy), EUR range

—

GET /api/holidays/countries/{code}?from=&to=

Public holidays, school holidays (regional) and peak traffic days

210+ countries

GET /api/hazards/countries/{code}

UK FCDO travel advice level and current GDACS natural disasters

—

GET /api/hazards/fires?bbox=

NASA FIRMS active fires of the last 48 hours in a bounding box (up to 10°×10°)

worldwide

GET /api/ferries?bbox=

Ferry and river crossing lines and ports (GeoJSON, OpenStreetMap, ODbL) with hand-checked operator sites and booking links

worldwide

GET /api/ferries/{id}/schedule

Timetable digest from open GTFS feeds: next departures, weekdays, rhythm, travel time

820 crossings (Oct 2026)

GET /api/electricity/countries/{code}

Plug types, mains voltage and frequency, campsite hook-up (CEE17)

220+ countries

GET /api/customs/countries/{code}?from=

Customs rules on entry by car: food, cash, alcohol, tobacco, fuel canister

—

GET /api/currency/rates

Exchange rates relative to EUR

150+ currencies

GET /api/vanbasket/countries

Food price index relative to world average (100 = world avg)

90+ countries

GET /api/vanbasket/compare?from=DE&to=TR

Compare food costs between two countries

—

GET /api/vanbasket/countries/{code}

Single country + historical snapshots

—

GET /api/vansky/weather

Vanlife weather suitability scores (0–100) with 7-day forecast

160+ countries

GET /api/vansky/weather/{code}

One country, with marine and solar data

—

GET /api/vansky/weather/{code}/{city}

One city as on its page: today and the week, place in the country, per-day score breakdown, worst day, air quality, recommendations (include=hourly for 3-hour steps)

—

GET /api/vansky/weather/{code}/cities

Cities of a country ranked by the week score (as on the site) or today

—

GET /api/vansky/ranking

Countries ranked by the week score or today, by region

160+ countries

GET /api/vansky/methodology

How the VanSky score is calculated: curves, weights, adjustments — recompute it yourself

—

GET /api/vansky/climate?lat=&lng=&date=

Typical weather on any day of the year anywhere (ERA5 2021–2025): temperature, precipitation days, sky, sea, solar, VanSky index, months, best month

worldwide

GET /api/vansky/climate/{code}/{city}

The same for a VanSky city

—

GET /api/visa/check?passport=RU&destination=TR

Entry rules: entry mode, length of stay, how days are counted, vehicle import

199 destinations

GET /api/visa/route?t=RU,GE,TR&p=RU

Visa rules for a whole route, up to 10 passports

—

GET /api/visa/passport/{code}

All destinations for one passport

—

GET /api/visa/vehicle/{place}

Temporary vehicle import rules for a country

—

GET /api/events

Vanlife events: expos, festivals, meetups, road trips

1,100+ events

GET /api/event/{slug}

Full event details with geo coordinates

—

GET /api/event/{slug}/articles

Source articles linked to an event

—

GET /api/stories

News stories aggregated from 200+ publishers

31,000+ stories

GET /api/story/{slug}

Full story with all source articles and direct links

—

GET /api/news/search?q=...

Semantic search over stories

—

GET /api/news/digest

Today's news digest

—

GET /api/plates

License plates of the world: formats, region codes, example plates

199 countries

GET /api/plates/{code}/types

Plate types of a country (private, taxi, motorcycle, diplomatic…); empty where not broken down

—

GET /api/plates/{code}/plate.svg

Ready plate image (also .png) — drop into <img src>

—


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:

  • unit is "liter" for most countries, "gallon" for US and Ecuador

  • is_excluded: true means 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

locale

en ru de fr es pt tr

en

status

upcoming ongoing past all

upcoming

type

expo festival forum meetup roadtrip

—

country

ISO 3166-1 alpha-2

—

search

text

—

page

integer

1

limit

integer (max 100)

30

# 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 locale silently falls back to en

  • /api/event/{slug}/articles returns source articles filtered by locale; 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

locale

en ru de fr es pt tr

en

category

category slug (e.g. camping, travel, gear, incident)

—

country

ISO 3166-1 alpha-2

—

search

text

—

page

integer

1

limit

integer (max 50)

20

# 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:

  • title and summary are translated to the requested locale

  • sources[].language is always the original publisher language, regardless of locale

  • sources[].original_url is 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&region=77" alt="A123BC 77">
  • plate.png?width=800 — PNG, 200–2000 px wide, transparent background

  • Look-alike Latin letters are normalized (A123BC → А123ВС on Russian plates)

  • A number outside the country format returns 422; add custom=1 to draw any text (e.g. a name)

  • Images are served Cache-Control: public, max-age=31536000, immutable; image URLs returned by the API carry v=<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&region=799" # valid? which region?
curl https://openvan.camp/api/plates/ru/random                              # random plate + image URLs

Plate 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&region=790&type=police"
<img src="https://openvan.camp/api/plates/ru/plate.svg?number=190Т307&region=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/status

10 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"

# Ferry and river crossing lines and ports in a box; zoom sets geometry detail (ODbL)
curl "https://openvan.camp/api/ferries?bbox=4.9,58.8,6.2,59.4&zoom=9"

# One crossing with both ends, then its timetable digest in the operator's local time
curl https://openvan.camp/api/ferries/r5958961
curl https://openvan.camp/api/ferries/r5958961/schedule

# 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/json

Rate 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.

Ferries are the exception: lines and ports from /api/ferries are an OpenStreetMap derivative under ODbL — credit "© OpenStreetMap contributors" as well, and timetables carry the license of their GTFS feed (_attribution and sources name it).

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

cyfuel

Fuel-price map that ranks an "efficient fill": tank cost plus the fuel burned driving there (cyfuel.cybush.uk)

fuel prices

DriveLog

Driving and fuel log web app

fuel prices

E-Logistic

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:

[![Data: OpenVan.camp](https://img.shields.io/badge/data-OpenVan.camp-467187)](https://openvan.camp/)

Data: OpenVan.camp


JavaScript / TypeScript SDK

npm install @openvancamp/sdk
# or: pnpm add @openvancamp/sdk
import { 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

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

32 tools
check_license_plateCheck A License PlateA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
typeNoPlate 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.
localeNoLanguage 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.
numberYesPlate number without the region, e.g. A123BC. Look-alike Latin letters are normalized.
regionNoRegion code if the country shows one, e.g. 77.
countryYesISO 3166-1 alpha-2 country code, e.g. RU.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: look-alike letter normalization, region-code inference, and a privacy boundary stating it never identifies the owner or vehicle location.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, front-loaded, and covers the main behavior in the first sentence. The final sentence, "Use it to check a specific plate number," is somewhat redundant with the opening sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given full schema coverage, an output schema, and complete annotations, the description adds the necessary remaining context: validation scope, normalization, region inference, type filtering, and privacy limits. Nothing critical for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are already documented in the schema. The description reinforces the type parameter's purpose and mentions normalization, but adds little beyond the schema's own parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: validate a plate number against a country format and identify the region code. It is clear what the tool does, but it does not explicitly differentiate itself from sibling tools such as get_license_plate_country or get_license_plate_image.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear use case: "Use it to check a specific plate number," and explains that the type parameter checks against a specific plate type's format. It does not explicitly name when not to use it or which sibling tool to choose instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_visa_rulesCheck Visa RulesA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
plateNoPlate origin for the green card rule.
localeNoLanguage 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.
weightNoVehicle weight class for the vehicle rule: le35 (<=3.5 t) or gt35.
passportYesISO 3166-1 alpha-2 code of the passport, e.g. RU.
destinationYesDestination: ISO alpha-2 code, slug or zone code, e.g. TR.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey read-only, idempotent, open-world behavior, so the bar is lower. The description adds real value beyond them by disclosing that answers carry a confidence level and source and instructing the agent to propagate them rather than asserting rules as certain — a meaningful epistemic caveat not encoded anywhere in structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the scope, then a distinct instruction about confidence/source. Dense but every clause earns its place by naming a returned dimension. The first sentence is long and list-heavy, but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, the description needn't explain return shape, and annotations cover the safety profile. It fills the remaining gaps — the domains checked and the uncertainty/attribution requirement. The only missing element is disambiguation from sibling country/vehicle-rule tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents passport, destination, locale, plate, and weight in detail. The description adds only indirect hints — 'passport and destination' framing and the mention of 'temporary vehicle import,' which gestures at plate/weight — but never names or explains any parameter. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (entry rules for one passport/destination) and enumerates exactly what is returned: entry mode, allowed stay length, day-counting method, visa-run reset behavior, and temporary vehicle import. It does not distinguish itself from close siblings such as get_route_visa_rules, get_customs_rules, or get_vehicle_import_rules, which is the only thing keeping it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'entry rules for one passport and destination' but there is no explicit when-to-use or when-not-use guidance, and no routing to alternatives. With siblings like get_route_visa_rules and get_vehicle_import_rules in the same family, an agent could easily pick the wrong one; the description gives no help there.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_food_pricesCompare Food PricesA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
toYesDestination country ISO alpha-2 code.
fromYesHome country ISO alpha-2 code.
localeNoLanguage 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

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so safety and idempotency are covered. The description adds genuine value beyond that by explaining the index semantics (world average = 100, higher = more expensive), which is interpretation an agent needs and cannot get from the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences: the first establishes purpose and scale, the second establishes the usage trigger. Nothing is redundant and the most important framing (the index scale) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, annotations covering the safety profile, and full schema documentation, the description only needs to add interpretation and routing. It handles the index semantics and a usage trigger well, though it stops short of distinguishing this tool from its food-related siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both 'from'/'to' ISO codes and the 'locale' enum fully documented (including the fallback behavior when locale is omitted). The description adds no parameter-level detail beyond the schema, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (compare) and resource (food price index) and explains the scale so the agent knows what the number means. It does not differentiate itself from food-related siblings like get_country_food_prices, rank_food_prices, or the analogous compare_fuel_prices, leaving the agent to infer the distinction from the name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger: 'when someone asks where food is cheaper between two countries.' This clearly sets context but names no alternatives or exclusions, so the agent must independently figure out when to prefer get_country_food_prices or rank_food_prices instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_fuel_pricesCompare Fuel PricesA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
localeNoLanguage 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_typeNoFuel type to compare. e.g. gasoline, diesel, lpg, cng, e85.diesel
country_codesYesArray of 2-10 ISO 3166-1 alpha-2 country codes to compare.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is settled. The description contributes beyond that by disclosing the return ordering (sorted cheapest-first), which meaningfully changes how an agent presents results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero filler: capability and scope first, return shape second, usage trigger third. Every sentence carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the annotations cover safety semantics. What remains uncovered is edge behavior with unrecognized or unsupported country codes; a brief note on that would close the gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so country_codes bounds, the fuel_type enum with its diesel default, and the locale enum are already fully documented in structured fields. The description only restates the count range and single-fuel-type scoping, adding no new syntax or edge-case meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (compare fuel prices) and scopes it precisely: one fuel type across 2-10 countries. This implicitly separates it from get_fuel_prices (single country) and find_cheapest_fuel, though neither sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger condition: use when someone asks which of two or more named countries has cheaper or more expensive fuel. It does not state when NOT to use it (e.g., a single country query should go to get_fuel_prices), so an agent must infer the exclusion from the 2-10 country constraint.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

estimate_route_tollsEstimate Tolls For A RouteA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
localeNoLanguage 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.
waypointsYes2-10 place names in travel order: cities or countries (a country means its capital), e.g. ["Rome", "Paris"].
vehicle_classNocar; van = campervan/motorhome up to 3.5 t (default); heavy = over 3.5 t.van

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description still adds real behavioral context beyond them: output is a EUR range with per-country breakdown, and it flags partial results when a country on the route lacks data — an important caveat an agent should relay. It does not mention latency or rate limits, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with zero padding: capability and output first, the partial-data caveat second, the routing constraint last. No restatement of the title and nothing that could be cut without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value structure need not be explained, and annotations carry the safety profile; the description supplies output granularity and the partial-result caveat. Slightly incomplete in not indicating that a country waypoint resolves to its capital (left to the schema) or roughly how partial results appear, but nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so waypoint limits, the locale behavior, and the vehicle_class enum/default are fully documented in structured fields. The description mostly restates the 2-10 place-name bound already in the schema and adds no meaning for vehicle_class or locale. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Estimate toll cost for a road trip'), the input shape (2-10 place names), and the output form (EUR range with per-country breakdown). It also names the sibling it is not — plan_road_trip — so the agent can distinguish the two without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: 'Use it only for the toll cost between named places when no other trip details are asked; for a whole trip use plan_road_trip.' Both the when and the when-not with a named alternative are present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_cheapest_fuelFind Cheapest FuelA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
limitNoHow many countries to return.
orderNocheapest first (default) or most_expensive first — «where is fuel the most expensive».cheapest
localeNoLanguage 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.
regionNoRegion to search. Default: world (all countries).world
fuel_typeNoFuel type. e.g. gasoline, diesel, lpg, cng, e85.diesel

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds ranking-order behavior and route-planning relevance, but does not discuss data freshness, coverage limits, or response format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the ranking behavior and remains fairly short. The final sentence repeats the cheapest/most-expensive examples and region/worldwide scope already implied earlier, adding some redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With full schema coverage, an output schema, and safety annotations, the description provides enough context to call the tool correctly. It does not need to explain return values, though mentioning locale usage could have made it fully self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all five parameters are already documented in the input schema. The description reinforces the order and region behavior but adds little beyond the schema for limit, locale, or fuel_type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action: ranking countries by fuel price within a region or worldwide, with optional ordering. It does not explicitly distinguish itself from siblings like compare_fuel_prices or get_fuel_prices, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete usage contexts such as «where is fuel cheapest» and «where is fuel the most expensive», including the order parameter needed for the latter. It does not state when not to use it or name alternative tools, so it lacks full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_ferriesFerry Crossings In An AreaA
Read-onlyIdempotent
Inspect

Ferry and river crossing lines in a bounding box from OpenStreetMap: name, operator, countries, whether cars are carried, crossing time, the operator site checked by hand and a booking link where confirmed, and whether an open timetable exists. bbox is west,south,east,north in degrees — longitude first (Adriatic ≈ 12,39,20,46). Narrow with query (port or operator) or country_code. Use it for which ferries go to an island or across a sea, strait or river, and to get the id for get_ferry_schedule.

NameRequiredDescriptionDefault
bboxYesBounding box west,south,east,north in degrees, longitude first, e.g. 8,38,16,42 (Tyrrhenian Sea: Sardinia, Corsica, Italy).
queryNoKeep only crossings whose name, ports or operator contain this text, e.g. Olbia or Moby.
localeNoLanguage 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.
cars_onlyNoDefault true: drop crossings OpenStreetMap marks as closed to cars. Unknown access is kept.
country_codeNoKeep only crossings that touch this country (ISO 3166-1 alpha-2), e.g. GR.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, open-world, non-destructive, so the description doesn't need to restate safety. It adds valuable provenance and quality caveats beyond the annotations — data comes from OSM, the operator site is 'checked by hand' and booking links exist only 'where confirmed', and timetable availability varies. It does not mention result caps or ordering, which is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the resource and scope, then the bounding-box convention, then narrowing and use cases — a logical progression. The attribute list sentence is long but each item conveys what a caller can expect, though it could be trimmed slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 values, and it still summarizes the fields available. For a read-only spatial search, what remains unstated is only result limits/density behavior in a large bbox, a small but real gap for an open-world query tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents bbox ordering, query matching, country_code, cars_only default, and locale. The description mostly repeats the bbox longitude-first convention with the same kind of geographic example already in the schema, adding only the hint that query targets ports or operators. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Ferry and river crossing lines in a bounding box from OpenStreetMap') and enumerates the returned attributes, so the agent knows exactly what it gets. It also distinguishes itself from the sibling get_ferry_schedule by positioning itself as the discovery step that supplies that tool's id.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete usage scenarios ('which ferries go to an island or across a sea, strait or river') and an explicit follow-on routing ('to get the id for get_ferry_schedule'). It also names narrowing strategies (query for port/operator, country_code), leaving little to inference.

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 AreaA
Read-onlyIdempotent
Inspect

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).

NameRequiredDescriptionDefault
bboxYesBounding box west,south,east,north in degrees, at most 10° on each side, e.g. 29,36,33,38 (around Antalya).
localeNoLanguage 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

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new behavior: the upstream source, the 48-hour freshness window, the hard 10°×10° size cap, and the ranking/unit of returned values. It doesn't say what happens when the bbox exceeds 10° (error vs. rejection), which is the one operational gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with what the tool returns before the usage and format guidance. Every clause carries information — source, window, limit, ordering, units, usage, format, example — with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With rich annotations, an output schema and full schema description coverage, the description needs only to frame the data and the input format, which it does. The only omission is failure behavior when the bounding box exceeds the 10° cap, which matters for an open-world remote query.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline would be 3, but the description goes further by calling out the ordering hazard explicitly ("longitude first") and supplying a second real-world example (Portugal) alongside the schema's Antalya example. That targets the single most common failure mode for bbox strings; the `locale` parameter is left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource (satellite fire detections), plus the source (NASA FIRMS VIIRS), the temporal window (last 48 hours), the spatial scope (bounding box up to 10°×10°), the sort order (strongest first) and the unit (MW). No sibling tool in the list deals with fires, so the agent can identify this immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use it for wildfires right now near a place or in a country" gives a clear positive trigger with the recency constraint built in. It doesn't name an alternative or state exclusions, but no sibling covers fire detections, so the missing exclusion is low-risk.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_city_climateTypical Weather On Any DateA
Read-onlyIdempotent
Inspect

What the weather is usually like in a city or at any point on a given day of the year, from the ERA5 climate archive 2021–2025 (median of 35 archive days: the date ±3 days over five years): day and night temperature, on how many of the 35 days there was precipitation, the usual sky, sea or large-lake water temperature, solar radiation for panels and the VanSky climate index; plus all 12 months and the best month to travel. Climate, not a forecast. Use it for dates beyond the coming week ("weather in Batumi in mid-September", "is the sea warm in Antalya in May") and for "when is the best time to go"; for today and this week use get_city_travel_weather. Omit date to get the month overview.

NameRequiredDescriptionDefault
latNoLatitude of any point, instead of a city.
lngNoLongitude of any point, instead of a city.
cityNoCity or town name in any language, e.g. Batumi, Antalya. Omit when passing lat and lng.
dateNoDay of the year, MM-DD or YYYY-MM-DD (the year is ignored), e.g. 09-18. Omit for an overview of all 12 months and the best month.
localeNoLanguage 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_codeNoISO 3166-1 alpha-2 country code to disambiguate the city (Barcelona ES vs Barcelona VE).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description does add genuinely useful methodology context (ERA5 2021–2025, median of 35 archive days, date ±3 days over five years) and the 'climate not forecast' caveat that a naive agent would otherwise miss. It stops short of describing response shape or any limits, but the data-provenance caveat is the main behavioral risk here and is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and the 'climate, not a forecast' distinction, then usage routing. The opening sentence is very dense with a long clause list of returned quantities, but each element is informative and no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation; the description covers provenance, the climate-vs-forecast caveat, the date/omit-date decision, the city-vs-coordinates decision, and the sibling boundary. Nothing an agent needs to select or call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents lat/lng vs city, the MM-DD / YYYY-MM-DD pattern with year-ignored, and the locale fallback. The description mostly reiterates this (omit date → month overview, city vs point), adding little syntax the schema does not already carry. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (typical weather / climate normals) with explicit scope: city or any lat/lng point, on a given day of the year, from a named archive. It explicitly names the sibling it is not (get_city_travel_weather) and marks the boundary ('Climate, not a forecast'), so an agent can route between the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('dates beyond the coming week', 'when is the best time to go'), explicit when-not ('for today and this week use get_city_travel_weather'), plus concrete example queries. It also states the omit-date behavior, so the parameter-level decision is guided too.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_city_travel_weatherTravel Weather In A CityA
Read-onlyIdempotent
Inspect

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 the city's place among the cities of its country this week, comfortable days, the best stretch and the worst day, a 7-day forecast with day and night temperature and rain, today's score breakdown (thermal, sunshine, precipitation, wind), sleep, driving and solar scores and ready-made advice. 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.

NameRequiredDescriptionDefault
cityYesCity or town name in any language, e.g. Barcelona, Málaga, Alicante.
localeNoLanguage 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_codeNoISO 3166-1 alpha-2 country code to disambiguate (Barcelona ES vs Barcelona VE).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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 what the payload actually contains (ranking within country, best stretch, worst day, per-score breakdown, ready-made advice), which is useful behavioral context. It does not, however, say what happens when a city name is ambiguous or unresolvable, which matters for an openWorld lookup.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The routing and scope sentences are excellent and front-loaded, but the opening sentence is a long run-on enumeration of output fields that largely duplicates the output schema. Trimming that list to a summary would sharpen the definition without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema and full annotations present, the description need not explain return values, yet it still covers purpose, sibling routing and time scope. The only real gap is failure/ambiguity behavior for an open-world place lookup, which is left unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the city examples, the locale guidance and the country_code disambiguation case, so the description adds little parameter meaning. The phrase 'one city or town' and the example place names merely echo the schema, warranting the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb-and-resource combination (weather suitability in one city for campervan travel and sleeping) and quantifies the output as a 0-100 score. It is immediately distinguishable from get_country_travel_weather, which is named explicitly later.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a direct 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 timing ('today, tomorrow or this week'), covering both when-to-use and which-alternative-not-to-use.

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 IndexA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
localeNoLanguage 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_codeYesISO 3166-1 alpha-2 country code.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld, so safety is covered; the description adds genuinely non-obvious behavior – the index is normalized to a world average of 100 and the response carries a yearly history rather than a single point value. It stops short of describing pagination or history span, which keeps it off a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste, and the scale anchor is front-loaded before the usage cue. Nothing here repeats the name or title verbatim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out; the description supplies the interpretive key (100 = world average) that makes the numbers meaningful. Coverage of the locale parameter's purpose is left entirely to the schema, a minor gap for a 2-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description adds nothing about country_code (ISO alpha-2) or the locale parameter's effect on language and units. With the schema doing all the parameter work, baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Food price index for one country') and adds the scale (world average = 100) plus the fact that yearly history is included. The 'one country' framing implicitly separates it from compare_food_prices/rank_food_prices, but neither sibling is named outright.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger: 'Use it when someone asks how expensive food, groceries or living is in a country.' That is clear context, but it names no alternatives or exclusions even though compare_food_prices and rank_food_prices exist and would be the natural competitors for multi-country questions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_country_travel_briefCountry Road-Trip BriefingA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
localeNoLanguage 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.
passportNoTraveller'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_codeYesISO 3166-1 alpha-2 code of the country, e.g. ES.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, open-world and non-destructive behavior, so the description is free to add value elsewhere — and it does, disclosing the response's breadth and time semantics ('weather now and this week', 'holidays in the next 30 days', 'with passport'). It does not state data freshness beyond those windows, upstream sources, or rate limits, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the payoff ('Everything to know ... in one call') before the coverage list and the routing rule. The coverage enumeration is long but each item is a real capability, not filler; a bulleted or grouped phrasing would read slightly faster.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description need not explain return shape, and the annotations carry the safety profile, so the remaining job — telling an agent what topics the brief aggregates and when to prefer it — is done. The one gap is that it never warns the caller how broad the payload may be relative to a narrow sibling call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns a bump by tying the optional `passport` parameter to a concrete effect ('adds the entry rule and how long the person and the vehicle may stay'). Locale and country_code semantics remain entirely schema-side.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+scope: everything to know before driving into one country by campervan or car, in one call. The enumerated coverage (entry rule, weather, fuel, tolls, holidays, hazards, plugs, customs, food prices) makes it unmistakable against the many single-topic siblings such as get_visa_rules or get_fuel_prices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the triggering intents (asking what to know about a country, the nuances, a guide, preparing a trip) and an explicit exclusion routing to 'the single-topic tools for one narrow question.' Alternatives are named as a class with the condition that selects them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_country_travel_weatherTravel Weather In A CountryA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
localeNoLanguage 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_codeYesISO 3166-1 alpha-2 country code, e.g. DE.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered; the description adds real behavioral value by enumerating the specific metrics and the geographic scope (country-level aggregation, best/worst cities for the coming week). It stops short of noting rate limits, data freshness, or that results are forecast-based rather than historical, but the additions are substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core concept (0-100 suitability score) is front-loaded, followed by the returned metrics and then routing/trigger guidance. The metric enumeration is long but each item earns its place by telling the agent what questions the tool answers; minor tightening would raise this to a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and rich annotations, the description needn't document return structure — and it doesn't. It covers scope, sibling routing, and example use cases, leaving only minor gaps (forecast horizon semantics beyond '7-day', data source/freshness) that are not essential to correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — country_code is documented as ISO 3166-1 alpha-2 and locale as the display language — so the schema does the heavy lifting. The description only implies country-level input via 'Country-level' and adds no format or enumeration detail beyond the schema, warranting the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (country-level travel weather) and what the tool returns: a 0-100 travel/sleep score, solar yield, driving conditions, awning safety, condensation risk, 7-day forecast, and best/worst 3 cities. It explicitly contrasts with the sibling get_city_travel_weather, so an agent can distinguish the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative (get_city_travel_weather for a named city) and enumerates concrete triggering questions: what the weather is like in a country, where it is warmer/colder/sunnier, which cities are best/worst this week, whether it is too cold or rainy to sleep in a van. When-to-use and when-not-to-use are both explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_currency_rateConvert CurrencyA
Read-onlyIdempotent
Inspect

Convert an amount between two currencies using live rates (150+ currencies, daily updates). Use it for exchange rates and converting an amount between currencies.

NameRequiredDescriptionDefault
toYesTarget currency ISO 4217 code, e.g. USD.
fromYesSource currency ISO 4217 code, e.g. EUR.
amountNoAmount to convert. Default 1.
localeNoLanguage 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

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by mentioning live rates, 150+ currencies, and daily updates. It does not disclose rate source, timestamp precision, rounding, fees, or caching behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is short and front-loads the main purpose in the first sentence. The second sentence partially repeats the first by restating exchange-rate and amount-conversion usage, but the overall structure is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple read-only conversion tool with an output schema, full parameter description coverage, and annotations covering safety and external-data behavior. The description is sufficient for correct invocation, with only minor gaps around rate provenance and freshness details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents from, to, amount, and locale in detail. The description reinforces the core conversion semantics but adds little beyond the schema, and it does not mention the locale parameter or its UI-language effect.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: convert an amount between two currencies using live rates. It also states coverage (150+ currencies) and freshness (daily updates). It does not explicitly differentiate from siblings, though none of the listed siblings appear to be direct currency-conversion alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It says to use it for exchange rates and converting an amount between currencies, which gives a clear implied usage context. However, it does not give explicit when-not conditions, prerequisites, or alternatives, so the guidance remains minimal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_customs_rulesCustoms Rules On Entry By CarA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
fromNoISO 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.
localeNoLanguage 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_codeYesISO 3166-1 alpha-2 code of the country you enter, e.g. PL.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent/openWorld annotations, the description discloses that every rule carries a verbatim official quote and source link, and warns that a country without data returns an error which must not be reported as 'nothing is restricted' — a genuine failure-mode trap an agent would otherwise fall into. It does not cover rule freshness or caching, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, the error caution is second, and the use case closes it. The final sentence partly restates the topic list already given in sentence one, which is mild redundancy but keeps the text scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and full parameter documentation, the description carries only the burden of scope and failure semantics, which it does well. It leaves locale/language behavior to the schema, which is acceptable given the parameter description covers it explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already explains country_code, from, and locale in detail (including the 'no customs inside the EU' nuance). The description only lightly gestures at the optional origin country ('optionally from a given country') and adds nothing on locale, so it earns the baseline rather than more.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('customs rules when driving into a country') and enumerates the exact scope: food bans, cash declaration, alcohol/tobacco limits, goods value, fuel canister. This is clearly distinguishable from siblings like get_vehicle_import_rules or check_visa_rules without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The closing sentence gives clear usage framing ('what you may bring in by car: alcohol, tobacco, cash, meat and other food, goods limits') and the error warning sets an expectation for missing-data cases. It stops short of naming an alternative sibling or a when-not-to-use condition, so it doesn't reach the top band.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_eventGet Event DetailsA
Read-onlyIdempotent
Inspect

Get full details for a single vanlife event by its slug.

NameRequiredDescriptionDefault
slugYesEvent slug, e.g. caravan-salon-duesseldorf-2026.
localeNoLanguage 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

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds domain scope ('vanlife event') and detail level ('full details'), but does not add extra behavioral context such as error handling for invalid slugs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It efficiently communicates the core operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema exists and annotations are rich, so the description need not explain return values or safety. It is mostly complete for this simple lookup, though it could better distinguish from list_events.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both slug and locale are fully documented in the schema. The description mentions slug but adds no meaning beyond the schema for locale or slug format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: retrieving full details for a single vanlife event by slug. It is clear and specific, though it does not explicitly distinguish this tool from the sibling list_events.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'single ... event by its slug' implies usage when a slug is known and detail is needed, but it gives no explicit when/when-not guidance or mention of list_events as an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ferry_scheduleFerry TimetableA
Read-onlyIdempotent
Inspect

One ferry line by id from find_ferries: both ends with country, operator site and booking link, and a timetable digest from open GTFS feeds — next departures today in local time, sailings per day, daytime and night rhythm, weekdays over the next 8 days, crossing time. available: false means no open timetable is matched, not that the ferry does not run. Use it for when the next ferry leaves, how often it runs and how long the crossing takes.

NameRequiredDescriptionDefault
idYesFerry line id from find_ferries, e.g. r5958961.
localeNoLanguage 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

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly, idempotent, non-destructive), but the description adds the genuinely non-obvious parts: data provenance from open GTFS feeds, that times are local, and the critical failure semantic that 'available: false means no open timetable is matched, not that the ferry does not run.' That caveat directly prevents a wrong inference an agent would otherwise make from the payload.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core identity and return contents, then the important 'available: false' caveat, then usage. The opening sentence is a long clause chain that takes effort to parse, but no clause is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return shape need not be explained, yet the description still tells the agent what categories of data appear and how to read the false-availability case. For a read-only, two-parameter lookup with full schema coverage, nothing needed for a correct call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the locale parameter already carries detailed guidance (enum values, 'set it on every call', fallback behavior), so the schema does the heavy lifting. The description only reinforces that the id comes from find_ferries, which the schema's own id description also states — no net new parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('One ferry line by id from find_ferries') and immediately enumerates what the response contains: endpoints with country, operator site, booking link, and a GTFS-derived timetable digest. It explicitly positions itself relative to the sibling find_ferries, so an agent can tell discovery from detail without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The final sentence gives explicit use cases ('when the next ferry leaves, how often it runs and how long the crossing takes') and the opening phrase routes the agent through find_ferries to obtain the id first. It stops short of an explicit exclusion (e.g. 'do not use for route planning between arbitrary points'), so it is clear context rather than a full when/when-not map.

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 PricesA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
localeNoLanguage 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_codeNoISO 3166-1 alpha-2 country code, e.g. DE. If omitted, returns all countries.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=true, so the safety profile is fully covered. The description adds useful behavioral context about the detail-vs-summary shaping of results, but says nothing about freshness of prices, rate limits, or coverage gaps for unsupported countries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the resource and coverage, then the mode switch. The third sentence largely restates sentence one in colloquial terms; it aids synonym matching but is redundant on strict reading.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the safety profile is fully annotation-covered, so the description only needs to convey scope and the filter/no-filter behavior, which it does. Minor gap: no mention of price staleness or unsupported countries.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, including a detailed locale description and country_code semantics, so the schema carries the parameter burden. The description only restates the country_code conditional (detail vs list) and ignores locale entirely, adding little beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States specific verb+resource and enumerates the fuel types (gasoline, diesel, LPG, CNG, E85, kerosene), plus distinguishes the two modes (single country detail vs all-country summary). It never names or contrasts with sibling tools like compare_fuel_prices or find_cheapest_fuel, so an agent must infer the boundary itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear conditional: pass country_code for one country in detail, omit it for a summary list, and names colloquial synonyms (petrol, autogas/propane) that help query matching. However it offers no guidance against the closely related siblings compare_fuel_prices and find_cheapest_fuel, which is exactly where mis-selection risk is highest.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_holidaysHolidays And Peak Traffic DaysA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
toNoEnd of the period, YYYY-MM-DD. Defaults to from + 90 days; at most 400 days after from.
fromNoStart of the period, YYYY-MM-DD. Defaults to today.
kindNoOnly 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.
localeNoLanguage 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_codeYesISO 3166-1 alpha-2 country code, e.g. FR.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/idempotent annotations: it warns that a country without data returns an error and must never be reported as 'no holidays', notes the 400-day cap, and flags that school holidays are often regional while traffic days are France-only. These are exactly the failure modes an agent would otherwise mishandle.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with scope, then the critical error caveat. The final sentence duplicates ground covered by the first and could be merged, but there is no padding beyond that.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values needn't be described. Combined with annotations and full param coverage, the description supplies the remaining essentials: data-coverage failure semantics, the date-window limit, and the geographic restriction on traffic days.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains country_code, from, to, kind and locale in detail. The description adds only the 400-day bound (already in the schema) and a passing mention of ISO 3166-2 region codes, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource set — public holidays, school holidays and official peak traffic days (Bison Futé) — scoped to one country over a period of up to 400 days. The scope and content are unambiguous and distinguish it from sibling tools like list_events or get_country_travel_brief.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The closing sentence 'Use it for public holidays, days off, school holidays and peak traffic days' gives an intended-use list, but it largely restates the purpose line and names no alternative tool or exclusion condition relative to the ~29 siblings. Usage is implied rather than routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_license_plate_countryLicense Plate Format And Region CodesA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
localeNoLanguage 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.
countryYesISO 3166-1 alpha-2 country code, e.g. RU.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety and openness profile is fully covered. The description adds only that region codes are grouped by region and that examples are included — useful but modest behavior/return-shape context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: the first front-loads the three content buckets (format, types, region codes), the second states the use case. It is dense but every clause adds scope information; nothing is redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the required country param is schema-documented. The description covers scope and examples adequately; the only gap is minor (no mention of how locale affects the card output, which lives in the schema anyway).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both the country ISO code and the locale enum are fully documented in the schema. The description implies the country input via 'a country's license plate' but adds no syntax or format detail beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names concrete resource facets: plate appearance (standard, size, format), plate types with examples, and region codes grouped by region. It is clearly a lookup tool, distinguishable from check_license_plate and list_license_plate_countries by its 'explain what a code means' framing, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The final sentence gives an explicit use case: 'Use it for what a plate region code means (77, 777, AA…) and a country's plate format.' That is a clear context statement, but there are no exclusions or named alternatives (e.g. when to prefer check_license_plate for validation instead).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_license_plate_imageLicense Plate ImageA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
localeNoLanguage 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.
numberYesPlate number without the region, in the country's standard format.
regionNoRegion code if the country shows one.
countryYesISO 3166-1 alpha-2 country code, e.g. RU.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds real context beyond them: the response includes an inline PNG plus SVG/PNG links, and the number must conform to the country's standard format. It doesn't say what happens when the number is malformed or the country is unsupported, which keeps it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the core action and output format. The final sentence ('Use it to draw or show a picture of a plate') largely restates the opening, so not every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema and annotations carry return values and safety, and the description covers the drawing scope, exclusions and output links. It leaves open the failure behavior for invalid formats and doesn't clarify when region should be supplied, minor gaps for a two-required-parameter render tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description reinforces that the number must match the country's standard format, which adds mild validation semantics, but it says nothing about the optional region parameter or the locale fallback behavior beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Draw an illustrative image of a country's standard civilian license plate', and names the output artifacts (inline PNG plus SVG/PNG links). It also scopes out official, police, military and diplomatic plates. It does not name the sibling check_license_plate or list_license_plate_countries to sharpen the distinction, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use it to draw or show a picture of a plate' gives a clear trigger, and 'Official, police, military and diplomatic plates are not drawn' provides an explicit when-not-to-use boundary. No alternative sibling is named for the excluded cases, so the routing guidance is incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_power_plugsPower Plugs And VoltageA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
localeNoLanguage 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_codeYesISO 3166-1 alpha-2 country code, e.g. GB.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a read-only, idempotent, open-world, non-destructive lookup, so the safety profile is covered. The description adds useful context about source attribution and Europe-only CEE17 campsite connectors, but it does not discuss invalid country codes, missing data, or other edge behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with returned data and followed by direct usage guidance. There is no redundant or filler text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has rich annotations, an output schema, and fully documented parameters; the description supplies the remaining purpose and usage context. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so country_code and locale are already fully documented in the schema. The description reinforces the one-country scope but adds no parameter syntax, format, or locale behavior beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource and scope: plug types, mains voltage/frequency for one country, the source value, and European CEE17 campsite connectors. It clearly distinguishes this lookup from unrelated sibling tools such as visa, fuel, or weather tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to use this tool for socket/plug types, adapters, mains voltage, and campsite hook-ups, giving clear positive guidance. It does not state when not to use it or name alternatives, but no direct sibling overlap exists.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_route_visa_rulesVisa Rules For A RouteA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
localeNoLanguage 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.
weightNoVehicle weight class for the vehicle rules.
countriesYesCountries in travel order, comma separated ISO alpha-2 codes or slugs, up to 12, e.g. RU,GE,TR.
passportsNoPassports to answer for, comma separated, up to 10, e.g. RU,BY.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description contributes one extra behavioral fact — that the result includes 'the tightest leg of the route' alongside per-country rules — but says nothing about rate limits, error behavior for unsupported passports, or partial-route coverage, so it is helpful but thin beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with zero waste that front-loads what is returned and what makes it special (route-wide coverage, batched passports, tightest leg). Nothing is repeated from the schema and no filler is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is read-only with a full output schema and completely described parameters, so the description only has to establish purpose and scale — which it does. The remaining gaps are the unstated country cap (12 in schema vs 10 passports stated) and the absence of routing guidance versus check_visa_rules, both minor given the rich schema and annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the locale parameter carries unusually rich guidance (set on every call, affects answer language and units, fallback behavior), so the structured data already does the heavy lifting. The description adds only the passports cap ('up to 10'), which matches the schema, and says nothing about the weight or locale parameters, making this a baseline-plus score rather than a value-add.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource precisely (visa rules per country along a route) and adds real scope detail: multi-country in one call and up to 10 passports. It implicitly separates itself from check_visa_rules by emphasizing the batch/route case, but never names that sibling, so the differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'one call' and 'for up to 10 passports' signal the multi-passport, multi-country scenario. There is no explicit when-to-use / when-not-to-use statement, no prerequisite (e.g. passports required to get a meaningful answer), and no pointer to check_visa_rules for a single country.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_toll_ratesToll Road Rates By CountryA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
localeNoLanguage 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_codeYesISO 3166-1 alpha-2 country code, e.g. FR.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is fully covered structurally. The description adds data-provenance context ('each with verification date and source'), which is mildly useful, but says nothing about freshness lag, coverage gaps, or response shape. With annotations carrying most of the burden, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with what the tool returns and followed by when to use it. The first sentence is dense but every clause maps to actual returned content, so there is little waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex reference tool, the description adequately enumerates the returned data categories (rates by class, vignette durations, concession sections, bridges/tunnels, provenance), and an output schema exists to cover structure. It leaves minor gaps around freshness and coverage but is complete enough to invoke confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with the locale parameter extensively documented in the schema itself. The description adds no parameter-level detail (e.g. that country_code gates all returned reference data), so it sits at the baseline where the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource ('Toll reference for one country') and enumerates its contents – payment system, per-km rates by vehicle class, vignette prices, concession sections, bridges/tunnels – so the agent knows exactly what it returns. It implicitly contrasts with route-based siblings like estimate_route_tolls by emphasizing single-country reference data, but never names that alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence gives clear usage context: toll roads, motorway fees, vignette need and cost, scoped to one country. That is enough to route correctly in most cases, but there are no explicit exclusions and no sibling named (e.g. estimate_route_tolls for multi-country route totals), so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_travel_hazardsTravel Hazards In A CountryA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
localeNoLanguage 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_codeYesISO 3166-1 alpha-2 country code, e.g. TR.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds real value beyond them by naming the upstream sources (FCDO, GDACS), the alert-level vocabulary and the temporal framing ('now', 'Not a forecast'). It says nothing about freshness/latency or coverage gaps, which for a live-hazard tool would be the differentiating detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three front-loaded sentences with no filler; the data contents come first, then the temporal caveat, then the use case. The opening fragment ('Situation now in one country:') is slightly telegraphic rather than a clean sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is unnecessary; the description covers sources, hazard types, alert semantics, time scope and the question it answers. It is complete enough for a two-parameter read tool, with only the missing sibling routing as a gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented, and the description only implies the single-country scope of country_code. The locale parameter, which materially affects the answer language and units, is not touched on in the description, but the schema carries that burden adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Situation now in one country') and enumerates exactly what is returned: the UK FCDO travel advice level plus GDACS disaster types with green/orange/red alert levels. The explicit 'Not a forecast' clause distinguishes it from forecast-oriented siblings such as get_country_travel_weather and get_city_climate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear triggering condition: 'Use it when someone asks whether it is safe to go to a country now, about travel warnings or natural disasters.' It does not, however, name the near neighbours (get_country_travel_brief, get_active_fires) or state when those should be preferred instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_vehicle_import_rulesTemporary Vehicle Import RulesA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
localeNoLanguage 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.
countryYesCountry: ISO alpha-2 code, slug or zone code, e.g. georgia or GE.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the bar is lower, and the description still adds a genuinely useful behavior: a country without a supportable rule returns nothing rather than a guess. It also names the returned data points, which is context beyond the safety hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the scope and the return contents, and the no-guess fallback behavior closes it. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description needn't enumerate return structure, and it still sketches the returned facts and the empty-result case. Only the relationship to neighboring customs/visa tools is left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (country formats, locale enum) are fully documented in the schema, so the baseline of 3 applies. The description adds no parameter-specific meaning such as accepted country identifier forms or locale behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and scope: temporary admission rules for a foreign-plated vehicle in one country, and enumerates the facts returned (allowed days, per entry or per window, carnet, green card). This is clearly distinguishable from siblings like get_customs_rules or check_visa_rules without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The one-country scoping and the field list imply when this tool is the right one, but no sibling is named and there is no explicit when-not guidance (e.g. difference from get_customs_rules). Usage is inferred rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_best_weather_countriesCountries With The Best Travel WeatherA
Read-onlyIdempotent
Inspect

List the N countries where the weather is best for travelling by campervan, highest 0-100 travel score first: today's score by default, or with period=week the score of the coming 7 days (the ranking used on OpenVan.camp). 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.

NameRequiredDescriptionDefault
sortNoscore = 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
limitNoHow many top-scoring countries to return.
localeNoLanguage 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.
periodNotoday = today's score (default, «right now»); week = the score of the coming 7 days, the ranking used on OpenVan.camp — for «this week», «the coming days», «where to go next week».today
regionNoOnly countries of this region — «best weather in Europe». asia includes the Middle East; cis = Russia, the Caucasus and Central Asia. Default: world.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent and open-world behavior, so the description doesn't need to restate safety. Instead it discloses the ranking semantics (0-100 score vs raw temperature), that results are today's/coming-days conditions rather than a later-month forecast, and that sort=warmest puts deserts first — behavior an agent could not infer from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and ranking order before the conditions. It is a single dense run-on paragraph with several nested parentheticals, which costs a little readability, but every clause carries a real decision rule rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values needn't be explained, and annotations cover safety. What remains — when to call, how the ranking differs from raw temperature, and the temporal scope — is all present, leaving nothing an agent needs missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and enums are documented, so the baseline is 3. The description still adds decision rules the schema only partially carries, notably the disambiguation between sort=warmest and the default score and the '«in November» say so' caveat for period.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Starts with a specific verb and resource: 'List the N countries where the weather is best for travelling by campervan, highest 0-100 travel score first.' It also names the ranking source (OpenVan.camp), which separates it from the per-country/per-city siblings like get_country_travel_weather or get_city_travel_weather.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('when no country is named and someone asks where to go'), an explicit alternative routing rule ('with sort=warmest only when they literally ask where it is warmest'), and the counter-case ('warm and pleasant' → default score). It also states a scope limit for future months, which tells the agent when not to use it as intended.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_eventsList Vanlife EventsA
Read-onlyIdempotent
Inspect

List vanlife events: expos (Caravan Salon), festivals, meetups, forums, road trips. Filter by status, type, country, or free-text search.

NameRequiredDescriptionDefault
typeNoEvent type filter.
limitNo
localeNoLanguage 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
searchNoFree-text search in event name.
statusNoEvent time status.upcoming
countryNoISO 3166-1 alpha-2 country code.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered by structured data. The description adds domain examples (Caravan Salon) but no behavioral context such as the default status filter, pagination/limit behavior, or that results reflect a live open-world dataset. Adequate but thin given annotations carry most of the load.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no waste, and the resource scope is front-loaded before the filter list. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the input schema is well documented, so the description needn't explain return values. The main residual gap is the absence of a pointer to get_event and the default-status behavior, which would help an agent call it correctly on the first try.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 83%, so the schema already documents type, status, country, search and even the locale default behavior. The description merely restates the filter names without adding syntax, format, or interaction detail, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb ('List') and resource ('vanlife events') and enumerates the event categories (expos, festivals, meetups, forums, road trips), which concretely scopes the tool. It does not differentiate from the sibling get_event, which clearly retrieves a single event, so an agent must infer the list-vs-lookup split.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence names the available filters, which implies usage, but there is no explicit when-to-use guidance and no mention of the alternative get_event for fetching a single event. Nothing says the default status is 'upcoming', so an agent could misread results as all-time.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_license_plate_countriesLicense Plate CountriesC
Read-onlyIdempotent
Inspect

Countries whose license plates are available: international code, number of regions and an example plate.

NameRequiredDescriptionDefault
localeNoLanguage 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

NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds only the shape of the returned records, which the output schema already provides, and says nothing about completeness of the list, ordering, or size — the traits that would actually matter beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact line with zero filler; the useful content (what the list yields) is front-loaded. It reads as a caption rather than a sentence, which is the source of its slight clarity loss, not its length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return values, and locale is fully documented in the schema, so nothing critical is missing. Still, for a discovery tool that gates the other license-plate siblings, it gives no hint of list size, pagination, or how to proceed after listing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the locale enum documents its own behavior (answer and card language, fallback to app language) more thoroughly than the description does. The description mentions no parameters at all, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The fragment 'Countries whose license plates are available' conveys that this enumerates the supported country set and names the returned fields (code, region count, example plate). However, it never uses an explicit verb and never contrasts itself with the singular siblings get_license_plate_country / check_license_plate, so the agent must infer that this is the 'list all supported' variant.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no exclusion, and no mention of the closely named alternatives (get_license_plate_country, check_license_plate, get_license_plate_image). The agent is left to deduce the discovery-then-detail workflow from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plan_road_tripPlan A Road TripA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
fuelNoFuel, e.g. diesel, gasoline, lpg.
kidsNoNumber of children travelling (adds the documents children need abroad to the checklist).
petsNoNumber of pets travelling (adds pet passport, microchip, rabies and EU titre-test steps to the checklist).
tankNoTank volume, litres.
localeNoLanguage 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.
platesNoCountry of the vehicle's plates, ISO alpha-2 (entry bans and green card depend on it).
weightNoVehicle weight: le35 (up to 3.5 t) or gt35.
currencyNoCurrency of the budget, ISO 4217. Default EUR.
passportsNoPassports of the travellers, comma separated ISO alpha-2 codes, e.g. RU or DE,RU. Enables visa terms and the Schengen counter.
residenceNoResidence 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.
waypointsYes2-10 places in travel order: cities or countries (a country means its capital), e.g. ["Munich", "Venice"].
round_tripNoReturn to the start along the same route.
start_dateNoDeparture date, YYYY-MM-DD. Enables holidays, weather by day and visa deadlines.
avoid_tollsNoRoute avoiding toll roads.
consumptionNoConsumption, litres per 100 km.
hours_per_dayNoDriving hours per day for the day-by-day plan. Default 6.
vehicle_classNocar; van = campervan/motorhome up to 3.5 t (default); heavy = over 3.5 t.van

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/idempotent/non-destructive, so the safety profile is covered. The description adds what annotations cannot: the result is a link to a full roadbook the user can open, edit and share, and it discloses the conditional enrichment (holidays and visa deadlines only with a start_date, entry rules keyed to passports/residence/plates). No rate limits or failure modes are mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with front-loaded purpose, followed by a short routing instruction; nothing is filler and every clause names a distinct output. It is long, but the length buys real coverage for a 17-parameter tool, though the mid-sentence enumeration could be split for faster scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and full schema coverage, the description only needs to convey scope, enrichment conditions and the returned artifact — all of which it does. Nothing an agent needs to decide and invoke this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so every one of the 17 parameters is already documented in the schema, including defaults and enums. The description only restates the waypoint count constraint and that passports/residence/plates drive entry rules, adding little beyond the structured data — baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+constraint ('Plan a road trip by campervan or car between 2-10 places') and then enumerates concrete outputs: distance, driving time, day-by-day plan, budget, per-country entry rules, 90/180 stays, LEZ/ZTL rules, holidays, plugs, checklist, shareable link. This is unmistakably distinct from every single-purpose sibling such as check_visa_rules or estimate_route_tolls.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The closing sentence 'Use this first when the user describes a trip from A to B' gives explicit routing guidance relative to the narrower sibling tools. It does not state when NOT to use it (e.g. a single-country visa question should go to check_visa_rules), so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rank_food_pricesRank Countries By Food PricesA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
limitNoHow many countries to return.
orderNocheapest first (default) or most_expensive first.cheapest
localeNoLanguage 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.
regionNoOnly countries of this region. Default: world.world

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuine context beyond that by defining the index baseline (world average = 100), which tells the agent how to interpret the ranking values. Return format is left to the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler: the ranking semantics and sort direction come first, followed by the usage trigger. Every sentence carries information the agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, annotations covering the safety profile, and full schema coverage of all parameters, the description needs only to establish purpose and usage, which it does. The minor gap is that it does not note the limit interplay with ranking (top-N cheapest), though that is largely inferable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (limit, order, locale, region) are already documented in the schema. The description only restates the order behavior ('order=most_expensive'), adding no syntax or constraint detail beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (rank), resource (countries by food price index), the scale semantics (world average = 100), and scope (region or worldwide). This clearly separates it from sibling tools like compare_food_prices and get_country_food_prices, which per their names retrieve or compare rather than rank.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the triggering question explicitly: 'Use it when someone asks where food or groceries are cheapest or most expensive.' That is a clear use-case signal, though it does not name a specific alternative (e.g., compare_food_prices) or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_storiesSearch Vanlife NewsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
limitNo
localeNoLanguage 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
searchNoWords to look for in story headlines.
countryNoISO 3166-1 alpha-2 country code.
categoryNoStory category.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only, idempotent, non-destructive, open-world safety profile. The description adds real value beyond that by disclosing the exact return shape (headline, ≤300-char summary, date, category, countries, link) and the important constraint that full article text is never returned, along with source-attribution context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then return shape, then filters; no filler sentences. The middle sentence is long but each clause (fields returned, no full text, attribution) carries distinct information, so it earns its space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-param, zero-required search tool with an output schema and full annotations, the description covers purpose, data provenance, return shape and filtering. Only explicit usage/exclusion guidance is missing, which keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 80% schema description coverage, the schema already documents the parameters well, including a detailed locale description. The description's line about filtering by words, category, country and language just restates the schema fields without adding syntax or behavioral nuance, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (Search) and resource (recent news about campervans, motorhomes, road travel) plus the data source (OpenVan.camp from public news sources). It is clearly distinct from the sibling tools, which are all travel-data utilities rather than news search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It says what can be filtered by (words in headline, category, country, language), which implies how to use it, but there is no explicit when-to-use vs. when-not guidance or mention of alternatives. Since no sibling covers news, the omission is less costly, but the guidance remains only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv0.9.9
    • Addedfind_ferries
    • Addedget_ferry_schedule
  2. 1 tool updatev0.9.8
    • Changedlist_best_weather_countries4 fields changed
      • addedInput schema / properties / period
        Added value: +{
        +  "default": "today",
        +  "description": "today = today's score (default, «right now»); week = the score of the coming 7 days, the ranking used on OpenVan.camp — for «this week», «the coming days», «where to go next week».",
        +  "enum": [
        +    "today",
        +    "week"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / region / default
        Removed value: -"world"
      • changedInput schema / properties / region / description
        Previous value: -"Only countries of this region — «best weather in Europe». Default: world."New value: +"Only countries of this region — «best weather in Europe». asia includes the Middle East; cis = Russia, the Caucasus and Central Asia. Default: world."
      • changedInput schema / properties / region / enum
        Previous value: -[
        -  "world",
        -  "europe",
        -  "asia",
        -  "africa",
        -  "north_america",
        -  "south_america",
        -  "oceania"
        -]New value: +[
        +  "world",
        +  "europe",
        +  "asia",
        +  "middle_east",
        +  "cis",
        +  "africa",
        +  "north_america",
        +  "south_america",
        +  "oceania"
        +]
  3. 30 tool updatesv0.9.7
    • Changedcheck_license_plate2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedcheck_visa_rules2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedcompare_food_prices2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedcompare_fuel_prices2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedestimate_route_tolls2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedfind_cheapest_fuel2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_active_fires2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Addedget_city_climate
    • Changedget_city_travel_weather2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_country_food_prices2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_country_travel_brief2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_country_travel_weather2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_currency_rate2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_customs_rules2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_event2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_fuel_prices2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_holidays5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / to / $ref
        Removed value: -"#/properties/from"
      • addedInput schema / properties / to / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}$"
      • addedInput schema / properties / to / type
        Added value: +"string"
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_license_plate_country2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_license_plate_image2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_power_plugs2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_route_visa_rules2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_toll_rates2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_travel_hazards2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_vehicle_import_rules2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedlist_best_weather_countries3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / limit / default
        Removed value: -10
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedlist_events3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / limit / default
        Removed value: -15
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedlist_license_plate_countries2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedplan_road_trip2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedrank_food_prices3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / limit / default
        Removed value: -10
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedsearch_stories3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / limit / default
        Removed value: -10
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +{}
  4. 1 tool updatev0.9.4
    • Removedget_roadbook_build_status
  5. 34 tool updatesv0.6.4
    • Changedcheck_license_plate2 fields changed
      • changedInput schema / properties / locale / description
        Previous 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."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Changedcheck_visa_rules2 fields changed
      • addedInput schema / properties / locale
        Added 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"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Addedcompare_food_prices
    • Changedcompare_fuel_prices3 fields changed
      • changedInput schema / properties / fuel_type / description
        Previous 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."
      • addedInput schema / properties / locale
        Added 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"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Removedcompare_vanbasket
    • Changedestimate_route_tolls3 fields changed
      • changedInput schema / properties / locale / description
        Previous 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."
      • changedInput schema / properties / waypoints / description
        Previous 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\"]."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Changedfind_cheapest_fuel5 fields changed
      • changedInput schema / properties / fuel_type / description
        Previous value: -"Fuel type. Uses the same keys as /api/fuel/prices prices."New value: +"Fuel type. e.g. gasoline, diesel, lpg, cng, e85."
      • changedInput schema / properties / limit / description
        Previous value: -"How many cheapest countries to return."New value: +"How many countries to return."
      • addedInput schema / properties / locale
        Added 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"
        +}
      • addedInput schema / properties / order
        Added value: +{
        +  "default": "cheapest",
        +  "description": "cheapest first (default) or most_expensive first — «where is fuel the most expensive».",
        +  "enum": [
        +    "cheapest",
        +    "most_expensive"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Changedget_active_fires2 fields changed
      • addedInput schema / properties / locale
        Added 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"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Addedget_city_travel_weather
    • Addedget_country_food_prices
    • Addedget_country_travel_brief
    • Addedget_country_travel_weather
    • Changedget_currency_rate2 fields changed
      • addedInput schema / properties / locale
        Added 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"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Changedget_customs_rules2 fields changed
      • changedInput schema / properties / locale / description
        Previous 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."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Changedget_event2 fields changed
      • addedInput schema / properties / locale / description
        Added 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."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Changedget_fuel_prices2 fields changed
      • addedInput schema / properties / locale
        Added 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"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Changedget_holidays3 fields changed
      • changedInput schema / properties / kind / description
        Previous 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."
      • changedInput schema / properties / locale / description
        Previous 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."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Changedget_license_plate_country2 fields changed
      • changedInput schema / properties / locale / description
        Previous 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."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Changedget_license_plate_image5 fields changed
      • removedInput schema / properties / custom
        Removed value: -{
        -  "description": "Draw any text (e.g. a name) in the plate layout instead of requiring a real format.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / locale
        Added 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"
        +}
      • changedInput schema / properties / number / description
        Previous 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."
      • removedInput schema / properties / type
        Removed 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"
        -}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Changedget_power_plugs2 fields changed
      • changedInput schema / properties / locale / description
        Previous 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."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Addedget_roadbook_build_status
    • Changedget_route_visa_rules2 fields changed
      • addedInput schema / properties / locale
        Added 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"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Changedget_toll_rates2 fields changed
      • changedInput schema / properties / locale / description
        Previous 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."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Changedget_travel_hazards2 fields changed
      • changedInput schema / properties / locale / description
        Previous 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."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Removedget_vanbasket
    • Removedget_vansky_weather
    • Changedget_vehicle_import_rules2 fields changed
      • addedInput schema / properties / locale
        Added 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"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Addedlist_best_weather_countries
    • Changedlist_events2 fields changed
      • changedInput schema / properties / locale / description
        Previous 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."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Changedlist_license_plate_countries2 fields changed
      • changedInput schema / properties / locale / description
        Previous 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."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Removedlist_vansky_top
    • Addedplan_road_trip
    • Addedrank_food_prices
    • Changedsearch_stories7 fields changed
      • changedInput schema / properties / category / description
        Previous value: -"Category slug, e.g. camping, travel, gear, festival, industry."New value: +"Story category."
      • addedInput schema / properties / category / enum
        Added value: +[
        +  "law",
        +  "ban",
        +  "opening",
        +  "closing",
        +  "incident",
        +  "industry",
        +  "lifestyle",
        +  "builds",
        +  "festival",
        +  "expo",
        +  "review",
        +  "other"
        +]
      • changedInput schema / properties / limit / maximum
        Previous value: -50New value: +20
      • addedInput schema / properties / locale / description
        Added 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."
      • changedInput schema / properties / search / description
        Previous value: -"Full-text search in story title."New value: +"Words to look for in story headlines."
      • addedInput schema / properties / search / maxLength
        Added value: +100
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
  6. 2 tool updatesv0.6.2
    • Changedcheck_license_plate1 field changed
      • addedInput schema / properties / type
        Added 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"
        +}
    • Changedget_license_plate_image1 field changed
      • addedInput schema / properties / type
        Added 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"
        +}
  7. 25 tool updatesv0.6.0
    • First observedcheck_license_plate
    • First observedcheck_visa_rules
    • First observedcompare_fuel_prices
    • First observedcompare_vanbasket
    • First observedestimate_route_tolls
    • First observedfind_cheapest_fuel
    • First observedget_active_fires
    • First observedget_currency_rate
    • First observedget_customs_rules
    • First observedget_event
    • First observedget_fuel_prices
    • First observedget_holidays
    • First observedget_license_plate_country
    • First observedget_license_plate_image
    • First observedget_power_plugs
    • First observedget_route_visa_rules
    • First observedget_toll_rates
    • First observedget_travel_hazards
    • First observedget_vanbasket
    • First observedget_vansky_weather
    • First observedget_vehicle_import_rules
    • First observedlist_events
    • First observedlist_license_plate_countries
    • First observedlist_vansky_top
    • First observedsearch_stories

TDQS

A3.6/5.0

Scored across 32 tools

Disambiguation4/5

Most tools target distinct resources or questions, and descriptions explicitly steer between overview and single-topic tools. A few pairs remain easy to confuse, especially plan_road_trip vs estimate_route_tolls, get_country_travel_brief vs the individual country-topic tools, and the weather quartet, but the boundaries are mostly explained.

Naming Consistency5/5

Tool names use a consistent snake_case verb_noun pattern throughout: get_, list_, find_, compare_, rank_, check_, estimate_, search_, plan_. The few noun-heavy names still begin with a clear action verb, and there is no mixing of camelCase or vague standalone verbs.

Tool Count2/5

With 32 tools, the surface is heavy for an agent to navigate and includes several clusters that could be consolidated, such as the fuel-price trio, the weather/climate group, and the license-plate group. The broad travel domain justifies some breadth, but 32 is still on the excessive side.

Completeness4/5

The server covers a wide campervan-travel surface: trip planning, tolls, ferries, visas, vehicle import, weather, hazards, holidays, fuel, food, currency, events, and plates. The main obvious gap is campsite/overnight parking search or roadbook retrieval/editing beyond the returned link, but agents can work around these for most core workflows.

Maintenance

ActivityActive
ResponsivenessLimited data

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Search 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.
    2
    2,940 npm
    556
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables 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.
    11
    MIT

Appeared in Searches