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, power plugs, customs rules, currency rates, food cost index, weather suitability scores, visa and vehicle-import rules, vanlife events, news stories, and license plates of the world — all in one place, no registration required.

Base URL: https://openvan.camp
Auth: None required
CORS: Enabled
License: data is CC BY 4.0; code in this repository (SDK, MCP server, examples) is MIT Attribution required: show Data: <a href="https://openvan.camp/">OpenVan.camp</a> wherever you display the data — see Attribution

JavaScript/TypeScript SDK: @openvancamp/sdk — npm install @openvancamp/sdk. Zero-config, typed, Node.js / browser / edge. SDK docs →

Python SDK: openvan — pip install openvan. No dependencies, Python 3.9+, works with pandas. Python docs →

Daily CSV snapshots: openvancamp/openvan-travel-data — fuel prices, exchange rates, food cost index and weather scores as CSV/JSON, one commit a day, with history.

MCP Server (for AI agents): mcp-server/ — 30 read-only tools with interactive cards in Claude and ChatGPT (incl. plan_road_trip — a whole-trip roadbook), hosted at https://mcp.openvan.camp/mcp, or locally npx -y @openvancamp/mcp-server for Claude Desktop / Cursor / Windsurf. Install docs → · AI agents guide →

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

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

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


What is authoritative

Resource

Purpose

This README

Quick overview and code examples

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

160+ 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

84 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

212 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/electricity/countries/{code}

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

229 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: score today and for the coming 7 days

—

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

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

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

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

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 sleep, driving and solar scores and daily scores. Use this, not get_country_travel_weather, when the user names a place (Barcelona, Málaga, Alicante). Use it for the weather in one named city, town or place today, tomorrow or this week.

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.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 the safety profile is covered. The description adds real behavioral context beyond that: the 0-100 scoring model, the component breakdown, and the 7-day forecast horizon. It stops short of mentioning localization behavior or how place names are resolved, which keeps it from a 5.

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

Conciseness4/5

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

The output format and scoring model are front-loaded in the opening sentence, which is the right priority. The two closing 'Use this...' sentences overlap somewhat in intent (place-naming vs. time scope), a small amount of repetition that keeps it from being maximally tight.

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

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 description correctly spends its budget on scope, forecast horizon and the score semantics instead. With 100% schema coverage and rich annotations, the remaining gaps (units, locale fallback behavior) are already handled by the schema's parameter descriptions.

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

Parameters3/5

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

Schema coverage is 100%, so all three parameters (city, locale, country_code) are already documented in the schema, setting the baseline at 3. The description repeats the place-name examples that the city parameter already carries but adds nothing about locale selection or country_code disambiguation, so it does not exceed the schema's own value.

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

Purpose5/5

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

The description names a specific resource (weather suitability for one city/town), a concrete output form (0-100 score for today plus the coming 7 days), and the component scores (sleep, driving, solar, daily). It explicitly contrasts itself with get_country_travel_weather, so an agent can distinguish it from the most confusable sibling without opening a schema.

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

Usage Guidelines5/5

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

It gives an explicit routing rule — 'Use this, not get_country_travel_weather, when the user names a place' — with concrete examples (Barcelona, Málaga, Alicante) and a time-scope condition (today, tomorrow, this week). The when-not case is stated directly rather than inferred.

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

get_country_food_pricesGet Food Price 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_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 today's weather is best for travelling by campervan, highest 0-100 travel score first. Use it when no country is named and someone asks where to go for warm or good weather right now — worldwide or in a region (region=europe…); with sort=warmest only when they literally ask where it is warmest or hottest (it ranks by temperature alone, so deserts come first; «warm and pleasant», «warm and dry» → the default score). These are today's conditions and the coming days, not a forecast for a later month: for «in November» say so.

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.
regionNoOnly countries of this region — «best weather in Europe». Default: world.world

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/openWorld, so the safety profile is covered; the description adds genuinely new behavior: the ranking is by a 0-100 travel score, warmest-sort ranks by temperature alone so deserts lead, and the data covers today plus the coming days rather than an arbitrary month. These are real pitfalls an agent could otherwise stumble into.

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

Conciseness4/5

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

Front-loaded with the action and ranking, then the routing rules. Some material duplicates the schema's sort description («it ranks by temperature alone»), which is mild waste, but nearly every sentence carries disambiguation value for a query-phrasing-heavy tool.

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

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, return values need not be explained; the description instead covers the time-window caveat and sort semantics, which is what an agent needs. Locale's critical "set it on every call" instruction lives only in the schema, leaving a small gap in the prose.

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

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, but the description adds meaning the schema does not: the "deserts come first" consequence of warmest-sort and the mapping of natural-language phrasings («warm and dry») to the default score. It does not cover locale, which is left entirely to the schema.

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

Purpose5/5

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

States a specific verb and resource ("List the N countries where today's weather is best for travelling by campervan") plus the ranking rule ("highest 0-100 travel score first"). It is clearly distinguishable from per-country siblings like get_country_travel_weather because it is a ranked global/regional listing.

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

Usage Guidelines5/5

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

Explicitly names the triggering condition ("when no country is named and someone asks where to go for warm or good weather right now"), the regional variant, and the narrow case for sort=warmest versus the default, including disambiguation of «warm and pleasant». It also states an exclusion: current conditions only, not a later-month forecast — handle those by saying so.

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

list_eventsList Vanlife 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. 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: +{}
  2. 1 tool updatev0.9.4
    • Removedget_roadbook_build_status
  3. 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"
        +}
  4. 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"
        +}
  5. 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 30 tools

Disambiguation4/5

Most tools are cleanly separated by resource and action, and overlapping families (weather country/city/climate/ranking, food compare/get/rank, fuel get/compare/rank, plate list/get/check/image, visa vs route-visa vs vehicle-import) are explicitly cross-referenced in their descriptions. The main ambiguity is plan_road_trip, an aggregator that overlaps with fuel, toll, weather, visa, holiday and customs tools — though it is told to be used first for whole-trip requests, which mitigates misselection.

Naming Consistency5/5

Every name is snake_case with a leading verb (plan_, get_, list_, search_, compare_, rank_, find_, check_, estimate_) and a clear noun phrase. Verb choice tracks action type consistently across parallel families (compare_food_prices / compare_fuel_prices, list_events / list_license_plate_countries).

Tool Count3/5

30 tools is heavy, but the surface spans genuinely different data domains (fuel, weather, climate, food, currency, visas, tolls, holidays, hazards, fires, customs, plates, events, news), so it is not padding. Still, the count pushes past the comfortable range, and some families (four plate tools, three food-price tools, three fuel-price tools) could likely be collapsed.

Completeness4/5

Coverage is broad and lifecycle-consistent for a read-only travel-information API: trip planning, per-country briefs and drill-downs, rules, costs, and safety all have entry points. Notable gaps remain — no campsite/stopover or place-lodging search (core to vanlife), no story-detail fetch, and no write/share operations beyond the returned roadbook link.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    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
    1,484 npm
    548
    MIT
  • A
    license
    A
    quality
    C
    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