Skip to main content
Glama

Server Details

Germany's open mobility data: Autobahn traffic, DB trains, local transit, fuel, EV charging, parking and DWD warnings.

Ownership verified
Status
Healthy
Uptime
100.0% over 24 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A4.2/5.0

Scored across 24 tools

Disambiguation3/5

Several pairs have genuinely subtle boundaries that only the lengthy 'Do NOT use' clauses resolve: check_autobahn_traffic vs check_road_status (jams/Ampel vs open/closed, even 'now'), get_departures vs get_train_departures, find_cheapest_fuel vs find_fuel_station, and describe_station vs check_station_facilities. The descriptions are unusually explicit about routing, so an agent that reads them carefully will land correctly, but selection depends on fine wording rather than obviously distinct purposes.

Naming Consistency5/5

Every tool follows a clean verb_noun snake_case pattern (check_*, describe_*, find_*, get_*, watch_situation/stop_watch), with the verb accurately signalling the operation type. No mixing of camelCase or vague bare verbs.

Tool Count3/5

24 tools is at the top of the acceptable band and the domain (German mobility: traffic, transit, fuel, charging, parking, weather, geocoding, watches) is broad enough to justify most of them. Still, some pairs feel like candidates for consolidation (two fuel tools, two departure tools, station vs station-facilities), pushing it past the comfortable 3-15 range.

Completeness4/5

Coverage is impressive across traffic, roadworks, weather warnings, all fuel types, EV charging, parking, bike sharing, transit, POIs and watch subscriptions, with watch open/stop lifecycle covered. Notable gaps are route/journey planning (explicitly declined), LPG/CNG, e-scooters and transit fares, but these are clearly acknowledged rather than silent dead ends.

Available Tools

24 tools
check_autobahn_trafficA
Read-onlyIdempotent
Inspect

Per motorway (≤ 5), or one Bundesland's motorways with land: an Ampel, then jams, closures, roadworks in force, with place/delay/speed/map. Use when asked about a named motorway now: frei/clear (Ampel), Stau, delay, how it looks, or a LIST of closures; name every motorway (Munich→Berlin: A9). Do NOT use for open/closed/gesperrt/passable, even now, a closure with no time word or a later one (tonight, weekend), or a town, no motorway — check_road_status; Baustellen dated or geplant — find_roadworks_ahead; a named city street: not held; trains (get_train_departures). ~5 min old. Show attribution.

NameRequiredDescriptionDefault
latNoLatitude in WGS 84, e.g. 48.137. Use with lon when the caller already holds coordinates; otherwise use place.
lonNoLongitude in WGS 84, e.g. 11.576. Use with lat; otherwise use place.
landNoOptional, instead of roads: one Bundesland, and the answer is the motorways of the whole Land as its page shows them — counts, the longest jams, each motorway with something in force. Use it instead of roads and place when the question names a Land ("Stau in Bayern?", "Autobahnen in NRW"). For Berlin, Hamburg and Bremen only when the question names the Land; a city's traffic is check_road_status. Not with roads, place, lat/lon or radius_km.
kindsNoWhich event kinds to return: warning = live traffic (jams, slow traffic, hazards), closure = full closures, roadworks = construction sites. Set it when the SUBJECT of the question is one of those categories by name: "Baustellen auf der A8?" is ["roadworks"], "welche Sperrungen sind in diesem Moment gemeldet?" is ["closure"]. Omit it when the question is how the road IS — Stau, frei, a delay, "wie sieht es aus", "everything"; the German "Stau?" is the idiom for the whole picture, and a filter nobody asked for hides the closure on the same stretch. Whether a closure question is this tool's at all is decided by two things, and the noun (Sperrung, Vollsperrung, closure) is neither. FIRST THE CLOCK: only a question about this minute (jetzt, gerade, in diesem Moment, right now, at this very minute) can be this tool's — with no time word at all, or for a later window (tonight, heute Abend, am Wochenende, the coming days), it is check_road_status. SECOND, WHAT IS ASKED, which the clock cannot see: what is REPORTED or in force on a named motorway is this tool ("which closures are in force on the A100 at this very minute?"), while whether the road is OPEN or passable is check_road_status AT ANY CLOCK — "ist die A8 offen", "ist die A3 in diesem Moment gesperrt?", "komme ich da durch?" — and so is a closure asked around a town instead of on a motorway number. Baustellen with a date or the word geplant are find_roadworks_ahead. Default: all three.
limitNoMaximum events to return across all roads (1–50, default 10). Each road's most important item comes first, in the order you listed the roads, so every road with something in force is on the first page when limit is at least the number of roads; after that jams, then closures, other reports, then roadworks, the roads taking turns within each. Only what is in force now is listed — closures announced for later are counted apart in the headline.
placeNoOptional: the town, junction or address the person is at or asks about ("A1 bei Köln", "A3 near Frankfurt"). Then each road's events within radius_km come first, nearest first, and the headline counts them with the road-wide total beside it. Omit it for the whole road. Given with lat+lon, lat+lon is searched around and the place is its label, unless the two lie further apart than radius_km.
roadsNoAutobahn numbers, e.g. ["A9"] or ["A8", "A99", "A9"] (1–5 per call). Name every motorway on the route so the whole drive is briefed in one call — "A9", "A 9" and "a9" are the same road. Results are grouped per road, in the order you list them. Give roads or land, not both.
cursorNoPagination cursor from a previous result's _meta.nextCursor. Omit for the first page.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de
radius_kmNoRadius around place or lat+lon in km (1–100, default 25). Ignored without a place.

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish readOnly, idempotent, non-destructive and closed-world, so the description is not carrying the safety burden. It nevertheless adds real behavior: data freshness ('~5 min old'), a mandatory attribution obligation ('Show attribution'), the fact that only in-force items are listed while future closures are counted separately in the headline, and cursor-based pagination. It does not discuss rate limits or caching, so a 4 rather than 5.

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

Conciseness3/5

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

Most content earns its place, but it is delivered as long run-on sentences with heavy parentheticals and mixed German/English jargon, so the routing rule for closures has to be reconstructed by the reader. The key identity ('per motorway, current conditions') is front-loaded, but the middle sags with nested conditionals. It is dense rather than bloated, yet not well structured.

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 10-parameter, no-output-schema tool, the description covers what comes back (Ampel, jams, closures, roadworks, place/delay/speed/map), freshness, ordering of results, and pagination. The main omission is any statement of error or empty-result behavior (e.g. what 'frei' looks like when nothing is reported), which leaves a small gap for an agent interpreting results.

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; every parameter already carries a rich description including mutually exclusive combinations (land vs roads/place/lat/lon/radius_km). The description adds intent-level guidance (e.g. 'name every motorway (Munich→Berlin: A9)') but largely restates what the schema's own property descriptions say. With the schema doing the heavy lifting, the description clears the bar but does not exceed it.

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 opening clause names the resource and scope precisely: 'Per motorway (≤ 5), or one Bundesland's motorways with land', and enumerates the payload (Ampel, jams, closures, roadworks in force, place/delay/speed/map). It also explicitly separates itself from check_road_status, find_roadworks_ahead and get_train_departures. The telegram-style fragmentation ('an Ampel, then jams...') keeps it from being a clean verb+resource sentence, so it is not 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 Guidelines5/5

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

It gives an explicit use case ('asked about a named motorway now: frei/clear, Stau, delay, how it looks, or a LIST of closures'), explicit exclusions, and names the correct sibling for each exclusion (open/closed/gesperrt → check_road_status, dated/geplant Baustellen → find_roadworks_ahead, trains → get_train_departures, city streets → not held). The clock-vs-question rule for closures is spelled out with examples in both German and English. Nothing is left to inference.

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

check_road_statusA
Read-onlyIdempotent
Inspect

If a motorway/B/Land road (NI, NW, HE, BW, MV, SN, TH; B also SH, BY, BE; pass Land/town as place) is open/closed/restricted now/soon; by place, jams, city/Land messages, Hamburg traffic cameras; lorry limits, Lang-Lkw (vehicle). Use when asked if a road's open/closed/gesperrt/passable, even now — "A8 in diesem Moment gesperrt?" — closures tonight/weekend, or Stau in a town (Köln). Do NOT use for a named motorway frei/clear (Ampel) or its jams/delays — check_autobahn_traffic; dated roadworks — find_roadworks_ahead; a named city street: not held, no call. ≤14 days/11 entries. Show attribution.

NameRequiredDescriptionDefault
latNoLatitude in WGS 84, e.g. 48.137. Use with lon when the caller already holds coordinates; otherwise use place.
lonNoLongitude in WGS 84, e.g. 11.576. Use with lat; otherwise use place.
roadNoOne road: a German motorway, e.g. "A8"; a Bundesstraße in Schleswig-Holstein, Niedersachsen, Nordrhein-Westfalen, Hessen, Baden-Württemberg, Bayern, Berlin, Mecklenburg-Vorpommern, Sachsen or Thüringen, e.g. "B27"; or a Landes- or Staatsstraße in Niedersachsen, Nordrhein-Westfalen, Hessen, Baden-Württemberg, Mecklenburg-Vorpommern, Sachsen or Thüringen, e.g. "L1025" or "S296". "A8", "A 8" and "a8" are the same road. Use this whenever the person named a road — it is the only input that reaches the planned-works data, which is filed by road and section and carries no coordinates. When the person also says WHERE — a town or a Bundesland ("die B2 bei Potsdam", "L1025 in Niedersachsen") — pass that as place too: only sources for that Land answer, and a Land no source covers is named. L and S numbers repeat in every Land, so give the Land with them. Otherwise give exactly one of road, place, or lat+lon.
limitNoMaximum entries to return (1–11, default 10). By road, closures come first, then restrictions in force, then planned works; by place, nearest first.
placeNoWhere to look, as free text: a city ("München", "Munich"), a district or Kreis ("Kreis Fulda"), a Bundesland, a station or stop ("Hamburg Hbf"), a motorway junction ("AK Neufahrn"), or a street address with a house number ("Bahnhofstraße 12, 36037 Fulda"). A motorway number alone ("A7") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. A place or lat+lon is required (unless the tool names another way in, such as a road): when the person named neither, ask them for a town, a postcode or their position before calling. Given both, the answer is about lat+lon with the place as its label, and is refused only when the two lie further apart than the search reaches.
vehicleNoSet ONLY when the person asks for a lorry (Lkw, truck, HGV) or a long lorry (Lang-Lkw, EuroCombi, Gigaliner): then the answer is where that vehicle may go, instead of closures. "long_lorry" with a road ("darf der Lang-Lkw auf die A7?") answers whether the road is in the long-lorry positive network; with a place, the network roads near it. "lorry" or "long_lorry" with a place ("Durchfahrtshöhe in Haan", "Lkw-Vorrangroute in Frankfurt", "Gewichtsgrenze in Bremen") answers the height, weight, width and lorry-ban signs near it, and the lorry priority routes, where a publisher holds them (NRW, Frankfurt RheinMain, Bremen). Omit for cars and for closures.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de
horizon_daysNoDays ahead from now (0 = right now only, max 14, default 3). Only what was asked; count the days from today to the last day meant, both included: 0 for right now / jetzt / gerade; 1 for today, tonight, heute Abend; 2 for tomorrow; a weekday ("am Freitag") the days through it; "this weekend" the days through Sunday (Monday 7, Friday 3, Sunday 1); "next week" through next Sunday. A bare "is the A8 open?" asks for no window: omit it, never 0. Live closures, and by place the jams reported now, are always included.

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/non-destructive and closed-world, so the safety profile is covered; the description adds scope limits (14 days, 11 entries), a mandatory attribution requirement, and the enumeration of source categories. It stops short of describing the shape or ordering of the response beyond the limit note, 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.

Conciseness4/5

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

Front-loaded with purpose, then use, then do-not-use, then limits and attribution — a correct priority order with no filler. It is dense to the point of being telegraphic ("NI, NW, HE, BW, MV, SN, TH" as bare abbreviations), which costs a little parseability but not much length.

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 8 optional parameters, no output schema, and rich structured fields, the description covers the decision space an agent needs: which input combination to use, when to ask the user for a town, horizon semantics, and attribution. The main residual gap is return-value expectations, which nothing else supplies since there is no output schema.

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 parameter descriptions are unusually thorough (road pattern semantics, place vs lat/lon precedence, vehicle enum behavior, horizon_days counting rules). The description restates the gist (pass Land/town as place, road vs place vs coordinates) but adds no syntax or semantics the schema does not already contain, 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?

States a specific verb and resource (whether a motorway/B/Land road is open/closed/restricted now or soon) and enumerates the data sources it draws on: closures, jams, city/Land messages, Hamburg cameras, lorry limits. It explicitly distinguishes itself from siblings, so an agent can route 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 Guidelines5/5

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

Gives an explicit use trigger with a real utterance example ("A8 in diesem Moment gesperrt?"), then three named exclusions with the correct alternative for each: named motorway frei/clear or its jams → check_autobahn_traffic; dated roadworks → find_roadworks_ahead; named city street → no call at all. The "do not call" case is rare and valuable.

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

check_station_facilitiesA
Read-onlyIdempotent
Inspect

Whether the lifts and escalators of a railway station or Köln Stadtbahn stop work now: each with place, state, reason. Another tram, U-Bahn or bus stop (named with its city: "Stuttgart Charlottenplatz") gets its step-free survey where one exists. Use when asked about step-free access, broken lifts, wheelchair or pram: "Funktioniert der Aufzug am Kölner Hbf?", "is the lift at Hamburg Hbf working?". Do NOT use for departures, platforms or delays: get_train_departures (trains), get_departures (bus/tram/U-Bahn); whole station: describe_station. At most 50, broken first. Show the attribution line.

NameRequiredDescriptionDefault
limitNoHow many facilities to list (1–50, default 20). Out-of-service equipment is listed first and the counts in the summary always cover ALL of them, so a shorter list never hides a broken lift.
eva_noNoThe station's EVA number (6–8 digits, e.g. 8000207 for Köln Hbf), when a previous result — a departure board, for instance — already gave you one. It skips the name lookup and is exact.
stationNoThe railway station — or Köln Stadtbahn stop — as the person says it: "Köln Hbf", "Hamburg Hbf", "Munich Central", "Neumarkt Köln". Pass their words — English names and "central station" are understood. If the name fits several stations the result lists them and asks which; do not guess one yourself. Give either station OR eva_no, never both.
facilityNoWhich equipment to report: "elevator" for lifts only, "escalator" for escalators only, "any" for both (default). Pass a value only when the person named the equipment itself ("Aufzug", "Rolltreppe", "lift", "escalator"): a question about a wheelchair, a pram, heavy luggage or step-free access keeps the default — an escalator carries a suitcase too, and a filter there hides half of what the traveller needs. Filtering does not change how a broken one is reported, only which ones are listed.any
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already establish readOnly, idempotent, non-destructive, open-world, so the description only needs to add operational detail — and it does: broken equipment listed first, a hard cap of 50, silent disambiguation when a name matches several stations, step-free surveys only where one exists for non-rail stops, and the instruction to surface an attribution line. That is material behavior an agent cannot infer from 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?

Front-loaded with the capability, then triggers, then exclusions — a sensible order, and the quoted example utterances do real routing work. It is dense and occasionally repetitive (the 50-item cap and broken-first ordering appear in both description and schema), but 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?

For a five-parameter read tool with no output schema, the description supplies what is missing: what an entry contains (place, state, reason), ordering and coverage guarantees, ambiguity handling, and the bilingual/attribution obligations. Nothing an agent needs to call it correctly is absent.

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 schema already explains limit ordering, eva_no exactness, station-versus-eva_no exclusivity, the facility filter rationale and the language default. The description restates the 50 cap and 'broken first', adding little parameter-level meaning beyond what the schema provides, so the baseline 3 applies.

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

Purpose5/5

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

The description names a concrete verb and resource — reporting whether lifts and escalators at a railway station or Köln Stadtbahn stop are working, each with place, state and reason — and explicitly contrasts itself with get_train_departures, get_departures and describe_station. An agent can route on it 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 Guidelines5/5

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

It gives positive triggers (step-free access, broken lifts, wheelchair, pram) with quoted example queries in German and English, explicit exclusions (departures, platforms, delays, whole-station overview) and the sibling to use for each. The distinction between a railway/Köln Stadtbahn stop and other tram/U-Bahn/bus stops is also stated.

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

check_transit_disruptionA
Read-onlyIdempotent
Inspect

How punctual public transport is now in one German region: the share of trips ever >5 min late, trips skipping a stop, trips cancelled, the trend and the service alerts in force there (diversions, closed stops). Use when asked whether buses and trains run normally, or a strike, storm or works disrupt them. Do NOT use for a station's departures or a line from a named DEPARTURE station ("RE1 ab Köln Hbf verspätet?"; a destination, "nach …"/"zum …", is not one) — get_train_departures. No per-line figures. Window ≤ 120 min. CC BY-SA (DELFI) or CC BY 4.0 (VBB, Berlin/Brandenburg): show attribution.

NameRequiredDescriptionDefault
latNoLatitude in WGS 84, e.g. 48.137. Use with lon when the caller already holds coordinates; otherwise use region.
lonNoLongitude in WGS 84, e.g. 11.576. Use with lat; otherwise use region.
regionNoThe German region to report on, as free text: a Bundesland ("Bayern", "Bavaria", "Nordrhein-Westfalen"), a city ("Hamburg", "Köln"), a Kreis ("Landkreis Fulda") or one of the conurbations Ruhrgebiet, Rhein-Ruhr and Rhein-Main. A town inside a Kreis is reported as that Kreis and the answer says so, because the data is filed at Kreis level. Not a stop, not a street, not an address. Give either region OR lat+lon, never both.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de
window_minNoHow many minutes back to look, 5–120 (default 60). The trend compares this window with the equally long one before it, so 60 means "the last hour against the hour before". Use a short window for "right now" and a long one for "has it been bad all morning".

TDQS

A4.4/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower, and the description still adds real operational context: 'No per-line figures', the region-level granularity ('data is filed at Kreis level'), and a licensing obligation the agent must honour ('show attribution' under CC BY-SA / CC BY 4.0). It does not describe return shape beyond the metric list, but attribution and aggregation limits are non-obvious traits the annotations could not convey.

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 what it returns, then routing, then constraints — the right order. It is information-dense but packed into a few long sentences with parenthetical examples, making it slightly harder to scan than an ideally partitioned definition.

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 no output schema, the description carries the return burden and does so: it names the metrics, the trend comparison, and the in-force service alerts (diversions, closed stops). Combined with usage boundaries and licensing, an agent has everything needed to call and interpret it correctly.

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 lat/lon/region/language/window_min are already fully documented, including the lat+lon-vs-region mutual exclusion and the 'en' language pitfall. The description largely restates the schema (window ≤ 120 min, region scope) rather than adding syntax or format detail, 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?

Opens with a specific verb+resource ('How punctual public transport is now in one German region') and enumerates the metrics returned (late share, skipped stops, cancellations, trend, alerts). It explicitly names the sibling it is not (get_train_departures) with a concrete counter-example, so an agent can route 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 a positive trigger ('Use when asked whether buses and trains run normally, or a strike, storm or works disrupt them') and a negative one ('Do NOT use for a station's departures or a line from a named DEPARTURE station'), naming the alternative tool. The destination-vs-departure distinction ('nach …'/'zum …' is not one) is unusually precise routing guidance.

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

check_weather_warningsA
Read-onlyIdempotent
Inspect

Returns the official DWD weather warnings in force for a place — storm, snow, ice, heavy rain, thunderstorm, heat — with Warnstufe 1–4, area, validity and the official text unaltered. At a town or coordinate it adds the DWD road-surface forecast (Straßenwetter-Prognose: dry to black ice, road temperature) for the nearest road-weather stations. Use when asked about weather on a trip, safe driving, storm or snow warnings, or icy roads (Glätte, Glatteis). Do NOT use for a general forecast (not offered) or jams (check_autobahn_traffic). Show the attribution line.

NameRequiredDescriptionDefault
latNoLatitude in WGS 84, e.g. 48.137. Use with lon when the caller already holds coordinates; otherwise use place.
lonNoLongitude in WGS 84, e.g. 11.576. Use with lat; otherwise use place.
placeNoWhere to look, as free text: a city ("München", "Munich"), a district or Kreis ("Kreis Fulda"), a Bundesland, a station or stop ("Hamburg Hbf"), a motorway junction ("AK Neufahrn"), or a street address with a house number ("Bahnhofstraße 12, 36037 Fulda"). A motorway number alone ("A7") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. A place or lat+lon is required (unless the tool names another way in, such as a road): when the person named neither, ask them for a town, a postcode or their position before calling. Given both, the answer is about lat+lon with the place as its label, and is refused only when the two lie further apart than the search reaches.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de
min_levelNoLowest official DWD level to report, 0–4 (default 0, i.e. everything). The DWD's own names: 1 = Wetterwarnung, 2 = Markante Wetterwarnung, 3 = Unwetterwarnung, 4 = Warnung vor extremem Unwetter; 0 = Vorabinformation Unwetter, an advance notice that is not yet a Warnstufe. Raise it ONLY when the question names a level or a Warnstufe in so many words ("ab Stufe 3", "level 3 or higher", "nur Stufe 4"). Unwetter, Unwetterwarnung, severe and storm are the ordinary way to ask about bad weather, not a filter: leave it at 0 there — a level the caller filtered away is a warning the person is never told about.

TDQS

A4.5/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 and the description only needs to add behavior — which it does: the official text is returned unaltered, an attribution line must be shown, and the road-surface forecast is only added at a town or coordinate. It does not discuss cost, latency, or what happens on an unknown place, but that is largely handled in the parameter schema.

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

Conciseness4/5

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

Front-loaded with what is returned before the conditional road-weather extra and the do-not-use clause; every sentence carries information. It is dense with parenthetical German terms, which slightly taxes scanning but each one disambiguates a domain term the agent will meet in the output.

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 no output schema, the description carries the return-value burden and does so by naming the level scale, area, validity, official text, road condition and road temperature. The one real gap is the instruction 'Show the attribution line' without stating what that line is, leaving the agent to invent or fetch it.

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 still earns above that by tying the place/lat+lon duality to concrete behavior ('At a town or coordinate it adds the DWD road-surface forecast'), which tells the agent why the input choice changes the answer. The min_level filtering caution lives in the schema rather than the description, so it is not double-counted here.

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?

A specific verb and resource: returns official DWD weather warnings in force for a place, enumerating the warning types (storm, snow, ice, heavy rain, thunderstorm, heat) and the fields returned (Warnstufe 1–4, area, validity, official text). It also states the secondary payload (Straßenwetter-Prognose for the nearest road-weather stations) and explicitly names the sibling it is not (check_autobahn_traffic), so an agent can separate it from check_road_status and the traffic tools 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 Guidelines5/5

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

Gives an explicit when-to-use list (weather on a trip, safe driving, storm or snow warnings, icy roads/Glätte, Glatteis) and an explicit when-not list with the alternative named ('Do NOT use for a general forecast (not offered) or jams (check_autobahn_traffic)'). Nothing about routing between this and its siblings is left to inference.

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

describe_locationA
Read-onlyIdempotent
Inspect

Turns a coordinate into words: the nearest address, settlement and motorway junction with their distances, and the Gemeinde, Kreis and Land the point lies in; also any low-emission zone. Use when you already HAVE a lat/lon and need to say where that is. Do NOT use to look up a place or address BY NAME — that is find_place, find_poi or find_address; this only goes coordinate to words. Those come from the municipality the point lies in (its key), not the nearest Kreis point; near the border the answer says so. OpenStreetMap ODbL 1.0 for the address; show the attribution line.

NameRequiredDescriptionDefault
latYesLatitude of the point to describe (WGS84).
lonYesLongitude of the point to describe (WGS84).
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already establish readOnly/idempotent/no-open-world safety, so the bar is lower, and the description adds real context beyond them: attribution source (OpenStreetMap ODbL 1.0), the requirement to show the attribution line, and a caveat that administrative fields come from the containing municipality rather than the nearest Kreis point, with a border warning. It stops short of stating any rate limits or error behavior, but the provenance and licensing obligations are valuable disclosure.

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 verb and return content, and every clause carries information. Slightly dense and mildly repetitive ('this only goes coordinate to words' restates the opening), but no wasted padding.

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 no output schema, the description enumerates the returned fields and the administrative-source caveat an agent needs to interpret them. Combined with full schema coverage and annotations, nothing needed to call or read this tool is missing.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already explains lat/lon WGS84 ranges and the language default/enum behavior in detail. The description adds no parameter-level syntax or format guidance of its own, 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?

States a specific verb and transformation ('turns a coordinate into words') and enumerates the return content: nearest address, settlement, motorway junction, Gemeinde/Kreis/Land, low-emission zone. It also names the sibling tools it is not, so an agent can distinguish it 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?

Explicit positive trigger ('Use when you already HAVE a lat/lon') and explicit exclusion ('Do NOT use to look up a place or address BY NAME — that is find_place, find_poi or find_address'), naming the three alternatives. Routing is unambiguous.

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

describe_stationA
Read-onlyIdempotent
Inspect

One German railway station as its viafrei.de page shows it: address, step-free platforms now, lifts and escalators (out of service first), platforms, the next departures with live delays, service alerts, parking and charging. Use when asked about a station as a whole: "Was gibt es am Bahnhof Köln Hbf?", "tell me about Leipzig Hbf", "is Hannover Hbf step-free today?". Do NOT use for one lift (check_station_facilities), one train's delay or platform (get_train_departures) or a bus stop (get_departures). Show the attribution line.

NameRequiredDescriptionDefault
eva_noNoThe station's EVA number (6–8 digits, e.g. 8000207 for Köln Hbf), when a previous result gave you one: exact, no name lookup.
stationNoThe railway station, as the person says it: "Köln Hbf", "Leipzig Hauptbahnhof", "Munich Central". If the name fits several stations, call anyway: the result lists them and asks which. Give either station OR eva_no, never both.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de
departuresNoHow many of the next departures to include (0–10, default 10, as many as the station page shows at least). 0 leaves the board out — for "tell me about the station" without trains.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare it as a safe idempotent read; the description adds real behavioral context beyond that: out-of-service lifts are listed first, delays are live, ambiguous station names return a candidate list with a follow-up question rather than an error, and an attribution line must be shown. These are non-obvious output and interaction behaviors the agent could not infer 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.

Conciseness4/5

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

Front-loads the resource and its contents, then the triggers, then the exclusions, then the attribution note — a sensible order with no filler sentences. It is dense and somewhat longer than needed, and the trailing "Show the attribution line." sentence is a dangling instruction rather than integrated into the flow.

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?

There is no output schema, yet the description effectively describes the return payload (address, step-free status, facilities, departures with delays, alerts, parking, charging) plus the disambiguation case. For a four-parameter read tool this leaves nothing an agent needs in order to call it or interpret the result.

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 eva_no, station, language and departures in depth, including the mutual exclusivity of eva_no/station and the enum default trap. The description adds no parameter-level meaning of its own, 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?

Opens with a specific verb+resource ("one German railway station") and enumerates the exact payload: address, step-free status, lifts/escalators, platforms, departures with live delays, alerts, parking, charging. It also names the sibling tools it is not (check_station_facilities, get_train_departures, get_departures), so an agent can route 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 Guidelines5/5

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

Gives explicit positive triggers with three real sample questions ("Was gibt es am Bahnhof Köln Hbf?", "is Hannover Hbf step-free today?") and explicit exclusions mapped to the correct alternative for each (single lift → check_station_facilities, one train → get_train_departures, bus stop → get_departures). Both the when and the when-not are covered with named alternatives.

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

find_addressA
Read-onlyIdempotent
Inspect

Looks up a street address: its coordinate, and the named OpenStreetMap objects at it (company, shop, office) or that none are. Use when the person gives a STREET AND NUMBER — "Bahnhofstraße 12, Fulda" — for the point or the business there, never who lives there. The coordinate passes to any other tool as lat/lon. Do NOT use for a town/district/station name alone (find_place) or a company/shop/landmark by name (find_poi). At most 5 points; a door mapped twice is folded, points far apart say how far; several towns are a question. OpenStreetMap ODbL 1.0; show the attribution line.

NameRequiredDescriptionDefault
limitNoHow many results to return (1–5, default 3) — more than one means the same address carries more than one OpenStreetMap object.
queryYesA street address, as a person writes one: street and house number, plus a town or postcode — "Bahnhofstraße 12, 36037 Fulda" or "Bahnhofstraße 12, Fulda". Both orders work. A street and number with neither a town nor a postcode cannot be placed (the same street name exists in about two thousand German towns) and is refused.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world, but the description adds real behavioral detail beyond them: a hard cap of 5 points, deduplication of a door mapped twice, distance reporting for far-apart points, handling of multi-town results as a question, and an ODbL 1.0 attribution obligation. That is material context annotations do not carry.

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 purpose and immediately follows with the disambiguating rules, then edge cases and licensing. It is dense and every sentence carries information, though the run-on construction packs several distinct rules into single sentences and could be separated slightly more cleanly.

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 no output schema, the description compensates by explaining what is returned (coordinate plus named objects or none) and how the coordinate is reused by other tools. Required input constraints, the multi-result ceiling, dedup behavior, and the legal attribution requirement are all covered for a tool of this complexity.

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 query, limit, and language, including the town/postcode requirement and the language default. The description mostly reinforces these rather than adding new parameter meaning; the lat/lon pass-through is a downstream usage hint, not an input detail. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource (looks up a street address) plus exactly what it returns (coordinate + named OSM objects at it, or none). It explicitly names the siblings it is not (find_place, find_poi) and the input shape that selects it, so an agent can distinguish it 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 Guidelines5/5

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

Gives an explicit trigger ('person gives a STREET AND NUMBER'), an explicit exclusion ('never who lives there'), and routes two alternative cases to named siblings (find_place for town/district/station, find_poi for named company/shop/landmark). When-to-use and when-not-to-use are both covered.

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

find_charging_stationA
Read-onlyIdempotent
Inspect

Returns EV charging sites near a place or coordinate: operator, plugs, max power, price per kWh where published, and points free now where live status is published. Filters: plug, power (min/max kW), operator, free now, conditions (24/7, card, free of charge, public). Use when an EV driver asks where to charge ("Wo kann ich laden?", "CCS 150 kW near Leipzig", "ist gerade eine Säule frei?"). Do NOT use for petrol or diesel (find_cheapest_fuel) or E-Kennzeichen rules (get_driving_rules). Radius ≤ 25 km, ≤ 10 sites; missing availability is unknown, never free. Show the attribution line.

NameRequiredDescriptionDefault
latNoLatitude in WGS 84, e.g. 48.137. Use with lon when the caller already holds coordinates; otherwise use place.
lonNoLongitude in WGS 84, e.g. 11.576. Use with lat; otherwise use place.
limitNoHow many lines to return, nearest first (1–10, default 5). Places within 50 m that read alike are folded into one line that says how many units it holds; structuredContent.sites has one entry per place of the lines shown, with siteIds naming every record of that place, so it can be longer than limit.
placeNoWhere to look, as free text: a city ("München", "Munich"), a district or Kreis ("Kreis Fulda"), a Bundesland, a station or stop ("Hamburg Hbf"), a motorway junction ("AK Neufahrn"), or a street address with a house number ("Bahnhofstraße 12, 36037 Fulda"). A motorway number alone ("A7") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. A place or lat+lon is required (unless the tool names another way in, such as a road): when the person named neither, ask them for a town, a postcode or their position before calling. Given both, the answer is about lat+lon with the place as its label, and is refused only when the two lie further apart than the search reaches.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de
operatorNoOnly sites of this charge-point operator brand, as the person names it: "IONITY", "EnBW", "Tesla", "Aral pulse". Spellings of one brand match together ("EnBW mobility+ AG", "ENBW"); sites whose source names no operator are left out. Omit unless the person named an operator — a question about WHO operates the chargers sets none.
connectorNoPlug the vehicle needs: "ccs2" (CCS Combo 2 — the DC fast-charging standard on almost every European EV), "type2" (Typ 2 / Mennekes, the AC socket), "chademo" (older Japanese DC, e.g. Nissan Leaf) or "mcs" (Megawatt Charging System, the plug of electric heavy lorries — only for a lorry or truck). Omit unless the person named their plug or their vehicle — filtering on a guess hides chargers they could have used.
radius_kmNoSearch radius around the place in kilometres (1–25, default 10). A charging stop is worth a detour, so this is wider than the fuel radius — but 25 km is the cap, and a larger circle is a dataset request rather than a driver's question.
conditionsNoOnly sites with ONE point that meets every listed term: "open247" (open around the clock, "rund um die Uhr", "24/7"), "card" (pay by credit or debit card at the charger, "mit Karte zahlen"), "free" (free of charge, "kostenlos"), "public" (open to the public, not customers only). Example: ["open247"]. The Bundesnetzagentur charging register states these, and "free" also an operator's published ad-hoc tariff of 0 no older than 90 days; a site that states nothing is left out and counted, never assumed. Omit unless the person asked for one.
max_power_kwNoOnly charging points of at most this many kW (1–1000). Use for a normal AC post ("normale AC-Säule", "Wallbox": 22) or, with min_power_kw, a band (50 and 149 = DC fast but not HPC). Never below min_power_kw. Omit unless the person set an upper limit.
min_power_kwNoOnly charging points of at least this many kW (1–1000). Use when the person names a number or asks for fast charging: 50 = DC fast (a bare "fast"/"schnell"/"Schnelllader"), 150 = HPC ("HPC", "ultra", "ultraschnell"), 300 = the fastest posts in Germany. Omit for "where can I charge" — 11 kW overnight is a valid answer to that question.
only_availableNoWhen true, return only sites with at least one point reported FREE right now. Default false. Use it when the person asks what is free at this moment. Note that only some operators publish live status: the result always says how many nearby sites were dropped because their status is unknown, so the filter never silently hides a charger that may well be free.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely non-obvious behavior beyond them: the ≤25 km radius and ≤10 sites caps, the rule that missing availability is "unknown, never free", and the obligation to show the attribution line. These are exactly the traits an agent cannot infer from structured fields and would otherwise get wrong.

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 what is returned, then filters, then use/don't-use, then hard limits — a sensible ordering with no filler sentences. It is dense to the point of being a run-on in the middle (filter list plus conditions parenthetical), which costs a point but no sentence is truly wasted.

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?

For a 12-parameter, no-output-schema tool this is complete: it describes the shape of the answer (fields returned), the caps, the unknown-vs-free semantics, and the attribution requirement. Nothing an agent needs in order to call it correctly or interpret the result is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already documents every parameter in depth (including enum meanings, units, and omission advice), so the description's filter summary (plug, power, operator, free now, conditions) largely restates structured data. The one added semantic, that absent availability must not be treated as free, is behavioral rather than parameter-specific. Baseline 3 is appropriate.

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

Purpose5/5

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

Opens with a specific verb and resource ("Returns EV charging sites near a place or coordinate") and immediately enumerates the returned fields (operator, plugs, max power, price per kWh, live-free status). It also names the two sibling tools it is NOT for (find_cheapest_fuel, get_driving_rules), so an agent can separate it from the fuel and rules tools 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?

Gives explicit trigger phrasings in the user's own words ("Wo kann ich laden?", "CCS 150 kW near Leipzig", "ist gerade eine Säule frei?") plus a hard exclusion list for petrol/diesel and E-Kennzeichen rules with the correct alternatives named. The radius cap and result cap are stated as operating constraints, so the agent knows both when to call and the limits of what it can ask for.

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

find_cheapest_fuelA
Read-onlyIdempotent
Inspect

Returns the cheapest stations for one fuel grade near a place or coordinate: price per litre, brand, address, distance, open state. Use when the user asks where to fill up or what fuel costs. Do NOT use for charging an electric car (call find_charging_station), price history, or traffic (call check_autobahn_traffic). Radius ≤ 25 km, at most 10 stations. For a brand, a name, open now or at a named time, or nearest-first, call find_fuel_station. Each line names the age of its price and opening-hours claim. Prices are consumer information only; the attribution line and MTS-K note must be shown.

NameRequiredDescriptionDefault
latNoLatitude in WGS 84, e.g. 48.137. Use with lon when the caller already holds coordinates; otherwise use place.
lonNoLongitude in WGS 84, e.g. 11.576. Use with lat; otherwise use place.
fuelNoFuel grade: "e5" (Super E5), "e10" (Super E10, the standard German petrol) or "diesel" — LPG/Autogas and CNG are not held by any source here: say so, never substitute a petrol grade. Default "e10". Pass the grade the person named — a diesel driver is not helped by a petrol price.e10
limitNoHow many stations to return, cheapest first (1–10, default 5). The provider's terms cap it at 10.
placeNoWhere to look, as free text: a city ("München", "Munich"), a district or Kreis ("Kreis Fulda"), a Bundesland, a station or stop ("Hamburg Hbf"), a motorway junction ("AK Neufahrn"), or a street address with a house number ("Bahnhofstraße 12, 36037 Fulda"). A motorway number alone ("A7") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. A place or lat+lon is required (unless the tool names another way in, such as a road): when the person named neither, ask them for a town, a postcode or their position before calling. Given both, the answer is about lat+lon with the place as its label, and is refused only when the two lie further apart than the search reaches.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de
radius_kmNoSearch radius around the place in kilometres (1–25, default 5). The provider's terms cap it at 25 km — a larger circle is a dataset request, not a consumer question.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), yet the description adds real behavioral context: hard caps (25 km radius, 10 results), that each line reports the age of its price and opening-hours claim, that prices are consumer information only, and that an attribution line plus MTS-K note must be surfaced. The one gap is that nothing is said about failure or empty-result behavior when no station falls in the radius.

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 exclusions, then limits, then the routing alternative, then the compliance note — a sound ordering with no filler sentences. The 'Radius ≤ 25 km, at most 10 stations' clause mildly duplicates schema constraints, which costs a point but not much.

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?

Seven parameters, all documented, no output schema required because the description itself lists the returned fields, and the legal/compliance obligation for the attribution and MTS-K note is called out. For a read-only lookup with full annotation coverage, nothing an agent needs in order to call it correctly or report results 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 every parameter including fuel, place, radius_km and language is already fully documented in the schema, and the description adds no syntax or format detail beyond restating the caps. It contributes a scope qualifier ('one fuel grade') but the heavy lifting is done by the schema, which is the baseline-3 case.

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 ('Returns the cheapest stations for one fuel grade near a place or coordinate') and enumerates what each result carries: price per litre, brand, address, distance, open state. It is immediately distinguishable from the nearest sibling, find_fuel_station, by its price-ordering and cheapest-first framing.

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

Usage Guidelines5/5

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

Gives an explicit trigger ('where the user asks where to fill up or what fuel costs') and explicit exclusions with named alternatives: EV charging -> find_charging_station, traffic -> check_autobahn_traffic, price history -> not this tool. It also routes to find_fuel_station for brand, name, open-now, named-time or nearest-first queries, so the agent never has to infer the boundary.

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

find_fuel_stationA
Read-onlyIdempotent
Inspect

Finds filling stations around a place or coordinate under any combination of filters — grade, brand, name, open now, open at a time you name, open 24 h — sorted by distance, price or name. Use when the question is WHICH station: the closest diesel to a stop, an ARAL open tonight, what one forecourt sells. Do NOT use for the plain "where is fuel cheapest" question (call find_cheapest_fuel) or for charging an electric car (call find_charging_station). Every result carries the attribution and the MTS-K note, and says how old each price and opening-hours claim is.

NameRequiredDescriptionDefault
latNoLatitude in WGS 84, e.g. 48.137. Use with lon when the caller already holds coordinates; otherwise use place.
lonNoLongitude in WGS 84, e.g. 11.576. Use with lat; otherwise use place.
fuelNoOnly stations with a current price for this grade: "e5" (Super E5), "e10" (Super E10) or "diesel" — LPG/Autogas and CNG are not held by any source here, so say so rather than call for them. Omit to get every station near the place whatever it sells — the answer then lists all the grades it holds a price for. Required when sort is "price", because a price ordering needs a grade.
nameNoPart of the station's own name or brand, case-insensitive: "Autohof", "Raststätte Fulda". Use it when the person named a specific forecourt rather than a chain. Combine with place to keep the search local.
sortNoOrder of the answer: "distance" (nearest first, the default — use it for "closest diesel to Hamburg Hbf"), "price" (cheapest first, needs fuel), or "name" (alphabetical, for a person scanning a list of a brand's forecourts).distance
brandNoOnly stations of this brand, matched case-insensitively anywhere in the brand field: "ARAL", "Shell", "TotalEnergies", "JET". Use it when the person named a chain ("die ARAL an der B1"). Free stations often carry no brand at all and are then not matched by any brand.
limitNoHow many stations to return (1–10, default 5).
placeNoWhere to look, as free text: a city ("München", "Munich"), a district or Kreis ("Kreis Fulda"), a Bundesland, a station or stop ("Hamburg Hbf"), a motorway junction ("AK Neufahrn"), or a street address with a house number ("Bahnhofstraße 12, 36037 Fulda"). A motorway number alone ("A7") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. A place or lat+lon is required (unless the tool names another way in, such as a road): when the person named neither, ask them for a town, a postcode or their position before calling. Given both, the answer is about lat+lon with the place as its label, and is refused only when the two lie further apart than the search reaches.
open_atNoOnly stations open at that time in Germany (Europe/Berlin): "23:30" means the next time the clock shows 23:30, and "2026-09-30 06:15" a specific local date and time. Use it for "is it still open tonight". Do not pass it together with open_now — they ask the same question about two different clocks.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de
open_nowNoWhen true, only stations the published opening hours say are open at this moment. Default false. A station whose hours we have never read is NOT returned by this filter and is counted in the answer instead — the result never guesses that an unknown station is open.
radius_kmNoSearch radius around the place in kilometres (1–25, default 5). 25 km is the provider's own ceiling — a larger circle is a dataset request, not a consumer question.
whole_dayNoWhen true, only stations the provider flags as open around the clock (24/7). Default false. Use it when asked whether a station never closes ("durchgehend geöffnet", "around the clock") and for a night drive; it is a stricter filter than open_now, which is satisfied by a station that closes at 22:00.

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already declare read-only, idempotent, open-world behavior, so the description does not need to restate safety. It adds useful context beyond annotations by noting that every result carries attribution, the MTS-K note, and the age of each price and opening-hours claim. It does not cover empty-result or provider-failure behavior, but for a read-only search tool this is a strong addition.

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 front-loaded with the core action and scope, then usage guidance and exclusions, then output-freshness context. There are no filler sentences; every clause contributes to selecting or interpreting the tool.

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 13 parameters, full schema coverage, annotations, and no output schema, the description supplies what structured fields do not: the decision boundary against alternatives and the fact that results carry attribution and age metadata. Combined with the richly documented schema, an agent has enough information to call the tool correctly for the main use cases.

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 parameter descriptions themselves explain coordinates, place syntax, fuel grades, sorting, open_at formatting, language behavior, radius limits, and the open_now versus whole_day distinction in detail. The description's filter summary ('grade, brand, name, open now, open at a time you name, open 24 h') mirrors those schema semantics without adding new meaning. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb and resource: finds filling stations around a place or coordinate with filters and sorting. It explicitly distinguishes itself from siblings by naming find_cheapest_fuel and find_charging_station and describing their different questions. An agent can identify the tool's scope without opening the 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 explicit when-to-use guidance ('Use when the question is WHICH station') and concrete examples such as closest diesel, an ARAL open tonight, or a specific forecourt. It also gives explicit when-not-to-use guidance, routing the cheapest-fuel question to find_cheapest_fuel and EV charging to find_charging_station.

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

find_hydrogen_stationA
Read-onlyIdempotent
Inspect

Returns hydrogen (H2) filling stations near a place or coordinate, nearest first, with operator, address, pumps (700 bar car, 350 bar truck/bus), opening hours where published and the age of the record. Use when someone asks where to refuel a fuel-cell car, lorry or bus ("Wasserstofftankstelle", "H2 tanken", "hydrogen station near me"). Do NOT use for petrol or diesel (call find_fuel_station) or EV charging (call find_charging_station); LPG/Autogas and CNG are not held — say so. Radius ≤ 150 km, ≤ 10 stations; no live availability or price is published. Shows the attribution line.

NameRequiredDescriptionDefault
latNoLatitude in WGS 84, e.g. 48.137. Use with lon when the caller already holds coordinates; otherwise use place.
lonNoLongitude in WGS 84, e.g. 11.576. Use with lat; otherwise use place.
limitNoHow many stations to list, nearest first (1–10, default 5).
placeNoWhere to look, as free text: a city ("München", "Munich"), a district or Kreis ("Kreis Fulda"), a Bundesland, a station or stop ("Hamburg Hbf"), a motorway junction ("AK Neufahrn"), or a street address with a house number ("Bahnhofstraße 12, 36037 Fulda"). A motorway number alone ("A7") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. A place or lat+lon is required (unless the tool names another way in, such as a road): when the person named neither, ask them for a town, a postcode or their position before calling. Given both, the answer is about lat+lon with the place as its label, and is refused only when the two lie further apart than the search reaches.
vehicleNoWhich pump the vehicle needs: "car" (Pkw — 700 bar, e.g. Toyota Mirai, Hyundai Nexo; a few sites also offer 350 bar for cars) or "truck" (Lkw or bus — 350 bar). Omit unless the person said what they drive.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de
radius_kmNoSearch radius around place or lat+lon in kilometres (1–150, default 50). Hydrogen stations are few, so the default is wide; when none is inside, the answer still names the nearest one beyond. Example: 50

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantive context beyond them: the 150 km radius and 10-station caps, the fact that no live availability or price exists, that the nearest station beyond the radius is still named, and that an attribution line is shown. These are exactly the data-quality caveats an agent needs before promising results.

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 and scope are front-loaded in the first clause, and every later sentence carries routing or constraint information. It is dense but slightly overstuffed — the parenthetical German query examples and the attribution note are useful, while a couple of clauses restate schema limits.

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?

There is no output schema, yet the description names the returned fields (operator, address, pump pressures, opening hours, record age), the ordering, the result caps, and the absence of live availability/pricing. Nothing an agent needs to call this correctly or set expectations with a user is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description earns above that by explaining the vehicle parameter in domain terms (700 bar car pump vs 350 bar truck/bus pump) and restating the radius/limit ceilings as answer-shape constraints. It doesn't add syntax detail beyond the schema for place or language, which keeps it from a 5.

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 ('Returns hydrogen (H2) filling stations near a place or coordinate, nearest first') and enumerates the returned fields, so the agent knows exactly what it gets. It explicitly names the two nearest siblings it is not (find_fuel_station, find_charging_station), making it separable 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 Guidelines5/5

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

Gives explicit when-to-use triggers including the German phrasings a user would actually type ('Wasserstofftankstelle', 'H2 tanken', 'hydrogen station near me'), plus explicit when-not-to-use routing to find_fuel_station and find_charging_station. It also closes the gap for LPG/CNG by instructing the agent to say those aren't held.

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

find_nearbyA
Read-onlyIdempotent
Inspect

Overview of what is around a place or coordinate: fuel, EV charging, parking, nearest railway station and motorway junction, with distances; everyday places (shop, pharmacy, cash, food, hotel, workshop, police) only when named in categories. Use when asked "what is around me". Do NOT use for a fuel grade's price (find_cheapest_fuel), charger status (find_charging_station), parking occupancy (find_parking), a NAME lookup (find_place/find_poi/find_address), or a coordinate's address (describe_location). Radius ≤ 15 km, up to 3 per category (5 per need). Shows each source's attribution.

NameRequiredDescriptionDefault
latNoLatitude in WGS 84, e.g. 48.137. Use with lon when the caller already holds coordinates; otherwise use place.
lonNoLongitude in WGS 84, e.g. 11.576. Use with lat; otherwise use place.
placeNoWhere to look, as free text: a city ("München", "Munich"), a district or Kreis ("Kreis Fulda"), a Bundesland, a station or stop ("Hamburg Hbf"), a motorway junction ("AK Neufahrn"), or a street address with a house number ("Bahnhofstraße 12, 36037 Fulda"). A motorway number alone ("A7") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. A place or lat+lon is required (unless the tool names another way in, such as a road): when the person named neither, ask them for a town, a postcode or their position before calling. Given both, the answer is about lat+lon with the place as its label, and is refused only when the two lie further apart than the search reaches.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de
radius_kmNoSearch radius around place or lat+lon in kilometres (1–15, default 5). This tool answers "what is around me", not "search a wide area" — for that, use the specific tool with its own wider radius.
categoriesNoWhich categories to include: "fuel", "charging", "parking", "station" (railway station), "junction" (motorway junction) — omit for these five. Everyday places from OpenStreetMap only when named: "groceries", "health" (pharmacy, doctor, hospital), "money" (cash machine, bank, post office), "food", "lodging", "garage" (car repair, tyres, car wash), "police" (police stations), "toilets" (public toilets) ("safety", the former name for both, still answers as both); each uses its own radius (1–2 km, widened up to 5 km where fewer than three are near), not radius_km.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so safety is covered; the description adds non-annotation behavior instead: the 15 km radius ceiling, result caps of 3 per category (5 per need), per-category radii for everyday places, and that source attribution is emitted. It stops short of describing result ordering or what fields each entry carries, which keeps it at 4 rather than 5. Nothing contradicts 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, both front-loaded: capability first, exclusions second, in the order an agent needs them. The exclusion sentence is a dense comma-list but each item is a distinct routing decision, so little is wasted; slightly heavy punctuation costs it a point.

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 6 parameters, no required fields, no output schema and annotations present, the description covers capability, trigger, exclusions, radius limits and result volume — enough to call it correctly. It leaves the shape of individual results (fields per entry, ordering) unstated, which is a minor gap given the absence of an output schema.

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 description coverage is 100%, so the baseline is 3; the description still contributes beyond it by stating the radius bound and the category-cap semantics ("up to 3 per category (5 per need)") and the rule that daily-life categories ignore radius_km in favour of their own 1–2 km radius. It does not restate lat/lon vs place trade-offs, which the schema already handles well.

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 retrieval task ("overview of what is around a place or coordinate") and enumerates the returned content: fuel, EV charging, parking, nearest railway station and motorway junction with distances, plus opt-in everyday categories. It also states the scope limit that everyday places appear "only when named in categories", which is a real behavioral distinction, not a restatement of the name.

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 trigger ("Use when asked 'what is around me'") and an explicit seven-way exclusion list routing to find_cheapest_fuel, find_charging_station, find_parking, find_place/find_poi/find_address and describe_location. This is the strongest form of sibling differentiation: the agent can pick the correct tool on the first try without opening any schema.

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

find_parkingA
Read-onlyIdempotent
Inspect

Parking near a place, a coordinate or along one motorway: lorry parks, car parks, P+R and disabled-badge bays, with total spaces, stated amenities (WC, shower) and published free spaces. Use when asked where to park or leave the car for the train ("Parkhaus in Köln", "Rastplatz A3", "P+R"). Do NOT use for fuel (find_cheapest_fuel) or EV charging (find_charging_station). Radius ≤ 25 km, ≤ 10 sites per list; ODbL and CC BY-SA sources are separate lists (up to three). No "free now" means no published count, not full. No prices: for "was kostet" say so, no call. Show each source's attribution.

NameRequiredDescriptionDefault
latNoLatitude in WGS 84, e.g. 48.137. Use with lon when the caller already holds coordinates; otherwise use place.
lonNoLongitude in WGS 84, e.g. 11.576. Use with lat; otherwise use place.
kindNoWhich kind of parking: "car_park" = public car park (Parkhaus/Parkplatz), "park_and_ride" = P+R beside a station, "truck" = lorry parking, "any" = all of them. Default "any". "disabled_badge" = on-street bays reserved for a disabled parking permit (Behindertenparkplatz, Schwerbehindertenparkplatz), where a municipality publishes them, with a sensor's free/occupied where one is fitted — pass it only when such a bay was asked for; it is never part of "any" and takes place or lat+lon, not road. Rest areas are NOT a kind we can filter: no source we hold classifies them, so for "Rastanlage"/"Raststätte"/"rest area" leave kind out ("truck" when lorry spaces were asked for); "rest_area" is still accepted and answered as "any", with a sentence saying why. Pass a kind only when the person named one — a lorry driver asking for a break wants "truck", someone leaving the car for the train wants "park_and_ride". A camper, a caravan or a coach is none of these: leave the argument out rather than filtering a tourist into lorry bays.any
roadNoA single motorway number to list parking along, e.g. "A3" ("A 3" and "a3" are the same road). Use this when the person named a road and no town — "Rastplatz auf der A7". Give road OR place OR lat+lon, never two of them: a road is a 900 km line and a place is a point, so the two answer different questions. When the question names BOTH — "Parkhaus in Köln an der A3" — use the place: a person parks at a point, and the radius already covers the motorway beside it. A road list is in name order and cannot follow a direction of travel: for "A4 Richtung Görlitz" ask with place for the destination or the next town on the way instead, which answers nearest first.
limitNoHow many facilities to return, nearest first (1–10, default 5).
placeNoWhere to look, as free text: a city ("München", "Munich"), a district or Kreis ("Kreis Fulda"), a Bundesland, a station or stop ("Hamburg Hbf"), a motorway junction ("AK Neufahrn"), or a street address with a house number ("Bahnhofstraße 12, 36037 Fulda"). A motorway number alone ("A7") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. A place or lat+lon is required (unless the tool names another way in, such as a road): when the person named neither, ask them for a town, a postcode or their position before calling. Given both, the answer is about lat+lon with the place as its label, and is refused only when the two lie further apart than the search reaches.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de
radius_kmNoSearch radius around place or lat+lon in kilometres (1–25, default 10). Ignored when you pass road, which covers the whole motorway. Start small in a city and widen if the answer is empty.
facilitiesNoKeep only sites whose own publisher states ALL of these amenities: "toilet", "shower", "restaurant", "snack", "cafe", "shop", "fuel", "charging", "drinking_water", "picnic", "playground", "wifi", "security", "accessible_toilet". Pass it only when the person asks for one — "Rastplatz mit Dusche an der A7" → road "A7", facilities ["shower"]; "car park with a toilet near Köln Hbf" → facilities ["toilet"]. Many publishers state no amenities, so the filter can narrow the answer to little; an amenity nobody stated is unknown, not absent, and the answer says how many sites state any. A toilet, restaurant or charger merely NEAR a site (listed beside it, from OpenStreetMap or the charging register) never satisfies the filter. Leave it out otherwise: every listed site already carries its amenity line.
only_with_free_spacesNoSet true only when the person asks whether spaces are free right now. It keeps just the facilities whose operator publishes live occupancy AND currently reports a space, and the result says how many were dropped for publishing nothing — most German parking publishes no occupancy at all, so true usually narrows the answer to very little. Default false.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare a safe read operation; the description adds substantive behavior beyond that: results arrive as separate per-source lists (ODbL vs CC BY-SA, up to three), radius ≤ 25 km, ≤ 10 sites per list, and a critical semantic caveat that a missing "free now" means no published count rather than full. It also states the attribution obligation, which is a post-call requirement not derivable from 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?

Front-loaded with capability, then usage, then caveats and output quirks in priority order. It is dense and the sentences are long, but every clause adds a fact an agent would otherwise get wrong; only the parenthetical example triplets verge on redundancy.

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?

For a 10-parameter, enum-heavy, no-output-schema tool, the description covers the gaps structured data cannot: source-list splitting, the free-spaces ambiguity, absence of pricing, and the attribution duty. Nothing an agent needs in order to call it correctly and interpret the response is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3 and the schema carries param definitions. The description still adds cross-parameter rules that are easy to miss: road OR place OR lat+lon but never two, and that the per-source split means up to three lists. These constraints reinforce rather than merely repeat the schema, warranting a point above baseline.

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 (parking search) with explicit scope: kinds covered (lorry parks, car parks, P+R, disabled bays) and attributes returned (spaces, amenities, free spaces). It names two siblings it is not (find_cheapest_fuel, find_charging_station), so an agent can route 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?

Gives both when-to-use and when-not-to-use with concrete trigger phrases ("Parkhaus in Köln", "Rastplatz A3", "P+R") and explicit exclusions routed to named alternatives. It even specifies the fallback behavior for price questions ("say so, no call"), which is a real decision rule.

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

find_placeA
Read-onlyIdempotent
Inspect

Looks up a place name and returns every match, each with its kind, population, English name and coordinate; the official key (AGS/RS) only in the structured result. Use when the person asks where somewhere is, when you need a coordinate for another tool, and above all to RECOVER after a tool reported a name as ambiguous — this is where you find out which Neustadt is which. Pass near to rank and separate same-named places by distance. Do NOT use to find a company, shop or landmark: call find_poi. At most 10 results, radius <= 200 km. Every result carries an attribution line to show the user.

NameRequiredDescriptionDefault
latNoLatitude to measure from, instead of `near`.
lonNoLongitude to measure from, instead of `near`.
kindNoNarrow to one kind: "city", "district" (Kreis), "admin" (Land or Regierungsbezirk), "station", "stop", "motorway" or "junction". Omit unless the person was specific.
nearNoA second place to measure from, used to tell same-named candidates apart: "Neustadt" near "Hamburg" is one of twenty Neustadts. Every result then carries its distance from this point.
limitNoHow many candidates to return, best match first (1–10, default 5).
queryYesThe place name to look up, as the person said it — "Neustadt", "Munich", "Kreis Fulda", "Köln Hbf". English names and spellings without umlauts both work.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de
radius_kmNoWhen near/lat+lon is given, keep only candidates within this many kilometres (1–200). Omit to rank by distance without dropping any.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false), so the bar is lower. The description still adds non-obvious behavior: a hard cap of 10 results, a 200 km radius ceiling, that the official AGS/RS key appears only in the structured result, and that every result carries an attribution line the agent must surface to the user. It does not describe ranking/tie-breaking or fallback behavior when nothing matches.

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 opening sentence front-loads purpose and payload, and the when-to-use, exclusion, and limit sentences each carry distinct information. It is longer than strictly necessary (the disambiguation point is stated twice, via `near` and via the Neustadt example), but nothing is padding.

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 8 parameters, no output schema, and annotations covering only safety, the description supplies what the structured fields cannot: the result shape, the result cap, the radius ceiling, the attribution obligation, and the ambiguity-recovery workflow. Nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, and the schema already documents every parameter including the important `language` default trap. The description adds strategic framing rather than new syntax: it explains that `near` is the disambiguation lever for same-named places and reiterates the 10-result/200 km bounds, tying the parameters into one workflow.

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 opens with a specific verb and resource ("Looks up a place name and returns every match") and enumerates the returned fields (kind, population, English name, coordinate, AGS/RS key). It explicitly contrasts itself with a sibling ("Do NOT use to find a company, shop or landmark: call find_poi"), so an agent can separate it from find_poi and find_address 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 three concrete trigger conditions (person asks where somewhere is, a coordinate is needed for another tool, recovering from an ambiguity error) plus an explicit exclusion routing to find_poi. The ambiguity-recovery role ("this is where you find out which Neustadt is which") is unusually actionable guidance.

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

find_poiA
Read-onlyIdempotent
Inspect

Finds a business or landmark by name or kind — company, shop, clinic, hotel, hostel — with address, category and coordinate. Use when the person names a THING rather than a town: "the adesso office in Dortmund", "the nearest Aldi", "a hotel in Weimar". The coordinate passes to any other tool as lat/lon. Do NOT use for a town, district or station (every tool's place resolves those), nor for fuel, charging or parking (own tools). Give "in" (a town) when you can: far faster than nationwide. 25 per page, 50 via cursor; radius <= 50 km. OpenStreetMap under ODbL 1.0; show the attribution line.

NameRequiredDescriptionDefault
inNoA town to search in — "Dortmund", "Fulda". Strongly preferred: it is both far faster and far less ambiguous than a nationwide search. Use this OR near/lat+lon, not both.
latNoLatitude of the point to search around, when the caller already holds a coordinate.
lonNoLongitude of the point to search around.
nameYesThe name of the thing to find — a company, shop, clinic, hotel, office or landmark. Part of the name is enough: "adesso" finds "adesso SE". A chain name works too, because brands are matched as well as names. A kind word alone, German or English ("Apotheke", "pharmacy", "trade fair"), lists that kind nearest first. When the person names a company AND a type ("the Bosch office"), put the company here and the type in category. Never for fuel, charging or parking, even near a named company or landmark ("a charger by the Allianz Arena"): those have their own tools, asked with the place.
nearNoA place to search around, when the question is "the nearest X" rather than "X in Y". Use with radius_km.
limitNoHow many to return per page, best match first (1–25, default 10). The answer says when more matched; fetch them with cursor, up to 50 in all.
cursorNoPagination cursor from a previous result's _meta.nextCursor. Omit for the first page.
categoryNoNarrow to one OpenStreetMap family: "office" (companies, agencies), "shop", "amenity" (fuel, pharmacy, school, restaurant, town hall), "healthcare" (hospitals, clinics, doctors, pharmacies), "tourism" (hotels, attractions), "leisure", "industrial" (factories, plants), "historic" (castles, monuments, city gates), "natural" (mountain peaks) or "building". Set it whenever the person names the type ("Bosch office" → office, "Hotel Adler" → tourism); omit it when they name no type.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de
radius_kmNoSearch radius in kilometres around near/lat+lon (1–50, default 10). Ignored when "in" is used.

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, non-destructive, and not open-world. The description adds operational constraints: pagination limits (25 per page, 50 via cursor), radius limit (≤50 km), coordinate pass-through, and attribution requirement (ODbL 1.0). These are valuable behavioral details beyond the safety profile.

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?

Front-loaded with the core purpose and usage rules. Every sentence is dense with actionable information—examples, exclusions, pagination, attribution—and none is wasted.

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?

For a 10-parameter tool with no output schema, the description covers selection criteria, key parameter usage, pagination, radius limit, and legal attribution. It provides everything an agent needs to invoke the tool correctly.

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 all parameters thoroughly. The description adds minor guidance (e.g., 'Give in when you can') but largely repeats constraints like page size and radius that are also in the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (find) and resource (business or landmark) with examples, and explicitly distinguishes from siblings by naming what it is NOT for (towns, fuel, charging, parking). An agent can select it without ambiguity.

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?

Provides explicit when-to-use (person names a THING) and when-not-to-use (town, district, station, fuel/charging/parking), and recommends using 'in' for speed. Names alternatives implicitly via sibling tools, leaving nothing to inference.

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

find_roadworks_aheadA
Read-onlyIdempotent
Inspect

Returns roadworks PLANNED on one motorway, one Bundes-/Landesstraße in NI, NW, HE, BW, MV, SN or TH (BY: B only), or city streets by place, in a date window: where, impact, dates, map links. Use when a date or window is named, it says geplant, or how long a site lasts ("Baustellen auf der A7 in den Sommerferien?"). ONE road/place per call. Do NOT use when more than one motorway is named, for the situation this minute, or for Baustellen with neither date nor geplant — all three are check_autobahn_traffic; whether a road is open — check_road_status. ≤ 92 days, max 20 sites. Show attribution.

NameRequiredDescriptionDefault
toNoLast day of the window, inclusive, as YYYY-MM-DD. Omit for 7 days after `from`, which is the right window for "am I going to hit roadworks on this drive". The window may span at most 92 days. For "how long will this last" / "wie lange dauert die Baustelle noch", leave both dates out: the default 7 days already returns the site's planned end date. Only widen — 28 days is the sensible step — when the person asked about a period that long.
fromNoFirst day of the window, as YYYY-MM-DD in German local time. Omit for today. Resolve relative wording ("next Friday", "in den Sommerferien", "nächsten Monat") into real dates yourself, counted from today's date; this argument never takes words, and it never takes a fixed example date — the window a person means moves with the calendar.
roadNoThe road to look at, one per call: an Autobahn, e.g. "A7" or "A100"; a Bundesstraße in Niedersachsen, Nordrhein-Westfalen, Hessen, Baden-Württemberg, Bayern, Mecklenburg-Vorpommern, Sachsen or Thüringen, e.g. "B6"; a Landesstraße in Niedersachsen, Nordrhein-Westfalen, Hessen, Baden-Württemberg, Mecklenburg-Vorpommern or Thüringen, e.g. "L1025"; or a Staatsstraße in Sachsen, e.g. "S296" — "A7", "A 7" and "a7" are the same road. B and L roads in other Länder and Kreisstraßen are not covered. Ask again for a second road. Give road OR place.
limitNoMaximum sites to return (1–20, default 10), ordered by planned start. Every returned site is in the structured result; the readable text prints the first 10 and says how many more of them are in the structured half. The answer always names how many sites the window holds in total, so a small limit never hides the size of the problem.
placeNoA place — a district, street or address, e.g. "Hamburg-Altona", "Berlin-Mitte", "Kiel" — for the city and Land roadworks held by point within 3 km of it. Where no such source covers the place, the answer says so. Give road OR place.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare it a safe, idempotent read; the description adds real operational constraints the annotation cannot carry: one road/place per call, ≤92-day window, max 20 sites, partial Länder coverage with named exclusions (Kreisstraßen, other Länder), and a mandatory attribution instruction. It also discloses the text/structured split and that the total count is always reported.

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 use-when, then do-not-use with alternatives, then hard limits and attribution — a clean decision order with no filler. It is dense to the point of being telegraphic ('BY: B only', 'Baustellen with neither date nor geplant'), which risks a slightly slower first parse but never wastes a 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?

With no output schema, the description still tells the agent what comes back (where, impact, dates, map links), how results are ordered and capped, and that the readable text truncates at 10 while the structured half holds all sites. Combined with coverage limits and attribution, nothing needed to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3; the description still adds cross-parameter rules the per-field text only implies — 'ONE road/place per call' as a mutual exclusivity constraint, the 92-day cap, and default-window behavior ('7 days' being right for a drive, widen only when asked). The rest (road format, place radius, language default) is largely restated from 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 ('Returns roadworks PLANNED'), the exact scope of road/place types and Länder, and what each result carries ('where, impact, dates, map links'). An agent can distinguish it from check_autobahn_traffic and check_road_status 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 Guidelines5/5

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

Gives explicit positive triggers ('when a date or window is named, it says geplant, or how long a site lasts') with a worked example query, and explicit exclusions naming the alternative for each ('Do NOT use when more than one motorway is named, for the situation this minute, or for Baustellen with neither date nor geplant — all three are check_autobahn_traffic; whether a road is open — check_road_status').

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

find_sharingA
Read-onlyIdempotent
Inspect

Returns rentable shared bikes near a place or coordinate: bike-sharing stations with bikes and free docks now, and free-floating bikes around, with distance and data age (nextbike incl. KVB Rad, MyRadl, VAG_Rad; Donkey Republic). Use when someone asks for a rental or shared bike ("Leihrad", "Fahrradverleih", "nächstes nextbike", "bike share near me"). Do NOT use for parking (find_parking) or a general look around a place (find_nearby). Radius ≤ 5 km, ≤ 20 stations; e-scooters are not covered. Shows each source's attribution.

NameRequiredDescriptionDefault
latNoLatitude in WGS 84, e.g. 48.137. Use with lon when the caller already holds coordinates; otherwise use place.
lonNoLongitude in WGS 84, e.g. 11.576. Use with lat; otherwise use place.
limitNoHow many stations to list, nearest first (1–20, default 8). Free-floating bikes are summarised, not listed one by one.
placeNoWhere to look, as free text: a city ("München", "Munich"), a district or Kreis ("Kreis Fulda"), a Bundesland, a station or stop ("Hamburg Hbf"), a motorway junction ("AK Neufahrn"), or a street address with a house number ("Bahnhofstraße 12, 36037 Fulda"). A motorway number alone ("A7") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. A place or lat+lon is required (unless the tool names another way in, such as a road): when the person named neither, ask them for a town, a postcode or their position before calling. Given both, the answer is about lat+lon with the place as its label, and is refused only when the two lie further apart than the search reaches.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de
radius_kmNoSearch radius around place or lat+lon in kilometres (0.1–5, default 1). Example: 1
only_availableNotrue (default): list only stations with at least one bike to rent right now. false: also list empty stations, e.g. to find a free dock to return a bike.

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, it discloses operational caps (radius ≤ 5 km, ≤ 20 stations), a coverage gap (e-scooters are not covered), data-freshness signalling (data age), and an output obligation (each source's attribution is shown). These are exactly the traits an agent needs that structured fields do not carry.

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, trigger phrases, exclusions and limits are front-loaded in that order, so the agent can stop reading early. It is dense but a few clauses (the long place-resolution aside, the language rationale) run longer than needed, keeping it just short of maximally tight.

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?

Seven parameters, no output schema, and the description covers everything an agent needs: what is returned, geographic and count caps, exclusions (e-scooters, parking, generic nearby), the required-input rule, and even language handling. Nothing material is left to inference.

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 semantics the schema lacks: although zero parameters are formally required, it states that a place or lat+lon is required (and to ask the user otherwise), and that when both are given the answer is anchored to lat+lon with place as a label, refused if they lie too far apart. only_available is left entirely to the schema, which documents it well.

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 (returns rentable shared bikes near a place or coordinate) and enumerates exactly what comes back: stations with bikes and free docks, plus free-floating bikes, with distance and data age. It even names the covered providers (nextbike incl. KVB Rad, MyRadl, VAG_Rad; Donkey Republic), so the agent knows the scope precisely without opening the 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 trigger phrases in both languages ("Leihrad", "Fahrradverleih", "nächstes nextbike", "bike share near me") and explicit exclusions routing to named siblings: find_parking for parking and find_nearby for a general look around. The when/when-not pair is fully spelled out with the alternative tool named in each case.

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

find_speed_camerasA
Read-onlyIdempotent
Inspect

Returns a town's published speed-enforcement locations (fixed and red-light cameras, section control, announced mobile checks, measuring sites) by kind and street, with the § 23 Abs. 1c StVO notice. Use when someone plans a trip and asks where speed cameras are ("Blitzer Köln"). Planning only — show the notice verbatim. If they say they are driving now: show the notice, offer the list for before the trip or a stop. Never read locations to a driver, never a live warning. Do NOT use for speed limits (get_driving_rules) or roadworks (check_road_status). Area ≤ 25 km. Shows the attribution line.

NameRequiredDescriptionDefault
latNoLatitude in WGS 84, e.g. 48.137. Use with lon when the caller already holds coordinates; otherwise use place.
lonNoLongitude in WGS 84, e.g. 11.576. Use with lat; otherwise use place.
limitNoHow many locations to list (1–50, default 20); the answer says how many more the area holds.
placeNoWhere to look, as free text: a city ("München", "Munich"), a district or Kreis ("Kreis Fulda"), a Bundesland, a station or stop ("Hamburg Hbf"), a motorway junction ("AK Neufahrn"), or a street address with a house number ("Bahnhofstraße 12, 36037 Fulda"). A motorway number alone ("A7") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. A place or lat+lon is required (unless the tool names another way in, such as a road): when the person named neither, ask them for a town, a postcode or their position before calling. Given both, the answer is about lat+lon with the place as its label, and is refused only when the two lie further apart than the search reaches.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de
radius_kmNoThe area around place or lat+lon, in kilometres (1–25, default 5). An area, not an order: the list is never sorted by distance. Example: 5

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare this a safe, idempotent, closed-world read, so the bar is lower; the description still adds non-obvious behaviour: the mandatory § 23 Abs. 1c StVO notice shown verbatim, the attribution line in the output, the 25 km area cap, and the hard rule never to read locations to a driver or act as a live warning. It does not say what the result payload looks like or how truncation beyond `limit` is surfaced, which keeps it below 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?

Front-loaded with what the tool returns, then when to use, then safety constraints and exclusions — a sensible order with no filler. It is dense and reads as a run-on in the safety section (several clauses in one sentence), costing a point on structure but not on substance.

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 no output schema, the description still covers scope, the legal notice requirement, attribution, area limit, sibling exclusions, and the driver-safety refusal rule — everything an agent needs to invoke and phrase the result correctly. Nothing material is missing for a read-only lookup of this complexity.

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 lat/lon vs. place, the language enum, and the radius. The description only echoes the area cap (≤ 25 km) and the by-kind/by-street grouping, adding little beyond the structured fields — 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?

States a specific verb and resource (returns published speed-enforcement locations), enumerates the kinds covered (fixed, red-light, section control, mobile checks, measuring sites) and the keying (by kind and street). It explicitly rules out the two sibling tools an agent might confuse it with — get_driving_rules for speed limits and check_road_status for roadworks.

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

Usage Guidelines5/5

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

Gives concrete trigger phrasing ("Blitzer Köln"), a temporal condition (planning vs. driving now), and an explicit do-not-use list naming the correct alternatives. It even prescribes the fallback behaviour when the user says they are driving — offer the list for before the trip or a stop — so no routing decision is left to inference.

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

get_departuresA
Read-onlyIdempotent
Inspect

Scheduled departures from any German stop — bus, tram, U-/S-Bahn, train, ferry — or the nearest stops around a place ("Abfahrten in der Nähe"). Use when asked when a bus, tram, U-/Stadtbahn or ferry goes ("welche Bahnen" at a Hbf too), or for another DAY or a time over 2 h away: "Wann fährt der nächste Bus ab Fulda Bahnhof?" Do NOT use for a rail station's trains today: get_train_departures. Plan times with live delay/cancellation where held; punctuality: check_transit_disruption. No A-to-B journeys: say so, no call. Holds ≥ 48 h ahead, ≤ 3 days. 15 per call. Show the attribution line.

NameRequiredDescriptionDefault
latNoLatitude in WGS 84, e.g. 50.551 — with lon, the nearest stops around a point the caller already holds. Use place for a named place.
lonNoLongitude in WGS 84, e.g. 9.676. Use with lat.
stopNoThe stop, as the person says it: "Fulda, Bahnhof", "München, Marienplatz", "Köln, Hbf", "Hamburg, Rathausmarkt" (town first). Include the town when the person did — half the names in Germany exist in twenty towns, and a bare "Bahnhof" or "Hauptbahnhof" comes back as a list of candidates to choose from, so call it and let the result ask. Pass their words; do not guess an id. Give either stop OR the stop id, never both.
whenNoStart of the window as an ISO-8601 instant with an offset ("2026-10-02T07:30:00+02:00"). Leave it out for "now". Convert the person's words yourself — "morgen früh", "tonight" — and pass the instant; the answer is always rendered in Europe/Berlin.
limitNoHow many departures to return, earliest first (1–15, default 10). The result always says how many more were in the window.
modesNoKeep only these kinds of service: "bus", "tram", "subway" (U-Bahn), "rail" (every train, including S-Bahn and regional) or "ferry". Omit it unless the person named a kind — "nur Busse", "welche Tram". Several are allowed, which is what "die Busse und Bahnen vor dem Hbf" means. An S-Bahn is "rail": the feed does not always distinguish it, and the line name ("S 6") says which it is.
placeNoA place to list the nearest stops around, when the person names no one stop: a town, district or address ("Bahnhofstraße 12, Fulda", "Köln-Ehrenfeld"). Lists the nearest stops within 5 km with their next departures, as viafrei.de's place page does. Give exactly one of stop, stop_id, place or lat+lon.
stop_idNoThe stop's timetable id, exactly as a previous result of this tool gave it ("de:06631:1234"). It skips the name lookup and is exact — use it for a follow-up about a stop this tool has already named, and for one the person picked out of a candidate list.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de
duration_minNoHow far past that moment to look, in minutes (5–1440, default 60). Small for "what goes now", a few hours for an evening. To look further ahead (the timetable reaches at least 48 h), move `when` instead of widening this: a window of a whole day returns at most 15 rows and would answer about the wrong half of it.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive. The description adds valuable context beyond that: coverage window (≥48 h ahead, ≤3 days), result cap (15 per call), attribution requirement ('Show the attribution line'), and directs delay/punctuality checks elsewhere. It does not cover error behavior or return format, so not a full 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?

Front-loaded with purpose, then usage and constraints. The description is information-dense and every sentence contributes, but it is quite long and telegraphic in places (e.g., 'Holds ≥ 48 h ahead, ≤ 3 days. 15 per call. Show the attribution line.'), which slightly reduces scannability.

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 the tool's complexity (10 parameters, multiple input modes, open-world stop data) and the absence of an output schema, the description covers routing, coverage limits, attribution, and sibling alternatives. An agent has enough to invoke correctly without reading external docs.

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 all 10 parameters in detail (including examples and constraints). The description adds no additional parameter-specific meaning beyond what the schema provides; baseline 3 is appropriate when the schema carries the full parameter burden.

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

Purpose5/5

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

States a specific verb and resource: 'Scheduled departures from any German stop' and enumerates the modes (bus, tram, U-/S-Bahn, train, ferry). Immediately distinguishes itself from the sibling get_train_departures by excluding a rail station's trains today.

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 when to use (when asked when a bus/tram/U-Bahn/ferry goes, for another day or time >2 h away, for nearest stops around a place) and when not to (rail station's trains today → get_train_departures; punctuality → check_transit_disruption; A-to-B journeys → no call). Provides concrete German example phrases.

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

get_driving_rulesA
Read-onlyIdempotent
Inspect

Returns the German road rules a visitor needs: low-emission zones (Umweltzone) and the Feinstaubplakette, speed limits (advisory 130), winter tyres, alcohol, the Sunday lorry ban, tolls, Rettungsgasse, what must be in the car, electric cars. Use when someone drives through Germany or asks whether they may enter a city or street. Do NOT use for live traffic or closures: check_autobahn_traffic; to FIND a charger: find_charging_station. city narrows to its zone; place or lat+lon checks a point against the published zone boundaries. Sourced, dated; show the attribution. Not legal advice.

NameRequiredDescriptionDefault
latNoLatitude (WGS 84) of the point to check against the zone boundaries. Use with lon; otherwise use place.
lonNoLongitude (WGS 84) of the point to check against the zone boundaries. Use with lat; otherwise use place.
cityNoCity the question is about, e.g. "Stuttgart", "München", "Munich". Narrows "lez" to that city's zone and adds the per-city caveat for "ev". Other topics are nationwide. Omit when the question is not about one city.
placeNoA street address, district, station or other point ("Alexanderplatz, Berlin", "Kölner Dom") to check against the published low-emission-zone boundaries: inside, outside with the distance, or unknown. Given with lat+lon, lat+lon is checked and the place is its label, unless the two lie further apart than 10 km plus the town's extent.
topicNoWhich rule to answer. "lez" = low-emission zone and Feinstaubplakette, "speed" = speed limits including the Autobahn advisory 130, "winter" = winter-tyre duty, "alcohol" = alcohol and drugs, "toll" = car and lorry toll, "truck_ban" = Sunday and holiday lorry ban, "equipment" = what the law requires in the car, "emergency" = 112/110, rescue lane, breakdown, crash, "ev" = electric car (E-Kennzeichen, charging payment, plugs). Omit for a one-line overview of all nine; with place or lat+lon, omitted means "lez".
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/openWorldHint=false, so safety is covered. The description adds real context beyond that: results are 'sourced, dated', attribution must be shown, and it disclaims 'not legal advice' — a disclosure an agent needs to relay. It does not describe result completeness or how boundaries are versioned, keeping it below 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?

Front-loaded with the resource and the use/don't-use routing before the parameter notes, which is the right order. The nine-item enumeration of topics duplicates the `topic` enum description verbatim in places, a small redundancy that costs some density, but no sentence is 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 no output schema, the description still covers scope, alternatives, parameter routing, sourcing/attribution and the legal disclaimer — enough to call it correctly. It never states what the default no-parameter call returns beyond the schema note, which is the one remaining gap for a 6-param, all-optional tool.

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 goes slightly beyond by summarizing the interplay between parameters ('city narrows to its zone; place or lat+lon checks a point against the published zone boundaries'), which lets an agent choose the right selector without reading all six schema descriptions.

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 ('Returns the German road rules a visitor needs') and enumerates the covered domains: Umweltzone/Feinstaubplakette, speed limits, winter tyres, alcohol, lorry ban, tolls, Rettungsgasse, equipment, EVs. An agent can immediately distinguish this from check_autobahn_traffic, find_charging_station and check_road_status.

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 positive trigger ('Use when someone drives through Germany or asks whether they may enter a city or street') plus explicit exclusions naming the alternative tools for live traffic/closures and charger lookup. Both when-to-use and when-not-to-use are stated, with the sibling named for each exception.

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

get_train_departuresA
Read-onlyIdempotent
Inspect

Next trains at a German railway station: platform, delay, cancellations. Use when asked when a train, S-Bahn or ICE leaves a named station, or if a train or line from it is late; later today ("heute Abend") stays here. A line with no DEPARTURE station ("ist die S1 pünktlich?"; a destination, "nach …", is not one) — check_transit_disruption. Lists U-Bahn and trams too. Do NOT use for one bus/tram/U-Bahn line, a non-railway stop, another day or over 2 h — get_departures. Types ICE/IC/RE/RB/S; no destination filter; whole station: describe_station. ≤ 15 rows, ≤ 120 min. Show the attribution line.

NameRequiredDescriptionDefault
whenNoStart of the window as an ISO-8601 instant with an offset ("2026-09-20T18:30:00+02:00"). Leave it out for "now", which is what almost every question means. Times in the answer are Europe/Berlin whatever you pass.
limitNoHow many departures to return, earliest first (1–15, default 10). More than 15 is refused — that is a board a person can read, not a dataset.
eva_noNoThe station's EVA number (6–8 digits, e.g. 8002549 for Hamburg Hbf), when a previous result gave you one. It skips the name lookup and is exact — use it to answer a follow-up about a station this tool has already named.
stationNoThe railway station, as the person says it: "Hamburg Hbf", "Köln Hbf", "Munich Central", "Frankfurt (Main) Hbf". Pass their words — English names and "central station" are understood. If the name fits several stations (a bare "Hauptbahnhof"), call anyway: the result lists them and asks which; do not guess one yourself. Give either station OR eva_no, never both.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de
categoriesNoKeep only these train types, when the person named one: "ICE", "IC" (also EC, ECE, Railjet, Nightjet), "RE" (also IRE), "RB" or "S" (S-Bahn). "next ICE to …" is ["ICE"], "Fernzug" is ["ICE", "IC"], "Regionalzug" is ["RE", "RB"]. The board then lists only those, so pair it with a longer duration_min. Omit it for "which trains leave". A replacement bus is never a train type.
duration_minNoHow far ahead to look, in minutes (5–120, default 60). Use a small window for "what leaves now" and a larger one for "this evening". Above 120 is refused: a departure board is not a timetable search.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, open-world and non-destructive, so the safety bar is low; the description still adds hard behavioral facts: ≤15 rows and ≤120 min caps, times always returned in Europe/Berlin regardless of the offset passed, an ambiguous station name returning a disambiguation list rather than a guess, and a mandatory attribution line in the output.

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 comes first, then routing rules, then hard limits and the attribution requirement — a sensible front-load with no filler. It is, however, written in a compressed telegram style ("A line with no DEPARTURE station … — check_transit_disruption") that occasionally costs a re-read; parentheses and dashes carry a lot of load.

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?

For a 7-parameter, no-required-parameter tool with no output schema, the description covers defaults, caps, ambiguous-name handling, language-default pitfall, return-row ceiling and output obligations (attribution). Nothing an agent needs to call it correctly or interpret the result appears to be missing.

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

Parameters4/5

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

With 100% schema coverage the baseline is 3, but the description adds meaning the schema does not: the `when` window is restricted to today and ≤2 h (longer belongs to get_departures), a named train type should be paired with a longer `duration_min`, and omitting `categories` is the correct default for "which trains leave". These are usage rules for parameters, not restatements.

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?

"Next trains at a German railway station: platform, delay, cancellations" gives a specific resource, the fields returned, and the scope (German rail). It then explicitly separates itself from get_departures, describe_station and check_transit_disruption, so an agent can pick it 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 states the triggering questions ("when a train, S-Bahn or ICE leaves a named station", delays, "heute Abend") and names the alternative for each exclusion: one bus/tram/U-Bahn line, non-railway stop, another day, over 2 h → get_departures; a line with no departure station → check_transit_disruption; whole-station info → describe_station. Explicit when-not plus named siblings is the top of this scale.

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

stop_watchAInspect

Ends a watch this conversation opened with watch_situation, so no further notifications arrive for it. Use when the person no longer needs to be told — "du musst mir nichts mehr zur A8 sagen", "stop watching that charger". No id at hand: pass kind ("weather") and key in the person's words ("A8", "Bamberg", "Kiel"); one match is stopped, several are listed. Do NOT use to look a situation up (call check_road_status), to list what is running (read viafrei://watches), or to cancel anything outside this chat. Another session's watch is never found. Results carry their attribution line.

NameRequiredDescriptionDefault
keyNoInstead of an id: the watched subject in the person's words, as it was given to watch_situation — a road or place ("A8", "Bamberg"), and with `kind` a place for a weather or charger watch or a stop name for a station watch ("Kiel", "Köln Hbf"), which is resolved the way watch_situation resolved it. The id the watch carries works too. For a station, region, weather or charger watch a key that matches none of them falls back to `kind` alone. Matched against this session's open watches, case and spaces ignored. One match is stopped; several are listed and none is stopped.
uriNoThe watch's resource uri, e.g. "viafrei://watch/12". Give either this or `watch_id`, not both.
kindNoInstead of an id: the kind of watch the person means, as watch_situation took it ("road", "station", "region", "place", "weather", "charger"). "Turn off the charging alert" is kind "charger" alone.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de
watch_idNoThe numeric id of the watch to stop, as `watch_situation` returned it (the 12 in viafrei://watch/12).

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations (which only assert readOnly=false/destructive=false/idempotent=false), the description discloses the match-resolution rule (one match stopped, several listed and none stopped), the session-scoping limit (another session's watch is never found), and that results carry an attribution line. These are the behaviors an agent 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.

Conciseness4/5

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

Front-loaded with the action and its effect, then usage, then exclusions, then fallback behavior. Dense and largely waste-free, though the kind/key enumeration in the prose partially duplicates the schema and the parenthetical example clusters lengthen it.

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?

For a stateful mutation tool with no output schema, the description covers purpose, trigger conditions, alternatives, ambiguous-match handling, cross-session limits, and the attribution of results. An agent has everything needed to call it correctly or choose a sibling instead.

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 description coverage is 100%, so the baseline is 3, but the description adds a genuine decision heuristic for the alternative invocation paths — id vs. kind+key — and notes that the key is matched case- and space-insensitively against this session's open watches. It does not, however, explain anything about `uri` or `language` beyond what the schema already says.

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 (ends/stops) and resource (a watch opened by watch_situation) plus the consequence (no further notifications). It explicitly distinguishes itself from watch_situation (create), check_road_status (lookup) and viafrei://watches (listing), so an agent can route correctly without reading any sibling 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?

States when to use it with natural-language user examples ("du musst mir nichts mehr zur A8 sagen"), gives explicit negative cases (do NOT look up, list, or cancel outside this chat), and explains the no-id fallback path (kind + key in the person's words) including the ambiguous-match outcome. Nothing is left to inference.

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

watch_situationAInspect

Opens a watch so THIS conversation is told when something changes: a road closed or restricted, a motorway jam, a stop running late, a weather warning, a charger freeing up. Use when asked to be told later: "sag mir Bescheid, wenn die A8 wieder frei ist", "tell me when a warning comes for Kiel". A name is enough as key; no lookup first. Do NOT use to look up now, nor for e-mail, SMS or alerts outside this chat — we cannot send one; say so. Set hours (≤ 24, default 3) for the time asked; condition narrows it (only the reopening, one charge point). Session-scoped, ≤ 10 watches. Show attribution.

NameRequiredDescriptionDefault
keyYesThe thing to watch, in the person's own words — a name is enough and no read tool is needed first; the server resolves it and the answer names the key it resolved to. `road`: a road number ("A8", "B27"). `place`: a town or address ("Fulda"). `weather`: a place name ("Kiel"), resolved to the DWD warn cell it lies in — or a warn cell id ("801002000"); a Land or Kreis is an area and takes no single cell. `station`: a stop or station name ("Köln Hbf", "München, Marienplatz"), resolved to its DHID the way get_departures resolves a stop — or a DHID ("de:14612:28"); an EVA number from get_train_departures ("8000207") is not a DHID and is refused. `charger`: a place ("Würzburg"), resolved to the nearest charging site that reports live occupancy — or a site id from find_charging_station. `region`: a city, district or Land ("Hamburg", "Landkreis Fulda"), resolved to its AGS key the way check_transit_disruption resolves its region — or an AGS key ("14612"). A name that fits several places or stops gets a which-one list and opens no watch; call again with the chosen line.
kindYesWhat kind of thing to watch. `road` = one motorway or federal road (key: "A8", "B27") — reports a closure or restriction appearing or clearing, and on a motorway a jam (condition events) appearing or clearing; `station` = one public-transport stop (key: its name, "Köln Hbf", or its DHID) — reports departures running late past the threshold; `region` = a city, district or Land (key: its name, "Hamburg", or its AGS key, "14612") — reports the share of late trips crossing the threshold; `place` = a town or address (key: "Fulda") — reports road restrictions appearing within the radius, not a jam; `weather` = one DWD warn cell (key: a place name, "Kiel", or the cell id) — reports an official warning coming into force; `charger` = one charging site (key: a place, "Würzburg", or the site id) — reports a point turning free.
hoursNoHow long to watch, in hours (default 3, maximum 24). Prefer this over `until`: it needs no knowledge of the current time. Give one of `hours` or `until`, never both.
untilNoAn explicit end instant as ISO-8601 with an offset ("2026-09-20T18:40:00+02:00"), at most 24 hours ahead. Use only when the person named a time; otherwise use `hours`. Give one of `hours` or `until`, never both.
requestNoThe person's request in their own words ("sag mir Bescheid, wenn sich auf der A7 ein Stau bildet"). Pass it on every call: a jam asked for on a motorway is watched (the Autobahn GmbH's and the police's jam reports); on another road, and for a `place` watch, closures and restrictions only, never a jam or slow traffic, and the answer says so.
languageNoSet this on every call to the language the person is writing in: "en" if they wrote English, "de" if they wrote German. Do not leave it out: it defaults to German ("de"), which is only the fallback when the language is genuinely unclear, so an English question sent without it is answered in German — a wrong answer. Place names, station names and road numbers are never translated in either language; in English the German term is kept in parentheses so the person recognises it on signs and in local apps.de
conditionNoOptional threshold; the keys of each kind, with an example: road {"event": "reopen"} (only the reopening), {"events": ["jams"]} (jams on a motorway); station {"delay_min": 20}; region {"late_share": 0.3, "delay_min": 5, "min_trips": 20}; place {"radius_km": 10}; weather {"min_level": 3}; charger {"point_id": "2"} (one charge point). Any other key, or a key of another kind, is refused by name; leave it out for the default. The answer repeats the condition it applies.

TDQS

A4.5/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint=false, idempotentHint=false, etc.), the description discloses session-scoped lifecycle, a hard cap of ≤10 watches, the ≤24h hours limit, condition-narrowing behavior, and that the answer echoes the resolved key and applied condition. It also states external-alert inability and attribution requirements — rich context annotations alone do not carry.

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 and per-kind event types are front-loaded before the usage and do-not-use clauses, and each sentence adds routing or behavioral value. It is dense and long, but for a six-kind watch with nested conditions the length is largely earned rather than padded.

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 seven params, a nested condition object, and no output schema, the description supplies the key lifecycle facts (session scope, cap, default duration, which-one-list resolution, echoed condition). Return shape is only lightly sketched ('the answer names the key it resolved to'), which is a minor gap given no output schema exists.

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 seven parameters and the nested condition object are already documented in depth; the description's parameter notes (hours ≤24/default 3, condition narrows it) largely restate the schema. The one genuine addition is the 'a name is enough as key; no lookup first' workflow hint, but overall the schema does the heavy lifting, 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 verb and effect: opens a watch so THIS conversation is notified on change, with concrete event types (road closure, jam, late stop, weather warning, charger freeing). It clearly separates itself from the sibling lookup tools (check_*, find_*, get_*) by stating it does not look up now, so an agent can route 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?

Explicitly names when to use (be told later, with bilingual example quotes) and when not to use (not for immediate lookup; not for e-mail/SMS/external alerts, with instruction to say so). The stop_watch alternative is implicitly the sibling, and the look-now tools are explicitly excluded, leaving little to infer.

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. 1 tool update
    • Changedfind_charging_station2 fields changed
      • changedInput schema / properties / connector / description
        Previous value: -"Plug the car needs: \"ccs2\" (CCS Combo 2 — the DC fast-charging standard on almost every European EV), \"type2\" (Typ 2 / Mennekes, the AC socket) or \"chademo\" (older Japanese DC, e.g. Nissan Leaf). Omit unless the person named their plug or their car model — filtering on a guess hides chargers they could have used."New value: +"Plug the vehicle needs: \"ccs2\" (CCS Combo 2 — the DC fast-charging standard on almost every European EV), \"type2\" (Typ 2 / Mennekes, the AC socket), \"chademo\" (older Japanese DC, e.g. Nissan Leaf) or \"mcs\" (Megawatt Charging System, the plug of electric heavy lorries — only for a lorry or truck). Omit unless the person named their plug or their vehicle — filtering on a guess hides chargers they could have used."
      • changedInput schema / properties / connector / enum
        Previous value: -[
        -  "ccs2",
        -  "type2",
        -  "chademo"
        -]New value: +[
        +  "ccs2",
        +  "type2",
        +  "chademo",
        +  "mcs"
        +]
  2. 1 tool update
    • Changedfind_charging_station1 field changed
      • changedInput schema / properties / conditions / description
        Previous value: -"Only sites with ONE point that meets every listed term: \"open247\" (open around the clock, \"rund um die Uhr\", \"24/7\"), \"card\" (pay by credit or debit card at the charger, \"mit Karte zahlen\"), \"free\" (free of charge, \"kostenlos\"), \"public\" (open to the public, not customers only). Example: [\"open247\"]. Only the Bundesnetzagentur charging register states these; a site that states nothing is left out and counted, never assumed. Omit unless the person asked for one."New value: +"Only sites with ONE point that meets every listed term: \"open247\" (open around the clock, \"rund um die Uhr\", \"24/7\"), \"card\" (pay by credit or debit card at the charger, \"mit Karte zahlen\"), \"free\" (free of charge, \"kostenlos\"), \"public\" (open to the public, not customers only). Example: [\"open247\"]. The Bundesnetzagentur charging register states these, and \"free\" also an operator's published ad-hoc tariff of 0 no older than 90 days; a site that states nothing is left out and counted, never assumed. Omit unless the person asked for one."
  3. 2 tool updates
    • Changedcheck_autobahn_traffic3 fields changed
      • addedInput schema / properties / land
        Added value: +{
        +  "description": "Optional, instead of roads: one Bundesland, and the answer is the motorways of the whole Land as its page shows them — counts, the longest jams, each motorway with something in force. Use it instead of roads and place when the question names a Land (\"Stau in Bayern?\", \"Autobahnen in NRW\"). For Berlin, Hamburg and Bremen only when the question names the Land; a city's traffic is check_road_status. Not with roads, place, lat/lon or radius_km.",
        +  "enum": [
        +    "schleswig-holstein",
        +    "hamburg",
        +    "niedersachsen",
        +    "bremen",
        +    "nordrhein-westfalen",
        +    "hessen",
        +    "rheinland-pfalz",
        +    "baden-wuerttemberg",
        +    "bayern",
        +    "saarland",
        +    "berlin",
        +    "brandenburg",
        +    "mecklenburg-vorpommern",
        +    "sachsen",
        +    "sachsen-anhalt",
        +    "thueringen"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / roads / description
        Previous value: -"Autobahn numbers, e.g. [\"A9\"] or [\"A8\", \"A99\", \"A9\"] (1–5 per call). Name every motorway on the route so the whole drive is briefed in one call — \"A9\", \"A 9\" and \"a9\" are the same road. Results are grouped per road, in the order you list them."New value: +"Autobahn numbers, e.g. [\"A9\"] or [\"A8\", \"A99\", \"A9\"] (1–5 per call). Name every motorway on the route so the whole drive is briefed in one call — \"A9\", \"A 9\" and \"a9\" are the same road. Results are grouped per road, in the order you list them. Give roads or land, not both."
      • removedInput schema / required
        Removed value: -[
        -  "roads"
        -]
    • Addeddescribe_station
  4. 1 tool update
    • Changedfind_nearby2 fields changed
      • changedInput schema / properties / categories / description
        Previous value: -"Which categories to include: \"fuel\", \"charging\", \"parking\", \"station\" (railway station), \"junction\" (motorway junction) — omit for these five. Everyday places from OpenStreetMap only when named: \"groceries\", \"health\" (pharmacy, doctor, hospital), \"money\" (cash machine, bank, post office), \"food\", \"lodging\", \"garage\" (car repair, tyres, car wash), \"safety\" (police, toilets); each uses its own radius (1–2 km, widened up to 5 km where fewer than three are near), not radius_km."New value: +"Which categories to include: \"fuel\", \"charging\", \"parking\", \"station\" (railway station), \"junction\" (motorway junction) — omit for these five. Everyday places from OpenStreetMap only when named: \"groceries\", \"health\" (pharmacy, doctor, hospital), \"money\" (cash machine, bank, post office), \"food\", \"lodging\", \"garage\" (car repair, tyres, car wash), \"police\" (police stations), \"toilets\" (public toilets) (\"safety\", the former name for both, still answers as both); each uses its own radius (1–2 km, widened up to 5 km where fewer than three are near), not radius_km."
      • changedInput schema / properties / categories / items / enum
        Previous value: -[
        -  "fuel",
        -  "charging",
        -  "parking",
        -  "station",
        -  "junction",
        -  "groceries",
        -  "health",
        -  "money",
        -  "food",
        -  "lodging",
        -  "garage",
        -  "safety"
        -]New value: +[
        +  "fuel",
        +  "charging",
        +  "parking",
        +  "station",
        +  "junction",
        +  "groceries",
        +  "health",
        +  "money",
        +  "food",
        +  "lodging",
        +  "garage",
        +  "police",
        +  "toilets",
        +  "safety"
        +]
  5. 4 tool updates
    • Changedfind_charging_station1 field changed
      • addedInput schema / properties / conditions
        Added value: +{
        +  "description": "Only sites with ONE point that meets every listed term: \"open247\" (open around the clock, \"rund um die Uhr\", \"24/7\"), \"card\" (pay by credit or debit card at the charger, \"mit Karte zahlen\"), \"free\" (free of charge, \"kostenlos\"), \"public\" (open to the public, not customers only). Example: [\"open247\"]. Only the Bundesnetzagentur charging register states these; a site that states nothing is left out and counted, never assumed. Omit unless the person asked for one.",
        +  "items": {
        +    "enum": [
        +      "open247",
        +      "card",
        +      "free",
        +      "public"
        +    ],
        +    "type": "string"
        +  },
        +  "maxItems": 4,
        +  "minItems": 1,
        +  "type": "array"
        +}
    • Changedfind_nearby2 fields changed
      • changedInput schema / properties / categories / description
        Previous value: -"Which categories to include: \"fuel\", \"charging\", \"parking\", \"station\" (railway station), \"junction\" (motorway junction). Omit for all five. Pass a subset only when the person named one — otherwise the full picture is the point of this tool."New value: +"Which categories to include: \"fuel\", \"charging\", \"parking\", \"station\" (railway station), \"junction\" (motorway junction) — omit for these five. Everyday places from OpenStreetMap only when named: \"groceries\", \"health\" (pharmacy, doctor, hospital), \"money\" (cash machine, bank, post office), \"food\", \"lodging\", \"garage\" (car repair, tyres, car wash), \"safety\" (police, toilets); each uses its own radius (1–2 km, widened up to 5 km where fewer than three are near), not radius_km."
      • changedInput schema / properties / categories / items / enum
        Previous value: -[
        -  "fuel",
        -  "charging",
        -  "parking",
        -  "station",
        -  "junction"
        -]New value: +[
        +  "fuel",
        +  "charging",
        +  "parking",
        +  "station",
        +  "junction",
        +  "groceries",
        +  "health",
        +  "money",
        +  "food",
        +  "lodging",
        +  "garage",
        +  "safety"
        +]
    • Addedfind_speed_cameras
    • Changedget_departures3 fields changed
      • addedInput schema / properties / lat
        Added value: +{
        +  "description": "Latitude in WGS 84, e.g. 50.551 — with lon, the nearest stops around a point the caller already holds. Use place for a named place.",
        +  "maximum": 90,
        +  "minimum": -90,
        +  "type": "number"
        +}
      • addedInput schema / properties / lon
        Added value: +{
        +  "description": "Longitude in WGS 84, e.g. 9.676. Use with lat.",
        +  "maximum": 180,
        +  "minimum": -180,
        +  "type": "number"
        +}
      • addedInput schema / properties / place
        Added value: +{
        +  "description": "A place to list the nearest stops around, when the person names no one stop: a town, district or address (\"Bahnhofstraße 12, Fulda\", \"Köln-Ehrenfeld\"). Lists the nearest stops within 5 km with their next departures, as viafrei.de's place page does. Give exactly one of stop, stop_id, place or lat+lon.",
        +  "maxLength": 120,
        +  "minLength": 1,
        +  "type": "string"
        +}
  6. 11 tool updates
    • Changedcheck_autobahn_traffic1 field changed
      • changedInput schema / properties / place / description
        Previous value: -"Optional: the town, junction or address the person is at or asks about (\"A1 bei Köln\", \"A3 near Frankfurt\"). Then each road's events within radius_km come first, nearest first, and the headline counts them with the road-wide total beside it. Omit it for the whole road. Give either place OR lat+lon, never both."New value: +"Optional: the town, junction or address the person is at or asks about (\"A1 bei Köln\", \"A3 near Frankfurt\"). Then each road's events within radius_km come first, nearest first, and the headline counts them with the road-wide total beside it. Omit it for the whole road. Given with lat+lon, lat+lon is searched around and the place is its label, unless the two lie further apart than radius_km."
    • Changedcheck_road_status1 field changed
      • changedInput schema / properties / place / description
        Previous value: -"Where to look, as free text: a city (\"München\", \"Munich\"), a district or Kreis (\"Kreis Fulda\"), a Bundesland, a station or stop (\"Hamburg Hbf\"), a motorway junction (\"AK Neufahrn\"), or a street address with a house number (\"Bahnhofstraße 12, 36037 Fulda\"). A motorway number alone (\"A7\") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. Give either place OR lat+lon, never both."New value: +"Where to look, as free text: a city (\"München\", \"Munich\"), a district or Kreis (\"Kreis Fulda\"), a Bundesland, a station or stop (\"Hamburg Hbf\"), a motorway junction (\"AK Neufahrn\"), or a street address with a house number (\"Bahnhofstraße 12, 36037 Fulda\"). A motorway number alone (\"A7\") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. A place or lat+lon is required (unless the tool names another way in, such as a road): when the person named neither, ask them for a town, a postcode or their position before calling. Given both, the answer is about lat+lon with the place as its label, and is refused only when the two lie further apart than the search reaches."
    • Changedcheck_weather_warnings1 field changed
      • changedInput schema / properties / place / description
        Previous value: -"Where to look, as free text: a city (\"München\", \"Munich\"), a district or Kreis (\"Kreis Fulda\"), a Bundesland, a station or stop (\"Hamburg Hbf\"), a motorway junction (\"AK Neufahrn\"), or a street address with a house number (\"Bahnhofstraße 12, 36037 Fulda\"). A motorway number alone (\"A7\") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. Give either place OR lat+lon, never both."New value: +"Where to look, as free text: a city (\"München\", \"Munich\"), a district or Kreis (\"Kreis Fulda\"), a Bundesland, a station or stop (\"Hamburg Hbf\"), a motorway junction (\"AK Neufahrn\"), or a street address with a house number (\"Bahnhofstraße 12, 36037 Fulda\"). A motorway number alone (\"A7\") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. A place or lat+lon is required (unless the tool names another way in, such as a road): when the person named neither, ask them for a town, a postcode or their position before calling. Given both, the answer is about lat+lon with the place as its label, and is refused only when the two lie further apart than the search reaches."
    • Changedfind_charging_station1 field changed
      • changedInput schema / properties / place / description
        Previous value: -"Where to look, as free text: a city (\"München\", \"Munich\"), a district or Kreis (\"Kreis Fulda\"), a Bundesland, a station or stop (\"Hamburg Hbf\"), a motorway junction (\"AK Neufahrn\"), or a street address with a house number (\"Bahnhofstraße 12, 36037 Fulda\"). A motorway number alone (\"A7\") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. Give either place OR lat+lon, never both."New value: +"Where to look, as free text: a city (\"München\", \"Munich\"), a district or Kreis (\"Kreis Fulda\"), a Bundesland, a station or stop (\"Hamburg Hbf\"), a motorway junction (\"AK Neufahrn\"), or a street address with a house number (\"Bahnhofstraße 12, 36037 Fulda\"). A motorway number alone (\"A7\") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. A place or lat+lon is required (unless the tool names another way in, such as a road): when the person named neither, ask them for a town, a postcode or their position before calling. Given both, the answer is about lat+lon with the place as its label, and is refused only when the two lie further apart than the search reaches."
    • Changedfind_cheapest_fuel1 field changed
      • changedInput schema / properties / place / description
        Previous value: -"Where to look, as free text: a city (\"München\", \"Munich\"), a district or Kreis (\"Kreis Fulda\"), a Bundesland, a station or stop (\"Hamburg Hbf\"), a motorway junction (\"AK Neufahrn\"), or a street address with a house number (\"Bahnhofstraße 12, 36037 Fulda\"). A motorway number alone (\"A7\") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. Give either place OR lat+lon, never both."New value: +"Where to look, as free text: a city (\"München\", \"Munich\"), a district or Kreis (\"Kreis Fulda\"), a Bundesland, a station or stop (\"Hamburg Hbf\"), a motorway junction (\"AK Neufahrn\"), or a street address with a house number (\"Bahnhofstraße 12, 36037 Fulda\"). A motorway number alone (\"A7\") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. A place or lat+lon is required (unless the tool names another way in, such as a road): when the person named neither, ask them for a town, a postcode or their position before calling. Given both, the answer is about lat+lon with the place as its label, and is refused only when the two lie further apart than the search reaches."
    • Changedfind_fuel_station1 field changed
      • changedInput schema / properties / place / description
        Previous value: -"Where to look, as free text: a city (\"München\", \"Munich\"), a district or Kreis (\"Kreis Fulda\"), a Bundesland, a station or stop (\"Hamburg Hbf\"), a motorway junction (\"AK Neufahrn\"), or a street address with a house number (\"Bahnhofstraße 12, 36037 Fulda\"). A motorway number alone (\"A7\") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. Give either place OR lat+lon, never both."New value: +"Where to look, as free text: a city (\"München\", \"Munich\"), a district or Kreis (\"Kreis Fulda\"), a Bundesland, a station or stop (\"Hamburg Hbf\"), a motorway junction (\"AK Neufahrn\"), or a street address with a house number (\"Bahnhofstraße 12, 36037 Fulda\"). A motorway number alone (\"A7\") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. A place or lat+lon is required (unless the tool names another way in, such as a road): when the person named neither, ask them for a town, a postcode or their position before calling. Given both, the answer is about lat+lon with the place as its label, and is refused only when the two lie further apart than the search reaches."
    • Changedfind_hydrogen_station1 field changed
      • changedInput schema / properties / place / description
        Previous value: -"Where to look, as free text: a city (\"München\", \"Munich\"), a district or Kreis (\"Kreis Fulda\"), a Bundesland, a station or stop (\"Hamburg Hbf\"), a motorway junction (\"AK Neufahrn\"), or a street address with a house number (\"Bahnhofstraße 12, 36037 Fulda\"). A motorway number alone (\"A7\") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. Give either place OR lat+lon, never both."New value: +"Where to look, as free text: a city (\"München\", \"Munich\"), a district or Kreis (\"Kreis Fulda\"), a Bundesland, a station or stop (\"Hamburg Hbf\"), a motorway junction (\"AK Neufahrn\"), or a street address with a house number (\"Bahnhofstraße 12, 36037 Fulda\"). A motorway number alone (\"A7\") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. A place or lat+lon is required (unless the tool names another way in, such as a road): when the person named neither, ask them for a town, a postcode or their position before calling. Given both, the answer is about lat+lon with the place as its label, and is refused only when the two lie further apart than the search reaches."
    • Changedfind_nearby1 field changed
      • changedInput schema / properties / place / description
        Previous value: -"Where to look, as free text: a city (\"München\", \"Munich\"), a district or Kreis (\"Kreis Fulda\"), a Bundesland, a station or stop (\"Hamburg Hbf\"), a motorway junction (\"AK Neufahrn\"), or a street address with a house number (\"Bahnhofstraße 12, 36037 Fulda\"). A motorway number alone (\"A7\") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. Give either place OR lat+lon, never both."New value: +"Where to look, as free text: a city (\"München\", \"Munich\"), a district or Kreis (\"Kreis Fulda\"), a Bundesland, a station or stop (\"Hamburg Hbf\"), a motorway junction (\"AK Neufahrn\"), or a street address with a house number (\"Bahnhofstraße 12, 36037 Fulda\"). A motorway number alone (\"A7\") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. A place or lat+lon is required (unless the tool names another way in, such as a road): when the person named neither, ask them for a town, a postcode or their position before calling. Given both, the answer is about lat+lon with the place as its label, and is refused only when the two lie further apart than the search reaches."
    • Changedfind_parking1 field changed
      • changedInput schema / properties / place / description
        Previous value: -"Where to look, as free text: a city (\"München\", \"Munich\"), a district or Kreis (\"Kreis Fulda\"), a Bundesland, a station or stop (\"Hamburg Hbf\"), a motorway junction (\"AK Neufahrn\"), or a street address with a house number (\"Bahnhofstraße 12, 36037 Fulda\"). A motorway number alone (\"A7\") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. Give either place OR lat+lon, never both."New value: +"Where to look, as free text: a city (\"München\", \"Munich\"), a district or Kreis (\"Kreis Fulda\"), a Bundesland, a station or stop (\"Hamburg Hbf\"), a motorway junction (\"AK Neufahrn\"), or a street address with a house number (\"Bahnhofstraße 12, 36037 Fulda\"). A motorway number alone (\"A7\") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. A place or lat+lon is required (unless the tool names another way in, such as a road): when the person named neither, ask them for a town, a postcode or their position before calling. Given both, the answer is about lat+lon with the place as its label, and is refused only when the two lie further apart than the search reaches."
    • Changedfind_sharing1 field changed
      • changedInput schema / properties / place / description
        Previous value: -"Where to look, as free text: a city (\"München\", \"Munich\"), a district or Kreis (\"Kreis Fulda\"), a Bundesland, a station or stop (\"Hamburg Hbf\"), a motorway junction (\"AK Neufahrn\"), or a street address with a house number (\"Bahnhofstraße 12, 36037 Fulda\"). A motorway number alone (\"A7\") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. Give either place OR lat+lon, never both."New value: +"Where to look, as free text: a city (\"München\", \"Munich\"), a district or Kreis (\"Kreis Fulda\"), a Bundesland, a station or stop (\"Hamburg Hbf\"), a motorway junction (\"AK Neufahrn\"), or a street address with a house number (\"Bahnhofstraße 12, 36037 Fulda\"). A motorway number alone (\"A7\") resolves to the road, which has no single point — name a town or junction on it instead. Use this instead of coordinates whenever the person named a place. An address needs its town or postcode — a street and a number alone exist in many towns. A place or lat+lon is required (unless the tool names another way in, such as a road): when the person named neither, ask them for a town, a postcode or their position before calling. Given both, the answer is about lat+lon with the place as its label, and is refused only when the two lie further apart than the search reaches."
    • Changedget_driving_rules1 field changed
      • changedInput schema / properties / place / description
        Previous value: -"A street address, district, station or other point (\"Alexanderplatz, Berlin\", \"Kölner Dom\") to check against the published low-emission-zone boundaries: inside, outside with the distance, or unknown. Give either place OR lat+lon, never both."New value: +"A street address, district, station or other point (\"Alexanderplatz, Berlin\", \"Kölner Dom\") to check against the published low-emission-zone boundaries: inside, outside with the distance, or unknown. Given with lat+lon, lat+lon is checked and the place is its label, unless the two lie further apart than 10 km plus the town's extent."

Publisher details

Operator
ViaFrei · Publisher source
Operator website
Unknown
Vendor relationship
Unknown
Trust center
Unknown
Restrictions
Unknown

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Remote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    23 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources