Skip to main content
Glama

Server Details

Sights, events, opening hours, weather and tides; nearby sharing as currently reported.

Ownership verified
Status
Healthy
Uptime
99.9% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.4/5.0

Scored across 14 tools

Disambiguation4/5

Each tool has a clearly stated role and the descriptions invest heavily in explicit boundary notes (e.g. expand_kg_pois vs nearby vs search_tourism, and get_poi_details vs get_tourism_details). Genuine overlap remains in the POI-discovery cluster (three tools surface attractions) and the two detail tools, so an agent must read carefully rather than rely on the name alone.

Naming Consistency4/5

All names use uniform snake_case and most follow a clear verb_noun pattern (get_*, search_*, link_*, resolve_*, reverse_*, expand_*). The lone exception is the bare adverb 'nearby', which breaks the verb_noun convention but stays readable and unambiguous.

Tool Count5/5

With 14 tools spanning tourism discovery, curated content, POI/place/address resolution, reverse geocoding, weather, tides, and time linking, the count sits comfortably in the well-scoped 3-15 range and feels earned rather than padded.

Completeness4/5

The surface covers discovery (OSM + curated), single-item detail for both sources, current and forecast weather, tides, forward and reverse geocoding, and time linking. Since it is a read-only information server, CRUD lifecycle is not the model and routing is deliberately delegated, leaving only minor gaps.

Available Tools

14 tools
expand_kg_poisA
Read-only
Inspect

Attraktionen / Tourismus-POIs FÜR einen Place aus dem OSM-Knowledge-Graph (Ausdehnung einer Stadt-/Region-OSM-ID auf die POIs darin). Für „was kann ich in X unternehmen" ist dieses Werkzeug die Auskunft — erst verorten, dann abfragen: die osm_id der Region stammt aus search_place. Tool-Semantik-Abgrenzung: dieses Tool = „WELCHE Attraktionen gibt es IN diesem Place" (KG-basiert). NICHT nearby (das ist Vicinity — „Dinge im Radius um EINEN Punkt"). NICHT search_place (das ist Place- Disambiguierung — „WELCHER Ort ist gemeint"). NICHT resolve_location (Transit-Halte). When to use: Region-Tourismus — DE: „was kann ich in unternehmen", „was gibt es in zu sehen", „Sehenswürdigkeiten in ". EN: „what can I do in ", „attractions in ". Nach search_place(<REGION>) mit der zurückgegebenen osmRel-ID aufrufen. When NOT to use: Vicinity-zu-Punkt (Radius um Koordinaten) → nearby; Detail-Info zu EINEM bereits gefundenen POI → get_poi_details; Place- Auflösung Name→ID → search_place; Wetter/Tide → get_current_weather/get_tide. Required args: osm_id (i64 — die osmRel-ID der Stadt/Region aus einem search_place/places-Treffer, z.B. 1187768 für Wangerland; osmNode als Fallback). Optional: limit (Default 8, clamped 1..=20), types (schema.org-Keywords als Substring-Filter, z.B. ["TouristAttraction"], ["Museum"], ["Event"] — case-insensitive; leer = alle Aktivitäts-/ Tourismus-Klassen), include_address (bool, Default true — löst die Postadresse je Entity auf), family_only (bool, Default false — nur family-taugliche POIs, je mit den tag-belegten Feldern family/indoor/family_categories) und, nur zusammen damit, indoor_only (bool — davon nur die Indoor-/Schlechtwetter-tauglichen). Unterkünfte ausgeschlossen: dieses Tool ist der Aktivitäts-/„unternehmen"- Pfad — Unterkünfte (tourism=hotel/hostel/guest_house/motel/apartment/… ) werden backend-seitig AUSGESCHLOSSEN (ein Hotel ist keine Unternehmung); auch ein Hotel-types-Filter liefert hier nichts. Für Hotels/Pensionen → search_tourism(type=accommodation) (kuratierte Unterkünfte). Typical chain: search_place(<REGION>) → THIS_TOOL(osm_id=) → (optional get_poi_details(osm_id) pro Treffer für tiefere Details). Multi-call: ein Call pro Region/Typ-Filter; Bursting nicht nötig (das Tool fan-out't intern über alle containedInPlace-Entities). Anti-Fab note: POI-Name, type, Beschreibung, Adresse kommen AUSSCHLIESSLICH aus pois[] dieses Aufrufs. returned: 0 / pois: [] heißt: für dieses Gebiet ist nichts abrufbar — so wiedergeben („Ich konnte für aktuell keine Attraktionen abrufen"). OSM-KG-Coverage: deutschlandweit; Tag-Dichte variiert je Region wie in OSM üblich. Returns {place_osm_id, total_contained, tourism_candidates, returned, pois:[{name, type, types, description?, address?, uri, coord?, opening_hours?, fee?, source:'osm'}], attribution?}. Die optionalen Felder je POI sind tag-belegt oder abwesend, nie geraten. attribution (additiv, top-level): die ODbL-Namensnennung der gelieferten OSM-Daten (ODbL) — {id:'ODbL-1.0', notice:'© OpenStreetMap contributors', url:'https://www.openstreetmap.org/copyright'}. EINMAL pro Antwort (nicht pro POI) und nur wenn pois nicht leer ist. Nennst du diese POIs, nenne „OpenStreetMap" als Quelle. „Kinderfreundlich" ist ein Daten-Fakt (Kategorie/Tag-belegt), kein Modell-Raten.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of enriched tourism entities to return (default 8, clamped to 1..=20).
typesNoOptional schema.org type keywords to narrow the result, e.g. ["TouristAttraction"], ["Hotel"], or ["Event"]. Matched case-insensitively as substrings against each entity's schema.org rdf:type. When omitted, all tourism-relevant entities (attractions, hotels, events, gastronomy) are returned.
osm_idYesOpenStreetMap relation/node ID of the city/region (e.g. 1187768 for Wangerland). Use the osmRel id from a `places` result (preferred) or osmNode as fallback.
family_onlyNoFamily mode: query the OSM family allowlist (playground/zoo/aquarium/beach/water_park/…) and keep/rank only family-suitable POIs, each carrying the derived `family`/`indoor`/ `family_categories` fields. Defaults to false (the full region expansion).
indoor_onlyNoRestrict the family result to indoor (rain-safe) POIs (aquarium/indoor_play). Only meaningful with `family_only=true`.
include_addressNoWhether to also resolve each entity's structured postal address (locality, region, postal code) with an extra lookup. Defaults to true.

TDQS

A4.8/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint/openWorldHint/destructiveHint=false), it discloses non-obvious behavior: accommodations are excluded server-side even when filtered for, empty results must be reported as such rather than invented, per-POI optional fields are tag-backed or absent (never guessed), and an ODbL attribution object appears once per non-empty response. This is genuinely useful context an agent could not derive 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 purpose before the routing apparatus, and the bold section headers make the long text navigable. It is nevertheless verbose, with repetitive capitalized emphasis (WELCHE/WELCHER/WELCHER) and some restatement of the when/when-not split, which costs it the top score.

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 6-parameter, no-output-schema tool this covers everything an agent needs: required vs optional args with defaults and clamps, the exclusion rule, error/empty-state handling, result field shape, attribution obligation, and OSM coverage caveats. Nothing material is left dangling.

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 real meaning: it notes the hotel-type example in the schema yields nothing here (backend accommodation exclusion), states the osm_id provenance (osmRel ID from search_place, osmNode fallback), and flags that indoor_only is only meaningful together with family_only. It stops short of extending meaning for every parameter, so not 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: expands a city/region OSM ID into the tourism POIs contained in it, naming the OSM Knowledge Graph as the source. It explicitly distinguishes itself from three siblings (nearby, search_place, resolve_location) with a labelled 'Tool-Semantik-Abgrenzung' section, so an agent can position 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?

Provides dedicated 'When to use' and 'When NOT to use' blocks with concrete German and English trigger phrases ('was kann ich in <REGION> unternehmen'), plus routing rules to nearby for radius queries, get_poi_details for one POI, and search_tourism for hotels. The Typical chain (search_place → this tool → get_poi_details) and multi-call guidance remove all inference.

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

get_current_weatherA
Read-only
Inspect

Aktuelles Wetter zu Koordinaten. Für „wie ist das Wetter in X" ist dieses Werkzeug die Auskunft — erst verorten, dann abfragen: lat/lon kommen aus search_place, nie aus eigener Schätzung. When to use: aktuelle Wetterfrage zu einem Ort — DE: „wie ist das Wetter in ", „regnet es gerade in ". EN: „what's the weather like in right now". Auch als Teil des Wetter-POI-Pfads („was kann ich bei dem Wetter unternehmen"). When NOT to use: Vorhersage > 1 Stunde voraus → get_weather_forecast; Gezeiten → get_tide. Required args: lat, lon. Optional: units ('metric' (°C, default), 'imperial' (°F), 'standard' (K)), lang ('en' default, 'de'). Typical chain: search_place(city) → THIS_TOOL(lat, lon) → (optional nearby/resolve_location für POI-Match). Multi-call: ein Call pro Ort. Für Multi-Tag-Anfragen get_weather_forecast bevorzugen. Anti-Fab note: Temperatur, Bedingungen, Wind, Feuchte kommen NUR aus dem Tool-Output dieses Aufrufs — KEINE Schätz-Werte. attribution (additiv, top-level): die von der GeoNutzV verlangte Quellenangabe der Wetterdaten — {id:'GeoNutzV', notice:'Quelle: Deutscher Wetterdienst', url:…}. Nennst du Wetter-Werte, nenne den Deutscher Wetterdienst als Quelle; die Auflage reist mit dem Tool-Output, nicht mit dem Prompt.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude of the location
lonYesLongitude of the location
langNoLanguage code for descriptions (e.g. "en", "de"). Defaults to "en".
unitsNoUnit system: "metric" (°C, m/s), "imperial" (°F, mph), or "standard" (K). Defaults to "metric".

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already establish read-only, open-world, non-destructive behavior, but the description adds substantial context beyond them: an anti-fabrication rule (values only from tool output), the GeoNutzV attribution obligation that travels with the output, and one-call-per-location semantics. This is exactly the kind of disclosure structured fields cannot 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?

Dense and long, but front-loaded and organized into bolded sections (When to use / When NOT / Required args / Typical chain / Anti-fab). A little redundancy between the required-args recap and the schema, but nearly every sentence carries routing or safety value.

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 the return carries (the additive attribution object) and how to cite it, plus the chaining path through search_place. Complete for a read-only, coordinate-driven lookup.

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 lat/lon/units/lang are already documented, but the description adds a real constraint absent from the schema: coordinates must originate from search_place and never from estimation. That elevates it above the baseline 3, though it largely restates the unit/language defaults.

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 ('Aktuelles Wetter zu Koordinaten') and explicitly contrasts itself with get_weather_forecast and get_tide. An agent can distinguish it from all siblings 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?

Provides explicit 'When to use' and 'When NOT to use' sections with named alternative tools for each exclusion (forecast >1h, tides), plus multi-call and multi-day routing guidance. 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.

get_poi_detailsA
Read-only
Inspect

POI-Detail-Lookup per OSM-ID (Daten aus OpenStreetMap). Für „Öffnungszeiten von X", „erzähl mir was über X" ist dieses Werkzeug die Auskunft — erst verorten, dann abfragen: die osm_id stammt aus nearby/resolve_location/search_place. When to use: nach nearby / resolve_location / search_place lieferte einen POI mit osm_id und die Anfrage will Detail-Info — DE: „erzähl mir was über ", „was kostet der Eintritt", „Öffnungszeiten von ", „bei dem Wetter in unternehmen". EN: „tell me about ", „opening hours of ", „what can I do in given the weather". When NOT to use: für Stadt-/Region-IDs (nutze search_place); ohne vorherigen Tool-Call mit OSM-ID-Output (KEIN raten); wenn die Anfrage Routing/Abfahrten will (dafür der Server MobilityMCP). Required args: osm_id — bare numeric string (pattern ^\d+$, z.B. "296222553"), kein node:/way:-Prefix (der wurde beim emittierenden Tool bereits gestrippt). Typical chain: TWO distinct chains feed this tool — (1) WETTER-CONTEXT: get_current_weather + nearby(node_types='poi') → THIS_TOOL ×3-5 (Trigger: „bei dem Wetter", „given the weather"). (2) REGION-TOURISM: search_place + resolve_location(node_types='poi') → THIS_TOOL ×3-5 (Trigger: „was kann ich in unternehmen" ohne Wetter-Bezug — dichtere OSM-Coverage über resolve_location). Multi-call: JA. Nach resolve_location/nearby mit N POI-Treffern: THIS_TOOL pro Top-3 bis Top-5 OSM-IDs PARALLEL aufrufen — jeder Call ist unabhängig, ein Burst ist erlaubt. NIE nur 1× rufen wenn N>1 POIs zurückkommen. Anti-Fab note: POI-Name, Operator, Öffnungszeiten, Adresse, Tags kommen AUSSCHLIESSLICH aus sources[].subjects[].properties dieses Aufrufs. sources: [] heißt: zu diesem Ort ist nichts abrufbar — so wiedergeben („Zu diesem Ort konnte ich aktuell keine Detail-Informationen abrufen"). OSM-Coverage: deutschlandweit; Tag-Dichte variiert je Region wie in OSM üblich. Shape: {osm_id, sources:[{source:'openstreetmap', subjects:[{subject, properties:{…raw OSM tags: name, tourism/historic/leisure, opening_hours, fee, website, wheelchair, addr:*…}, coord?:{lat,lon}}]}], facts?:{opening_hours?:{value,source}, price?:{free?,raw,source}}}. Die rohen Tags tragen Typ/Adresse/Öffnungszeiten/Preis/Beschreibung bereits; coord (Geometrie-Center, additiv) liegt je Subject NEBEN properties und speist die Karte — present nur wenn das Element Geometrie hat. facts (additiv, top-level): normalisierte Öffnungszeiten + Preis mit Pro-Feld-Provenance (source:'openstreetmap') aus den opening_hours/fee-Tags — EINE stabile Stelle statt Roh-Tags durchwühlen. price.free=true bei fee=no (explizit „kostenlos"/Eintritt frei), false bei fee=yes/Betrag; price.raw trägt den Roh-Tag verbatim. Fehlt opening_hours UND fee → facts ABWESEND (honest, nie erfunden — Quellen-Priorität: kuratiert via get_tourism_details VOR diesem OSM-Bridge). attribution (additiv, top-level): die ODbL-Namensnennung der gelieferten OSM-Daten (ODbL) — {id:'ODbL-1.0', notice:'© OpenStreetMap contributors', url:'https://www.openstreetmap.org/copyright'}. EINMAL pro Antwort (nicht pro Treffer) und nur wenn sources nicht leer ist. Nennst du OSM-Daten in der Antwort, nenne die Quelle „OpenStreetMap" — die Lizenz-Auflage reist mit dem Tool-Output, nicht mit dem Prompt.

ParametersJSON Schema
NameRequiredDescriptionDefault
osm_idYesBare numeric OSM ID (e.g. `"296222553"` — no `node:` / `way:` prefix). Must match `^\d+$` (validated at handler-time). The mcp-linking / mcp-geo callers already strip any type-prefix before exposing the value in `ids[].value`.

TDQS

A4.8/5.0
Behavior5/5

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

With readOnlyHint/openWorldHint already declared, the description still adds substantial behavior: multi-call bursts of 3-5 parallel calls, `sources: []` meaning 'nothing retrievable', absence of `facts` as an honest signal, ODbL attribution rules, and per-field provenance. It also flags OSM's variable tag coverage.

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?

Bold section headers and front-loaded purpose make a long description navigable, and each block (chains, shape, attribution) carries distinct information. It is verbose and repeats the no-prefix rule, but the density is justified by the tool's many edges.

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 fully specifies the response shape (`sources`/`subjects`/`properties`/`coord`, additive `facts`), the attribution envelope, and the anti-fabrication policy. An agent has everything needed to call and interpret 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 format is already documented, but the description adds the provenance of `osm_id` (comes from `nearby`/`resolve_location`/`search_place` output, prefix already stripped) which the schema only partially implies. That is genuine value beyond the schema, though the format itself is redundant.

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 opening states a specific verb+resource ('POI-Detail-Lookup per OSM-ID') and immediately scopes it to OpenStreetMap data. It explicitly distinguishes itself from siblings, e.g. 'für Stadt-/Region-IDs (nutze search_place)' and the curated 'get_tourism_details' source.

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?

There are explicit **When to use** and **When NOT to use** sections with concrete DE/EN trigger phrases, plus named alternatives for the excluded cases (search_place for region IDs, MobilityMCP for routing, get_tourism_details as curated priority).

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

get_tideA
Read-only
Inspect

Gezeiten (Niedrig-/Hochwasser) für einen Küstenort. Für „wann ist Ebbe in X", „Gezeiten bei Y" ist dieses Werkzeug die Auskunft — erst verorten, dann abfragen: city aus der Frage oder lat/lon aus search_place. When to use: Gezeiten-/Ebbe-/Niedrigwasser-/Hochwasser-Frage — DE: „niedrigwasser in Cuxhaven", „wann ist Ebbe in Wilhelmshaven", „Tide bei Norderney". EN: „low tide in Cuxhaven", „when is high tide at Norderney". When NOT to use: normales Wetter → get_current_weather; Routing → der Server MobilityMCP; Haltestellen → resolve_location; Binnen-Orte ohne Küstenbezug (Hannover, Hildesheim, Braunschweig). Required args: entweder city (z.B. 'Hamburg', 'Cuxhaven', 'Norderney') ODER (lat+lon). Optional bei Koord-Mode: station_limit, date_start, date_end (YYYY-MM-DD). Typical chain: (optional search_place(city)) → THIS_TOOL. Multi-call: ein Call pro Ort/Tag-Range. Anti-Fab note: Tide-Zeiten kommen NUR aus dem Tool-Output dieses Aufrufs; eine Zeit, die die Antwort nicht enthält, ist unbekannt.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude. Must be combined with lon. Use this or city.
lonNoLongitude. Must be combined with lat. Use this or city.
cityNoCity name to get tide data for (e.g. "Hamburg"). Use this or lat+lon.
date_endNoEnd date for tide data in YYYY-MM-DD format (only used with lat+lon)
date_startNoStart date for tide data in YYYY-MM-DD format (only used with lat+lon)
station_limitNoMaximum number of tide stations to return (only used with lat+lon)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, destructiveHint=false, openWorldHint). The description adds genuine behavioral context beyond that: the anti-fabrication note that tide times come only from this call's output, the one-call-per-location/day-range rule, and the argument-mode requirement. It stops short of describing output format or latency, so not a 5.

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

Conciseness4/5

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

The core purpose is front-loaded in the first sentence, followed by clearly labeled sections. It is dense with many query examples, which is slightly verbose, but each block (routing, required args, chain, anti-fab) earns its place.

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

Completeness4/5

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

With no output schema, the description carries the return-value burden and partially addresses it via the anti-fabrication caveat that tide times appear only in the output. For a read-only tool with 100% schema coverage and thorough usage guidance, this is nearly complete, though an explicit return-shape hint would raise it further.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all six parameters including the lat/lon pairing and the lat+lon-only constraint on date_start/date_end/station_limit. The description reinforces the either/or argument logic and gives city examples, but adds little beyond 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?

The description states a specific verb+resource (retrieving low/high tide times for a coastal location) and explicitly distinguishes itself from siblings like get_current_weather, resolve_location, and a routing server. An agent can immediately tell what this tool returns and what it does not.

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 provides explicit 'When to use' triggers with concrete DE/EN example queries, a 'When NOT to use' section naming the correct alternative tool for each excluded case, plus a typical chain and multi-call guidance. This is a textbook routing-oriented usage block.

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

get_tourism_detailsA
Read-only
Inspect

Kuratiertes Detail zu EINEM Niedersachsen-Hub-Treffer per id — Beschreibung, Öffnungszeiten, ECHTER Preis, Adresse, Medien. Für „was kostet der Eintritt für X", „wann hat X geöffnet" ist dieses Werkzeug die Auskunft. Tool-Semantik-Abgrenzung: dieses Tool = Detail zu EINEM kuratierten NDS-Treffer (dessen id/global_id). NICHT get_poi_details (das ist die OSM-Detail-Bridge per OSM-ID). NICHT search_tourism (das ist die kuratierte Region-/Typ-SUCHE die die id erst liefert). When to use: nach search_tourism lieferte einen Treffer mit id und die Anfrage will Detail/Preis/Öffnungszeiten — DE: „was kostet der Eintritt für ", „Öffnungszeiten von ", „erzähl mir mehr zu ". EN: „opening hours / price of ". When NOT to use: ohne vorherigen search_tourism-Treffer mit id (KEIN raten/erfinden einer id); OSM-POI-Detail per OSM-ID → get_poi_details; Region-Suche → search_tourism. Required args: id (die id ODER global_id aus einem search_tourism-Treffer, z.B. "e_101102405"). Optional: query (Region/ Name-Hint — dieselbe Region wie bei der Suche; die kuratierte Quelle hat KEINEN Objekt-per-id-Endpunkt, daher re-sucht das Detail diesen Scope und matcht die id; ohne Hint ggf. honest-empty für ids außerhalb der Default-Seite). Typical chain: search_tourism(region=<R>, type=event) → get_tourism_details(id=<treffer.id>, query=<R>). Multi-call: ein Call pro id; nach search_tourism mit N Treffern pro Top-Treffer parallel rufbar. Anti-Fab note: Name, Beschreibung, Preis, Öffnungszeiten, Adresse kommen AUSSCHLIESSLICH aus sources[].subjects[].properties dieses Aufrufs. sources: [] heißt: zu diesem Treffer ist nichts abrufbar — so wiedergeben („Zu diesem Treffer konnte ich keine Detail-Informationen abrufen"). Returns {id, sources:[{source, license?, subjects:[{subject, properties:{name, type, description?, opening_hours?, price?, address?, date?, media?, coord?, url?, hub_detail_url?}}]}], facts?}. Die Felder sind die schema.org-Felder des kuratierten Datensatzes: price aus priceRange/offers, opening_hours aus openingHoursSpecification, coord aus geo, url = schema.org-Link — alle additiv, present nur wo die Quelle sie trägt. Bei einer Tour (t_…) zusätzlich: path_on_map — ihr Verlauf als [{lat,lon}], ausgedünnt auf die Punkte, die seine Form tragen; das ist die zeichenbare Strecke, und NUR das Detail trägt sie (die Suche nicht). Dazu die Achsen des Datensatzes: length_m, duration_min, ascent_m/descent_m, round_trip, activities (wörtlich, als was er die Tour führt). Alle aus ET2014A.json, alle nur present wo die Quelle sie führt — eine fehlende Achse ist unbekannt, keine Null. Dazu trail_shape — round (Rundweg), line (Strecke) oder ascent (Aufstieg), aus dem Verlauf gelesen und vor round_trip maßgeblich — und entries: wo man einsteigt, der empfohlene Einstieg zuerst, [{lat,lon,reason,name?,stop?:{name,distance_m,source,license}}]. reason: nearest_to_stop (Punkt des Wegs am nächsten an einer Haltestelle), course_end (das haltestellennähere Ende einer Strecke) oder official_start (der Startpunkt; bei einem Aufstieg immer). stop ist die nächste bediente Haltestelle aus OpenStreetMap, distance_m die Luftlinie bis dorthin — den Fußweg nennt erst die Verbindung. Die Anreise mit Bus und Bahn (Server MobilityMCP) führt zum ersten Eintrag, mit Auto oder eigenem Rad zum official_start. Fehlt entries, war die Haltestellenfrage nicht zu beantworten: dann gilt der Startpunkt (coord), so benannt. facts (additiv, top-level): normalisierte Öffnungszeiten + Preis mit Pro-Feld-Provenance — kuratiert hat Quellen-Priorität VOR der OSM-Bridge get_poi_details. price.free=true bei explizit kostenlos/Eintritt frei, false bei einem Betrag; price.raw trägt den kuratierten Preis-String wörtlich. Fehlen opening_hours UND price → facts ABWESEND (ehrlich, nie erfunden). hub_detail_url (additiv, in properties, nur bei source: 'niedersachsen-hub'): die kanonische Entitätsseite dieses Datensatzes beim Niedersachsen-Hub, dem Nutzer nennbar — NICHT die Betreiber-Website, die daneben in url steht. Jeder Datensatz dieser Quelle, dessen Art beim Hub eine Eintragsseite hat, trägt sie schon im ersten Aufruf: POI (p_…), Tour (t_…), Veranstaltung (e_…), Unterkunft (h_…), Gastronomie (g_…), Gebiet (r_…). Ein Medien-Datensatz (m_…) hat keine solche Seite und trägt sie nicht. Fehlt sie, keine konstruieren. license (additiv, NEBEN source im sources[]-Eintrag — nicht in properties): {id?, url?, notice?, holder?} = Lizenz-Kennung, Lizenz-Text-URL, der WÖRTLICH wiederzugebende Lizenzverweis (DZT-copyrightNotice, § 3 der DZT-Nutzerbedingungen) und der zu nennende Urheber (das author- bzw. copyrightHolder-Feld des Datensatzes). Gibt er nichts an, ist das Feld abwesend — nie eine geratene Vorgabe-Lizenz. Nennst du einen Datensatz mit license.holder, nenne den Urheber mit.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe `id` or `global_id` of a curated record from a prior `search_tourism` result (e.g. "e_101102405").
queryNoRegion/name hint to scope the lookup — pass the same region you searched in `search_tourism`. The curated source has no object-by-id endpoint, so the details lookup re-searches that scope and matches the id; without the hint it may honest-empty for ids outside the broad default page.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint=true, openWorldHint=true, destructiveHint=false), but the description adds substantial operational context beyond them: honest-empty behavior when sources:[], the no-object-by-id re-search quirk, the license/attribution obligation (license.holder must be named), and the anti-fabrication rule for name/price/hours. It does not, however, discuss rate limits or failure modes beyond the empty case.

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?

Front-loaded and sectioned with bold labels, but heavily over-long (~700 words) for a two-parameter read tool. Much of the text is return-value documentation that repeats the same honesty rule several times ('nie erfunden', 'noch nie eine geratene Vorgabe-Lizenz'), diluting the selection-critical guidance.

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?

No output schema exists, so the description carries the full burden and does so exhaustively: it enumerates the return shape (sources[].subjects[].properties), the additive facts block, tour-only fields (path_on_map, trail_shape, entries), and hub_detail_url/license placement. An agent knows both what it gets back and how to present 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 baseline is 3; the description earns extra by explaining provenance of `id` (id or global_id from a search_tourism hit, e.g. 'e_101102405') and the real role of `query` (the source has no object-by-id endpoint, so the detail re-searches that scope and matches the id). That rationale is more than the schema field descriptions give.

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: 'Kuratiertes Detail zu EINEM Niedersachsen-Hub-Treffer per id', and immediately delimits against siblings: NOT get_poi_details (OSM bridge), NOT search_tourism (the curated search). An agent can distinguish the three 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?

Explicit 'When to use' (after search_tourism returned a hit with an id, with quoted DE/EN example utterances) and 'When NOT to use' (no prior hit / no id guessing → search_tourism; OSM detail → get_poi_details). It also documents the typical call chain and parallel multi-call pattern.

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

get_usage_guideA
Read-only
Inspect

Die ausführliche Anleitung zu den Werkzeugen dieses Katalogs: wofür ein Werkzeug da ist, wogegen es abzugrenzen ist, was seine Argumente bewirken, was zurückkommt und was daraus zitiert werden darf. Die description eines Werkzeugs ist die Kurzform, dieser Text die vollständige. Optional tool — der Name genau eines Werkzeugs, dessen Abschnitt du lesen willst; weggelassen kommt die ganze Anleitung. Lies den Abschnitt eines Werkzeugs, bevor du dessen Filter setzt oder ein leeres Ergebnis als Antwort weitergibst. Der Abruf ohne tool ist teuer: er bringt die Abschnitte ALLER Werkzeuge dieses Katalogs auf einmal, ein Vielfaches eines einzelnen. Setze tool, sobald feststeht, um welches Werkzeug es geht; ohne Argument nur für den Überblick über den ganzen Katalog.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNoDer Name genau eines Werkzeugs aus diesem Katalog, dessen Abschnitt zurückkommen soll. Weglassen für die ganze Anleitung.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already indicate read-only and non-destructive behavior. The description adds valuable context: omitting `tool` returns all tool sections at once, supplying `tool` returns one section, and the full retrieval is costly. No contradiction with annotations exists.

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

Conciseness4/5

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

The description is dense and front-loaded with purpose, then explains parameter behavior and cost. Every sentence carries useful information, though it is slightly longer than strictly necessary.

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 read-only guide tool with one optional parameter and no output schema, this description is complete: it explains purpose, when to use it, how the parameter behaves, what is returned, and cost implications. Nothing essential 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% and the parameter is already documented. The description adds decision guidance around when to supply `tool` versus omit it, including the cost trade-off, which goes beyond the schema. It does not enumerate valid tool names, but catalog context provides that.

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 the tool is the detailed guide to all catalog tools, covering purpose, delimitation, arguments, return values, and quotation rules. It clearly positions itself as a meta-tool distinct from the domain-data sibling tools.

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 explicitly says when to read a section (before setting filters or passing an empty result), when to omit the `tool` parameter, and when to set it. It also warns that calling without `tool` is expensive and should only be used for a full-catalog overview.

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

get_weather_forecastA
Read-only
Inspect

Wetter-Vorhersage zu Koordinaten. Für „wie wird das Wetter morgen in X" ist dieses Werkzeug die Auskunft — erst verorten, dann abfragen: lat/lon kommen aus search_place, nie aus eigener Schätzung. When to use: zukünftige Wetterfrage — DE: „wie wird das Wetter morgen / heute Abend / am Samstag in ", „regnet es morgen". EN: „forecast for tomorrow / this weekend". Auch für Halbtages-Touren-Planung („wenn das Wetter mitspielt"). When NOT to use: jetziger Zustand → get_current_weather; Tide → get_tide. Required args: lat, lon. Optional: units ('metric' default, 'imperial', 'standard'), lang ('en' default, 'de'), limit (Anzahl Forecast-Slots). Typical chain: search_place(city) → THIS_TOOL(lat, lon, limit=N) → (optional resolve_location(node_types='poi') + get_poi_details für POI-Auswahl je nach Wetter-Branche). Multi-call: ein Call pro Ort. Multi-Day-Queries decken sich über limit. Anti-Fab note: Vorhersage-Werte kommen NUR aus dem Tool-Output dieses Aufrufs; ein Tag, den die Antwort nicht enthält, hat keinen Wert. attribution (additiv, top-level): die von der GeoNutzV verlangte Quellenangabe — {id:'GeoNutzV', notice:'Quelle: Deutscher Wetterdienst', url:…}. Nennst du Vorhersage-Werte, nenne den Deutscher Wetterdienst als Quelle.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude of the location
lonYesLongitude of the location
langNoLanguage code for descriptions (e.g. "en", "de"). Defaults to "en".
limitNoMaximum number of forecast entries to return
unitsNoUnit system: "metric" (°C, m/s), "imperial" (°F, mph), or "standard" (K). Defaults to "metric".

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/openWorld/non-destructive, and the description goes well beyond them: it mandates that `lat`/`lon` come from `search_place` rather than estimation, states one call per location, explains how multi-day queries map onto `limit`, and adds an anti-fabrication rule plus a legal attribution requirement (GeoNutzV/DWD).

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 one-line purpose before the bolded routing blocks, and every section earns its place. It is dense and mixes German and English, so it is longer than strictly necessary, but nothing is filler.

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

Completeness5/5

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

With no output schema and five parameters, the description still covers what matters: the top-level `attribution` object's shape, the source of forecast values, and the constraint that unlisted days have no value. An agent has everything needed to call and interpret the result.

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 defaults are already documented; the description still adds value by specifying the provenance of `lat`/`lon` and by characterizing `limit` semantically as forecast slots rather than just 'maximum entries'. It adds meaning, though it does not extend the schema substantially.

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 (weather forecast for coordinates) and explicitly differentiates from siblings: current conditions go to `get_current_weather`, tides to `get_tide`. An agent can route correctly 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?

Contains explicit **When to use** and **When NOT to use** sections with concrete example queries in two languages, plus a typical call chain (`search_place` → this tool → optional POI tools). Alternatives are named by tool name, not implied.

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

nearbyA
Read-only
Inspect

Findet Haltestellen, POIs und Adressen im Radius um eine KOORDINATE (Schwerpunkt Hannover/Niedersachsen) — „was ist in der Nähe von <lat,lon>", „welche Haltestellen liegen um diesen Punkt". Liegt nur ein Name vor, kommt erst eine Auflösung: search_place für eine Stadt oder Region, sonst die Ortsauflösung. Pflicht: latitude, longitude, radius_m. Optional: limit (Default 10); node_types — EIN String, mehrere Arten mit Komma: 'stop', 'address', 'poi', die Sharing-Angebote 'bike_rental', 'scooter_rental', 'car_sharing', 'taxi_stand', die Abstellanlagen 'park_and_ride', 'bike_and_ride', oder 'any' ('stop,bike_rental'); include_mots (legt die bedienenden Linien über die Haltestellen-Treffer); only_available (nur Sharing-Treffer mit gemeldetem freiem Fahrzeug — UNBEKANNTE Verfügbarkeit gilt nicht als frei). Format: kompakter Einrück-Text (TOON), kein JSON. Anleitung: get_usage_guide mit tool='nearby' — die Werte im Einzelnen, was 'any' nicht abdeckt, und was ein Treffer trägt (category, modality, parking, contactInfo). Anti-Fab: nur die zurückgegebenen Namen, Typen, Distanzen und Verfügbarkeiten nennen; fehlt ein Feld, war es in der Quelle nicht getaggt — Öffnungszeiten und Preise stehen hier NICHT.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results, at least 1. Default 10.
formatNoAnswer serialisation: `"toon"` (default) or `"json"` — the detail is in `get_usage_guide`. **An agent leaves this out.**
latitudeYesLatitude in WGS-84 decimal degrees.
radius_mYesSearch radius in metres.
longitudeYesLongitude in WGS-84 decimal degrees.
node_typesNoWhich kinds of place to answer with: the places the graph holds — `"stop"`, `"address"`, `"poi"` — plus the shared-mobility offers `"bike_rental"`, `"scooter_rental"`, `"car_sharing"` and `"taxi_stand"`, plus the places to leave a vehicle of one's own, `"park_and_ride"` and `"bike_and_ride"`, or `"any"` for all of them. Several combine in ONE comma-separated string — `"stop,bike_rental"`; an array of the same tokens is read as that string. A kind outside the ten is an argument error, not a dropped filter. `"poi"` alone also switches on the non-tourism filter; omit (or `"any"`) for the mixed default, in which each requested kind gets its share of `limit` and the shared-mobility offers share one between them. The two park-and-ride kinds are the exception `"any"` does NOT cover — ask for them by name, and with a `radius_m` of a few kilometres, because such sites are sparse.
include_motsNo`true` overlays the serving transit lines on stop results. Default `false`, which keeps the answer small.
only_availableNoSet to `true` for „wo kann ich JETZT eines nehmen": of the shared-mobility offers, only those whose live feed reports at least one vehicle ready to be taken are answered with. A station whose availability is unknown is NOT returned then, and neither is a taxi rank, which has no feed to report one. Omit (or `false`) to list every place in range. The other kinds — `"stop"`, `"address"`, `"poi"`, `"park_and_ride"`, `"bike_and_ride"` — are unaffected either way.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark this as read-only and open-world, and the description adds important behavior beyond them: output is TOON text, not JSON; missing fields mean the source did not tag them; opening hours and prices are not present; unknown availability is not treated as free for `only_available`. This gives the agent a realistic model of what the tool can and cannot return.

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 text is long but well-structured: bold labels break it into purpose, required/optional parameters, format, further guidance, and anti-fabrication rules. The core purpose is front-loaded, and while some details are dense, each sentence carries practical information. It is comprehensive rather than wasteful.

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 naming the return format (`TOON`), the kinds of fields a hit carries (`category`, `modality`, `parking`, `contactInfo`), and the data limitations. It covers defaults, edge cases, exclusions, and how to get more detail. For a complex eight-parameter tool, nothing essential is missing.

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

Parameters5/5

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

Although the schema already documents every parameter, the description adds valuable semantics: `node_types` is one comma-separated string rather than an array, `'any'` does not cover park-and-ride kinds, `'poi'` alone activates a special filter, and shared-mobility offers split the limit. These operational details go well beyond the schema text and materially affect how the agent should construct calls.

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 precise verb and resource: finding stops, POIs, and addresses within a radius around a coordinate, with a clear geographic focus. It also distinguishes itself from name-based search by explicitly routing those cases to `search_place`, so an agent can tell it apart from siblings 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 Guidelines4/5

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

It clearly states when to use this tool (a coordinate is present) and that name-only queries should first go through `search_place`. It also points to `get_usage_guide` for finer details and flags the `'any'` exception for park-and-ride kinds. It does not explicitly mention other siblings like `reverse_geocode`, but the coordinate-vs-name distinction is sufficient guidance.

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

resolve_location
Read-only
Inspect

Löst Freitext in die Id auf, mit der gefahren wird — die Haltestelle, die Adresse oder den POI hinter „von nach ", „erzähl mir was über ". Wo Routing, Abfahrtstafel oder POI-Steckbrief eine Id brauchen, steht es davor — auch wenn der Nutzer die Stadt dazu nennt („Hauptbahnhof Hannover"). Ein GEBIET (Stadt/Region) verortet search_place. Pflicht: query — nur der Name: 'Kelsterbach Bahnhof', NICHT 'für Kelsterbach Bahnhof'. Wegzulassen sind für, vom, von, nach, bis; ein führendes am/an/in/zur/auf bleibt stehen — so heißen echte Halte („Am Wehrhahn"). Optional: lat/lon (Ranking-Bias), limit, node_types ('stop'/'address'/'poi'/'any', mehrere mit Komma in EINEM String; eine andere Art ist ein Argument-Fehler), city_station (Query = ganze Stadt → deren (Haupt-)Bahnhof). Art-Wort in node_types, nicht in den Namen: „Haltestelle X" → 'stop', „Adresse X" → 'address', „POI X"/„Sehenswürdigkeit X" → 'poi', query je ohne das Wort. A→B: zweimal rufen — Start, Ziel. Jeder Treffer trägt type und location; NUR ein stop hat eine fahrbare DH-Id, nie eine erfinden. Ein stop nennt in modes, was dort hält (['tram','bus']) — so ist „die Stadtbahn-Haltestelle" unter Namensvettern zu erkennen. Anleitung: get_usage_guide — Abgrenzung, Argumente, Rangfolge. Anti-Fab: nur die Treffer aus dem Output dieses Aufrufs verwenden.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoOptional latitude (WGS-84) to bias ranking toward nearby stops.
lonNoOptional longitude (WGS-84) to bias ranking toward nearby stops.
limitNoMaximum number of results. Defaults to 5 if omitted.
queryYesFree-text query, e.g. "Hauptbahnhof Hannover" or "Linden Markt". Nur der reine Orts-/Haltename — ohne das Wort, das ihn im Satz ankündigt: `"Kelsterbach Bahnhof"`, nicht `"für Kelsterbach Bahnhof"`. Ein führendes `am`/`an`/`in`/`zur`/`auf` bleibt dagegen stehen, weil echte Haltestellen so heißen ("Am Wehrhahn", "In der Au").
formatNoAnswer serialisation: `"toon"` (default) or `"json"` — the detail is in `get_usage_guide`. **An agent leaves this out.**
node_typesNoWhich kinds of place to resolve to: `"stop"`, `"address"`, `"poi"` or `"any"`. Several combine in ONE comma-separated string — `"stop,poi"`; an array of the same tokens is read as that string. A kind outside the four is an argument error, not a dropped filter — the shared-mobility kinds among them: a rental station and a taxi rank are not in the place index this searches, they are answered by the radius search `nearby`. Forwarded to mobility-middleware as `journey_node_types`. `"poi"` alone additionally drops non-tourism POI names (Kindergarten, Apotheke, Schule, …) — use this for tourism queries. Nennt der Nutzer die Art selbst, gehört sie hierher statt in `query`: "Haltestelle X" → `"stop"`, "Adresse X" → `"address"`, "POI X"/"Sehenswürdigkeit X" → `"poi"` (und `query` dann ohne das Art-Wort).
city_stationNoWhen `Some(true)` AND the query is a whole CITY, resolve it to the city's (Haupt-)Bahnhof stop and return ONLY that stop (so „von Hannover nach Celle" routes Bahnhof→Bahnhof). Forwarded to mobility-middleware as `cityStation=true`. A no-op for non-city queries. The orchestrator routing-floor sets this deterministically per endpoint; the model never has to.
reverse_geocodeA
Read-only
Inspect

Benennt, was an einer KOORDINATE liegt — der Ort („was liegt bei <lat,lon>"), mit level eine bestimmte Ebene davon, mit level='street' die Straße samt nächster Hausnummer (der Lookup für eine GPS-Startposition). Abgrenzung: den Weg zurück (Name → Koordinate und OSM-Ids) geht search_place, die fahrbare Halte-Id liefert die Ortsauflösung, und nearby listet auf, was UM eine Koordinate liegt, statt den Punkt selbst zu benennen. Pflicht: lat und lon — geschrieben auch latitude/longitude, so wie nearby die Koordinate nimmt; je Aufruf nur eine der beiden Schreibweisen. Optional: radius_m (Suchradius in METERN; ein Ort, IN dem die Koordinate liegt, hat Abstand 0 und ist in jedem noch so engen Radius dabei — ohne radius_m die nächstgelegenen Treffer), limit (Höchstzahl Treffer, Default 10, Maximum 50) und level — 'place' (Default: die ganze Ortshierarchie, feinste Ebene zuerst), 'city' (die Stadt/Gemeinde), 'suburb' (der Stadtteil) oder 'street'. Kennt der Datensatz die gewünschte Ebene hier nicht, antwortet die nächst-gröbere, erkennbar am place_type; ein unbekannter Wert wirkt wie 'place'. Anleitung: get_usage_guide mit tool='reverse_geocode'. Anti-Fab: nur die zurückgegebenen Orts- und Straßen-Namen verwenden, einschließlich der Hausnummer aus dem Datensatz — nie eine erfinden.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude of the coordinate to reverse-geocode. Also accepted spelled `latitude`, the way the vicinity search takes it — one of the two spellings per call.
lonYesLongitude of the coordinate to reverse-geocode. Also accepted spelled `longitude`, the way the vicinity search takes it — one of the two spellings per call.
levelNoOptional resolution level. `"place"` (default) answers with the coordinate's whole admin hierarchy, finest first (suburb → town → county → state → country); `"city"` with the town/municipality it lies in; `"suburb"` with the suburb; `"street"` with the nearest STREET/ADDRESS (street name + nearest house number, e.g. `"Münzstraße 3-4"`) — the level needed to label a real GPS start position. Where the data has no place at the requested level, the next coarser one answers, recognisable by its `place_type`. Any other / omitted value behaves as `"place"`.
limitNoOptional maximum number of hits, nearest first. Default 10, upper bound 50; a larger value is served as 50 and `0` as the default. Applies to every level and with or without `radius_m`.
formatNoAnswer serialisation: `"toon"` (default) or `"json"` — the detail is in `get_usage_guide`. **An agent leaves this out.**
radius_mNoOptional radius in METRES. When set, returns the places inside the circle, sorted nearest-first and capped to `limit`. A place the coordinate LIES INSIDE is at distance 0 and is therefore in every radius, however tight. When omitted, returns the `limit` nearest places.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark readOnlyHint=true and openWorldHint=true, so the description does not need to repeat basic safety. It adds genuinely non-obvious behavior: fallback to a coarser level when the requested level is missing and the result is recognizable via place_type, distance-0 inclusion in any radius, limit clamping, and the anti-hallucination instruction to use only returned names. Nothing in the description 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.

Conciseness5/5

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

The description is dense but highly structured: purpose, boundary, required args, optional args, fallback behavior, instruction source, and anti-hallucination rule each get a clearly labeled section. Although it is longer than many descriptions, every sentence carries operational value; there is no filler or tautology.

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 6-parameter tool with no output schema, the description covers all parameters, defaults, edge cases, sibling-tool routing, and output interpretation (place_type fallback indicator). It also gives an anti-fabrication rule for returned names, which is critical practical guidance. The reference to get_usage_guide fills any remaining serialization detail without bloating the main description.

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 description goes beyond it by adding the one-spelling-per-call rule, explaining the nearest-hit behavior when radius_m is omitted, and clarifying that unknown level values behave like 'place'. It largely restates schema semantics for radius_m and limit, but it provides extra operational context that helps an agent invoke the tool correctly.

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 action and resource: names what lies at a coordinate, optionally at a chosen level, including street-level reverse geocoding. The first sentence alone tells an agent not just what the tool returns but that it is the lookup for a GPS start position. It also distinguishes itself from nearby and search_place, making sibling confusion unlikely.

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 gives when-to-use guidance: reverse geocoding a coordinate, street labeling for GPS positions, and the distinction from search_place (name → coordinate), nearby (what lies around), and another resolution tool. It also states required parameters, the mandatory spelling consistency rule, and points to get_usage_guide for further detail.

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

search_placeA
Read-only
Inspect

Löst den NAMEN einer Stadt, Region oder eines Bezirks in Koordinaten und OSM-Ids auf — der erste Schritt, wenn ein GEBIET verortet werden muss („was kann ich in unternehmen", „wie ist das Wetter in "). Für eine HALTESTELLE ist dieses Werkzeug fast immer falsch: es kennt Gebiete, keine Bahnsteige — auf einen Bahnhofs-Namen antwortet es mit dem Stadtteil, und die Id, die es liefert, ist eine OSM-Id und keine fahrbare Halte-Id. Trägt die Anfrage Bahnhof, Hauptbahnhof, Hbf oder Bf, gehört sie an die Ortsauflösung — „Köln Hauptbahnhof" und „Hannover Bahnhof" also dorthin, nicht hierher: auf das erste antwortet dieses Werkzeug mit einem gleichnamigen Ortsteil (einem in Potsdam), auf das zweite mit der Stadt Hannover. Dasselbe für Adresse und POI — alles, was Start, Ziel oder Abfahrtsort einer Fahrt sein kann; eine Stadt als Fahrt-Endpunkt („von Hannover nach Celle") ebenfalls. Von einer Koordinate zurück zum Namen geht reverse_geocode, die Umgebung einer Koordinate listet nearby. Pflicht: name. Optional: lang — wird für Symmetrie mit den übrigen Geo-Werkzeugen angenommen, derzeit aber nicht ans Backend durchgereicht und ändert das Ergebnis nicht. Anleitung: get_usage_guide mit tool='search_place' — die Abgrenzung im Detail, die typischen Ketten und der Umgang mit einem mehrdeutigen Namen. Anti-Fab: nur die zurückgegebenen Namen und Ids nutzen, keine Bauch-Geographie.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoOptional ISO language code (e.g. "de", "en"). Currently advisory: the place names are the German ones the data carries, whatever is asked for. Kept in the signature so a multilingual answer needs no new argument.
nameYesName of the place to search for. Free-text fuzzy match against the place index behind this endpoint (e.g. "Hannover", "Maschsee", "Wangerland").
formatNoAnswer serialisation: `"toon"` (default) or `"json"` — the detail is in `get_usage_guide`. **An agent leaves this out.**

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark it as read-only, open-world, and non-destructive. The description adds substantial behavior beyond that: it returns OSM IDs rather than stop IDs, mis-resolves station names to districts or cities, ignores the lang parameter, and warns against geographic hallucination. No contradiction with annotations exists.

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

Conciseness4/5

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

The description is dense and long, but well structured with bold markers, concrete examples, and a clear lead sentence. It earns its length by resolving high-stakes sibling ambiguity, though a few examples could be trimmed without losing meaning.

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?

Even without an output schema, the description tells the agent what comes back (coordinates and OSM IDs), what failure modes look like, how to route non-matching cases, and where to find deeper guidance via get_usage_guide. Nothing needed to call it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description restates that name is required and that lang is optional and ignored, but the schema already documents these properties in similar detail. The format parameter is not mentioned in the description, but it is adequately covered by the schema.

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

Purpose5/5

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

The description states the exact operation in the first sentence: resolving a city, region, or district name into coordinates and OSM IDs, and frames it as the first step for locating an area. It then explicitly excludes stops, addresses, and POIs, so an agent can distinguish it from sibling geolocation tools without inspecting their 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?

It gives explicit when-to-use guidance with concrete query examples, and clearly says when not to use it: stop names containing Bahnhof/Hbf/Bf belong to the Ortsauflösung, and addresses/POIs/trip endpoints are also excluded. It names concrete alternatives: reverse_geocode for coordinate-to-name and nearby for listing surroundings.

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

search_tourismA
Read-only
Inspect

Kuratierte Tourismus-Suche des Niedersachsen-Hubs: redaktionell gepflegte Einträge mit Veranstaltungen samt Datum, Preisen, Beschreibungen, Medien, Öffnungszeiten und Touren. Für „welche Veranstaltungen sind in X", „was kostet der Eintritt" ist dieses Werkzeug die Auskunft — erst verorten, dann abfragen: region/query aus der Frage, lat/lon nur aus search_place. Tool-Semantik-Abgrenzung: die in OpenStreetMap erfassten Sehenswürdigkeiten eines Gebiets listet expand_kg_pois; für Region-Tourismus dürfen beide laufen. Umkreis um einen Punkt → nearby, welcher Ort gemeint ist → search_place. When to use: Events — DE: „was ist diese Woche/am Wochenende in los", „Veranstaltungen in ". EN: „events in this weekend". Unterkünfte/Gastro — DE: „Hotels in ", „Restaurants in ". EN: „hotels/restaurants in ". Touren — DE: „touristische Radrouten/Radtouren in ", „Radwanderwege/Wanderwege am " → type=tour; jede Tour trägt dann length_m, duration_min, ascent_m/descent_m, round_trip und activities (wörtlich, als was der Datensatz sie führt: „Fahrrad", „E-Bike", „Wandern", „Kanu") sowie trail_shape (round | line | ascent, aus dem Verlauf gelesen — gilt vor round_trip) — DARAN auswählen, nicht am Namen. Bei mehreren die best-passende per get_tourism_details zeichnen, die anderen namentlich nennen und fragen, welche noch. When NOT to use: alle in OpenStreetMap erfassten Sehenswürdigkeiten → expand_kg_pois; Detail zu EINEM Treffer → get_tourism_details; Routing/ Abfahrten, auch „von A nach B mit dem Rad" → der Server MobilityMCP; Wetter/Tide → get_current_weather/get_tide. Required args: region ODER query (eines von beiden — Freitext-Region/ Name, z.B. region="Wangerland", query="Sielhafenmuseum"). Optional: type (genau eines von "event" | "poi" | "accommodation" (="hotel") | "gastro" (="restaurant") | "tour" — kuratierte Rad-/Wander-Routen, auch als "radtour"/"radroute"/"radwanderweg"/"wanderweg" akzeptiert; weggelassen = alle Typen; unbekannter Wert = alle. OHNE type=tour sind Touren praktisch nie unter den Treffern). Im Aktivitäts-Scope (type="poi"/"attraction"/"unternehmen"/…) sind Unterkünfte AUSGESCHLOSSEN, im Region- wie im Vicinity-Modus (ein Hotel ist keine Unternehmung); für Hotels explizit type="accommodation". timeframe (nur für type=event: "today" | "tomorrow" | "weekend" | "this_week" | "month" | ISO "YYYY-MM-DD" | Range "YYYY-MM-DD..YYYY-MM-DD"; ohne timeframe = kommende Events ab heute), limit (Default 8, clamped 1..=20), family_only (bool, Default false — nur die kuratierten Family-Kategorien, je mit der belegten suitability-Achse) und, nur zusammen damit, indoor_only (bool — davon nur die Schlechtwetter-tauglichen). activity (nur mit type=tour): wie eine Tour zurückgelegt wird — "wandern" | "fahrrad" | "kanu" + Synonyme ("wanderweg"/"e-bike"/ "paddeln"). Filtert serverseitig auf die GANZE Familie kuratierter Aktivitätswerte, also auch "Winterwandern"/"Nordic Walking"/ "Mountainbike" — 8 % der zu Fuß zurückgelegten Touren tragen keinen "Wandern"-Wert; weglassen oder unbekannt = alle. Coord-Vicinity-Modus (Umkreis, POI-Anker): für „ am/bei " den POI ZUERST via search_place zu einer Coord auflösen, dann lat+lon setzen (beide nötig; + optional radius_m, Default 2000 m, clamped 100..=20000). region/query sind dann nur Pool-Hint, nicht mehr Pflicht; die Treffer sind auf den Umkreis gefiltert, nächster zuerst, je mit distance_m in Metern. NUR in diesem Modus kommt die OSM-Breite dazu, entdoppelt gegen die Kuration (kuratierter Treffer gewinnt): bei type=gastro die amenity-Gastronomie, im Aktivitäts-Scope (type=poi, „unternehmen") tourism ∈ attraction/museum/…, historic und leisure ∈ park/garden/… — AUSGESCHLOSSEN bleiben Unterkünfte (hotel/hostel) und Alltags-Versorgung (shop, Apotheke/Bank/Arzt), beides keine Ausflugsziele. Typical chain: search_tourism(region=<R>, type=event) → get_tourism_details(id, query=<R>) pro Treffer — der Regions-Hinweis ist nötig, sonst antwortet das Detail leer. Multi-call: ein Call pro Region/Typ. Anti-Fab note: Event-Namen, DATEN, PREISE, POI-Namen, Adressen kommen AUSSCHLIESSLICH aus pois[] / events[] dieses Aufrufs. returned: 0 / pois: [] / events: [] heißt: für war nichts abrufbar — so wiedergeben. Datum eines Events ist tool-belegt (events[].date / pois[].date, ISO-8601 Europe/Berlin) ODER abwesend — NIE geschätzt. DZT-Bündelung (zweite kuratierte Quelle, DE-weit): kuratierte Treffer AUSSERHALB Niedersachsens kommen aus der DZT-KG (Deutsche Zentrale für Tourismus); Dubletten werden de-dupliziert, in der NDS-Region gewinnt der Niedersachsen-Hub-Eintrag (regionale Tiefe). Bei type=tour bleibt sie AUSSEN VOR — sie führt keinen Touren-Inhaltstyp; kuratierte Touren gibt es nur für Niedersachsen, außerhalb ehrlich "keine Tour abrufbar". Returns {place, source:'niedersachsen-hub', type, returned, mode?, center?, radius_m?, pois:[{name,type,description?,address?,uri?,date?,price?,media?, coord?,opening_hours?,id?,distance_m?,source?,license?,hub_detail_url?, length_m?,duration_min?,ascent_m?,descent_m?,round_trip?,trail_shape?,activities?}], events:[{name,date,location,source?,license?}]}. Das Top-Level source bleibt shape-stabil; welche Quelle einen Treffer geliefert hat, sagt sein eigenes source ('osm' | 'niedersachsen-hub' | 'dzt'). id ist der Schlüssel für get_tourism_details; die Felder folgen schema.org. license (additiv, PRO Treffer): die Lizenz, die der Datensatz selbst angibt — {id?, url?, notice?, holder?}: id = Lizenz-Kennung (z.B. 'CC-BY-SA-4.0', 'CC0-1.0', 'ODbL-1.0'), url = Lizenz-Text/Deed, notice = der WÖRTLICH wiederzugebende Lizenzverweis (DZT-copyrightNotice, § 3 der DZT-Nutzerbedingungen; bei OSM-Treffern die ODbL-Namensnennung), holder = der zu nennende Urheber (das author- bzw. copyrightHolder-Feld des Datensatzes). Gibt er nichts an, ist das Feld abwesend — nie eine geratene Vorgabe-Lizenz. Nennst du einen Treffer mit license.holder, nenne den Urheber mit. hub_detail_url (additiv, PRO Treffer, nur bei source: 'niedersachsen-hub'): die Entitätsseite dieses Treffers beim Niedersachsen-Hub, dem Nutzer nennbar — NICHT die Betreiber-Website (uri). Jeder Treffer, dessen Art beim Hub eine Eintragsseite hat, trägt sie: POI (p_…), Tour (t_…), Veranstaltung (e_…), Unterkunft (h_…), Gastronomie (g_…), Gebiet (r_…). Ein Medien-Datensatz (m_…) hat keine und trägt keine; fehlt sie, keine konstruieren. Mit family_only trägt jeder Treffer zusätzlich family, suitability ({family, age_bands, pushchair, seal (Kinderferienland-Siegel), indoor_bad_weather}) und, wo die Quelle sie führt, price_child/price_family — alle feature-belegt: „kinderfreundlich" ist belegt, nicht geraten.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoCoord-vicinity mode — center latitude. When `lat` AND `lon` are both given the search becomes a vicinity search around the point: only curated hits within `radius_m` are returned (proximity-filtered on the `coord` field), sorted nearest-first with an additive `distance_m`. Use it for POI-anchor questions ("Restaurants am Maschsee"): resolve the POI to a coord first, then pass it here. `region`/`query` then act as the enclosing-city candidate-pool hint (and are no longer required).
lonNoCoord-vicinity center longitude (paired with `lat`).
typeNoContent type to narrow the search. One of: "event", "poi", "accommodation" (a.k.a. "hotel"), "gastro" (a.k.a. "restaurant"), "tour". Omit to search across all curated types. Unknown values are treated as "all" (never an error).
limitNoMaximum number of curated entities to return (default 8, clamped 1..=20).
queryNoFree-text query (name / keyword) when not searching a whole region, e.g. "Sielhafenmuseum". Alias for `region`; one of the two is required.
regionNoRegion or place to search within, as free text (e.g. "Wangerland", "Hooksiel", "Hannover"). Either `region` or `query` must be given; `region` is the natural choice for a place-scoped tourism search.
activityNoHow a TOUR is travelled, for `type=tour`: "wandern" (also "wanderweg", "spaziergang", "hiking", "zu Fuß"), "fahrrad" (also "radtour", "e-bike", "mountainbike", "cycling") or "kanu" (also "paddeln", "SUP"). Each word selects the whole family of curated activity values, so a hiking question also finds the records filed under "Winterwandern", "Nordic Walking" or "Spaziergang" — 8 % of the walked ones carry no "Wandern" value at all. Which value a given record carries is on the record (`activities`). Omit to search every activity; an unrecognised word is treated as "all" (never an error).
radius_mNoCoord-vicinity radius in metres (default 2000, clamped 100..=20000).
timeframeNoOptional event-date window for `type=event`: "today", "tomorrow", "weekend", "this_week", "month", or an explicit ISO date "YYYY-MM-DD" / range "YYYY-MM-DD..YYYY-MM-DD". With no timeframe the additive `events` list defaults to upcoming events (today onward).
family_onlyNoFamily mode: search the curated NDS family categories (Tierpark/Freizeitpark/Spielplatz/Erlebnisbad/Badesee/Kletterpark/…) and overlay the curated suitability axis (age bands, Kinderwagentauglich, Kinderferienland-Siegel, Schlechtwetterangebot). Every record is then family-belegt + carries an additive `suitability` object. Defaults false.
indoor_onlyNoRestrict to rain-safe family records (the `suitability.indoor_bad_weather` / Schlechtwetterangebot proxy). Only meaningful with `family_only=true`.

TDQS

A4.7/5.0
Behavior5/5

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

With readOnlyHint/destructiveHint/openWorldHint already covering the safety profile, the description still adds a great deal of behavioural context: de-duplication and source-precedence rules (NDS hub beats DZT; DZT excluded entirely for tours), OSM augmentation only in vicinity mode with explicit exclusions, the requirement that query/region be a candidate-pool hint in vicinity mode, the per-hit license naming obligation, hub_detail_url semantics, and an explicit anti-fabrication rule for names, dates and prices.

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?

It is front-loaded correctly, with purpose first and the when-to-use/when-not-to-use routing blocks early, and the bolded section markers aid scanning. However it is an extremely long block that re-states several schema facts and packs return-shape and license boilerplate into the same field as selection guidance, so not every sentence is earning its place in a description whose primary job is tool selection.

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, and the description compensates by spelling out the full return shape (place, source, type, returned, mode, center, radius_m, pois[], events[]) and the meaning of empty results (returned: 0 means nothing was retrievable for that region). For an 11-parameter, multi-mode, multi-source search tool this is complete enough to call correctly without further context.

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 genuine cross-parameter semantics the schema does not: tours are practically never returned without type=tour, accommodations are excluded from the activity scope even in region mode, activity selects an entire value family while unknown values silently mean "all", and id is the key for get_tourism_details. It does repeat some schema content (default 8, clamped 1..=20), which caps it below 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?

The opening line names a specific verb and resource ("Kuratierte Tourismus-Suche des Niedersachsen-Hubs") and immediately states the scope: editorially curated entries with events, prices, media, opening hours and tours. It differentiates itself from siblings by name (expand_kg_pois, nearby, search_place, get_tourism_details, MobilityMCP, get_current_weather/get_tide), 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?

There are explicit "When to use" and "When NOT to use" blocks with concrete user-utterance examples in German and English, each mapped to the correct sibling or server. It also supplies the canonical chain (search_tourism → get_tourism_details) and tells the agent it must pass the region hint, plus the multi-call-per-region rule.

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. 14 tool updates
    • First observedexpand_kg_pois
    • First observedget_current_weather
    • First observedget_poi_details
    • First observedget_tide
    • First observedget_tourism_details
    • First observedget_usage_guide
    • First observedget_weather_forecast
    • First observedlink_datetime
    • First observedlink_dynamic
    • First observednearby
    • First observedresolve_location
    • First observedreverse_geocode
    • First observedsearch_place
    • First observedsearch_tourism

Publisher details

Operator
PROJEKTIONISTEN GmbH · Publisher source
Vendor relationship
Not applicable
Trust center
Not applicable
Restrictions
https://ai.projektionisten.eu/mcp-landingpage/ · Publisher source

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources