ikeytz Einsatzgebiet-Karten
Server Details
Read/Link MCP for maps.ikeytz.com. Public read-only. ai-train=no.
- Status
- Healthy
- Uptime
- 100.0% over 61 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 68 tools
Multiple near-duplicate tools exist: find_by_area and find_by_gebiet share the same match rules, find_by_geo/find_by_icbm/find_by_google_maps overlap in coordinate ranking, get_about duplicates site_overview, and several discovery aliases (get_ai_txt, get_llms_txt, get_sitemap_txt) route to get_discovery. The detailed descriptions acknowledge these aliases and provide 'prefer X' guidance, but the boundaries between core search tools and discovery/handoff tools remain blurry.
Nearly all tools use snake_case with predictable prefixes such as get_, list_, find_by_, compose_, and resolve_. Only site_overview and distance_to_office break the verb_noun pattern by not starting with a verb, which is a minor deviation.
68 tools is far beyond the 3-15 well-scoped range and exceeds the 50+ threshold for extreme mismatch. Many tools are aliases or thin URL handoffs (e.g., get_ai_txt, get_llms_txt, get_prices, get_faq) that do not add distinct capability and could be consolidated into routers.
For the maps domain, coverage is comprehensive: area lookup by slug/plz/name/geo, polygons, prose, contact and business identity, legal text, discovery files, and embed/geo APIs are all present. Gaps are mostly deliberate handoffs to the companion www MCP (prices, FAQ bodies, article text), though standalone agents will hit dead ends for those topics.
Available Tools
68 toolscompose_mailtoCompose MailtoARead-onlyInspect
WHAT: Returns mailto:info@ikeytz.com and mapsEmail info@maps.ikeytz.com (mapsHref). Call with {}. USE for email CTAs. Prefer compose_whatsapp or compose_tel_mobile when the user wants chat or a phone call instead. DOES NOT send mail.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| href | No | mailto:info@ikeytz.com |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| mapsHref | No | mailto:info@maps.ikeytz.com |
| mapsEmail | No | info@maps.ikeytz.com |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so safety is already covered. The description adds genuinely useful behavioral context beyond that: "DOES NOT send mail" clarifies that this only produces a link rather than performing an action, and "Call with {}" confirms the no-argument invocation. It stops short of any rate-limit or format nuance, but for a pure constructor tool that is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight block with WHAT / USE / DOES NOT front-loaded, so the agent gets purpose, routing, and the key caveat in one pass. Every clause earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value structure needn't be re-explained; the description still names the salient returned fields. For a zero-param constructor tool with annotations, 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. The description's "Call with {}" is consistent with the empty schema and adds the one piece of invocation guidance an agent needs, though it only restates what the schema already enforces.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it returns a mailto: link plus a mapsEmail/mapsHref value. It also names sibling tools (compose_whatsapp, compose_tel_mobile) so an agent can distinguish it from other contact-channel composers 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"USE for email CTAs" gives the triggering condition, and "Prefer compose_whatsapp or compose_tel_mobile when the user wants chat or a phone call instead" explicitly names the alternatives and the intent that selects them. Nothing about when-to-use 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.
compose_tel_landlineCompose Tel LandlineARead-onlyInspect
WHAT: tel: href for the public landline. Call with {}. RETURNS href + display. USE as secondary call CTA. NEXT: compose_tel_mobile.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| href | No | tel:+49… |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| display | No | Human display number |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already signals a safe read operation. The description adds value by confirming it is argument-free ('Call with {}') and naming the return shape, but discloses no further behavior beyond the annotation's coverage, so a mid score is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four labeled fragments (WHAT/RETURNS/USE/NEXT) with zero waste, front-loading the core purpose before return info and routing. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-argument tool with an output schema documenting the return values, the description covers purpose, no-arg invocation, and sibling routing. Little is missing, though it could note when the landline is preferred over mobile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description reinforces this with 'Call with {}', aligning with the schema's no-argument contract without needing further elaboration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('tel: href for the public landline') and differentiates from the mobile sibling ('secondary call CTA', 'NEXT: compose_tel_mobile'). An agent can tell it apart from compose_tel_mobile 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'USE as secondary call CTA' gives clear usage context and 'NEXT: compose_tel_mobile' routes to the alternative call tool. It does not explicitly state when the mobile option should be preferred, so the guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compose_tel_mobileCompose Tel MobileARead-onlyInspect
WHAT: tel: href for the public mobile number. Call with {}. RETURNS href + display. USE as the primary call CTA. DOES NOT place the call. NEXT: compose_tel_landline, list_whatsapp_options.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| href | No | tel:+49… |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| display | No | Human display number |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true; the description adds the important behavioral clarification that this composes a link and does not actually dial, which is a real side-effect distinction. It also names the return shape, though an output schema exists and already carries that. Solid added value, but not rich on constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five labeled fragments, zero filler, front-loaded with WHAT and the return value before routing guidance. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, readOnlyHint already declared, and an output schema covering href and display, the description supplies exactly the missing pieces: what the artifact is for and which sibling to use instead.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. The description reinforces this with 'Call with {}', which matches the schema's statement that no arguments are needed and extra keys are ignored.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: produces a 'tel: href for the public mobile number'. The word 'mobile' plus the explicit sibling routing to compose_tel_landline lets an agent separate it from the other compose_* 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the positive case ('USE as the primary call CTA'), the exclusion ('DOES NOT place the call'), and names the follow-on alternatives (compose_tel_landline, list_whatsapp_options). Nothing about tool selection 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.
compose_whatsappCompose WhatsappARead-onlyInspect
WHAT: wa.me link with prefab. option = one of 12 www contactOption ids (opening_slam_day … cylinder_only_night, cylinder_mount, beratung). Deprecated aliases zugefallen|abgeschlossen|zylinder map to day and set ambiguous=true — prefer explicit day/night ids. Omit → bare wa.me. Unknown → ok:false unknown_option + hint ids. Link only — no form. USE to open WhatsApp with a prefab. NEXT: compose_mailto, get_contact.
| Name | Required | Description | Default |
|---|---|---|---|
| option | No | Optional situation id from list_whatsapp_options (12 www ids; aliases deprecated). Unknown → ok:false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| href | No | https://wa.me/… |
| note | No | Link only. Kein Formular. |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| option | No | Resolved option (null if omitted) |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| ambiguous | No | true if deprecated alias was used |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| deprecatedAlias | No | Alias used, if any |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give readOnlyHint=true; the description goes well beyond by disclosing deprecation aliases and their side effect (ambiguous=true), the omit-option fallback (bare wa.me), and the error contract (ok:false unknown_option + hint ids). That is meaningful behavioral context an agent could not infer from the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Telegraphic and front-loaded: WHAT, then parameter semantics, then USE/NEXT. Every clause carries information (aliases, error contract, scope limit) with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the description still covers the key failure shape (ok:false). For a one-optional-parameter read-only link builder, nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning: the option namespace (12 www ids), the deprecated zugefallen|abgeschlossen|zylinder aliases mapping to *day*, and the unknown-value failure mode. It does not enumerate all 12 ids or their distinctions, which caps it below 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('wa.me link with prefab') and makes the artifact type unambiguous ('Link only — no form'). It clearly distinguishes itself from the tel/mailto siblings by naming its channel and its option parameter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'USE to open WhatsApp with a prefab' plus 'NEXT: compose_mailto, get_contact' gives the calling context and points at sibling alternatives. It stops short of stating when NOT to use it (e.g., no option vs. another channel), so it is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
distance_to_officeDistance To OfficeARead-onlyInspect
WHAT: Air distance (km) from a Gebiet (slug|plz|name) or lat/lng/icbm to the Gewerbesitz. walkIn=false. RETURNS from, office, distance_km. USE for rough proximity — not driving time. DOES NOT route via OSRM. NEXT: get_geo_office, find_by_geo.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | Optional query latitude instead of place lookup | |
| lng | No | Optional query longitude | |
| plz | No | German postcode (PLZ). Several Gebiete can share one PLZ (e.g. 71638). For single lookup first match wins; use find_by_plz for all matches. | |
| icbm | No | Optional 'lat, lng' instead of place lookup | |
| name | No | German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted. | |
| slug | No | URL slug of one of the 52 Einsatzgebiete, e.g. pattonville, bietigheim-bissingen, walheim, gruenbuehl. Matches https://maps.ikeytz.com/{slug}. Lookup order when combined with plz/name: slug first. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| from | No | Origin {lat,lng} |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| slug | No | Resolved slug if from place lookup |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| office | No | Office {lat,lng,icbm} |
| walkIn | No | Always false |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| distance_km | No | Air distance kilometres |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply readOnlyHint, so the description carries most of the burden and does deliver: it discloses the return fields (from, office, distance_km), the no-routing behavior (must not be read as an ETA), and the walkIn=false mode. It does not explain what happens on a failed place lookup or on ambiguous PLZ/name matches.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded WHAT / RETURNS / USE / NEXT labels make it scannable and every clause earns its place, with zero filler prose. The telegraphic fragments "walkIn=false" and "NEXT:" assume vocabulary the reader may not have, costing a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so the RETURNS line is a helpful bonus rather than a necessity, and the input families are fully covered by the schema. The notable remaining gap is that all six parameters are optional, and the description never says what the tool returns when invoked with no arguments at all.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the six parameters is already documented in the schema, including the slug>plz>name precedence. The description only restates the accepted input families (slug|plz|name or lat/lng/icbm), adding no syntax or precedence detail beyond the schema — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (air distance in km from a Gebiet or coordinate pair to the Gewerbesitz) and immediately bounds it against the nearest confusing sibling by declaring it is NOT driving time and does NOT route via OSRM. An agent can distinguish this from routing/geo-lookup 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"USE for rough proximity — not driving time" gives an explicit when-to-use plus an explicit exclusion, which is more than most siblings offer. It stops short of saying when get_geo_office or find_by_geo should be chosen instead; "NEXT" reads as a chaining hint rather than an alternative selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_by_areaFind By AreaARead-onlyInspect
WHAT: Multi-match Einsatzgebiete by q, name, or slug (substring, umlauts ok). RETURNS all matching point cards. Same match rules as find_by_gebiet — prefer this name when the agent thinks in 'area' wording. USE for fuzzy place names. DOES NOT require an exact slug. Prefer find_by_plz for postcode-only queries. NEXT: get_service_area, get_embed_map.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Name or slug query | |
| name | No | German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted. | |
| slug | No | URL slug of one of the 52 Einsatzgebiete, e.g. pattonville, bietigheim-bissingen, walheim, gruenbuehl. Matches https://maps.ikeytz.com/{slug}. Lookup order when combined with plz/name: slug first. |
Output Schema
| Name | Required | Description |
|---|---|---|
| q | No | |
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| count | No | |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| items | No | |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful behavioral context beyond annotations: multi-match behavior, substring matching, umlaut tolerance, no exact-slug requirement, and same match rules as find_by_gebiet. It stops short of detailing pagination or match limits, but with an output schema present that is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The WHAT/RETURNS/USE/DOES NOT/NEXT structure is front-loaded and scannable. Every clause carries selection or behavior information, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only multi-match lookup with 100% schema coverage and an output schema, the description supplies everything needed: purpose, matching semantics, alternatives, exclusions, and follow-up tools. No critical decision or invocation detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description still adds cross-parameter meaning by grouping q, name, and slug as substring-capable inputs with umlaut support and by clarifying that an exact slug is not required, which goes beyond the individual schema field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: multi-match Einsatzgebiete by q, name, or slug with substring and umlaut support, returning all matching point cards. It also explicitly distinguishes itself from find_by_gebiet and find_by_plz, so an agent can select it without opening sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance ('USE for fuzzy place names'), an exclusion ('DOES NOT require an exact slug'), and named alternatives ('Prefer find_by_plz for postcode-only queries'). It also recommends this name when the agent thinks in 'area' wording, resolving ambiguity with find_by_gebiet.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_by_gebietFind By GebietARead-onlyInspect
WHAT: Multi-match Gebiete by q, name, or slug (substring, umlauts ok). RETURNS all matching point cards. USE for fuzzy place names. DOES NOT require exact slug. NEXT: get_service_area for one, or get_grenze.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Name or slug query (preferred) | |
| name | No | German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted. | |
| slug | No | URL slug of one of the 52 Einsatzgebiete, e.g. pattonville, bietigheim-bissingen, walheim, gruenbuehl. Matches https://maps.ikeytz.com/{slug}. Lookup order when combined with plz/name: slug first. |
Output Schema
| Name | Required | Description |
|---|---|---|
| q | No | Resolved query |
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| count | No | |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| items | No | |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint already covers the safety profile, and the description adds real value beyond it: substring matching, umlaut tolerance, and crucially 'RETURNS all matching point cards' (multi-match semantics, not a single result). It omits any note on result limits or ordering when many Gebiete match, which is the one behavioral gap left.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Labeled WHAT/RETURNS/USE/DOES NOT/NEXT structure is front-loaded and terse, with every clause carrying a distinct fact (matching mode, return shape, usage condition, follow-up). No filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema covering return values and annotations covering safety, the description only needs to establish fuzzy-match semantics, which it does. Given the crowded find_by_* sibling set, a brief note on how it differs from find_by_plz or find_by_keyword would make it fully complete for selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so q, name, and slug are already fully documented, including the slug-first lookup order. The description restates that lookups accept q/name/slug without adding format, precedence, or fallback detail the schema lacks; baseline 3 applies when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Multi-match Gebiete by q, name, or slug') with substring/umlaut qualifiers, so the agent knows this is fuzzy lookup rather than exact. It does not name the exact-match siblings (find_by_plz, find_by_serp) to contrast against, so the differentiation is by implication rather than by explicit callout.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'USE for fuzzy place names' and 'DOES NOT require exact slug' give clear positive context plus one exclusion that separates it from exact-slug lookups. 'NEXT: get_service_area for one, or get_grenze' usefully routes follow-up calls, though it stops short of naming the sibling to prefer when the name is already known exactly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_by_geoFind By GeoARead-onlyInspect
WHAT: Rank Einsatzgebiete by lat/lng (or icbm). Optional radius_km; else nearest N (limit, default 5). (0,0) and far points → ok=false outside_service_area. RETURNS items with distance_km. USE for 'near this coordinate'. DOES NOT route or drive-time. NEXT: get_service_area, get_grenze, distance_to_office.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | WGS84 latitude. Required with lng unless icbm is set. (0,0) → outside_service_area. | |
| lng | No | WGS84 longitude. Required with lat unless icbm is set. | |
| icbm | No | ICBM or paste 'lat, lng' (comma-separated). Alternative to lat+lng. | |
| limit | No | Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius. | |
| radius_km | No | Optional air-radius filter in km. Omit = return nearest N (limit). Far points / (0,0) → outside_service_area. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| lat | No | Query latitude |
| lng | No | Query longitude |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| icbm | No | Query ICBM |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| count | No | |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| items | No | Ranked Gebiete with distance_km |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| radius_km | No | Applied radius or null |
| nearest_km | No | On outside_service_area failures: nearest distance if any |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries real additional weight: it discloses the error path ((0,0) and far points yield ok=false outside_service_area) and that results carry distance_km. That is meaningful behavior beyond the annotation, though it says nothing about ordering guarantees or how many results a radius query can return.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
What/Returns/Use/Does-not/Next structure is aggressively front-loaded and each clause carries information; nothing is padding. The terse label style still parses cleanly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and annotations cover the safety profile, so the description need not explain return payloads; it still adds the coordinate-alternative, default-limit behavior and error condition. The only residual gap is disambiguating this from find_by_icbm/find_by_gebiet for an agent choosing among near-identical siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the schema defines lat, lng, icbm, limit and radius_km in full. The description restates the radius-vs-limit default (nearest N, default 5) rather than adding syntax or edge-case meaning not already present in the schema text, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: rank Einsatzgebiete by lat/lng or icbm, with the exact filter semantics (radius_km vs nearest N). It also distinguishes itself from routing siblings by declaring 'DOES NOT route or drive-time,' so an agent can separate it from distance_to_office without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('USE for near this coordinate'), an explicit exclusion (no routing/drive-time), and names follow-up tools (get_service_area, get_grenze, distance_to_office). It does not, however, clarify when to prefer this over the very similarly named find_by_icbm sibling, which remains an inference the agent must make.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_by_google_mapsFind By Google MapsARead-onlyInspect
WHAT: Paste Google Maps / ICBM coordinates (q or icbm or lat/lng) → nearest ikeytz Gebiete (same ranking as find_by_geo). (0,0) → outside_service_area. USE when the user pastes a Maps pin. NEXT: get_service_area, get_embed_map.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Paste string containing 'lat, lng' | |
| lat | No | WGS84 latitude. Required with lng unless icbm is set. (0,0) → outside_service_area. | |
| lng | No | WGS84 longitude. Required with lat unless icbm is set. | |
| icbm | No | ICBM or paste 'lat, lng' (comma-separated). Alternative to lat+lng. | |
| limit | No | Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius. | |
| radius_km | No | Optional air-radius filter in km. Omit = return nearest N (limit). Far points / (0,0) → outside_service_area. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| lat | No | |
| lng | No | |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| icbm | No | |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| count | No | |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| items | No | |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| radius_km | No | |
| nearest_km | No | |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the safety profile, so the bar is lower. The description still adds real behavior beyond annotations: the (0,0) → outside_service_area sentinel and the shared ranking with find_by_geo. It stops short of stating output shape or fallback behavior when a pin is far outside the service area.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three telegraphic clauses with WHAT/USE/NEXT labels, front-loaded and free of filler. Every sentence carries a distinct piece of operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. Input alternatives, the out-of-area sentinel, and next-step tools are all covered; the only remaining gap is differentiation from the overlapping find_by_icbm sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description restates the accepted input forms ('q or icbm or lat/lng') and the (0,0) sentinel, but that information is already fully in the schema, and it adds no new constraint (e.g., which form takes precedence) beyond what is documented there.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Paste ... coordinates → nearest ikeytz Gebiete') and anchors the ranking to a sibling ('same ranking as find_by_geo'), so an agent can tell it apart from the geo/icbm finders. The WHAT label makes the purpose scannable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'USE when the user pastes a Maps pin' gives an explicit triggering condition, and 'NEXT: get_service_area, get_embed_map' routes follow-up. However it does not disambiguate from the sibling find_by_icbm, which the description openly overlaps with ('Google Maps / ICBM coordinates ... or icbm').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_by_icbmFind By IcbmARead-onlyInspect
WHAT: Rank Einsatzgebiete by an ICBM 'lat, lng' string (optional lat/lng, radius_km, limit). RETURNS items with distance_km. USE when the user pastes ICBM metadata. Prefer find_by_geo instead for plain lat/lng without an ICBM string. (0,0) and far points → ok=false outside_service_area. DOES NOT route or drive-time. NEXT: get_service_area, get_embed_map, get_grenze.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | WGS84 latitude. Required with lng unless icbm is set. (0,0) → outside_service_area. | |
| lng | No | WGS84 longitude. Required with lat unless icbm is set. | |
| icbm | No | ICBM or paste 'lat, lng' (comma-separated). Alternative to lat+lng. | |
| limit | No | Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius. | |
| radius_km | No | Optional air-radius filter in km. Omit = return nearest N (limit). Far points / (0,0) → outside_service_area. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| lat | No | |
| lng | No | |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| icbm | No | |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| count | No | |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| items | No | |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| radius_km | No | |
| nearest_km | No | |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries most of the behavioral load and delivers: the return payload (items with distance_km), edge-case semantics ((0,0)/far points yield ok=false outside_service_area), and explicit non-capability (no routing/drive-time). It stops short of noting pagination behavior or clamps beyond what the schema already says.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A tight WHAT / RETURNS / USE / PREFER / edge-case / DOES NOT / NEXT structure with zero filler; the identifying information and the sibling routing are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with a 100%-covered schema, an output schema and readOnlyHint annotation, the description supplies everything else an agent needs: trigger, alternative, error semantics and follow-up tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so lat, lng, icbm, limit and radius_km are all documented in the schema. The description only restates which parameters exist and that they are optional, adding no syntax or semantics beyond that — the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (rank) and resource (Einsatzgebiete) plus the exact input form (an ICBM 'lat, lng' string), and explicitly distinguishes itself from the closest sibling, find_by_geo. An agent can choose between the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete trigger ('USE when the user pastes ICBM metadata'), names the alternative and its selecting condition ('Prefer find_by_geo instead for plain lat/lng without an ICBM string'), and states a negative scope ('DOES NOT route or drive-time') plus NEXT-step tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_by_keywordFind By KeywordARead-onlyInspect
WHAT: Search maps llms-keywords.txt (keyword → maps URL). q required. RETURNS matching keyword/url rows (clamped limit). USE for SEO/keyword → Gebiet page. DOES NOT search www keywords. NEXT: get_service_area / get_embed_map with the slug from the URL.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Required search string matched against keyword and URL (substring, case-insensitive). | |
| limit | No | Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius. | |
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| q | No | Query echoed |
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| count | No | Returned hits |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| items | No | keyword + url rows |
| lines | No | Raw TSV lines |
| total | No | Total matches before limit |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered, but the description adds useful behavior beyond that: it returns 'matching keyword/url rows' and notes the limit is 'clamped', warning the agent that results may be truncated. No auth or rate-limit context, but the added return/clamp detail is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with labeled sections (WHAT/RETURNS/USE/DOES NOT/NEXT) and every clause carries information with almost no filler. The telegraphic style is dense but efficient, with no duplicated sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return-shape detail is not required, yet the description still summarizes the returned rows and the next-step tools. Combined with the explicit exclusion and required-param note, an agent has enough to invoke it correctly, though deployment context like indexing scope is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents q, limit, and locale in detail. The description only echoes 'q required', adding no format or syntax guidance beyond what the schema already provides, which matches the baseline 3 for fully-covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Search maps llms-keywords.txt (keyword → maps URL)'. It explicitly scopes itself against the sibling space with 'DOES NOT search www keywords', so an agent can distinguish it from the other find_by_* and list_* tools 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use ('USE for SEO/keyword → Gebiet page'), an explicit exclusion ('DOES NOT search www keywords'), and follow-up routing ('NEXT: get_service_area / get_embed_map with the slug from the URL'). It stops short of naming a directly competing alternative tool for the same query, so it is strong but not maximal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_by_plzFind By PlzARead-onlyInspect
WHAT: All Einsatzgebiete with this PLZ (not only the first). plz required (or q as PLZ). RETURNS items[] point cards + count. USE when several Stadtteile share a postcode. NEXT: get_service_area(slug) for one card.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Alias for plz if plz omitted | |
| plz | Yes | Required German postcode. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| plz | No | Queried PLZ |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| count | No | Number of Gebiete |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| items | No | All matches |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful behavior beyond that: it discloses the return shape (items[] point cards + count) and the completeness guarantee (returns ALL matches, not just the first). No pagination or error-mode detail, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Telegraphic WHAT/USE/NEXT framing is front-loaded and wastes nothing. Each clause carries distinct information: scope, input, output, trigger, and next step.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required, and the annotations carry the read-only safety signal. The description still covers scope, input alias, result completeness, and handoff, leaving nothing an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are already documented, including the 'q as alias for plz' relationship. The description restates 'plz required (or q as PLZ)' without adding syntax or format constraints beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('All Einsatzgebiete with this PLZ') and immediately scopes the result set ('not only the first'). This distinguishes it from single-result siblings like get_service_area and from other find_by_* variants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('USE when several Stadtteile share a postcode') and routes to the follow-up tool for the single-card case ('NEXT: get_service_area(slug)'). The when-to-use and alternative path are both spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_by_serpFind By SerpARead-onlyInspect
WHAT: Search maps llms-serp.txt blocks by q, path, url, or slug. RETURNS path/url/snippet items. DOCS/API: https://maps.ikeytz.com/llms-serp.txt (source catalog). USE for title/H1/description SERP cards on maps. DOES NOT scrape live HTML. NEXT: get_serp_snippet for one full block.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free-text search in SERP blocks | |
| url | No | Full https://maps.ikeytz.com/… URL | |
| path | No | maps path fragment, e.g. /pattonville | |
| slug | No | Gebiet slug | |
| limit | No | Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius. |
Output Schema
| Name | Required | Description |
|---|---|---|
| q | No | Resolved query |
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| count | No | |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| items | No | SERP hits |
| total | No | |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only readOnlyHint available, the description adds real behavioral context: it discloses it does not scrape live HTML, names the underlying source catalog URL, and indicates the item shape (path/url/snippet). It does not cover pagination limits or combined-filter behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tagged WHAT/RETURNS/USE/DOES NOT/NEXT structure is well front-loaded and scannable. Slightly dense with some overlap between the WHAT clause and the parameter list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with a full schema and an output schema, this covers purpose, negative constraints, and the follow-up call. The remaining gap is filter-combination semantics, which matters given four optional, non-required query parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters, giving a baseline of 3. The description restates the query keys but adds nothing about how they combine, precedence when multiple are supplied, or matching semantics for q.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search maps llms-serp.txt blocks') and enumerates the four lookup keys (q, path, url, slug). It also distinguishes itself from sibling lookup tools by clarifying it searches the SERP block catalog rather than live HTML.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'USE for title/H1/description SERP cards on maps' gives a clear usage context, and 'NEXT: get_serp_snippet for one full block' routes the agent to the follow-up tool. It lacks explicit exclusions against close siblings like find_by_gebiet or find_by_keyword, so 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_aboutGet AboutARead-onlyInspect
WHAT: About maps.ikeytz.com (same core card as site_overview — 52 maps, not www Über-uns corpus). USE for 'what is this host'. DOES NOT return www about body. NEXT: site_overview, get_links, get_business_identity.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| h1 | No | |
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| mcp | No | |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| note | No | |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| brand | No | |
| count | No | |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| owner | No | |
| title | No | |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| sister | No | |
| walkIn | No | |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| registry | No | |
| legalName | No | |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered. The description adds scope-level behavioral context: the host is German-only, the returned corpus is not the www Über-uns body, and it flags the shared-card overlap with site_overview. That is useful beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Telegraphic WHAT/USE/DOES NOT/NEXT labeling is front-loaded and wastes no words. Every clause carries routing or scope information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained, and the single param is fully covered. Usage, scope boundaries, and follow-ups are present; only the direct site_overview-vs-get_about selection rule is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the locale enum already documents the German-only behavior and the no-prefix URL rule in full detail. The description adds nothing about the locale parameter, so baseline 3 is correct when the schema carries the semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb/resource (About page for maps.ikeytz.com) and immediately differentiates it from siblings: 'same core card as site_overview' and 'not www Über-uns corpus'. An agent can distinguish it from site_overview and get_impressum without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit USE trigger ('what is this host') and a NEXT list (site_overview, get_links, get_business_identity). It also carves out a negative ('DOES NOT return www about body'), but it doesn't fully spell out when to prefer site_overview over this tool given they share a core card.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_agbGet AgbARead-onlyInspect
WHAT: Returns only a URL to www.ikeytz.com/agb — not AGB clause text. USE when the user asks for AGB while on maps and you only need the link. Prefer www MCP get_legal(doc=agb) or www get_agb when you need the legal corpus. DOES NOT invent legal clauses.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| npm | No | www CLI package @ikeytz/mcp |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp |
| note | No | maps only points; Volltext/Preise/FAQ live on www |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| www_mcp | No | https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus |
| www_tool | No | Same tool name on www MCP that holds the real payload |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No | Locale the caller asked for; maps still returns locale=de |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds meaningful behavioral context beyond that: its output is a URL only, not clause text, which prevents the agent from expecting a legal corpus, and it disclaims clause invention. It doesn't discuss latency or failure modes, but the output nature is a valuable addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences in a clear WHAT/USE/DOES-NOT structure, each earning its place with no waste. The most important constraint (URL only) comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be spelled out, yet the description still clarifies the output is a link. For a zero-parameter, annotated, read-only helper, nothing an agent needs to select and call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema documents this fully ('This tool takes no arguments'), so the baseline is 4. The description correctly implies a no-argument call, adding no confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource and sharply scopes it: 'Returns only a URL to www.ikeytz.com/agb — not AGB clause text.' It explicitly distinguishes itself from siblings get_legal(doc=agb) and www get_agb, so an agent can pick it apart from near-identical tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit use condition ('USE when the user asks for AGB while on maps and you only need the link') and names the alternatives with the condition that selects them ('Prefer ... get_legal(doc=agb) ... when you need the legal corpus'). Both when-to-use and when-not-to-use are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ai_pageGet Ai PageARead-onlyInspect
WHAT: Reads maps /ai-pages/de/{slug}.txt when the path is a maps Gebiet/ai-page; otherwise returns a www HTML hand-off for non-maps paths. path or slug. DOCS/API: https://maps.ikeytz.com/ai-pages/de/{slug}.txt (plain text corpus) and https://maps.ikeytz.com/{slug} (HTML). USE for agent-ready maps Gebiet prose — not for site-wide crawl policy (that is get_ai_txt). DOES NOT invent page bodies. NEXT: get_service_area, get_lage, get_ai_txt.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Path or ai-pages path fragment | |
| slug | No | Gebiet or ai-page slug | |
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | When www pointer |
| note | No | |
| path | No | /ai-pages/de/{slug}.txt |
| slug | No | |
| text | No | Full ai-page UTF-8 text |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so safety is covered. The description adds branch behavior (txt corpus vs HTML hand-off) and the guarantee 'DOES NOT invent page bodies', but does not mention auth needs, caching, or rate limits. With an output schema present, return values need not be re-explained, so a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with WHAT/USE/NEXT labels and no filler sentences, though the two inline URLs and the 'Not a www multi-locale switch' tangent add density. Nothing is truly wasted, but the entry is cramped.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with an output schema and full param coverage, the description supplies the branch logic, the sibling routing, and the doc URLs an agent needs. It leaves minor gaps around error cases for invalid slugs, but is broadly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with 3 well-documented params including an enum and its locale caveat. The description only restates 'path or slug', adding nothing beyond the schema. Baseline 3 for a fully-documented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Reads maps /ai-pages/de/{slug}.txt') and clarifies the fallback branch for non-maps paths. It distinguishes itself from get_ai_txt. However, the phrasing around 'www HTML hand-off' is somewhat tangled, so an agent must parse carefully to distinguish it from sibling page tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'USE for agent-ready maps Gebiet prose — not for site-wide crawl policy (that is get_ai_txt)' names both the intended use and the exclusion, plus NEXT suggestions. It stops short of a full when/when-not matrix for the many other get_* page tools, but the key routing is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ai_txtGet Ai TxtARead-onlyInspect
WHAT: Alias get_discovery(which=ai-txt) — maps /.well-known/ai.txt 1:1. USE for crawl/train policy (ai-train=no). NEXT: get_llms_txt.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of lines to return after offset. Omit or null = if remaining payload ≤~30KB return all remaining lines; if larger, return first ~30KB window + nextOffset (O9). Explicit limit keeps 1..10000 line window (MCP caps unchanged — not forced to 30KB). Meta also as trailing # MCP-META lines in summary. | |
| offset | No | 0-based index into a list or discovery file lines (split on \n). 0 = first. Omit = 0. Combine with limit to page. Use nextOffset / offset+limit from a previous result when present. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| path | No | Public relative path of the file on maps |
| text | No | UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer. |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| limit | No | Applied line limit, or null if omitted |
| which | No | Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …). |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| offset | No | Applied 0-based line offset |
| missing | No | true if the discovery file was not found on disk |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| totalUrls | No | http(s) lines in the full file |
| truncated | No | true if offset+limit left more lines. Also in trailing # MCP-META. |
| nextOffset | No | Pass as next offset when truncated; else null. Also in # MCP-META. |
| totalBytes | No | Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META. |
| totalChars | No | Full discovery file character length before offset/limit. Also in # MCP-META. |
| totalLines | No | Alias of total_lines |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| total_lines | No | Line count of the full file |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| returnedUrls | No | http(s) lines in this window |
| bytesReturned | No | UTF-8 length of text window |
| returnedLines | No | Lines in this window (before # MCP-META) |
| fetchTruncated | No | true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries most of the burden. It adds useful context that this is an alias of get_discovery and a 1:1 map of /.well-known/ai.txt, which helps predict output. However it discloses no pagination/truncation behavior or content expectations beyond that, leaving gaps for a discovery-file reader.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded line in WHAT/USE/NEXT form with zero filler. Every clause earns its place: identity, use condition, and next step.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. With purpose, use condition, and next-step routing covered, the definition is nearly complete; only a note on what the file typically contains (beyond crawl/train policy) is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both limit/offset are documented in extensive detail in the schema (windowing, nextOffset, 1..10000 caps). The description adds nothing about parameters, so the baseline 3 applies — the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource via an explicit alias relationship: 'Alias get_discovery(which=ai-txt) — maps /.well-known/ai.txt 1:1.' This distinguishes it from sibling get_discovery and get_llms_txt. It is clear what the tool returns (the ai.txt file content), though the aliasing framing makes the agent infer the fetch action rather than naming it directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'USE for crawl/train policy (ai-train=no)' gives an explicit use condition, and 'NEXT: get_llms_txt' routes the agent to the follow-up tool. No when-not or explicit alternative exclusion is given, but the positive guidance is concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_auswahl_itemGet Auswahl ItemARead-onlyInspect
WHAT: Returns only a URL to www /auswahl/{slug} — not the Auswahl article body. slug required. USE when the user names a specific Auswahl slug on maps. Prefer list_auswahl for the hub link; prefer www MCP get_auswahl_item({slug}) when you need the full article. DOES NOT return article text.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Required Auswahl slug on www | |
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| npm | No | www CLI package @ikeytz/mcp |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp |
| note | No | maps only points; Volltext/Preise/FAQ live on www |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| www_mcp | No | https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus |
| www_tool | No | Same tool name on www MCP that holds the real payload |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No | Locale the caller asked for; maps still returns locale=de |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=true, and the description adds useful scope context beyond that: it returns a URL, not article text, and it is maps-specific rather than a www multi-locale switch. It does not cover auth or rate limits, but for a read-only lookup with an output schema the added clarity is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded WHAT/USE/DOES-NOT structure with no wasted sentences. Slight redundancy between 'not the Auswahl article body' and 'DOES NOT return article text', but overall tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, the output schema exists so return structure needn't be restated, and the description still confirms the returned artifact (a URL). Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the locale semantics are fully documented in the schema itself (German-only, ignored for others). The description only restates that slug is required, adding no syntax or format detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource and precise scope: it returns only a URL to www /auswahl/{slug}, explicitly not the article body. It also differentiates itself from list_auswahl and the www MCP's get_auswahl_item, so an agent can distinguish it without opening other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use (user names a specific Auswahl slug on maps) and names two alternatives with the condition that selects each: list_auswahl for the hub link, www MCP get_auswahl_item for the full article. No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_business_identityGet Business IdentityARead-onlyInspect
WHAT: Returns Inhaber, brand, legalName, hours, NAP, and office coords for LocalBusiness / impressum-grade facts on maps. Call with {} or locale=de. walkIn=false — mobile locksmith only. USE when you need the identity card (who owns the business, hours, legal name). Prefer get_contact for phone/email/WhatsApp CTAs; prefer get_geo_office for the /buero pin and embed; prefer get_impressum for the full imprint text file. DOES NOT update records or accept walk-in bookings.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| nap | No | Public NAP payload |
| www | No | |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| maps | No | |
| note | No | |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| brand | No | |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| hours | No | |
| owner | No | Mahmud Reza Kashani |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| office | No | lat/lng/google_maps/icbm |
| walkIn | No | Always false |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| legalName | No | |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| office_note | No | |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the safe-read profile, so the bar is lower. The description still adds real context beyond annotations: it flags 'walkIn=false — mobile locksmith only' and states it does not update records or accept bookings. It does not discuss rate limits or auth needs, but given the annotation coverage this is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with WHAT/USE/DOES NOT headers that make scanning easy. Slightly redundant, as the no-walk-in constraint appears twice ('walkIn=false — mobile locksmith only' and 'accept walk-in bookings'), but overall tight and well organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be restated. For a single-optional-param, read-only lookup the description covers purpose, selection vs alternatives, and exclusions; nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the sole parameter carries a thorough enum description, so the schema does the heavy lifting. The description only reinforces calling with {} or locale=de, adding no syntax or meaning beyond the schema, which matches the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and enumerates exactly what is returned (Inhaber, brand, legalName, hours, NAP, office coords) and the scope (LocalBusiness / impressum-grade facts). It explicitly distinguishes itself from the three closest siblings (get_contact, get_geo_office, get_impressum), so an agent can select 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit USE condition plus three named alternatives with the exact condition that selects each (phone/email CTA, /buero pin and embed, full imprint text). It also states two exclusions (no record updates, no walk-in bookings), leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contactGet ContactARead-onlyInspect
WHAT: Public NAP — mobile, landline, fax, email, mapsEmail (info@maps.ikeytz.com), WhatsApp, address, office coords. walkIn=false. USE for call/WhatsApp/mail CTAs. DOES NOT open tickets or send messages. NEXT: compose_tel_mobile, compose_whatsapp, compose_mailto, list_whatsapp_options.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| fax | No | Fax display |
| lat | No | Office lat |
| lng | No | Office lng |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| icbm | No | |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| No | info@ikeytz.com | |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| mobile | No | Mobile display |
| walkIn | No | Always false |
| address | No | Structured address block |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| landline | No | Landline display |
| No | wa.me URL | |
| mapsEmail | No | info@maps.ikeytz.com |
| addressLine | No | Single-line address |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| google_maps | No | |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description must add the rest; it does disclose that the tool is a pure data fetch that sends nothing and opens no tickets, plus the walkIn=false flag. It does not discuss caching, freshness, or failure modes, but it covers the behavior an agent needs to avoid misusing it as a messaging tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded WHAT/USE/DOES NOT/NEXT structure with zero filler sentences; every clause earns its place. The telegraphic label style is dense but readable, at most slightly clipped for less common terms like mapsEmail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value documentation is unnecessary, and the description covers payload contents, negative scope, and next-step routing for a read-only one-param tool. The only omission is any mention of the locale behavior, which the schema already handles, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single locale parameter is documented in exhaustive detail inside the schema (German-only, ignored values, www multi-locale pointer). The description adds nothing about locale, so the baseline 3 applies — the schema carries this dimension entirely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource and enumerates the exact payload (mobile, landline, fax, email, mapsEmail, WhatsApp, address, office coords), so an agent knows precisely what it retrieves. The 'DOES NOT' clause and the NEXT routing to compose_* siblings distinguish it from adjacent 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('USE for call/WhatsApp/mail CTAs'), explicit exclusions ('DOES NOT open tickets or send messages'), and named alternatives (compose_tel_mobile, compose_whatsapp, compose_mailto, list_whatsapp_options). Nothing is left to inference about when this tool is the right pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_copyrightGet CopyrightARead-onlyInspect
WHAT: English map copyright text from maps /llms-copyright.txt. Optional offset/limit. USE for EN citations of map authorship. NEXT: get_urheberrecht.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of lines to return after offset. Omit or null = if remaining payload ≤~30KB return all remaining lines; if larger, return first ~30KB window + nextOffset (O9). Explicit limit keeps 1..10000 line window (MCP caps unchanged — not forced to 30KB). Meta also as trailing # MCP-META lines in summary. | |
| offset | No | 0-based index into a list or discovery file lines (split on \n). 0 = first. Omit = 0. Combine with limit to page. Use nextOffset / offset+limit from a previous result when present. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| doc | No | |
| body | No | |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| which | No | |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint already declares this a safe read. The description adds that content comes from a static text file (llms-copyright.txt), which is useful context about the source and stability, but it discloses nothing about the size-window/pagination behaviour, which is instead carried by the schema. Modest added value over annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three telegraphic clauses (WHAT/USE/NEXT) with the core purpose front-loaded and zero filler. The terse label style is efficient, though 'NEXT' is cryptic enough that a fully polished definition would spell it out.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only text fetch with an output schema and 100%-covered parameters, almost everything an agent needs is present: what it returns, its source, when to use it, and the German sibling. Only the meaning of the 'NEXT' chain is left slightly ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters have detailed prose in the schema covering defaults, ranges, and the 30KB window behaviour. The description only repeats 'Optional offset/limit', adding no syntax or format detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (English map copyright text) plus the exact source (/llms-copyright.txt), and explicitly sets itself apart from the sibling get_urheberrecht. An agent can distinguish it from the many other get_* legal/page tools 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'USE for EN citations of map authorship' gives a genuine when-to-use condition, and 'NEXT: get_urheberrecht' points at the German counterpart. However the routing is stated as 'NEXT' (suggesting a chained follow-up) rather than an explicit alternative or exclusion, so the when-not guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_datenschutzGet DatenschutzARead-onlyInspect
WHAT: Returns only a URL to www Datenschutz — not the privacy-policy body. USE when the user asks for Datenschutz while on maps and you only need the link. Prefer www MCP get_datenschutz or get_legal for the corpus. DOES NOT invent privacy clauses.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| npm | No | www CLI package @ikeytz/mcp |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp |
| note | No | maps only points; Volltext/Preise/FAQ live on www |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| www_mcp | No | https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus |
| www_tool | No | Same tool name on www MCP that holds the real payload |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No | Locale the caller asked for; maps still returns locale=de |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds genuinely useful behavioral detail beyond that: it returns only a URL and not the policy body, and it 'DOES NOT invent privacy clauses,' which tells the agent not to synthesize content. Auth/rate-limit behavior is unspecified but unimportant for a read-only URL lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The WHAT/USE/DOES-NOT structure front-loads the essential fact (URL only, not the body) and each sentence carries information. The repeated 'www' qualifier and the terse 'www Datenschutz' phrasing are slightly opaque, but nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't enumerate return values, and it already states the return is a URL. For a zero-parameter, read-only lookup with annotations covering safety, the agent has everything needed to select and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case. The schema itself states no arguments are accepted and that extra keys are ignored, so no additional parameter explanation is required from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns only a URL to www Datenschutz') and explicitly bounds the scope by negating the privacy-policy body. This lets an agent distinguish it from sibling legal-page getters like get_legal and get_impressum without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('user asks for Datenschutz while on maps and you only need the link') and names alternatives ('Prefer www MCP get_datenschutz or get_legal for the corpus'). The only weakness is that the referenced 'www MCP get_datenschutz' is a same-named tool on a different server, which is ambiguous routing information rather than a clean sibling pointer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_discoveryGet DiscoveryARead-onlyInspect
WHAT: 1:1 mirror of a maps discovery file (UTF-8 text/JSON). summary ≡ line window + trailing # MCP-META (truncated, totalUrls, nextOffset) — not a one-line stub. which is required — common ids: ard, ai-catalog, ai-txt, ai-plugin, answer-engine, agent-skills, llms, llms-full, llms-index, llms-keywords, llms-serp, llms-jsonld, llms-navigation, llms-impressum-kontakt, llms-orte-geo, llms-grenzen-koordinaten, llms-urheberrecht, llms-copyright, llms-mcp-server, llms-mcp-web, robots, sitemap-txt, sitemap-xml. Omit limit: if remaining >~30KB → first ~30KB window + nextOffset (O9); explicit limit keeps line window 1..10000 (not forced to 30KB). USE for agent-ready catalogs and robots/sitemap. DOES NOT invent missing files (missing=true). NEXT: find_by_keyword / find_by_serp for structured search; get_llms_txt / get_ai_txt aliases.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of lines to return after offset. Omit or null = if remaining payload ≤~30KB return all remaining lines; if larger, return first ~30KB window + nextOffset (O9). Explicit limit keeps 1..10000 line window (MCP caps unchanged — not forced to 30KB). Meta also as trailing # MCP-META lines in summary. | |
| which | Yes | Required discovery id. Examples: ard, ai-catalog, ai-txt, ai-plugin, answer-engine, agent-skills, llms, llms-full, llms-index, llms-keywords, llms-serp, llms-jsonld, llms-navigation, llms-impressum-kontakt, llms-orte-geo, llms-grenzen-koordinaten, llms-urheberrecht, llms-copyright, llms-mcp-server, llms-mcp-web, robots, sitemap-txt, sitemap-xml. | |
| offset | No | 0-based index into a list or discovery file lines (split on \n). 0 = first. Omit = 0. Combine with limit to page. Use nextOffset / offset+limit from a previous result when present. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| path | No | Public relative path of the file on maps |
| text | No | UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer. |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| limit | No | Applied line limit, or null if omitted |
| which | No | Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …). |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| offset | No | Applied 0-based line offset |
| missing | No | true if the discovery file was not found on disk |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| totalUrls | No | http(s) lines in the full file |
| truncated | No | true if offset+limit left more lines. Also in trailing # MCP-META. |
| nextOffset | No | Pass as next offset when truncated; else null. Also in # MCP-META. |
| totalBytes | No | Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META. |
| totalChars | No | Full discovery file character length before offset/limit. Also in # MCP-META. |
| totalLines | No | Alias of total_lines |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| total_lines | No | Line count of the full file |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| returnedUrls | No | http(s) lines in this window |
| bytesReturned | No | UTF-8 length of text window |
| returnedLines | No | Lines in this window (before # MCP-META) |
| fetchTruncated | No | true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only safety, but the description adds substantial behavioral detail: missing files return `missing=true`, omitted `limit` triggers a ~30KB window with `nextOffset`, explicit limits keep the 1..10000 line window, and `summary` includes trailing `# MCP-META` with truncation metadata. These traits go well beyond the annotation and are directly useful for pagination and error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with WHAT, USE, DOES NOT, and NEXT, so an agent can extract the key routing information quickly. It is dense and includes a long id list that duplicates the schema, but almost every clause carries operational meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For this read-only discovery-file retrieval tool, the description covers the important edge cases: missing files, truncation, pagination via `nextOffset`, limit omission behavior, and aliases. An output schema exists, so return-value structure need not be explained further.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents `which`, `limit`, and `offset`, including examples and default behavior. The description repeats the same `which` id list and limit behavior rather than adding new parameter semantics, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific retrieval target: a 1:1 mirror of a maps discovery file, with examples of the required `which` ids. It distinguishes itself from structured-search siblings by naming `find_by_keyword` / `find_by_serp` and by describing its alias relationship. The core phrase '1:1 mirror of a maps discovery file' is somewhat opaque, but the scope is still clear enough to separate it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit use cases ('USE for agent-ready catalogs and robots/sitemap') and names the alternative for structured search ('find_by_keyword / find_by_serp'). It also mentions known aliases. It does not state general prerequisites or when-not-to-use conditions beyond the structured-search alternative, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_embed_mapGet Embed MapARead-onlyInspect
WHAT: Canonical map page URL https://maps.ikeytz.com/{slug} for iframe/src and Visitenkarte. Lookup slug|plz|name. RETURNS area card + maps_nav + neighbors (MAPS-IL1/IL2) + canonicalUrl. USE for embedding or linking a Gebiet map. NEXT: get_geo_api, get_grenze, get_lage, get_service_area.
| Name | Required | Description | Default |
|---|---|---|---|
| plz | No | German postcode (PLZ). Several Gebiete can share one PLZ (e.g. 71638). For single lookup first match wins; use find_by_plz for all matches. | |
| name | No | German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted. | |
| slug | No | URL slug of one of the 52 Einsatzgebiete, e.g. pattonville, bietigheim-bissingen, walheim, gruenbuehl. Matches https://maps.ikeytz.com/{slug}. Lookup order when combined with plz/name: slug first. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| lat | No | |
| lng | No | |
| plz | No | |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| name | No | |
| slug | No | |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| geo_api | No | |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| maps_nav | No | MAPS-IL1 mini-chrome URLs |
| embed_map | No | |
| neighbors | No | Up to 5 nearest Gebiete |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries the rest; it discloses the returned payload shape (area card, maps_nav, neighbors, canonicalUrl) and the slug-first lookup precedence. However, since an output schema already exists, the RETURNS block largely restates structured data, and nothing is said about failure behaviour when a slug/plz/name matches nothing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded WHAT/RETURNS/USE/NEXT structure with no filler sentences. Slightly telegraphic jargon (Visitenkarte, MAPS-IL1/IL2) costs a little clarity but keeps it short.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only slug resolver with a full schema and an output schema, the definition covers purpose, parameters, return shape, and next steps. The main missing piece is what happens on a failed lookup and whether any of the three lookup keys is preferred when the caller supplies none.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema itself already documents PLZ ambiguity, name substring matching, and slug-first lookup order. The description's 'Lookup slug|plz|name' adds only a compact restatement, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource (returns the canonical map page URL for a Gebiet) and pins the scope to iframe/src embedding and Visitenkarte use. It partially differentiates from siblings by listing follow-up tools (get_geo_api, get_grenze, get_lage, get_service_area), though it never contrasts itself with the near neighbour resolve_maps_url.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'USE for embedding or linking a Gebiet map' gives a clear activation condition, and the 'NEXT:' chain routes the agent onward. It lacks an explicit when-not rule (e.g. versus resolve_maps_url or find_by_gebiet), so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_emergencyGet EmergencyARead-onlyInspect
WHAT: Returns only a URL to the www Notfall-Türöffnung page — not a dispatch. USE for emergency lockout context on maps when you only need the link. Prefer maps get_contact or compose_tel_mobile for phone CTAs here; prefer www MCP get_emergency for the full Notfall body. Optional locale selects the www URL language only. DOES NOT dispatch technicians or claim a van was sent.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| npm | No | www CLI package @ikeytz/mcp |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp |
| note | No | maps only points; Volltext/Preise/FAQ live on www |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| www_mcp | No | https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus |
| www_tool | No | Same tool name on www MCP that holds the real payload |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No | Locale the caller asked for; maps still returns locale=de |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only readOnlyHint in annotations, the description carries the extra burden and does add real context: no dispatch, no van claim, and it returns a URL only. Some of that is restated twice ('not a dispatch' vs 'DOES NOT dispatch technicians'), so it earns a 4 rather than a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The WHAT/USE/DOES NOT structure is front-loaded and scannable, and each clause mostly earns its place. Minor redundancy between 'not a dispatch' and 'DOES NOT dispatch technicians' keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one optional enum param, output schema present, readOnlyHint annotation), and the description covers what it returns, what it does not do, and which siblings to use instead. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the locale parameter already carries a detailed enum/default description, so the schema does the heavy lifting. The description only adds that locale selects the 'www URL language only', which is marginal value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: returns a URL to the www Notfall-Türöffnung page, explicitly narrowing scope to the link rather than an action or dispatch. It also distinguishes itself from siblings by noting it is not a dispatch and by naming alternate tools for alternate needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives when to use it ('emergency lockout context on maps when you only need the link') and names concrete alternatives with conditions: get_contact or compose_tel_mobile for phone CTAs, www get_emergency for the full Notfall body. 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_faqGet FaqARead-onlyInspect
Returns only a maps HTML hand-off to www /faq (optional id/q are for www symmetry, not answered here). Does not return the FAQ answer body. USE when the user asks one FAQ while on maps; use list_faq for the hub. Prefer www MCP get_faq({id}|{q}) for the real answer. NEXT: www get_faq.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | FAQ question search on www | |
| id | No | FAQ id on www | |
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| npm | No | www CLI package @ikeytz/mcp |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp |
| note | No | maps only points; Volltext/Preise/FAQ live on www |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| www_mcp | No | https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus |
| www_tool | No | Same tool name on www MCP that holds the real payload |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No | Locale the caller asked for; maps still returns locale=de |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint=true annotation, it discloses that the tool does not return the answer body and that id/q are present only for www symmetry and are not answered here — non-obvious behavior an agent would otherwise get wrong. It stops short of describing the hand-off payload's shape or any latency/rate behavior, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded with what is returned before the routing advice. Minor waste: 'NEXT: www get_faq' largely repeats the earlier 'Prefer www MCP get_faq({id}|{q})' instruction, and the telegraphic fragments slightly hurt readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the annotations cover the safety profile. The description supplies the missing conceptual framing (this is a stub/hand-off, not an answer provider) plus the next step, leaving little an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already carries the parameter docs. The description adds meaning beyond the schema by warning that the optional id/q parameters are inert on this endpoint ('not answered here'), which corrects the schema's misleading 'FAQ question search on www' wording.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific and unusual purpose: it returns only a maps HTML hand-off to www /faq and explicitly does not return the FAQ answer body. It also differentiates itself from siblings by naming list_faq (hub) and www MCP get_faq (real answer). The phrasing is somewhat garbled ('Returns only a maps HTML hand-off to www /faq'), but the scope is ascertainable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ('USE when the user asks one FAQ while on maps'), an explicit non-trigger alternative ('use list_faq for the hub'), and a preferred alternative with argument syntax ('Prefer www MCP get_faq({id}|{q}) for the real answer'). Routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_geo_apiGet Geo ApiARead-onlyInspect
WHAT: Public Geo-API URL pointers for one Einsatzgebiet. Ort JSON: https://maps.ikeytz.com/api/v1/embed/ort/{slug}. Grenze GeoJSON: …/grenze. Punkt GeoJSON: …/punkt. Sammel: /api/v1/embed/orte · /orte/grenzen · /orte/punkte. Lookup slug|plz|name. RETURNS geo_api, grenze_api, punkt_api, Sammel URLs + area card; MCP payload is not the polygon. USE to fetch/open public JSON/GeoJSON. NEXT: get_grenze for polygon inside MCP, or GET grenze_api / punkt_api.
| Name | Required | Description | Default |
|---|---|---|---|
| plz | No | German postcode (PLZ). Several Gebiete can share one PLZ (e.g. 71638). For single lookup first match wins; use find_by_plz for all matches. | |
| name | No | German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted. | |
| slug | No | URL slug of one of the 52 Einsatzgebiete, e.g. pattonville, bietigheim-bissingen, walheim, gruenbuehl. Matches https://maps.ikeytz.com/{slug}. Lookup order when combined with plz/name: slug first. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| lat | No | |
| lng | No | |
| plz | No | |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| name | No | |
| note | No | Public JSON/GeoJSON pointers; use get_grenze for polygon in MCP |
| slug | No | |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| geo_api | No | |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| orte_api | No | |
| embed_map | No | |
| punkt_api | No | |
| grenze_api | No | |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| orte_punkte_api | No | |
| orte_grenzen_api | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries the weight of explaining that the return is URL pointers rather than spatial data, and that the MCP payload is not the polygon. It also discloses the slug|plz|name lookup order. It stops short of noting auth/rate-limit traits of the public endpoints, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The WHAT/RETURNS/USE/NEXT structure front-loads the essential fact and is scannable, though the inline URL templates and Sammel path listings are somewhat dense and partly redundant with the return description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be spelled out, yet the description still clarifies the URL-vs-data distinction and next-step routing that the schema cannot convey. It is complete enough for the agent to call it correctly, with only minor gaps around the public endpoints' access characteristics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents plz, name, and slug in detail. The description's 'Lookup slug|plz|name' only echoes that ordering and adds no format or semantics beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and outcome: public Geo-API URL pointers for one Einsatzgebiet, and explicitly says the payload is not the polygon. It distinguishes itself from sibling get_grenze by routing polygon-in-MCP access there, so an agent can tell the two apart 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'USE to fetch/open public JSON/GeoJSON' defines the trigger, and 'NEXT: get_grenze for polygon inside MCP, or GET grenze_api / punkt_api' names the explicit alternatives and when to prefer each. Little 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_geo_officeGet Geo OfficeARead-onlyInspect
WHO/WHAT: Gewerbesitz (registered office) pin on maps.ikeytz.com/buero. walkIn=false always — mobile locksmith, not a shop counter. RETURNS street, postal, city, lat, lng, google_maps/icbm (same 'lat, lng' string), embed_map, geo_api (/api/v1/embed/office), note, walkIn, and einsatzgebiete (the same 52 name/slug/url links as the HTML list on /buero). USE for NAP/schema or Footer iframe. DOES NOT accept walk-in customers or bookings. The office is not a 53rd place. NEXT: get_contact, distance_to_office, get_business_identity, list_service_areas.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| lat | No | Office latitude |
| lng | No | Office longitude |
| city | No | City |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| icbm | No | ICBM string (same as google_maps) |
| note | No | Büro · kein Kundenverkehr vor Ort |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| postal | No | Postal code |
| street | No | Office street |
| walkIn | No | Always false — no shop counter |
| geo_api | No | https://maps.ikeytz.com/api/v1/embed/office |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| embed_map | No | https://maps.ikeytz.com/buero |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| google_maps | No | 'lat, lng' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| einsatzgebiete | No | Same 52 places as the /buero HTML list. Each item is name, slug, url. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only readOnlyHint=true in annotations, the description carries most of the behavioral burden and does it well: it discloses that walkIn is always false, that the entity is a mobile locksmith rather than a counter, and that bookings are not supported. It stops short of noting e.g. caching or staleness of the pin data, but the core behavioral profile is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with WHO/WHAT, RETURNS, USE, DOES NOT, NEXT labels, so an agent can extract the needed line quickly. Slightly verbose in enumerating return fields that the output schema already covers, and "The office is not a 53rd place" is an opaque aside.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A read-only single-parameter tool with an output schema is well covered: usage intent, exclusions, and routing are all present, so nothing critical is missing. The return-value listing is largely redundant given the output schema the agent already has.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – the single locale parameter is fully documented in the schema itself (German-only, ignored values, relation to www's list_locales). The description adds nothing about locale, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (Gewerbesitz / registered office pin at maps.ikeytz.com/buero) and a distinct scope, immediately separating it from sibling location tools by noting it is a mobile locksmith operation with walkIn=false always. An agent can distinguish this from distance_to_office or list_service_areas 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Contains explicit use cases ("USE for NAP/schema or Footer iframe"), explicit exclusions ("DOES NOT accept walk-in customers or bookings"), and a NEXT list routing the agent to get_contact, distance_to_office, get_business_identity, and list_service_areas for the adjacent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_geschichteGet GeschichteARead-onlyInspect
WHAT: Geschichte (history) text for one Einsatzgebiet Visitenkarte. Lookup slug|plz|name. RETURNS slug, name, geschichte. USE for place history prose on the map page. NEXT: get_lage, get_ai_page.
| Name | Required | Description | Default |
|---|---|---|---|
| plz | No | German postcode (PLZ). Several Gebiete can share one PLZ (e.g. 71638). For single lookup first match wins; use find_by_plz for all matches. | |
| name | No | German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted. | |
| slug | No | URL slug of one of the 52 Einsatzgebiete, e.g. pattonville, bietigheim-bissingen, walheim, gruenbuehl. Matches https://maps.ikeytz.com/{slug}. Lookup order when combined with plz/name: slug first. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| name | No | |
| slug | No | |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| geschichte | No | Geschichte prose (may be empty) |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the safety profile is already covered, lowering the bar. The description adds the return field set (slug, name, geschichte) which is useful, but nothing about fallback behavior, error handling when no match is found, or how single-lookup first-match behaves (though schema covers some of this). Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Uses a WHAT/RETURNS/USE/NEXT structure that is front-loaded and scannable. Every clause is functional and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained in depth; the description still summarizes them. With readOnlyHint annotations covering safety, 100% schema coverage, and explicit next-step routing, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions including lookup order (slug first), e.g. values, and multi-match behavior. The description only names the lookup keys ('slug|plz|name') without adding meaning beyond the schema. Baseline 3 is correct when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (lookup/retrieve) and resource (Geschichte text for one Einsatzgebiet Visitenkarte), with the lookup key stated explicitly. Clearly distinguishable from siblings like get_lage and get_ai_page, which it explicitly names as next steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the use case ('USE for place history prose on the map page') and points to next tools (get_lage, get_ai_page). It doesn't state when NOT to use it or contrast with alternatives like get_wissen_entry or get_ai_page for prose content, which would be a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_grenzeGet GrenzeARead-onlyInspect
WHAT: OSM Gebietspolygon for one Einsatzgebiet as GeoJSON FeatureCollection inside the MCP result. Same geometry as public GET https://maps.ikeytz.com/api/v1/embed/ort/{slug}/grenze (application/geo+json). Lookup slug|plz|name. RETURNS hasPolygon, polygon, point, osmRelationId/osmWayId, via, grenze_api, punkt_api. USE when the agent needs the boundary geometry. DOES NOT replace get_geo_api (URL pointers) or get_grenze_koordinaten (full embed blob). NEXT: get_grenze_koordinaten, get_lage, get_embed_map.
| Name | Required | Description | Default |
|---|---|---|---|
| plz | No | German postcode (PLZ). Several Gebiete can share one PLZ (e.g. 71638). For single lookup first match wins; use find_by_plz for all matches. | |
| name | No | German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted. | |
| slug | No | URL slug of one of the 52 Einsatzgebiete, e.g. pattonville, bietigheim-bissingen, walheim, gruenbuehl. Matches https://maps.ikeytz.com/{slug}. Lookup order when combined with plz/name: slug first. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| lat | No | |
| lng | No | |
| plz | No | |
| via | No | Fetch path hint |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| name | No | |
| slug | No | |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| point | No | Point feature or null |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| geo_api | No | |
| polygon | No | GeoJSON FeatureCollection (may be empty) |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| osmWayId | No | OSM way id if any |
| hasPolygon | No | true if polygon.features length > 0 |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| osmRelationId | No | OSM relation id if any |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries most of the behavioral burden. It adds that the geometry is returned inline inside the MCP result and enumerates the response fields (hasPolygon, polygon, point, osmRelationId/osmWayId, via, grenze_api, punkt_api), which tells the agent how this differs from pointer-returning siblings. It omits auth/permission needs or rate limits, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Labeled WHAT/RETURNS/USE/NEXT structure is front-loaded and scannable, with each sentence carrying distinct information (purpose, output fields, usage, alternatives, follow-ups). No filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained in prose, and the description still summarizes the shape. Combined with the explicit alternative tools and next steps, an agent has everything needed to select and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents plz, name and slug including lookup precedence and examples. The description only restates 'Lookup slug|plz|name', adding no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: retrieves the OSM Gebietspolygon for one Einsatzgebiet as a GeoJSON FeatureCollection. It also explicitly names the sibling it is not (get_geo_api returns URL pointers, get_grenze_koordinaten returns the full embed blob), so an agent can distinguish it without opening other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'USE when the agent needs the boundary geometry' gives the triggering condition, and 'DOES NOT replace get_geo_api ... or get_grenze_koordinaten' supplies explicit exclusions with the reason for each. The NEXT line even suggests follow-on 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.
get_grenze_koordinatenGet Grenze KoordinatenARead-onlyInspect
WHAT: Full public Ort-Embed JSON for one Einsatzgebiet — same fields as GET https://maps.ikeytz.com/api/v1/embed/ort/{slug} (part=full): phone/NAP, style, point, featureCollection (Polygon+Punkt), OSM ids, embed paths (ort/grenze/punkt), iframe. Separate GeoJSON also at …/grenze and …/punkt; Sammel /api/v1/embed/orte/grenzen and /orte/punkte. No separate polygon/points keys (L-16). Lookup slug|plz|name. USE when the agent needs coordinates+boundary+NAP in one MCP call. DOES NOT change the HTTP embed API. DOES NOT replace slim get_grenze (polygon-only) or get_geo_api (URL pointers). NEXT: get_grenze, get_contact, get_embed_map.
| Name | Required | Description | Default |
|---|---|---|---|
| plz | No | German postcode (PLZ). Several Gebiete can share one PLZ (e.g. 71638). For single lookup first match wins; use find_by_plz for all matches. | |
| name | No | German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted. | |
| slug | No | URL slug of one of the 52 Einsatzgebiete, e.g. pattonville, bietigheim-bissingen, walheim, gruenbuehl. Matches https://maps.ikeytz.com/{slug}. Lookup order when combined with plz/name: slug first. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| lat | No | |
| lng | No | |
| plz | No | |
| via | No | |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| href | No | www keyword page |
| icbm | No | |
| name | No | |
| part | No | Always full |
| slug | No | |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| color | No | |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| phone | No | NAP block (mobile, landline, fax, email, address, …) |
| point | No | |
| store | No | |
| style | No | MapLibre-ish style colors |
| gruppe | No | |
| iframe | No | |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| points | No | GeoJSON FeatureCollection |
| polygon | No | GeoJSON FeatureCollection (polygons only) |
| purpose | No | |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| osmWayId | No | |
| hasPolygon | No | |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| countPoints | No | |
| embedPublic | No | Public relative embed path /api/v1/embed/ort/{slug} |
| geoPosition | No | lat;lng |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| countPolygons | No | |
| osmRelationId | No | |
| hasPolygonKnown | No | |
| featureCollection | No | Polygon + point FeatureCollection |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries most of the load and does so reasonably: it discloses the exact returned field set, notes that separate GeoJSON exists at …/grenze and …/punkt, and points to Sammel endpoints. It confirms the read-only nature implicitly. It does not mention pagination, error behavior for unmatched lookups, or rate limits, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The WHAT/USE/DOES NOT/NEXT scaffolding is a helpful structure, but the content is a wall of comma-chained fragments packed with internal references (L-16, "slim", NAC, Sammel) and multiple HTTP URLs. The key action is not front-loaded — the reader must parse the embed endpoint and field list before reaching the actual when-to-use sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, yet the description still enumerates payload fields, which makes it largely complete for a 3-param, zero-required lookup tool. Coverage of the three lookup modes, precedence, and sibling routing is present. Only edge behavior (no match, ambiguous name matches) is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter's description already covers lookup semantics, precedence (slug first), and PLZ collisions. The description adds only the compressed "Lookup slug|plz|name" restatement, which duplicates rather than extends the schema. Baseline 3 is correct when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states that the tool returns the full public Ort-Embed JSON for one Einsatzgebiet, enumerating concrete payload fields (phone/NAP, style, point, featureCollection, OSM ids, embed paths, iframe). It also distinguishes itself from get_grenze (polygon-only) and get_geo_api (URL pointers). It falls short of a 5 because the name implies coordinates while the payload is a full embed object, and the purpose statement is wrapped around HTTP-path and internal-code jargon (L-16) that muddies the core claim.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"USE when the agent needs coordinates+boundary+NAP in one MCP call" gives a clear trigger, and "DOES NOT replace slim get_grenze (polygon-only) or get_geo_api (URL pointers)" gives explicit exclusions with named alternatives. It stops short of 5 because the trailing "NEXT: get_grenze, get_contact, get_embed_map" list is unexplained and leaves the reader inferring why get_contact is a follow-up.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hubGet HubARead-onlyInspect
WHAT: maps hub card https://maps.ikeytz.com/ — title/h1 + 52 Gebiet links (not a single Visitenkarte). Call with {}. USE as the maps landing overview. DOES NOT include www prices. NEXT: get_service_area, list_service_areas.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| h1 | No | Hub H1 |
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| count | No | 52 |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| items | No | slug/name/embed_map rows |
| title | No | Hub title |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile, and the description adds real behavioral context: the payload shape (title/h1 + 52 Gebiet links), the scope boundary (no www prices), and the required empty call. The output schema carries the return structure, so nothing material is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Telegraphic WHAT/USE/NEXT structure is front-loaded and every fragment earns its place, but the keyword-caps style and the redundant "Call with {}" (already in the schema) cost a point against a clean 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-arg, read-only hub with a rich output schema and annotation coverage, the description supplies the entry-point role, content summary, an exclusion, and successor tools. Complete enough to invoke correctly, with only the sibling-routing comparison left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4; the schema itself documents the empty-object contract, and "Call with {}" reinforces it without adding new meaning. Nothing further is needed for a no-arg tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (maps hub card at a given URL) and its exact contents — title/h1 plus 52 Gebiet links — and explicitly distinguishes it from a single Visitenkarte. An agent can tell this apart from sibling list/find tools from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"USE as the maps landing overview" gives a clear entry-point context, and "NEXT: get_service_area, list_service_areas" routes the agent onward. "DOES NOT include www prices" adds a useful exclusion, but it never states when a find_by_* tool should be preferred over this hub.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_impressumGet ImpressumARead-onlyInspect
WHAT: Impressum/Kontakt text from maps /llms-impressum-kontakt.txt. Optional offset/limit. USE for NAP/legal imprint on maps. NEXT: get_contact, get_business_identity; www /impressum for HTML.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of lines to return after offset. Omit or null = if remaining payload ≤~30KB return all remaining lines; if larger, return first ~30KB window + nextOffset (O9). Explicit limit keeps 1..10000 line window (MCP caps unchanged — not forced to 30KB). Meta also as trailing # MCP-META lines in summary. | |
| offset | No | 0-based index into a list or discovery file lines (split on \n). 0 = first. Omit = 0. Combine with limit to page. Use nextOffset / offset+limit from a previous result when present. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| doc | No | |
| body | No | |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | www /impressum |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| which | No | |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes safe read behavior. The description adds useful context beyond annotations: the source file path (/llms-impressum-kontakt.txt), the map-specific imprint purpose, and the presence of optional offset/limit paging. It does not discuss auth or return shape, but those are covered by annotations/output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely compact and front-loaded using WHAT/USE/NEXT labels. Every clause contributes routing information, with no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only static-text retrieval tool with full schema coverage, readOnlyHint annotation, and an output schema, the description supplies the needed source, purpose, and alternative endpoints. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so limit and offset are fully documented in the schema. The description only notes 'Optional offset/limit' and adds no syntax or format detail beyond what structured fields already provide. Baseline 3 is appropriate when the schema carries parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Impressum/Kontakt text from maps /llms-impressum-kontakt.txt.' It distinguishes the tool from nearby siblings by naming get_contact, get_business_identity, and the www /impressum HTML variant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage context ('USE for NAP/legal imprint on maps') and names alternatives ('NEXT: get_contact, get_business_identity; www /impressum for HTML'), which tells an agent when to select this tool versus adjacent ones.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_invoice_line_itemsGet Invoice Line ItemsARead-onlyInspect
WHAT: www pointer only — invoice line items are computed on www MCP. maps accepts situationKey/whenKey/breakdown for symmetry but returns html link to /preise, not totals. DOES NOT return totalEur. NEXT: @ikeytz/mcp get_invoice_line_items; get_ort_datetime here for Berlin clock/whenKey.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
| whenKey | No | day|night|now — used on www; maps only points. | |
| breakdown | No | www flag; ignored for maps pointer payload. | |
| situationKey | Yes | Required for www. Situation id (opening_slam, opening_locked, pkg_key_*, cylinder_only, cylinder_mount, aliases). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| npm | No | www CLI package @ikeytz/mcp |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp |
| note | No | maps only points; Volltext/Preise/FAQ live on www |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| www_mcp | No | https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus |
| www_tool | No | Same tool name on www MCP that holds the real payload |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No | Locale the caller asked for; maps still returns locale=de |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already flags a safe read, and the description adds real value beyond it: it discloses that the tool does NOT return totalEur and instead returns an html link, and that line items are computed elsewhere. This candid limitation disclosure is exactly the behavioral context an agent needs, though it omits details like response shape or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loads the WHAT, then the DOES NOT, then NEXT. The abbreviated, telegraphic style is dense but roughly earns its words; some phrasing ('maps accepts … for symmetry') is a little cryptic but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be specified, yet the description still usefully clarifies what is NOT returned and where to get it. Combined with the routing hints, an agent has enough to call it correctly, though a clearer statement of the actual pointer payload would complete it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description nonetheless adds interpretive value by explaining that situationKey/whenKey/breakdown are accepted 'for symmetry' on maps and do not drive computation. This clarifies that these params are effectively inert for this endpoint, which the schema alone does not make obvious.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this is a 'www pointer only' that returns an html link to /preise rather than computed line items, directly countering the misleading name/title. It distinguishes itself from the www sibling that actually computes line items. It is specific about verb, resource, and scope, though the telegraphic phrasing makes it slightly harder to parse than ideal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'NEXT: @ikeytz/mcp get_invoice_line_items' line explicitly routes the agent to the www tool that actually returns totals, and it names get_ort_datetime for the Berlin clock/whenKey use case. The condition selecting the www alternative is stated ('invoice line items are computed on www MCP'). It stops short of an explicit 'use this when…' statement for the pointer itself, so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lageGet LageARead-onlyInspect
WHAT: Returns Lage (location description) prose for one Einsatzgebiet Visitenkarte. Lookup slug|plz|name. RETURNS slug, name, lage. USE for human-readable geography prose. Prefer get_geschichte for place history; prefer get_service_area for the full point card/embed. DOES NOT return polygons.
| Name | Required | Description | Default |
|---|---|---|---|
| plz | No | German postcode (PLZ). Several Gebiete can share one PLZ (e.g. 71638). For single lookup first match wins; use find_by_plz for all matches. | |
| name | No | German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted. | |
| slug | No | URL slug of one of the 52 Einsatzgebiete, e.g. pattonville, bietigheim-bissingen, walheim, gruenbuehl. Matches https://maps.ikeytz.com/{slug}. Lookup order when combined with plz/name: slug first. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| lage | No | Lage prose (may be empty) |
| name | No | |
| slug | No | |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered and the description's marginal contribution is the negative disclosure 'DOES NOT return polygons' plus the promised return fields (slug, name, lage). It does not describe empty-result/error behavior or rate limits, which would be the remaining behavioral gaps for a lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Capsule format (WHAT / RETURNS / USE / DOES NOT) is maximally front-loaded: the one-line WHAT comes first, routing second, exclusions last. Every clause carries new information; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't enumerate return values, and it correctly focuses on lookup keys, routing, and scope limits. It is nearly complete, missing only what an agent should expect on no-match or when multiple Gebiete share a PLZ, which is left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains each of slug/plz/name, including the 'slug first' lookup order and the find_by_plz escalation. The description's 'Lookup slug|plz|name' restates rather than extends that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns Lage (location description) prose for one Einsatzgebiet Visitenkarte') and pins the lookup keys. It goes further by naming what it does not do ('DOES NOT return polygons') and naming the siblings it is not (get_geschichte, get_service_area), so an agent can separate it from adjacent tools immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The USE line states the positive condition ('human-readable geography prose') and then gives explicit routing rules: prefer get_geschichte for place history, prefer get_service_area for the full point card/embed. That is a when-to-use plus two named alternatives, which is the strongest form of guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_legalGet LegalCRead-onlyInspect
WHAT: Legal doc router. doc enum: urheberrecht|copyright|impressum (maps text via discovery) or agb|nutzungsbedingungen|datenschutz|widerruf (www URL pointer only). Optional offset/limit for maps text. USE for citations. DOES NOT serve www legal HTML body on maps. NEXT: get_urheberrecht / get_impressum shortcuts; www for AGB body.
| Name | Required | Description | Default |
|---|---|---|---|
| doc | Yes | Required. maps corpus: urheberrecht|copyright|impressum. www links only: agb|nutzungsbedingungen|datenschutz|widerruf. | |
| limit | No | Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius. | |
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
| offset | No | 0-based index into a list or discovery file lines (split on \n). 0 = first. Omit = 0. Combine with limit to page. Use nextOffset / offset+limit from a previous result when present. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| doc | No | Resolved doc id |
| body | No | maps text window when applicable |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | www HTML URL when applicable |
| note | No | Host split note |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| which | No | Discovery id for maps text docs |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true, the safety profile is already covered. The description adds behavioral nuance: maps corpus returns text via discovery for some docs, while www docs return only a URL pointer and not the HTML body. That's useful beyond annotations, but the phrasing is opaque and could mislead about return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It's dense and telegraphic — 'WHAT', 'USE', 'DOES NOT', 'NEXT' — packing multiple concepts into fragments that require decoding. Sentences don't flow and key information (what actually gets returned) is obscured. It's short in character count but not clear or front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a router with 4 params, one required enum, and an output schema, the description covers the main split between maps text and www URL pointer. But it doesn't explain what the output actually contains or when the offset/limit pagination applies. Given the tool is a dispatcher, the routing logic should be clearer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameter semantics are already well documented. The description repeats the doc enum grouping but doesn't add format examples or clarify offset/limit beyond what the schema states. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description calls itself a 'Legal doc router' and explains the doc enum mapping, which clarifies purpose, but the actual operation — what is returned, whether it's text, a URL, or a pointer — is muddled by jargon like 'maps text via discovery' and 'www URL pointer only'. Sibling tools like get_impressum and get_urheberrecht suggest this is a generic legal doc fetch, yet the description doesn't clearly state it returns citations or content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says 'USE for citations' and names NEXT shortcuts (get_urheberrecht / get_impressum), implying when to prefer those, but it doesn't specify when to use get_legal versus the many specific sibling tools. The 'NEXT' is a stack trace of intended follow-ups, not a clean when-to-use rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_linksGet LinksARead-onlyInspect
WHAT: Returns the maps machine bookmark set of discovery URLs (hub, mcp, server-card, agent-skills, llms, registry search, npm @ikeytz/maps-mcp). USE to open known well-known endpoints by URL. Prefer get_discovery when you need file contents or line windows; prefer get_llms_txt for the primary llms index body. DOES NOT fetch discovery file bodies.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| note | No | |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| items | No | Named absolute URLs |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds a genuine behavioral boundary beyond that ('DOES NOT fetch discovery file bodies'), clarifying this is a metadata/bookmark lookup rather than a content fetch. It stops short of describing response shape or pagination, but the output schema covers returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded with WHAT/USE/DOES-NOT scaffolding; every clause carries routing or boundary information. No filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only URL-list tool with a full output schema and 100% schema coverage on the one parameter, the description supplies what structured fields cannot: the contents list, the alternatives, and the non-fetching boundary. Nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single locale enum is thoroughly documented in the schema (including the German-only constraint and the www multi-locale alternative). The description adds nothing about the locale parameter, so the baseline 3 applies since the schema fully carries this burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns the maps machine bookmark set of discovery URLs') and enumerates the concrete contents (hub, mcp, server-card, llms, etc.). It explicitly differentiates itself from the nearest siblings get_discovery and get_llms_txt, so an agent can route 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'USE to open known well-known endpoints by URL' gives the triggering condition, and it names two alternatives with the exact case for each (get_discovery for file contents/line windows, get_llms_txt for the llms index body). The closing 'DOES NOT fetch discovery file bodies' adds an explicit exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_llms_mcp_serverGet Llms Mcp ServerARead-onlyInspect
WHAT: Alias of get_discovery(which=llms-mcp-server) — machine/catalog text for the maps MCP server. Optional offset/limit. USE when an agent needs the server-side llms MCP catalog. NEXT: get_llms_mcp_web, get_links.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of lines to return after offset. Omit or null = if remaining payload ≤~30KB return all remaining lines; if larger, return first ~30KB window + nextOffset (O9). Explicit limit keeps 1..10000 line window (MCP caps unchanged — not forced to 30KB). Meta also as trailing # MCP-META lines in summary. | |
| offset | No | 0-based index into a list or discovery file lines (split on \n). 0 = first. Omit = 0. Combine with limit to page. Use nextOffset / offset+limit from a previous result when present. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| path | No | Public relative path of the file on maps |
| text | No | UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer. |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| limit | No | Applied line limit, or null if omitted |
| which | No | Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …). |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| offset | No | Applied 0-based line offset |
| missing | No | true if the discovery file was not found on disk |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| totalUrls | No | http(s) lines in the full file |
| truncated | No | true if offset+limit left more lines. Also in trailing # MCP-META. |
| nextOffset | No | Pass as next offset when truncated; else null. Also in # MCP-META. |
| totalBytes | No | Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META. |
| totalChars | No | Full discovery file character length before offset/limit. Also in # MCP-META. |
| totalLines | No | Alias of total_lines |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| total_lines | No | Line count of the full file |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| returnedUrls | No | http(s) lines in this window |
| bytesReturned | No | UTF-8 length of text window |
| returnedLines | No | Lines in this window (before # MCP-META) |
| fetchTruncated | No | true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile, and the schema plus output schema cover pagination mechanics. The description still adds real behavioral context by revealing that this tool is an alias returning identical content to get_discovery, which an agent would otherwise have to discover empirically.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three labeled clauses (WHAT/USE/NEXT) in roughly two lines, front-loading purpose before usage and follow-ups. No sentence is redundant with another.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a leaf read tool with annotations, a fully documented 2-param schema, and an output schema, the description supplies purpose, selection condition, and next steps. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters carry detailed semantics (window sizing, nextOffset chaining, the ~30KB default behavior). The description only echoes 'Optional offset/limit', adding nothing beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The WHAT clause names the concrete resource (llms-mcp-server catalog text) and even discloses the underlying call it aliases, get_discovery(which=llms-mcp-server). It signals a sibling (get_llms_mcp_web) but never states how the server catalog differs from the web variant, so differentiation is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'USE when an agent needs the server-side llms MCP catalog' gives a clear selection condition, and the NEXT line points at get_llms_mcp_web and get_links as follow-ups. There is no explicit when-not guidance, but the intended trigger is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_llms_mcp_webGet Llms Mcp WebARead-onlyInspect
WHAT: Returns the web/UI-oriented MCP catalog text on maps (alias of get_discovery(which=llms-mcp-web)). Optional offset/limit. USE for browser/agent web discovery copy. Prefer get_llms_mcp_server for the server-side catalog; prefer get_llms_txt for the primary maps index. DOES NOT replace the live /mcp tools/list.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of lines to return after offset. Omit or null = if remaining payload ≤~30KB return all remaining lines; if larger, return first ~30KB window + nextOffset (O9). Explicit limit keeps 1..10000 line window (MCP caps unchanged — not forced to 30KB). Meta also as trailing # MCP-META lines in summary. | |
| offset | No | 0-based index into a list or discovery file lines (split on \n). 0 = first. Omit = 0. Combine with limit to page. Use nextOffset / offset+limit from a previous result when present. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| path | No | Public relative path of the file on maps |
| text | No | UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer. |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| limit | No | Applied line limit, or null if omitted |
| which | No | Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …). |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| offset | No | Applied 0-based line offset |
| missing | No | true if the discovery file was not found on disk |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| totalUrls | No | http(s) lines in the full file |
| truncated | No | true if offset+limit left more lines. Also in trailing # MCP-META. |
| nextOffset | No | Pass as next offset when truncated; else null. Also in # MCP-META. |
| totalBytes | No | Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META. |
| totalChars | No | Full discovery file character length before offset/limit. Also in # MCP-META. |
| totalLines | No | Alias of total_lines |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| total_lines | No | Line count of the full file |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| returnedUrls | No | http(s) lines in this window |
| bytesReturned | No | UTF-8 length of text window |
| returnedLines | No | Lines in this window (before # MCP-META) |
| fetchTruncated | No | true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this is a safe read, so the description need only add context. It does: it discloses the aliasing relationship to get_discovery and, importantly, that this is a static copy rather than the live tools/list. Missing pagination/return-format behavior, but the alias and non-live caveats are genuine value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with WHAT/USE labels and a clear negative boundary, with little wasted text. Slightly dense with internal jargon ('alias of get_discovery(which=llms-mcp-web)'), but every clause carries routing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. Against a two-param, zero-required, read-only tool, the description covers purpose, alternatives, and the key caveat that it is not the live endpoint. Adequate and nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema itself documents offset/limit semantics in detail (window sizing, nextOffset, 1..10000 caps). The description only says 'Optional offset/limit', adding essentially nothing beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Returns the web/UI-oriented MCP catalog text') and pins it as an alias of get_discovery(which=llms-mcp-web). Explicitly distinguishes itself from get_llms_mcp_server and get_llms_txt, so an agent can route correctly without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives both when-to-use ('USE for browser/agent web discovery copy') and when-to-prefer-alternatives ('Prefer get_llms_mcp_server...; prefer get_llms_txt...'), plus a negative boundary ('DOES NOT replace the live /mcp tools/list'). This is explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_llms_txtGet Llms TxtARead-onlyInspect
WHAT: Alias get_discovery(which=llms) — maps /llms.txt 1:1 with optional offset/limit. USE as the primary maps machine index. NEXT: get_ai_txt, get_sitemap_txt, get_links.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of lines to return after offset. Omit or null = if remaining payload ≤~30KB return all remaining lines; if larger, return first ~30KB window + nextOffset (O9). Explicit limit keeps 1..10000 line window (MCP caps unchanged — not forced to 30KB). Meta also as trailing # MCP-META lines in summary. | |
| offset | No | 0-based index into a list or discovery file lines (split on \n). 0 = first. Omit = 0. Combine with limit to page. Use nextOffset / offset+limit from a previous result when present. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| path | No | Public relative path of the file on maps |
| text | No | UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer. |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| limit | No | Applied line limit, or null if omitted |
| which | No | Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …). |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| offset | No | Applied 0-based line offset |
| missing | No | true if the discovery file was not found on disk |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| totalUrls | No | http(s) lines in the full file |
| truncated | No | true if offset+limit left more lines. Also in trailing # MCP-META. |
| nextOffset | No | Pass as next offset when truncated; else null. Also in # MCP-META. |
| totalBytes | No | Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META. |
| totalChars | No | Full discovery file character length before offset/limit. Also in # MCP-META. |
| totalLines | No | Alias of total_lines |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| total_lines | No | Line count of the full file |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| returnedUrls | No | http(s) lines in this window |
| bytesReturned | No | UTF-8 length of text window |
| returnedLines | No | Lines in this window (before # MCP-META) |
| fetchTruncated | No | true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already communicates the safety profile of this read. The description adds that the output is a 1:1 map of /llms.txt (no transformation), which is useful fidelity context, but says nothing about size limits, paging behavior, or rate limits beyond what the schema's offset/limit descriptions already cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very compact and front-loaded: the identity/alias is stated first, then usage, then related calls. The 'NEXT:' list is the weakest element — it is short but its intent (follow-up vs alternative) is unclear, so it earns slightly less than a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is not required, and the annotations cover the safety profile. What remains — purpose, alias relationship, and basic routing — is covered, though the ordering/next-step semantics are left slightly underspecified for a tool that sits in a family of related discovery endpoints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the offset/limit semantics — including the ~30KB auto-window and nextOffset behavior — are fully documented in the schema. The description only restates 'optional offset/limit', adding no meaning beyond it; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the concrete resource (/llms.txt) and its verb (get/map 1:1), and clarifies the relationship to a sibling by stating it is an alias for get_discovery(which=llms). It also positions itself against nearby tools (get_ai_txt, get_sitemap_txt, get_links) as the 'primary maps machine index'. The phrasing is telegraphic, but an agent can tell what is returned and how it differs from the other *_txt tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'USE as the primary maps machine index' gives explicit selection guidance, which is more than most definitions provide. However, 'NEXT: get_ai_txt, get_sitemap_txt, get_links' is ambiguous — it does not say whether those are alternatives to prefer in some cases or follow-up calls, and no when-not-to-use condition is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nutzungsbedingungenGet NutzungsbedingungenARead-onlyInspect
Returns only a maps HTML hand-off to www Nutzungsbedingungen. Does not return the terms body. USE when the user asks for Nutzungsbedingungen on maps; prefer www MCP for the corpus. DOES NOT invent clauses. NEXT: www get_nutzungsbedingungen / get_legal.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| npm | No | www CLI package @ikeytz/mcp |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp |
| note | No | maps only points; Volltext/Preise/FAQ live on www |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| www_mcp | No | https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus |
| www_tool | No | Same tool name on www MCP that holds the real payload |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No | Locale the caller asked for; maps still returns locale=de |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered. The description adds genuinely useful behavior beyond the annotations: the return is a hand-off, not the terms text, and 'DOES NOT invent clauses' warns against fabricating content. It does not discuss failure modes or hand-off resolution, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with scope, then usage, then next steps; nothing is wasted. The telegraphic ALL-CAPS USE/DOES NOT/NEXT markers read as machine-oriented cues rather than prose, which costs a little polish but not clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description wisely states only the one thing the output schema can't convey to a caller — that the terms body is not included. For a zero-param, read-only hand-off tool, this is nearly complete; only failure/fallback behavior is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema-plus-description baseline is 4. There is nothing to add — the empty schema and the no-arguments note fully cover the parameter surface.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it returns 'a maps HTML hand-off to www Nutzungsbedingungen' and explicitly adds the negative scope 'Does not return the terms body.' That negative framing is what separates it from content-returning siblings like get_agb or get_legal. Slightly jargon-y ('hand-off') but the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'USE when the user asks for Nutzungsbedingungen on maps; prefer www MCP for the corpus,' naming both the trigger and the preferred alternative. It also chains forward with 'NEXT: www get_nutzungsbedingungen / get_legal,' so the agent knows what to call when this hand-off is not what it wants.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ort_datetimeGet Ort DatetimeARead-onlyInspect
WHAT: Europe/Berlin wall clock to the second (stand YYYY-MM-DD HH:MM:SS CEST|CET) for pricing whenKey context. Optional slug|plz|name like get_service_area; omit = all 52 places with the same clock. RETURNS timezone, stand, iso, unix, date, time, tz, and whenKey day|night for www invoicing. USE before quoting via www get_invoice_line_items. DOES NOT return euro amounts (no price matrix on maps). NEXT: www @ikeytz/mcp get_invoice_line_items({situationKey, whenKey}) or get_prices.
| Name | Required | Description | Default |
|---|---|---|---|
| plz | No | German postcode (PLZ). Several Gebiete can share one PLZ (e.g. 71638). For single lookup first match wins; use find_by_plz for all matches. | |
| name | No | German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted. | |
| slug | No | URL slug of one of the 52 Einsatzgebiete, e.g. pattonville, bietigheim-bissingen, walheim, gruenbuehl. Matches https://maps.ikeytz.com/{slug}. Lookup order when combined with plz/name: slug first. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| tz | No | Abbreviation |
| iso | No | ISO-8601 with Berlin offset |
| plz | No | PLZ when resolved |
| date | No | YYYY-MM-DD in Berlin |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| name | No | Place name when resolved |
| slug | No | Present when a place was resolved |
| time | No | HH:MM:SS in Berlin (24h) |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| unix | No | Unix timestamp seconds |
| count | No | 52 when listing all places |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| items | No | All 52 slug/name/plz + clock when called without lookup |
| stand | No | Human clock 'YYYY-MM-DD HH:MM:SS CEST|CET' Europe/Berlin to the second |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| whenKey | No | Price bucket for www get_invoice_line_items. day = Mo–Fr 08:00–17:59 Berlin except BW holidays; else night. Pass to www MCP — maps has no euro matrix. |
| timezone | No | Always Europe/Berlin |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description usefully adds behavior: the default scope when all params are omitted ('all 52 places with the same clock') and a negative capability statement ('DOES NOT return euro amounts'). It also enumerates the returned fields, going beyond the read-only hint. It does not discuss error behavior or rate limits, but an output schema exists to carry the return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with WHAT/RETURNS/USE/DOES NOT/NEXT labels, so the structure is scannable and nothing is padded. However, the telegraphic fragments and internal jargon ('whenKey', 'www invoicing', '@ikeytz/mcp') trade clarity for brevity, so conciseness comes at a readability cost rather than being cleanly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with three optional params and an existing output schema, the description supplies the essentials: purpose, default scope, negative boundary, and next-step tools. An agent can call it correctly without opening the schema. It stops short of explaining how 'stand'/'whenKey' values should be consumed downstream, leaving a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100%, so the baseline is 3; the description adds genuine value by explaining the no-parameter default ('omit = all 52 places with the same clock') and by relating the three optional inputs to the sibling get_service_area. It correctly mirrors the slug/plz/name optionality rather than contradicting it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: it returns the Europe/Berlin wall-clock time to the second for a location ('Ort'), including the exact output format and the fields returned. It partially differentiates from siblings by pointing to get_service_area for the same slug/plz/name inputs and to get_invoice_line_items/get_prices as the follow-on tools. The phrasing is telegraphic ('for pricing whenKey context'), which slightly muddies an otherwise clear purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit sequencing ('USE before quoting via www get_invoice_line_items') and an explicit exclusion ('DOES NOT return euro amounts'), plus NEXT-step alternatives (get_invoice_line_items or get_prices). That covers when-to-use, when-not, and alternatives, but the routing between the two named alternatives is not distinguished, and the internal shorthand reduces confidence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_page_summaryGet Page SummaryARead-onlyInspect
WHAT: Short summary for a maps Gebiet (path/slug → area card) or www pointer for non-maps paths. path required (or slug). DOCS/API: https://maps.ikeytz.com/{slug} (HTML Visitenkarte) and https://maps.ikeytz.com/api/v1/embed/ort/{slug} (public embed JSON). USE to decide maps vs www. NEXT: get_ai_page, get_service_area.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Required. maps path (/pattonville) or www path for pointer fallback. | |
| slug | No | Alias for path/slug | |
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| lat | No | |
| lng | No | |
| plz | No | |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | When www pointer |
| name | No | |
| note | No | |
| slug | No | |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| embed_map | No | |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description usefully adds the underlying data sources: the HTML Visitenkarte at maps.ikeytz.com/{slug} and the public embed JSON endpoint. It also discloses that maps is German-only. It does not mention auth or rate limits, but the source disclosure goes well beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the WHAT clause, with labeled WHAT/USE/NEXT/DOCS-API sections that are easy to scan. The dense telegraphic style and unexplained jargon slightly reduce readability, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and readOnlyHint covers the safety profile. Combined with the stated next-step tools and data-source endpoints, the description is adequate for a read-only summary tool, leaving only the exact summary contents underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (path, slug, locale enum) are already fully documented in the schema. The description only restates 'path required (or slug)' and adds no syntax or format detail beyond the structured fields, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The WHAT clause gives a specific verb+resource: a short summary/pointer for a maps Gebiet (path/slug → area card) versus a www pointer for non-maps paths. It is more than a name restatement, though jargon like 'area card' and 'www pointer' is domain-specific and takes effort to parse. It partially differentiates from siblings by naming get_ai_page and get_service_area as follow-ups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'USE to decide maps vs www' states a clear reason to call the tool, and 'NEXT: get_ai_page, get_service_area' gives sequencing. However there is no explicit when-not-to-use or comparison to alternatives like get_embed_map, get_lage, or resolve_maps_url, so routing remains partly inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_partner_infoGet Partner InfoARead-onlyInspect
Returns only a maps HTML hand-off to www Partner-werden (/partner-werden). Does not return partnerEmail corpus or submit the partner form. USE when the user asks about becoming a partner while on maps. Prefer www MCP get_partner_info if already connected to www. formSubmit=false — never claim a form was sent. NEXT: www get_partner_info; or maps compose_mailto after opening www.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| npm | No | www CLI package @ikeytz/mcp |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp |
| note | No | maps only points; Volltext/Preise/FAQ live on www |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| www_mcp | No | https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus |
| www_tool | No | Same tool name on www MCP that holds the real payload |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No | Locale the caller asked for; maps still returns locale=de |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already declaring the safety profile, the description adds genuinely new behavioral facts: the form is not submitted, formSubmit=false so the agent must never claim a form was sent, and partnerEmail data is not returned. That is meaningful beyond the annotation, though it doesn't cover response format or redirect behavior in depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the return scope, then the USE trigger, the preferred alternative, and the formSubmit guardrail. Dense and mostly earned, though it reads as a compressed run-on with several embedded clauses.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained, and the description covers trigger, alternative, side-effect guardrail, and follow-up. It is complete for its complexity, with only minor ambiguity about the actual HTML payload.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single locale parameter is fully documented in the schema, including the German-only enum and the contrast with www multi-locale. The description adds nothing param-specific, so the baseline 3 is correct when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states what the tool returns (a maps HTML hand-off to www /partner-werden) and, crucially, what it does NOT return (partnerEmail corpus) or do (submit the form), which separates it from siblings. The phrase 'HTML hand-off' is jargon-y, so the exact return payload is slightly opaque, but the verb+resource is identifiable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ('USE when the user asks about becoming a partner while on maps') and an explicit alternative ('Prefer www MCP get_partner_info if already connected to www'), plus NEXT-step routing (compose_mailto after opening www). 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_pricesGet PricesARead-onlyInspect
WHAT: Returns only a URL/note pointing to the Festpreis matrix on www.ikeytz.com/preise — no euro rows. USE to hand the agent from maps to www pricing. Prefer www MCP get_prices for the real matrix; call maps get_ort_datetime first if you need whenKey (day|night) for a later www invoice. DOES NOT invent prices or return totalEur.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| npm | No | www CLI package @ikeytz/mcp |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp |
| note | No | maps only points; Volltext/Preise/FAQ live on www |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| www_mcp | No | https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus |
| www_tool | No | Same tool name on www MCP that holds the real payload |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No | Locale the caller asked for; maps still returns locale=de |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it readOnlyHint=true, so safety is covered. The description adds real behavioral context: it returns a pointer rather than data, does not invent prices, and does not return totalEur — useful for setting agent expectations. It stops short of describing the note/URL format in detail, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with WHAT/USE/DOES NOT labels so the key facts are scannable and each sentence carries distinct information. The all-caps labels are slightly shouty and the run-on USE clause is dense, costing it a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety, the description only needs to explain purpose, routing, and limits — all of which it does. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single locale parameter is fully documented in the schema, including its enum and the warning that it is not a www multi-locale switch. The description text adds nothing about locale, so the schema carries the load — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns only a URL/note pointing to the Festpreis matrix') and explicitly rules out what it is not ('no euro rows'). It also distinguishes itself from the sibling www get_prices, so an agent can tell them apart 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing guidance: use this to hand off from maps to www pricing, prefer www MCP get_prices for the real matrix, and call get_ort_datetime first when a whenKey (day|night) is needed. When, when-not, and the alternative are all named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ratgeberGet RatgeberARead-onlyInspect
WHAT: Returns only a URL to www /ratgeber/{slug} — not the article body. slug required. USE when the user names a Ratgeber slug on maps. Prefer list_ratgeber for the hub link when the slug is unknown; prefer www MCP get_ratgeber for fulltext. DOES NOT return article text.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Required Ratgeber slug | |
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| npm | No | www CLI package @ikeytz/mcp |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp |
| note | No | maps only points; Volltext/Preise/FAQ live on www |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| www_mcp | No | https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus |
| www_tool | No | Same tool name on www MCP that holds the real payload |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No | Locale the caller asked for; maps still returns locale=de |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the safe-read profile, but the description adds real value by disclosing what the response actually contains and, more importantly, what it does not ('Returns only a URL ... not the article body', 'DOES NOT return article text'). That output-shape constraint is the key behavioral fact an agent needs and is not derivable from the annotations. It stops short of mentioning auth, rate limits, or cross-domain redirect behavior, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded clauses labeled WHAT / USE / DOES NOT, with zero filler. The most decision-relevant facts (URL-only, slug required, alternatives) all appear before the reader has to hunt.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description is not obliged to document the return value, yet it still states that the result is a URL rather than article text, which is the fact most likely to surprise a caller. Combined with the named alternatives, an agent has everything needed to select and invoke it. Minor remaining gap: no note on whether the slug must exist or what happens on an unknown slug.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema itself is unusually rich (the locale description spells out the de-only enum, the ignored-values behavior, and the cross-reference to www list_locales). The description only restates 'slug required', which the schema already marks as required, so it adds no meaning beyond the structured fields. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Returns only a URL to www /ratgeber/{slug}') and immediately scopes the output by excluding the article body. It also explicitly distinguishes itself from the siblings list_ratgeber and the www MCP get_ratgeber, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a positive trigger ('USE when the user names a Ratgeber slug on maps') and two named alternatives with the conditions that select them: list_ratgeber for the hub link when the slug is unknown, and www MCP get_ratgeber for fulltext. 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_review_urlGet Review UrlARead-onlyInspect
WHAT: Returns only a URL to www.ikeytz.com/review (Google-review entry page) — not a review payload. USE when the user asks where to leave a Google review while already on maps. Prefer www MCP get_review_url when connected to www for the canonical review-link payload. DOES NOT post a review.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| npm | No | www CLI package @ikeytz/mcp |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp |
| note | No | maps only points; Volltext/Preise/FAQ live on www |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| www_mcp | No | https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus |
| www_tool | No | Same tool name on www MCP that holds the real payload |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No | Locale the caller asked for; maps still returns locale=de |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the safe-read profile, but the description adds meaningful context beyond it: the return is only a URL, not a review payload, and it 'DOES NOT post a review'. That clarifies side-effect absence beyond the annotation. It doesn't add rate-limit/auth detail, keeping it at a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded WHAT/USE/DOES-NOT structure is easy to scan, and each clause carries routing or behavioral information. Slightly verbose, with 'not a review payload' and 'DOES NOT post a review' being near-adjacent reassurances, but nothing is wasted outright.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required, and the description covers purpose, trigger, alternative, and non-mutation. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema's own locale description already explains the de-only enum and the www-unused caveat. The description adds no parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns only a URL ... not a review payload') and explicitly scopes it to the maps variant versus the www MCP get_review_url. An agent can tell exactly what it yields and how it differs from the similarly-named sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the trigger condition ('when the user asks where to leave a Google review while already on maps') and the alternative ('Prefer www MCP get_review_url when connected to www for the canonical review-link payload'). Both when-to-use and routing are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_serp_snippetGet Serp SnippetARead-onlyInspect
WHAT: One SERP block from maps llms-serp.txt via path, url, slug, or q. RETURNS path, url, matchContext (full block). DOCS/API: https://maps.ikeytz.com/llms-serp.txt (one block from that file). USE for a single page's SERP copy. DOES NOT invent meta tags. NEXT: get_ai_page or get_page_summary for body.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Fallback search string | |
| url | No | Full maps URL | |
| path | No | maps path, e.g. /pattonville | |
| slug | No | Gebiet slug |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| url | No | Matched maps URL |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| path | No | Matched path |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| matchContext | No | Full SERP markdown block |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this as a safe read, and an output schema exists, so the description's job is narrow. It usefully discloses the return shape (matchContext is the full block) and a guardrail ('DOES NOT invent meta tags'), but says nothing about behavior when multiple lookup keys are supplied or how a block is matched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Label-led structure (WHAT / RETURNS / DOCS / USE / NEXT) is front-loaded and every line carries signal. The telegraphic phrasing is dense but readable; nothing here is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Return values are described and also backed by an output schema, a docs pointer is supplied, and the next tools are named — enough for an agent to call this correctly. It does not cover the no-match case or multi-key ambiguity, which is a minor remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the phrase 'via path, url, slug, or q' adds real meaning: it tells the agent these four are alternative lookup keys rather than combinable filters, which the flat schema does not convey. No precedence among the keys is given, so not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: fetch 'One SERP block from maps llms-serp.txt' via path/url/slug/q, and the RETURNS line names the exact payload (path, url, matchContext). It clearly separates itself from body-content siblings, which it names explicitly in the NEXT line.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'USE for a single page's SERP copy' gives a concrete selection criterion, and 'NEXT: get_ai_page or get_page_summary for body' routes the agent to the right alternative for a different need. It lacks an explicit when-not condition (e.g., when a full page or multiple SERP blocks are wanted), which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_service_areaGet Service AreaARead-onlyInspect
WHAT: One Einsatzgebiet by slug → plz (first match) → name substring. RETURNS point card + maps_nav (hub/buero/mcp-hub) + neighbors (5 nearest by airline, MAPS-IL2) + optional Lage texts (h1, kicker, blurb, lage, geschichte) unless compact=true. fields= filters keys. USE when the user names a town/district in Landkreis Ludwigsburg. DOES NOT geocode free addresses outside the 52; unknown → ok=false unknown_place. NEXT: get_lage, get_geschichte, get_grenze, get_embed_map, distance_to_office.
| Name | Required | Description | Default |
|---|---|---|---|
| plz | No | German postcode (PLZ). Several Gebiete can share one PLZ (e.g. 71638). For single lookup first match wins; use find_by_plz for all matches. | |
| name | No | German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted. | |
| slug | No | URL slug of one of the 52 Einsatzgebiete, e.g. pattonville, bietigheim-bissingen, walheim, gruenbuehl. Matches https://maps.ikeytz.com/{slug}. Lookup order when combined with plz/name: slug first. | |
| fields | No | Optional field filter: comma-separated names or array. Keeps envelope keys (ok, tool, summary, canonicalUrl, attribution, locale, related, count, total, offset, limit, compact) plus listed fields. Example: slug,name,plz,lat,lng. | |
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
| compact | No | If true, omit h1/kicker/blurb/lage/geschichte — coords + URLs + neighbors still present. |
Output Schema
| Name | Required | Description |
|---|---|---|
| h1 | No | Visitenkarte H1 when not compact |
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| lat | No | Place latitude |
| lng | No | Place longitude |
| plz | No | Postcode |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| icbm | No | ICBM string |
| kind | No | stadtteil | ort |
| lage | No | Lage text when not compact |
| name | No | German name |
| slug | No | Resolved slug |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| blurb | No | Short blurb when not compact |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| kicker | No | Kicker when not compact |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| parent | No | Parent label |
| walkIn | No | Always false |
| compact | No | Whether compact mode was applied |
| geo_api | No | |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| maps_nav | No | MAPS-IL1 mini-chrome URLs |
| embed_map | No | |
| neighbors | No | Up to 5 nearest Gebiete (slug/name/embed_map) |
| geschichte | No | Geschichte text when not compact |
| office_lat | No | Gewerbesitz lat |
| office_lng | No | Gewerbesitz lng |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| google_maps | No | 'lat, lng' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries the rest — and it delivers: return payload shape (point card, maps_nav hub/buero/mcp-hub, 5 nearest neighbors by airline), conditional Lage texts suppressed by compact=true, field filtering semantics, the 52-area scope, single-lookup precedence, and the unknown_place error path. This is well beyond what the annotation provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tightly front-loaded with WHAT/RETURNS/USE/DOES NOT/NEXT labels and no filler, though the density borders on cryptic — tokens like 'MAPS-IL2' and '/mcp-hub' are opaque shorthand that cost a little readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present the description need not restate return values, yet its brief return summary, error-code contract, scope limit (52 areas, German-only) and tool chaining make it fully sufficient for correct invocation alongside a readOnly annotation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so a baseline of 3 applies, but the description adds genuine parameter behavior: the slug-first precedence when combined with plz/name, first-match-wins for shared PLZ values, and compact's effect on which keys survive. The only omission is that plz/name syntax detail lives in the schema rather than the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (fetch one Einsatzgebiet) and the exact resolution order (slug → plz first match → name substring), which immediately separates it from sibling lookups like find_by_plz, find_by_gebiet and list_service_areas. An agent can tell what this returns 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit USE clause (user names a town/district in Landkreis Ludwigsburg), an explicit DOES NOT boundary (no geocoding of free addresses outside the 52), a defined failure mode (ok=false unknown_place), and a NEXT list routing to get_lage, get_geschichte, get_grenze, get_embed_map and distance_to_office. Alternatives and exclusions are both named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sitemap_txtGet Sitemap TxtARead-onlyInspect
WHAT: Reads maps /sitemap.txt 1:1 (alias of get_discovery(which=sitemap-txt)); summary is a line window plus trailing # MCP-META. Optional offset/limit. USE to list public maps embed URLs including /buero. Prefer get_discovery for other discovery ids; prefer site_overview for the brand card, not a URL list. NEXT: resolve_maps_url, get_embed_map, get_geo_office.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of lines to return after offset. Omit or null = if remaining payload ≤~30KB return all remaining lines; if larger, return first ~30KB window + nextOffset (O9). Explicit limit keeps 1..10000 line window (MCP caps unchanged — not forced to 30KB). Meta also as trailing # MCP-META lines in summary. | |
| offset | No | 0-based index into a list or discovery file lines (split on \n). 0 = first. Omit = 0. Combine with limit to page. Use nextOffset / offset+limit from a previous result when present. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| path | No | Public relative path of the file on maps |
| text | No | UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer. |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| limit | No | Applied line limit, or null if omitted |
| which | No | Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …). |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| offset | No | Applied 0-based line offset |
| missing | No | true if the discovery file was not found on disk |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| totalUrls | No | http(s) lines in the full file |
| truncated | No | true if offset+limit left more lines. Also in trailing # MCP-META. |
| nextOffset | No | Pass as next offset when truncated; else null. Also in # MCP-META. |
| totalBytes | No | Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META. |
| totalChars | No | Full discovery file character length before offset/limit. Also in # MCP-META. |
| totalLines | No | Alias of total_lines |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| total_lines | No | Line count of the full file |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| returnedUrls | No | http(s) lines in this window |
| bytesReturned | No | UTF-8 length of text window |
| returnedLines | No | Lines in this window (before # MCP-META) |
| fetchTruncated | No | true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true. The description adds real behavioral context beyond that: the result is a line window plus trailing '# MCP-META', pagination via nextOffset, and the alias equivalence to get_discovery. It does not detail truncation edge cases beyond what the schema already states, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded WHAT/USE/NEXT structure packs scope, alternatives, and follow-ups into a few dense lines with no filler. The domain jargon ('MCP-META', O9, '/buero') slightly reduces immediate legibility but costs little space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers alias identity, pagination pointer, and next-step tools. For a two-param read tool this is nearly sufficient; only the exact MCP-META payload contents are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already explains limit/offset semantics, 30KB windowing, and nextOffset in detail. The description only restates 'Optional offset/limit' with no added meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Reads /sitemap.txt 1:1') and explicitly frames it as an alias of get_discovery(which=sitemap-txt). It further distinguishes itself from siblings by naming get_discovery and site_overview as different choices, so an agent can place it precisely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit USE guidance ('list public maps embed URLs including /buero') plus two exclusions with their alternatives ('Prefer get_discovery for other discovery ids; prefer site_overview for the brand card, not a URL list'). When-to-use and when-not-to-use are both present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_urheberrechtGet UrheberrechtARead-onlyInspect
WHAT: Returns Karten-Urheberrecht plain text from maps /llms-urheberrecht.txt (attribution: Mahmud Reza Kashani · ikeytz). Optional offset/limit. USE when citing map copyright in German. Prefer get_copyright for the English citation file; prefer get_legal(doc=urheberrecht) for the legal-doc router. DOES NOT return www HTML body.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of lines to return after offset. Omit or null = if remaining payload ≤~30KB return all remaining lines; if larger, return first ~30KB window + nextOffset (O9). Explicit limit keeps 1..10000 line window (MCP caps unchanged — not forced to 30KB). Meta also as trailing # MCP-META lines in summary. | |
| offset | No | 0-based index into a list or discovery file lines (split on \n). 0 = first. Omit = 0. Combine with limit to page. Use nextOffset / offset+limit from a previous result when present. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| doc | No | |
| body | No | |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | www /urheberrecht |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| which | No | |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the safety profile is covered, and the description adds real value with the source file path, the attribution line, and the negative scope 'DOES NOT return www HTML body'. It does not describe pagination behavior beyond what the schema already carries, so it stops short of the top mark.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The WHAT / USE / DOES NOT structure is front-loaded and terse, with each clause carrying routing or scope information. No filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return format needn't be explained, and annotations cover safety. The description supplies source, attribution, alternatives, and negative scope, leaving nothing an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so limit and offset are already fully documented in the schema, including their default/paging behavior and meta lines. The description's 'Optional offset/limit' adds no syntax or constraint beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (returns Karten-Urheberrecht plain text) plus the exact source file (/llms-urheberrecht.txt). It actively distinguishes itself from siblings by naming get_copyright and get_legal as different targets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'USE when citing map copyright in German' plus two named alternatives with the condition that selects each (get_copyright for the English file, get_legal(doc=urheberrecht) for the legal-doc router). 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_widerrufGet WiderrufARead-onlyInspect
WHAT: Returns only a URL to www Widerruf — not withdrawal-policy text. USE when the user asks for Widerruf while on maps and you only need the link. Prefer www MCP get_widerruf or get_legal for the corpus. DOES NOT invent clauses.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| npm | No | www CLI package @ikeytz/mcp |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp |
| note | No | maps only points; Volltext/Preise/FAQ live on www |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| www_mcp | No | https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus |
| www_tool | No | Same tool name on www MCP that holds the real payload |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No | Locale the caller asked for; maps still returns locale=de |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered. The description adds genuinely useful behavioral context beyond that: it returns a URL only (no policy prose) and 'DOES NOT invent clauses', which is a meaningful hallucination guardrail for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Uses a clean WHAT/USE/DOES NOT structure, front-loading the key fact (URL only). Every sentence earns its place, including the terse guardrail against inventing clauses.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return format need not be explained, and zero params mean no schema gaps. The definition covers what it returns, when to use it, and its limits. Only the ambiguous cross-reference to the 'www MCP' variant keeps it from being fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate – baseline 4. The schema itself confirms no-argument invocation, and the description does not need to add parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns only a URL to www Widerruf') and even bounds the scope by contrasting with 'withdrawal-policy text.' It distinguishes itself from content siblings like get_legal. The phrase 'Prefer www MCP get_widerruf' is confusingly self-referential, slightly muddying what this variant actually is.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the condition ('when the user asks for Widerruf while on maps and you only need the link') and names alternatives (get_legal, the www MCP tool). Only weakness is that the named alternative 'www MCP get_widerruf' does not appear in the sibling list, so the routing is not fully resolvable from the definition alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wissen_entryGet Wissen EntryARead-onlyInspect
Returns only a maps HTML hand-off to www /wissen/{id}. id required. Does not return the Wissen article body. USE when the user names a Wissen id on maps; use list_wissen for the hub. Prefer www MCP get_wissen_entry for fulltext. NEXT: www get_wissen_entry({id}).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Required Wissen entry id | |
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| npm | No | www CLI package @ikeytz/mcp |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp |
| note | No | maps only points; Volltext/Preise/FAQ live on www |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| www_mcp | No | https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus |
| www_tool | No | Same tool name on www MCP that holds the real payload |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No | Locale the caller asked for; maps still returns locale=de |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, so the safety profile is covered. The description adds meaningful behavioral context beyond that: it does not return the article body, it only produces a hand-off URL, and it points to the www MCP tool for fulltext. The limitation disclosure ('Does not return the Wissen article body') is valuable and non-obvious. Minor gap: no mention of redirect behavior or error cases when id is unknown.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core behavior, but the fragmented, telegraphic style ('Returns only a maps HTML hand-off to www /wissen/{id}. id required.') reads as stitched-together notes. The NEXT clause repeats the tool name and could be tighter. No wasted sentences exactly, but the structure is choppy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values needn't be explained. The description covers what the tool is not (not the article body), what it is for, alternatives, and the required parameter. It is nearly complete for a simple 2-param read tool; only error/redirect behavior is unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, including the locale enum explanation, so the schema does the heavy lifting. The description adds that id is required but 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (returns a maps HTML hand-off to /wissen/{id}) and explicitly distinguishes itself from the sibling list_wissen and from the www variant. The phrase 'HTML hand-off' is somewhat jargon-y but conveys that this is not the article body. It is clear enough that an agent knows this returns a URL forwarding artifact, not content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit use conditions: 'USE when the user names a Wissen id on maps', names the alternative for the hub ('use list_wissen'), and routes to the www tool for fulltext. When/when-not/alternative are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_auswahlList AuswahlBRead-onlyInspect
WHAT: Returns only a URL to the www Auswahl hub (/auswahl) — not Auswahl items. USE when the user asks for the Auswahl overview on maps. Prefer www MCP list_auswahl for the real item list; prefer maps get_auswahl_item({slug}) only when a slug is known (still URL-only). Optional locale (de|en|fr|ru|fa|ar|tr, default de) selects the www URL language only — it does not list items. DOES NOT list items.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| npm | No | www CLI package @ikeytz/mcp |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp |
| note | No | maps only points; Volltext/Preise/FAQ live on www |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| www_mcp | No | https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus |
| www_tool | No | Same tool name on www MCP that holds the real payload |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No | Locale the caller asked for; maps still returns locale=de |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already marks this as a safe read; the description usefully adds that the output is a URL only and explicitly not an item list. However, it also asserts the locale 'selects the www URL language', which contradicts the schema's statement that URLs carry no locale prefix — a partially inaccurate behavioral claim.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The WHAT/USE front-loading is good, but the same negation is repeated three times ('not Auswahl items', 'it does not list items', 'DOES NOT list items') and the stale seven-value locale enumeration is dead weight that also misleads.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape needn't be spelled out, and the description covers the core routing job well. It falls short because its parameter guidance is wrong, leaving an agent with contradictory locale instructions it must resolve by reading the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description claims locale accepts de|en|fr|ru|fa|ar|tr, but the schema enum is ['de'] and the schema explicitly says other values are ignored and that this is 'Not a www multi-locale switch'. Even at 100% schema coverage, the description actively contradicts the authoritative schema rather than reinforcing it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operation and scope: it returns a URL to the www Auswahl hub (/auswahl), not Auswahl items, and it names the siblings it differs from (www list_auswahl, get_auswahl_item). The only dent is the misleading tool name 'list_auswahl', which the description has to spend effort correcting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('when the user asks for the Auswahl overview on maps') plus two named alternatives with the condition that selects each ('prefer www MCP list_auswahl for the real item list'; 'get_auswahl_item({slug}) only when a slug is known'). 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.
list_faqList FaqARead-onlyInspect
Returns only a maps HTML hand-off to www /faq. Does not return FAQ question rows or answers. USE for the FAQ hub on maps; use get_faq when an id/q is known (still a hand-off). Prefer www MCP list_faq / get_faq for real FAQ data. NEXT: www list_faq; maps get_faq.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| npm | No | www CLI package @ikeytz/mcp |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp |
| note | No | maps only points; Volltext/Preise/FAQ live on www |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| www_mcp | No | https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus |
| www_tool | No | Same tool name on www MCP that holds the real payload |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No | Locale the caller asked for; maps still returns locale=de |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries the burden of the important behavioral fact: the tool returns a hand-off URL, not actual FAQ content. That is genuine value beyond structured data, though it says nothing about error behavior or the hand-off's shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the key fact (hand-off, not data) in the first sentence, which is the right priority. However, the telegraphic phrasing and the trailing 'NEXT: www list_faq; maps get_faq' fragment are slightly cryptic and overlap with the earlier routing guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is not required, and the description covers the hand-off nature plus routing. What remains unstated (e.g., what the hand-off payload looks like) is reasonably delegated to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; the locale enum and its German-only constraint are fully documented in the schema itself, including the note about www multi-locale switching. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific behavior ('Returns only a maps HTML hand-off to www /faq') and explicitly negates the obvious misreading ('Does not return FAQ question rows or answers'). It cleanly distinguishes itself from the get_faq sibling, so an agent can tell them apart 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-to-use ('USE for the FAQ hub on maps') and a conditional alternative ('use get_faq when an id/q is known'), plus a routing preference to the www MCP for real data. The condition selecting each tool is spelled out rather than left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_localesList LocalesARead-onlyInspect
WHAT: Locales on maps — only de (MAPS-E8: no /en). Call with {}. RETURNS items[{locale,url}]. USE before resolve_locale_url. DOES NOT list www's seven locales — use @ikeytz/mcp list_locales for those.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| note | No | |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| items | No | Only de |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply readOnlyHint=true, which the description does not merely repeat. It adds real behavioral context: the result set is restricted to a single locale despite the plural tool name, the return shape is items[{locale,url}], and it is a prerequisite for resolve_locale_url. It stops short of covering failure modes, but for a no-arg read that is a minor omission.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four labeled fragments (WHAT/RETURNS/USE/DOES NOT) front-load the scope restriction and route the agent quickly. The "Call with {}" clause duplicates the schema's own no-argument declaration and is the one sentence that does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still names the returned fields, and it covers scope, invocation, ordering, and the sibling alternative. Nothing needed to call this tool correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. "Call with {}" only restates what the schema already enforces via additionalProperties:false, but no parameter meaning is missing or misleading.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Locales on maps") and immediately narrows the scope to a single value ("only de (MAPS-E8: no /en)"). It also disambiguates from a same-named tool on a different server, so an agent can separate it from every sibling in the list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit sequencing ("USE before resolve_locale_url") tells the agent where this fits in a workflow, and "DOES NOT list www's seven locales — use @ikeytz/mcp list_locales for those" names the alternative and the condition that selects it. Both when-to-use and when-not-to-use are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_plzList PlzARead-onlyInspect
WHAT: PLZ → slugs map for the 52 Gebiete (shared postcodes visible). Call with {}. RETURNS items[{plz,count,slugs}]. USE to see multi-Gebiet PLZ. NEXT: find_by_plz.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| count | No | Distinct PLZ count |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| items | No | PLZ groups |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint already declares this a safe read, so the bar is lower, and the description does add that only shared/multi-assignment postcodes appear plus the 52-Gebiete scope. Beyond that there is no auth, rate-limit, or ordering context, so it is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four telegraphic WHAT/CALL/RETURNS/USE/NEXT labels, front-loaded and free of filler. The clipped all-caps style is efficient, though the RETURNS line duplicates information available in the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the return shape need not be explained, and annotations cover the safety profile; the description supplies purpose, the empty call, and the next tool. Nothing critical is missing for a no-arg listing tool, though the sibling boundary with find_by_gebiet stays implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4, and schema coverage is already 100%. The 'Call with {}' line merely restates the empty-args fact the schema already documents, adding no new semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: a PLZ→slugs map covering the 52 Gebiete. The phrase 'shared postcodes visible' and the sibling list make it distinguishable from list_slugs (plain slug list) and find_by_plz (a lookup).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'USE to see multi-Gebiet PLZ' gives a clear selection condition, and 'NEXT: find_by_plz' routes the agent onward. It stops short of naming when NOT to use it versus find_by_gebiet or find_by_area, so it is context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ratgeberList RatgeberARead-onlyInspect
WHAT: Returns only a URL to the www Ratgeber hub (/ratgeber) — not titles or article bodies. USE when the user asks for the Ratgeber overview on maps. Prefer www MCP list_ratgeber for the real list; prefer maps get_ratgeber({slug}) only when a slug is known (still URL-only). Optional locale (de|en|fr|ru|fa|ar|tr, default de) selects the www URL language only. DOES NOT list Ratgeber entries.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| npm | No | www CLI package @ikeytz/mcp |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp |
| note | No | maps only points; Volltext/Preise/FAQ live on www |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| www_mcp | No | https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus |
| www_tool | No | Same tool name on www MCP that holds the real payload |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No | Locale the caller asked for; maps still returns locale=de |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations carry only readOnlyHint=true and the title, so safety is covered; the description adds real behavioral context by clarifying the return is URL-only (no titles or bodies) and that it does not list entries. It does not touch auth needs or edge-case behavior, but the output schema exists to cover the return shape. No annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded WHAT/USE/PREFER structure with no wasted sentences; each clause adds routing or scoping value. It is slightly dense with cross-server references (www MCP, maps) that require careful reading, but stays compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape detail is not the description's burden, and the description fully covers what the tool is and is not. The one completeness gap is the locale guidance that contradicts the schema, which could lead an agent to pass an invalid value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, which would normally anchor a 3, but the description actively conflicts with the schema: it claims locale accepts 'de|en|fr|ru|fa|ar|tr' and 'selects the www URL language only,' while the schema enum is ['de'] and its description states maps is German-only with URLs staying https://maps.ikeytz.com/ and no locale prefix. Misleading parameter guidance is worse than silence, so this drops below baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource: 'Returns only a URL to the www Ratgeber hub (/ratgeber) — not titles or article bodies,' and explicitly disclaims what the name implies ('DOES NOT list Ratgeber entries'). It differentiates itself from get_ratgeber({slug}) and the www variant, so an agent can tell it apart from 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing guidance: 'USE when the user asks for the Ratgeber overview on maps,' plus two named alternatives with the conditions that select them ('Prefer www MCP list_ratgeber for the real list; prefer maps get_ratgeber({slug}) only when a slug is known'). When-to-use, when-not-to-use, and alternatives are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_service_areasList Service AreasARead-onlyInspect
WHAT: List all 52 ikeytz Einsatzgebiete on maps.ikeytz.com as point cards (slug, name, plz, lat/lng, embed_map, geo_api, grenze_api, punkt_api) — not polygons. Also public Sammel: /api/v1/embed/orte · /orte/grenzen · /orte/punkte. RETURNS items[], count, total, offset, limit. Optional fields= comma filter; limit/offset page the list. USE to enumerate the service area or build a picker. DOES NOT return OSM boundaries in the list (use get_grenze or GET grenze_api per slug) or prices. NEXT: get_service_area, get_embed_map, get_grenze, find_by_plz.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius. | |
| fields | No | Optional field filter: comma-separated names or array. Keeps envelope keys (ok, tool, summary, canonicalUrl, attribution, locale, related, count, total, offset, limit, compact) plus listed fields. Example: slug,name,plz,lat,lng. | |
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
| offset | No | 0-based index into a list or discovery file lines (split on \n). 0 = first. Omit = 0. Combine with limit to page. Use nextOffset / offset+limit from a previous result when present. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| count | No | Items in this page |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| items | No | Service-area point cards |
| limit | No | Applied limit |
| total | No | Total Gebiete (52) |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| offset | No | Applied offset |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover readOnlyHint=true, so the description carries the rest and does so well: it discloses the return envelope (items[], count, total, offset, limit), the card shape, and what is deliberately excluded (boundaries, prices). It does not discuss rate limits or auth, but for a read-only list tool it adds solid context beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Organized into WHAT/RETURNS/USE/DOES-NOT/NEXT, which is easy to scan and front-loads the core purpose. It is dense with endpoints and field lists, so a few clauses could be trimmed, but each label earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and 100% param coverage, the description needn't re-explain return shapes, yet it still supplies purpose, exclusions, and next steps, leaving nothing an agent needs to invoke it correctly. The only minor gap is operational detail like pagination clamps, which paging semantics already imply.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already fully documented (including paging via nextOffset and the fields filter). The description's 'fields= comma filter; limit/offset page the list' only restates that, adding no syntax or nuance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list all 52 ikeytz Einsatzgebiete as point cards) and enumerates the returned fields. It explicitly distinguishes itself from sibling behavior by noting it returns points, 'not polygons', so an agent can separate it from get_grenze without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit use cases ('enumerate the service area or build a picker'), explicit exclusions ('DOES NOT return OSM boundaries ... or prices'), names the alternatives (get_grenze, GET grenze_api per slug) and lists NEXT tools. When-to-use and when-not are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_servicesList ServicesARead-onlyInspect
WHAT: Returns only a URL to www /leistungen — not Leistungs rows or prices. USE when the user asks for services while on maps and you only need the link. Prefer www MCP list_services for the real catalog. Optional locale (de|en|fr|ru|fa|ar|tr, default de) selects the www URL language only — it does not load service rows. DOES NOT invent service rows.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| npm | No | www CLI package @ikeytz/mcp |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp |
| note | No | maps only points; Volltext/Preise/FAQ live on www |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| www_mcp | No | https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus |
| www_tool | No | Same tool name on www MCP that holds the real payload |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No | Locale the caller asked for; maps still returns locale=de |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries the rest and does so well: it discloses that the output is a bare URL, that no rows/prices are returned, and that it will not fabricate service rows. It does not mention pagination or exactly which URL field is returned, but those are minor given the output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
WHAT / USE / DOES-NOT structure is front-loaded and scannable, with the key non-obvious constraint (returns only a link) leading. Slightly redundant with the schema text on locale, which costs a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single optional param, read-only annotation, and an existing output schema, the description covers routing, scope, and failure mode adequately. The remaining gap is that its locale guidance conflicts with the schema rather than amplifying it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline would be 3, but the description actively misleads: it advertises locale as 'de|en|fr|ru|fa|ar|tr' while the schema enum only permits 'de' and the schema text states other values are ignored. The claim that locale 'selects the www URL language only' contradicts the German-only maps schema description, so the added parameter text is worse than silence.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (returns a URL to www/leistungen) and explicitly bounds it by what it is NOT (not Leistungs rows or prices). An agent can distinguish it from the many list_* siblings and from the www MCP's list_services without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use (user asks for services while on maps and only the link is needed) and names the preferred alternative (www MCP list_services for the real catalog). Routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_slugsList SlugsARead-onlyInspect
WHAT: All 52 maps slugs as a flat string array. Call with {}. USE for validation or autocomplete. NEXT: get_service_area(slug), get_embed_map(slug).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| count | No | 52 |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| items | No | Slug strings |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint already tells the agent this is a safe read, and the schema documents the empty-argument call ('Call with {}'). The description adds the return shape (flat string array of 52 entries), which is useful but partly redundant with the existing output schema. A 3 is appropriate given annotations and output schema carry most of the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact clauses labeled WHAT/USE/NEXT, front-loading the resource and scope before usage and follow-ups. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument, read-only list tool with an output schema, the description covers purpose, invocation, use cases, and next steps. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The schema fully documents the empty-object contract, and the description reinforces 'Call with {}' without needing to add parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (maps slugs) and quantifies the result ('all 52 maps slugs as a flat string array'). This distinguishes it cleanly from siblings like list_service_areas or list_plz, which return different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit use cases ('validation or autocomplete') and names the follow-up tools (get_service_area(slug), get_embed_map(slug)), so an agent knows both when to call it and what to do next. 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.
list_whatsapp_optionsList Whatsapp OptionsARead-onlyInspect
WHAT: WhatsApp situation options (link only). Same 12 contactOption ids as www: opening_slam_day|opening_slam_night|opening_locked_day|opening_locked_night|pkg_key_slam_day|pkg_key_slam_night|pkg_key_locked_day|pkg_key_locked_night|cylinder_only_day|cylinder_only_night|cylinder_mount|beratung. Deprecated aliases zugefallen|abgeschlossen|zylinder → day invoices. No form submit. USE before compose_whatsapp. DOES NOT send a message. NEXT: compose_whatsapp(option), compose_tel_mobile.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| note | No | Link only; Festpreis SSOT remains www |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| items | No | Options {id,label,href} |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| deprecated_aliases | No | Old ids → day invoice (ambiguous) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds real value beyond that: 'link only', 'No form submit', 'DOES NOT send a message', and the deprecated-alias mapping (zugefallen|abgeschlossen|zylinder → *day* invoices) which is behavioral detail not present in any structured field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Uses a WHAT / USE / NEXT skeleton that front-loads purpose, and every clause carries information. The pipe-delimited id list is long but is load-bearing content, not padding; the telegraphic style is dense but readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape explanation is unnecessary, and the description still covers the key facts an agent needs: it is a read-only lookup, it yields links only, it must precede compose_whatsapp, and legacy aliases are accepted. Only the pagination/enumeration behavior across the 12 options is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single optional parameter and schema description coverage is 100%; the schema already explains the German-only locale behavior in detail. The description adds no parameter-level syntax 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List ... WhatsApp situation options (link only)') and enumerates the exact 12 contactOption ids returned, so an agent knows precisely what comes back. It also distinguishes itself from compose_whatsapp by positioning itself as the lookup step that precedes it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: 'USE before compose_whatsapp', 'DOES NOT send a message', and 'NEXT: compose_whatsapp(option), compose_tel_mobile.' Both the when-to-use and the negative case (it does not send) are stated, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_wissenList WissenARead-onlyInspect
WHAT: Returns only a URL to the www Wissen hub (/wissen) — not lexicon entries or article text. USE when the user asks for the Wissen overview on maps. Prefer www MCP list_wissen for the real index; prefer maps get_wissen_entry({id}) only as a URL hand-off for one id. DOES NOT list entries.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| npm | No | www CLI package @ikeytz/mcp |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp |
| note | No | maps only points; Volltext/Preise/FAQ live on www |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| www_mcp | No | https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus |
| www_tool | No | Same tool name on www MCP that holds the real payload |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No | Locale the caller asked for; maps still returns locale=de |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries the rest of the burden and does well: it discloses that the return is a bare URL, not an index of entries, which preempts a likely misread of a 'list_*' name. It adds no detail on redirection or URL shape, but an output schema exists to cover the payload.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short clauses in WHAT/USE/DOES-NOT order, front-loading the surprising fact (returns only a URL) before usage and exclusions. No filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Scope, trigger, alternatives, and exclusions are all covered, and the output schema handles return-value detail, so an agent can select and call this correctly. Minor residual ambiguity: the phrase 'Prefer www MCP list_wissen' names a same-named tool on another server, which could momentarily blur which list_wissen is being invoked.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single optional locale parameter at 100% schema description coverage, the schema already documents the German-only behavior and the no-locale-prefix rule. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (returns a URL to the Wissen hub at /wissen) and immediately disambiguates scope: 'not lexicon entries or article text' / 'DOES NOT list entries.' This clearly separates it from sibling get_wissen_entry 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit trigger ('USE when the user asks for the Wissen overview on maps') plus named alternatives with selection conditions: the www MCP list_wissen for the real index, and maps get_wissen_entry({id}) for a single-id URL hand-off. 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.
resolve_locale_urlResolve Locale UrlARead-onlyInspect
WHAT: path + locale → maps URL. maps is de-only: non-de requested still yields https://maps.ikeytz.com{path} with locale=de. Known Gebiet paths resolve to maps; unknown paths may www-pointer. REQUIRED path and locale. DOES NOT create /en on maps. NEXT: get_embed_map, www resolve_locale_url for marketing locales.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Required. Path starting with / (e.g. /pattonville) or a maps URL. | |
| locale | Yes | Required. Only de is meaningful on maps; others ignored with a note. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| html | No | Present when falling through to www pointer |
| note | No | |
| path | No | Normalized path |
| slug | No | When a Gebiet matched |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true; the description adds real behavioral context beyond that: maps is de-only, non-de requests still yield locale=de, known Gebiet paths resolve while unknown paths may 'www-pointer', and /en is never created. These quirks are exactly the non-obvious behavior an agent needs and are not in the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with WHAT and compact, but the telegraphic jargon ('Gebiet', 'www-pointer', 'www resolve_locale_url') makes some sentences hard to parse and the value of the parenthetical phrasing is unclear. It is short without being optimally clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers the key behavioral constraints plus next-step tools. It falls short only on sibling differentiation against resolve_maps_url, which matters given how similar the two names are.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both params including that path begins with '/' or may be a maps URL and that only de is meaningful. The description reinforces the REQUIRED status and de-only nuance but adds little syntax beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific transformation (path + locale → maps URL) and describes the de-only behavior explicitly. However, it never distinguishes itself by name from its close sibling resolve_maps_url, and the internal reference to 'www resolve_locale_url' is ambiguous, so an agent may struggle to route between the two similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides downstream guidance ('NEXT: get_embed_map, www resolve_locale_url for marketing locales') and restates the required inputs, but gives no explicit when-to-use rule versus the parallel resolve_maps_url sibling or when a www resolution is preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_maps_urlResolve Maps UrlARead-onlyInspect
WHAT: Resolve a maps.ikeytz.com url/path/q to hub or Gebiet. RETURNS kind=hub|ort (+ area fields when ort). DOCS/API: https://maps.ikeytz.com/sitemap.txt (public URL list) and https://maps.ikeytz.com/{slug} (Gebiet pages). USE to normalize pasted maps links. Prefer get_service_area when you already have a known slug; prefer resolve_locale_url for locale rewriting. DOES NOT accept www hosts (not_maps_host). When multiple of url/path/q are set, url wins then path then q.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | URL or path alias | |
| url | No | Full https://maps.ikeytz.com/… URL | |
| path | No | Path e.g. /pattonville |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| lat | No | |
| lng | No | |
| plz | No | |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| kind | No | Resolved kind |
| name | No | Place name when ort |
| slug | No | null for hub |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| embed_map | No | |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply readOnlyHint, so the description carries most of the burden and does so: it discloses the return discriminator (kind=hub|ort with area fields for ort), the argument precedence (url then path then q), and a failure mode (not_maps_host). The output schema already covers the payload shape, which slightly limits the added value, but the precedence and error semantics are real contributions beyond structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Labeled, front-loaded sections (WHAT, RETURNS, DOCS/API, USE, DOES NOT) with no filler sentences. The doc links are the only slightly expendable element, and even they serve discovery.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not re-explain return values, and it still covers trigger, alternatives, argument precedence, and the failure case. What remains unstated is what happens with ambiguous or malformed slugs beyond not_maps_host, a minor gap for a 3-param, zero-required resolver.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; however the description adds the tie-breaking rule when multiple of url/path/q are supplied, which the schema does not express. That is genuine semantic value above the per-parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Resolve) plus resource (maps.ikeytz.com url/path/q) and explicitly names the two output kinds (hub or ort). It also distinguishes itself from siblings by naming get_service_area and resolve_locale_url as alternatives, so the 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"USE to normalize pasted maps links" gives the trigger, the Prefer clauses name concrete alternatives with the condition that selects them, and "DOES NOT accept www hosts (not_maps_host)" is an explicit exclusion. This is the full when/when-not/alternatives pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_overviewSite OverviewARead-onlyInspect
WHO/WHAT: What maps.ikeytz.com is — 52 Einsatzgebiet maps for Schlüsseldienst Ludwigsburg ikeytz, not the www price site. RETURNS brand, owner, count, mcp, registry, walkIn=false, sister www MCP note. USE as the maps brand card. DOES NOT quote euro. NEXT: get_business_identity, list_service_areas, get_links.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/… with no locale prefix. Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr. | de |
Output Schema
| Name | Required | Description |
|---|---|---|
| h1 | No | |
| ok | Yes | true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint. |
| mcp | No | |
| hint | No | Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool. |
| note | No | |
| tool | Yes | Echo of the tool name that produced this object (e.g. get_service_area). |
| brand | No | |
| count | No | 52 |
| error | No | Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required. |
| owner | No | |
| title | No | |
| locale | No | Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de. |
| sister | No | www MCP / npm hint |
| walkIn | No | |
| related | No | Always includes https://maps.ikeytz.com/llms.txt. |
| summary | No | Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution. |
| registry | No | com.ikeytz/maps |
| legalName | No | |
| attribution | Yes | Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt' |
| canonicalUrl | No | Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs. |
| requested_locale | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, but the description adds substantive context: walkIn=false, no euro quoting, German-only behavior, and the sister www MCP note. This goes beyond the annotation and tells the agent what the payload will and won't contain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The WHO/WHAT / RETURNS / USE / DOES NOT / NEXT scaffold is efficient and front-loaded with zero filler sentences. The telegraphic ALLCAPS phrasing is dense but each clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be fully spelled out, and the description still covers identity, scope, exclusions, and next steps. Only the absence of an explicit exclusion condition against named siblings keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single locale param is fully documented in-schema (enum, default, and locale-prefix behavior). The description adds no parameter detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete resource and scope: "What maps.ikeytz.com is — 52 Einsatzgebiet maps for Schlüsseldienst Ludwigsburg ikeytz, not the www price site," and enumerates what it returns (brand, owner, count, mcp, registry, walkIn). It clearly distinguishes itself from the www site, though it does not differentiate from adjacent siblings like get_about or get_hub beyond the NEXT list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"USE as the maps brand card" plus a NEXT chain (get_business_identity, list_service_areas, get_links) gives explicit routing and a negative constraint ("not the www price site", "DOES NOT quote euro"). It stops short of stating when this tool should be skipped in favor of a specific alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
get_geo_office1 field changed- added
Output schema / properties / einsatzgebieteAdded value: +{ + "description": "Same 52 places as the /buero HTML list. Each item is name, slug, url.", + "items": { + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +}
10 tool updates
- Changed
compose_whatsapp4 fields changed- changed
Input schema / properties / option / descriptionPrevious value: -"Optional situation id from list_whatsapp_options (zugefallen|abgeschlossen|zylinder). Unknown → ok:false."New value: +"Optional situation id from list_whatsapp_options (12 www ids; aliases deprecated). Unknown → ok:false." - added
Output schema / properties / ambiguousAdded value: +{ + "description": "true if deprecated alias was used", + "type": "boolean" +} - added
Output schema / properties / deprecatedAliasAdded value: +{ + "description": "Alias used, if any", + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / option / descriptionPrevious value: -"Echoed option (null if omitted)"New value: +"Resolved option (null if omitted)"
- Changed
find_by_area2 fields changed- added
Output schema / properties / items / items / properties / grenze_apiAdded value: +{ + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}/grenze (GeoJSON)", + "format": "uri", + "type": "string" +} - added
Output schema / properties / items / items / properties / punkt_apiAdded value: +{ + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}/punkt (GeoJSON Point)", + "format": "uri", + "type": "string" +}
- Changed
find_by_gebiet2 fields changed- added
Output schema / properties / items / items / properties / grenze_apiAdded value: +{ + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}/grenze (GeoJSON)", + "format": "uri", + "type": "string" +} - added
Output schema / properties / items / items / properties / punkt_apiAdded value: +{ + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}/punkt (GeoJSON Point)", + "format": "uri", + "type": "string" +}
- Changed
find_by_geo2 fields changed- added
Output schema / properties / items / items / properties / grenze_apiAdded value: +{ + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}/grenze (GeoJSON)", + "format": "uri", + "type": "string" +} - added
Output schema / properties / items / items / properties / punkt_apiAdded value: +{ + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}/punkt (GeoJSON Point)", + "format": "uri", + "type": "string" +}
- Changed
find_by_google_maps2 fields changed- added
Output schema / properties / items / items / properties / grenze_apiAdded value: +{ + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}/grenze (GeoJSON)", + "format": "uri", + "type": "string" +} - added
Output schema / properties / items / items / properties / punkt_apiAdded value: +{ + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}/punkt (GeoJSON Point)", + "format": "uri", + "type": "string" +}
- Changed
find_by_icbm2 fields changed- added
Output schema / properties / items / items / properties / grenze_apiAdded value: +{ + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}/grenze (GeoJSON)", + "format": "uri", + "type": "string" +} - added
Output schema / properties / items / items / properties / punkt_apiAdded value: +{ + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}/punkt (GeoJSON Point)", + "format": "uri", + "type": "string" +}
- Changed
find_by_plz2 fields changed- added
Output schema / properties / items / items / properties / grenze_apiAdded value: +{ + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}/grenze (GeoJSON)", + "format": "uri", + "type": "string" +} - added
Output schema / properties / items / items / properties / punkt_apiAdded value: +{ + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}/punkt (GeoJSON Point)", + "format": "uri", + "type": "string" +}
- Changed
get_geo_api6 fields changed- added
Output schema / properties / grenze_apiAdded value: +{ + "format": "uri", + "type": "string" +} - changed
Output schema / properties / note / descriptionPrevious value: -"Public JSON pointer; use get_grenze for polygon in MCP"New value: +"Public JSON/GeoJSON pointers; use get_grenze for polygon in MCP" - added
Output schema / properties / orte_apiAdded value: +{ + "format": "uri", + "type": "string" +} - added
Output schema / properties / orte_grenzen_apiAdded value: +{ + "format": "uri", + "type": "string" +} - added
Output schema / properties / orte_punkte_apiAdded value: +{ + "format": "uri", + "type": "string" +} - added
Output schema / properties / punkt_apiAdded value: +{ + "format": "uri", + "type": "string" +}
- Changed
list_service_areas2 fields changed- added
Output schema / properties / items / items / properties / grenze_apiAdded value: +{ + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}/grenze (GeoJSON)", + "format": "uri", + "type": "string" +} - added
Output schema / properties / items / items / properties / punkt_apiAdded value: +{ + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}/punkt (GeoJSON Point)", + "format": "uri", + "type": "string" +}
- Changed
list_whatsapp_options1 field changed- added
Output schema / properties / deprecated_aliasesAdded value: +{ + "description": "Old ids → day invoice (ambiguous)", + "type": "object" +}
1 tool update
- Changed
get_grenze_koordinaten4 fields changed- removed
Output schema / properties / embedRemoved value: -{ - "description": "Relative fn embed path", - "type": "string" -} - removed
Output schema / properties / embedGrenzeRemoved value: -{ - "type": "string" -} - added
Output schema / properties / embedPublic / descriptionAdded value: +"Public relative embed path /api/v1/embed/ort/{slug}" - removed
Output schema / properties / embedPunktRemoved value: -{ - "type": "string" -}
9 tool updates
- Changed
get_ai_txt2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius."New value: +"Maximum number of lines to return after offset. Omit or null = if remaining payload ≤~30KB return all remaining lines; if larger, return first ~30KB window + nextOffset (O9). Explicit limit keeps 1..10000 line window (MCP caps unchanged — not forced to 30KB). Meta also as trailing # MCP-META lines in summary." - added
Input schema / properties / limit / maximumAdded value: +10000
- Changed
get_copyright2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius."New value: +"Maximum number of lines to return after offset. Omit or null = if remaining payload ≤~30KB return all remaining lines; if larger, return first ~30KB window + nextOffset (O9). Explicit limit keeps 1..10000 line window (MCP caps unchanged — not forced to 30KB). Meta also as trailing # MCP-META lines in summary." - added
Input schema / properties / limit / maximumAdded value: +10000
- Changed
get_discovery2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius."New value: +"Maximum number of lines to return after offset. Omit or null = if remaining payload ≤~30KB return all remaining lines; if larger, return first ~30KB window + nextOffset (O9). Explicit limit keeps 1..10000 line window (MCP caps unchanged — not forced to 30KB). Meta also as trailing # MCP-META lines in summary." - added
Input schema / properties / limit / maximumAdded value: +10000
- Changed
get_impressum2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius."New value: +"Maximum number of lines to return after offset. Omit or null = if remaining payload ≤~30KB return all remaining lines; if larger, return first ~30KB window + nextOffset (O9). Explicit limit keeps 1..10000 line window (MCP caps unchanged — not forced to 30KB). Meta also as trailing # MCP-META lines in summary." - added
Input schema / properties / limit / maximumAdded value: +10000
- Changed
get_llms_mcp_server2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius."New value: +"Maximum number of lines to return after offset. Omit or null = if remaining payload ≤~30KB return all remaining lines; if larger, return first ~30KB window + nextOffset (O9). Explicit limit keeps 1..10000 line window (MCP caps unchanged — not forced to 30KB). Meta also as trailing # MCP-META lines in summary." - added
Input schema / properties / limit / maximumAdded value: +10000
- Changed
get_llms_mcp_web2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius."New value: +"Maximum number of lines to return after offset. Omit or null = if remaining payload ≤~30KB return all remaining lines; if larger, return first ~30KB window + nextOffset (O9). Explicit limit keeps 1..10000 line window (MCP caps unchanged — not forced to 30KB). Meta also as trailing # MCP-META lines in summary." - added
Input schema / properties / limit / maximumAdded value: +10000
- Changed
get_llms_txt2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius."New value: +"Maximum number of lines to return after offset. Omit or null = if remaining payload ≤~30KB return all remaining lines; if larger, return first ~30KB window + nextOffset (O9). Explicit limit keeps 1..10000 line window (MCP caps unchanged — not forced to 30KB). Meta also as trailing # MCP-META lines in summary." - added
Input schema / properties / limit / maximumAdded value: +10000
- Changed
get_sitemap_txt2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius."New value: +"Maximum number of lines to return after offset. Omit or null = if remaining payload ≤~30KB return all remaining lines; if larger, return first ~30KB window + nextOffset (O9). Explicit limit keeps 1..10000 line window (MCP caps unchanged — not forced to 30KB). Meta also as trailing # MCP-META lines in summary." - added
Input schema / properties / limit / maximumAdded value: +10000
- Changed
get_urheberrecht2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius."New value: +"Maximum number of lines to return after offset. Omit or null = if remaining payload ≤~30KB return all remaining lines; if larger, return first ~30KB window + nextOffset (O9). Explicit limit keeps 1..10000 line window (MCP caps unchanged — not forced to 30KB). Meta also as trailing # MCP-META lines in summary." - added
Input schema / properties / limit / maximumAdded value: +10000
1 tool update
- Changed
get_discovery1 field changed- changed
Input schema / properties / which / descriptionPrevious value: -"Required discovery id. Examples: ard, ai-catalog, ai-txt, ai-plugin, answer-engine, agent-skills, llms, llms-full, llms-index, llms-keywords, llms-serp, llms-jsonld, llms-impressum-kontakt, llms-orte-geo, llms-grenzen-koordinaten, llms-urheberrecht, llms-copyright, llms-mcp-server, llms-mcp-web, robots, sitemap-txt, sitemap-xml."New value: +"Required discovery id. Examples: ard, ai-catalog, ai-txt, ai-plugin, answer-engine, agent-skills, llms, llms-full, llms-index, llms-keywords, llms-serp, llms-jsonld, llms-navigation, llms-impressum-kontakt, llms-orte-geo, llms-grenzen-koordinaten, llms-urheberrecht, llms-copyright, llms-mcp-server, llms-mcp-web, robots, sitemap-txt, sitemap-xml."
1 tool update
- Changed
get_discovery1 field changed- changed
Input schema / properties / which / descriptionPrevious value: -"Required discovery id. Examples: ard, ai-catalog, ai-txt, ai-plugin, answer-engine, agent-skills, llms, llms-full, llms-index, llms-keywords, llms-serp, llms-impressum-kontakt, llms-orte-geo, llms-urheberrecht, llms-copyright, llms-mcp-server, llms-mcp-web, robots, sitemap-txt, sitemap-xml."New value: +"Required discovery id. Examples: ard, ai-catalog, ai-txt, ai-plugin, answer-engine, agent-skills, llms, llms-full, llms-index, llms-keywords, llms-serp, llms-jsonld, llms-impressum-kontakt, llms-orte-geo, llms-grenzen-koordinaten, llms-urheberrecht, llms-copyright, llms-mcp-server, llms-mcp-web, robots, sitemap-txt, sitemap-xml."
1 tool update
- Added
get_grenze_koordinaten
1 tool update
- Changed
compose_whatsapp2 fields changed- changed
Input schema / properties / option / descriptionPrevious value: -"Optional situation id: zugefallen|abgeschlossen|zylinder|beratung (or ids from list_whatsapp_options)."New value: +"Optional situation id from list_whatsapp_options (zugefallen|abgeschlossen|zylinder). Unknown → ok:false." - changed
Output schema / properties / option / descriptionPrevious value: -"Echoed option"New value: +"Echoed option (null if omitted)"
6 tool updates
- Changed
get_ai_txt3 fields changed- added
Output schema / properties / fetchTruncatedAdded value: +{ + "description": "true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false.", + "type": "boolean" +} - added
Output schema / properties / totalBytesAdded value: +{ + "description": "Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META.", + "type": "number" +} - added
Output schema / properties / totalCharsAdded value: +{ + "description": "Full discovery file character length before offset/limit. Also in # MCP-META.", + "type": "number" +}
- Changed
get_discovery3 fields changed- added
Output schema / properties / fetchTruncatedAdded value: +{ + "description": "true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false.", + "type": "boolean" +} - added
Output schema / properties / totalBytesAdded value: +{ + "description": "Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META.", + "type": "number" +} - added
Output schema / properties / totalCharsAdded value: +{ + "description": "Full discovery file character length before offset/limit. Also in # MCP-META.", + "type": "number" +}
- Changed
get_llms_mcp_server3 fields changed- added
Output schema / properties / fetchTruncatedAdded value: +{ + "description": "true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false.", + "type": "boolean" +} - added
Output schema / properties / totalBytesAdded value: +{ + "description": "Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META.", + "type": "number" +} - added
Output schema / properties / totalCharsAdded value: +{ + "description": "Full discovery file character length before offset/limit. Also in # MCP-META.", + "type": "number" +}
- Changed
get_llms_mcp_web3 fields changed- added
Output schema / properties / fetchTruncatedAdded value: +{ + "description": "true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false.", + "type": "boolean" +} - added
Output schema / properties / totalBytesAdded value: +{ + "description": "Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META.", + "type": "number" +} - added
Output schema / properties / totalCharsAdded value: +{ + "description": "Full discovery file character length before offset/limit. Also in # MCP-META.", + "type": "number" +}
- Changed
get_llms_txt3 fields changed- added
Output schema / properties / fetchTruncatedAdded value: +{ + "description": "true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false.", + "type": "boolean" +} - added
Output schema / properties / totalBytesAdded value: +{ + "description": "Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META.", + "type": "number" +} - added
Output schema / properties / totalCharsAdded value: +{ + "description": "Full discovery file character length before offset/limit. Also in # MCP-META.", + "type": "number" +}
- Changed
get_sitemap_txt3 fields changed- added
Output schema / properties / fetchTruncatedAdded value: +{ + "description": "true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false.", + "type": "boolean" +} - added
Output schema / properties / totalBytesAdded value: +{ + "description": "Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META.", + "type": "number" +} - added
Output schema / properties / totalCharsAdded value: +{ + "description": "Full discovery file character length before offset/limit. Also in # MCP-META.", + "type": "number" +}
2 tool updates
- Changed
get_embed_map2 fields changed- added
Output schema / properties / maps_navAdded value: +{ + "description": "MAPS-IL1 mini-chrome URLs", + "properties": { + "buero": { + "format": "uri", + "type": "string" + }, + "hub": { + "format": "uri", + "type": "string" + }, + "mcp_hub": { + "format": "uri", + "type": "string" + } + }, + "type": "object" +} - added
Output schema / properties / neighborsAdded value: +{ + "description": "Up to 5 nearest Gebiete", + "items": { + "properties": { + "embed_map": { + "format": "uri", + "type": "string" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +}
- Changed
get_service_area3 fields changed- changed
Input schema / properties / compact / descriptionPrevious value: -"If true, omit h1/kicker/blurb/lage/geschichte — coords + URLs only."New value: +"If true, omit h1/kicker/blurb/lage/geschichte — coords + URLs + neighbors still present." - added
Output schema / properties / maps_navAdded value: +{ + "description": "MAPS-IL1 mini-chrome URLs", + "properties": { + "buero": { + "format": "uri", + "type": "string" + }, + "hub": { + "format": "uri", + "type": "string" + }, + "mcp_hub": { + "format": "uri", + "type": "string" + } + }, + "type": "object" +} - added
Output schema / properties / neighborsAdded value: +{ + "description": "Up to 5 nearest Gebiete (slug/name/embed_map)", + "items": { + "properties": { + "embed_map": { + "format": "uri", + "type": "string" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +}
6 tool updates
- Changed
get_ai_txt9 fields changed- removed
Output schema / properties / bodyRemoved value: -{ - "description": "UTF-8 text window after offset/limit", - "type": "string" -} - added
Output schema / properties / bytesReturnedAdded value: +{ + "description": "UTF-8 length of text window", + "type": "number" +} - added
Output schema / properties / nextOffsetAdded value: +{ + "description": "Pass as next offset when truncated; else null. Also in # MCP-META.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / returnedLinesAdded value: +{ + "description": "Lines in this window (before # MCP-META)", + "type": "number" +} - added
Output schema / properties / returnedUrlsAdded value: +{ + "description": "http(s) lines in this window", + "type": "number" +} - changed
Output schema / properties / text / descriptionPrevious value: -"Alias/window of body when present"New value: +"UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer." - added
Output schema / properties / totalLinesAdded value: +{ + "description": "Alias of total_lines", + "type": "number" +} - added
Output schema / properties / totalUrlsAdded value: +{ + "description": "http(s) lines in the full file", + "type": "number" +} - added
Output schema / properties / truncatedAdded value: +{ + "description": "true if offset+limit left more lines. Also in trailing # MCP-META.", + "type": "boolean" +}
- Changed
get_discovery9 fields changed- removed
Output schema / properties / bodyRemoved value: -{ - "description": "UTF-8 text window after offset/limit", - "type": "string" -} - added
Output schema / properties / bytesReturnedAdded value: +{ + "description": "UTF-8 length of text window", + "type": "number" +} - added
Output schema / properties / nextOffsetAdded value: +{ + "description": "Pass as next offset when truncated; else null. Also in # MCP-META.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / returnedLinesAdded value: +{ + "description": "Lines in this window (before # MCP-META)", + "type": "number" +} - added
Output schema / properties / returnedUrlsAdded value: +{ + "description": "http(s) lines in this window", + "type": "number" +} - changed
Output schema / properties / text / descriptionPrevious value: -"Alias/window of body when present"New value: +"UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer." - added
Output schema / properties / totalLinesAdded value: +{ + "description": "Alias of total_lines", + "type": "number" +} - added
Output schema / properties / totalUrlsAdded value: +{ + "description": "http(s) lines in the full file", + "type": "number" +} - added
Output schema / properties / truncatedAdded value: +{ + "description": "true if offset+limit left more lines. Also in trailing # MCP-META.", + "type": "boolean" +}
- Changed
get_llms_mcp_server9 fields changed- removed
Output schema / properties / bodyRemoved value: -{ - "description": "UTF-8 text window after offset/limit", - "type": "string" -} - added
Output schema / properties / bytesReturnedAdded value: +{ + "description": "UTF-8 length of text window", + "type": "number" +} - added
Output schema / properties / nextOffsetAdded value: +{ + "description": "Pass as next offset when truncated; else null. Also in # MCP-META.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / returnedLinesAdded value: +{ + "description": "Lines in this window (before # MCP-META)", + "type": "number" +} - added
Output schema / properties / returnedUrlsAdded value: +{ + "description": "http(s) lines in this window", + "type": "number" +} - changed
Output schema / properties / text / descriptionPrevious value: -"Alias/window of body when present"New value: +"UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer." - added
Output schema / properties / totalLinesAdded value: +{ + "description": "Alias of total_lines", + "type": "number" +} - added
Output schema / properties / totalUrlsAdded value: +{ + "description": "http(s) lines in the full file", + "type": "number" +} - added
Output schema / properties / truncatedAdded value: +{ + "description": "true if offset+limit left more lines. Also in trailing # MCP-META.", + "type": "boolean" +}
- Changed
get_llms_mcp_web9 fields changed- removed
Output schema / properties / bodyRemoved value: -{ - "description": "UTF-8 text window after offset/limit", - "type": "string" -} - added
Output schema / properties / bytesReturnedAdded value: +{ + "description": "UTF-8 length of text window", + "type": "number" +} - added
Output schema / properties / nextOffsetAdded value: +{ + "description": "Pass as next offset when truncated; else null. Also in # MCP-META.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / returnedLinesAdded value: +{ + "description": "Lines in this window (before # MCP-META)", + "type": "number" +} - added
Output schema / properties / returnedUrlsAdded value: +{ + "description": "http(s) lines in this window", + "type": "number" +} - changed
Output schema / properties / text / descriptionPrevious value: -"Alias/window of body when present"New value: +"UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer." - added
Output schema / properties / totalLinesAdded value: +{ + "description": "Alias of total_lines", + "type": "number" +} - added
Output schema / properties / totalUrlsAdded value: +{ + "description": "http(s) lines in the full file", + "type": "number" +} - added
Output schema / properties / truncatedAdded value: +{ + "description": "true if offset+limit left more lines. Also in trailing # MCP-META.", + "type": "boolean" +}
- Changed
get_llms_txt9 fields changed- removed
Output schema / properties / bodyRemoved value: -{ - "description": "UTF-8 text window after offset/limit", - "type": "string" -} - added
Output schema / properties / bytesReturnedAdded value: +{ + "description": "UTF-8 length of text window", + "type": "number" +} - added
Output schema / properties / nextOffsetAdded value: +{ + "description": "Pass as next offset when truncated; else null. Also in # MCP-META.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / returnedLinesAdded value: +{ + "description": "Lines in this window (before # MCP-META)", + "type": "number" +} - added
Output schema / properties / returnedUrlsAdded value: +{ + "description": "http(s) lines in this window", + "type": "number" +} - changed
Output schema / properties / text / descriptionPrevious value: -"Alias/window of body when present"New value: +"UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer." - added
Output schema / properties / totalLinesAdded value: +{ + "description": "Alias of total_lines", + "type": "number" +} - added
Output schema / properties / totalUrlsAdded value: +{ + "description": "http(s) lines in the full file", + "type": "number" +} - added
Output schema / properties / truncatedAdded value: +{ + "description": "true if offset+limit left more lines. Also in trailing # MCP-META.", + "type": "boolean" +}
- Changed
get_sitemap_txt9 fields changed- removed
Output schema / properties / bodyRemoved value: -{ - "description": "UTF-8 text window after offset/limit", - "type": "string" -} - added
Output schema / properties / bytesReturnedAdded value: +{ + "description": "UTF-8 length of text window", + "type": "number" +} - added
Output schema / properties / nextOffsetAdded value: +{ + "description": "Pass as next offset when truncated; else null. Also in # MCP-META.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / returnedLinesAdded value: +{ + "description": "Lines in this window (before # MCP-META)", + "type": "number" +} - added
Output schema / properties / returnedUrlsAdded value: +{ + "description": "http(s) lines in this window", + "type": "number" +} - changed
Output schema / properties / text / descriptionPrevious value: -"Alias/window of body when present"New value: +"UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer." - added
Output schema / properties / totalLinesAdded value: +{ + "description": "Alias of total_lines", + "type": "number" +} - added
Output schema / properties / totalUrlsAdded value: +{ + "description": "http(s) lines in the full file", + "type": "number" +} - added
Output schema / properties / truncatedAdded value: +{ + "description": "true if offset+limit left more lines. Also in trailing # MCP-META.", + "type": "boolean" +}
1 tool update
- Changed
get_geo_office4 fields changed- added
Output schema / properties / embed_mapAdded value: +{ + "description": "https://maps.ikeytz.com/buero", + "format": "uri", + "type": "string" +} - added
Output schema / properties / geo_apiAdded value: +{ + "description": "https://maps.ikeytz.com/api/v1/embed/office", + "format": "uri", + "type": "string" +} - changed
Output schema / properties / icbm / descriptionPrevious value: -"ICBM string"New value: +"ICBM string (same as google_maps)" - added
Output schema / properties / noteAdded value: +{ + "description": "Büro · kein Kundenverkehr vor Ort", + "type": "string" +}
Publisher details
- Operator
- ikeytz - Schlüsseldienst Ludwigsburg · Mahmud Reza Kashani · Publisher source
- Operator website
- https://maps.ikeytz.com · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://maps.ikeytz.com/mcp-readme.md · Publisher source
- Trust center
- Unknown
- Restrictions
- Public read-only. No API key. No forms. ai-train=no. · Publisher source
Related MCP Connectors
Read/Link MCP for Schlüsseldienst Ludwigsburg ikeytz. Public read-only. ai-train=no.
Public read-only MCP server for Genvernium product and developer resources.
Kromatic's public MCP server for read-only access to the Kromatic knowledge base.
Read-only MCP for AI usage profiles, leaderboards, stats, and docs; no writes or private data.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceRead-only MCP server for Kan's FxTwitter API proxy, enabling public X/Twitter search and retrieval.MIT
- FlicenseNot gradedqualityDmaintenanceRead-only MCP server for AI clients to browse and search project files securely, with configurable permissions, virtual paths, and key-based access.-
- AlicenseAqualityAmaintenanceA read-only MCP server so AI agents can query the corpus or the live site.1267 PyPI16MIT
- AlicenseAqualityAmaintenanceRead-only MCP server for aggregate HitKeep analytics and official documentation, including traffic, events, goals, funnels, ecommerce, Search Console, and AI visibility reporting.16103MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.