ikeytz Einsatzgebiet-Karten
Server Details
Read/Link MCP for maps.ikeytz.com. Public read-only. No forms. ai-train=no.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Available Tools
67 toolscompose_mailtoARead-onlyInspect
WHAT: mailto:info@ikeytz.com plus mapsEmail info@maps.ikeytz.com (mapsHref). Call with {}. USE for email CTAs. DOES NOT send mail. NEXT: get_contact, list_footer.
| 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 already declare readOnlyHint=true, and the description reinforces this with 'DOES NOT send mail' while adding real context beyond the annotation: the exact content yielded (two email addresses, with one surfaced as mapsHref). This is genuinely useful because the compose_* verb could otherwise imply sending. No contradiction with 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?
Roughly 20 words, dense and front-loaded: resource, usage, exclusion, next steps in a fixed WHAT/USE/DOES NOT/NEXT pattern. Every clause earns its place. The telegraphic style trades a little readability for compactness but remains scannable.
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 compose helper with an output schema present, the description covers all call-relevant facts: the exact addresses, when to use it, that it does not transmit mail, and suggested next calls. Return-shape details are already owned by the output schema, so nothing needed to select or 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?
With zero parameters, the input schema is already exhaustive, so baseline 4 applies. 'Call with {}' restates the no-arg invocation and confirms no hidden arguments exist, which is all the description needs to add. Schema coverage at 100% leaves no param semantics gap.
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:' line identifies the exact resources produced — mailto:info@ikeytz.com and the mapsEmail variant info@maps.ikeytz.com — and 'USE for email CTAs' ties it to a concrete purpose. The name compose_mailto alongside compose_tel_landline/compose_tel_mobile/compose_whatsapp siblings pins down the email channel. It lacks an explicit behavioral verb like 'returns' or 'builds', but an agent can infer the tool supplies email contact data.
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' explicitly states the intended scenario, and 'DOES NOT send mail' is a clear exclusion that prevents misuse when actual sending is needed. It doesn't name alternatives like compose_whatsapp, but sibling names plus the CTA context make the boundary legible. 'NEXT: get_contact, list_footer' adds useful follow-up flow guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compose_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?
Annotations already declare readOnlyHint=true, so the read-only behavior is covered. The description adds the return shape ('RETURNS href + display') and the no-argument call style, but does not add richer behavioral context such as what the link is intended for beyond a CTA.
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-loaded with WHAT, RETURNS, USE, and NEXT. Every segment delivers a distinct piece of 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 zero-argument read-only tool with an output schema, the description covers the purpose, usage context, return value, and related sibling. Nothing essential is missing for an agent to select and invoke this tool 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 has zero parameters and the schema already documents this with 100% coverage. The description's 'Call with {}' reinforces that no arguments are needed, which is sufficient given there are no meaningful parameter semantics to define.
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 'WHAT: tel: href for the public landline,' which names a specific resource and format of output. It also signals the sibling distinction by saying 'public landline' and points to compose_tel_mobile as the next tool.
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 description gives clear context by stating 'USE as secondary call CTA' and alludes to the mobile alternative with 'NEXT: compose_tel_mobile.' It does not explicitly state when not to use it, but the landline versus mobile distinction provides workable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compose_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?
The annotations already declare readOnlyHint=true. The description adds valuable non-obvious behavior: 'DOES NOT place the call' and 'RETURNS href + display', clarifying that this only composes a link and has no dialing side effects. This goes beyond the annotation without contradicting it.
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 uses a compact, labeled format (WHAT, RETURNS, USE, DOES NOT, NEXT) that front-loads the core purpose and keeps each sentence meaningful. There is no filler or redundant restating of the 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?
For a zero-argument, read-only tool with an output schema, this description covers everything needed: what it returns, how to use it, what it does not do, and where to go next. The output schema already defines the return value structure, so no additional return documentation is needed.
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 has zero parameters and the schema already documents this with 100% coverage, including 'Call with {}'. The description reinforces the empty-call convention. With no parameters, the baseline of 4 is appropriate; there is nothing more to explain.
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 the exact deliverable ('tel: href for the public mobile number'), the returned data ('href + display'), and its role as the primary call CTA. It also names distinct siblings via the NEXT line, making it easy to differentiate from compose_tel_landline and list_whatsapp_options.
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 context ('USE as the primary call CTA') and suggests follow-up tools with NEXT, which implies the caller should decide between mobile, landline, and WhatsApp. It does not explicitly state when NOT to use this tool, but the placement and naming of siblings provide adequate guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compose_whatsappARead-onlyInspect
WHAT: wa.me link. Optional option=zugefallen|abgeschlossen|zylinder|beratung (or list_whatsapp_options 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: zugefallen|abgeschlossen|zylinder|beratung (or ids from list_whatsapp_options). |
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 | Echoed option |
| 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 annotation readOnlyHint=true already establishes the safety profile, and the description adds meaningful behavior beyond it: 'Link only — no form' clarifies the tool produces a link and performs no sending or UI rendering. This is consistent with the readOnlyHint annotation, so no contradiction 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?
Five short labeled clauses (WHAT, option, Link only, USE, NEXT) each carry distinct information: core purpose, parameter, behavioral caveat, use case, and follow-up routing. There is no filler, and the most essential facts are front-loaded. The label-shorthand style is slightly unconventional but economical.
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 tool with one optional parameter, a readOnlyHint, and an output schema, the description covers purpose, parameter semantics, behavioral scope, and use case. The only notable gap is that it never states the default behavior when option is omitted, though the schema's 'Optional' flag partially mitigates this.
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 description's parameter text (zugefallen|abgeschlossen|zylinder|beratung, or list_whatsapp_options ids) nearly duplicates the schema's own description. Per the baseline rule for high coverage, 3 is appropriate — the description adds no real semantic value beyond the structured 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 identifies the resource ('wa.me link') and the action ('open WhatsApp with a prefab'), and its channel-specific wording distinguishes it from the compose_* siblings (compose_mailto, compose_tel_landline, compose_tel_mobile). It loses a point because 'WHAT: wa.me link' is a noun phrase rather than a clean verb+resource statement, leaving the purpose to be inferred from telegraphic shorthand.
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' explicitly states the intended use case, and 'NEXT: compose_mailto, get_contact' routes the agent to related follow-up tools. However, there are no explicit exclusion rules telling the agent when NOT to use this tool versus those alternatives, so it stops short of the full when/when-not guidance a 5 requires.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
distance_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 declare readOnlyHint=true, so the description adds valuable behavioral context: the result is air distance, not driving distance; no routing occurs; and the response contains from, office, and distance_km. This goes well beyond the safety 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, keyword-labeled, and front-loaded with the core behavior. Every sentence earns its place: input types, output fields, usage intent, routing limitation, and suggested next tools.
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?
Combined with a fully documented schema, an output schema, and a read-only annotation, this description covers inputs, outputs, limitations, and alternatives. An agent has everything needed to call it correctly and to avoid misusing it for driving-time calculations.
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 each parameter precisely. The description groups them into 'Gebiet (slug|plz|name) or lat/lng/icbm' but does not add new meaning beyond that grouping.
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: computes air distance in km from a Gebiet or lat/lng/icbm to the Gewerbesitz. It also distinguishes itself as a rough-proximity tool rather than a routing tool, separating it from sibling geo 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 for rough proximity — not driving time' explicitly states when to use the tool and what it is not for. 'DOES NOT route via OSRM' and 'NEXT: get_geo_office, find_by_geo' give the agent an actionable reason to choose this tool or move to a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_by_areaARead-onlyInspect
WHAT: Alias of find_by_gebiet — multi-match by q/name/slug. Same inputs and outputs. USE when the agent prefers 'area' naming. 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?
With readOnlyHint=true, the description does not need to restate safety, and it adds 'multi-match by q/name/slug' and 'same inputs and outputs' as behavioral context. It stays consistent with the annotation and contributes useful matching 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?
The WHAT/USE/NEXT structure is compact, front-loaded, and every sentence provides a distinct piece of information. No filler or repetition.
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 the output schema, readOnly annotation, and the explicit alias to find_by_gebiet, the remaining context (what find_by_gebiet returns, how matches are ordered) is delegated to the sibling and output schema. That is sufficient for selecting and invoking the tool, though slightly less 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?
Schema description coverage is 100%, so the schema already documents q, name, and slug thoroughly. The description merely lists the same parameter names without adding new 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?
The description identifies the tool as an alias of find_by_gebiet and specifies the query dimensions (q/name/slug) and multi-match behavior, so an agent can tell what it does. It does not fully define 'area' or the result semantics on its own, leaning on the sibling's definition, which prevents a 5.
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 when to choose this tool: when the agent prefers 'area' naming, and points to next tools. It does not explicitly state when not to use it or contrast with other find_by_* siblings beyond the alias relation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_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?
The readOnlyHint annotation already communicates safety, so the description adds useful behavior beyond it: substring matching, multi-match results, umlaut tolerance, and no necessity for an exact slug. It discloses that the tool returns all matching point cards rather than a single exact hit. This exceeds the annotation's minimal coverage.
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 tightly structured with concise labels (WHAT, RETURNS, USE, DOES NOT, NEXT) and front-loads the core purpose. Every sentence contributes value, and there is no redundant repetition of schema content. It is both compact and highly scannable.
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 the output schema, readOnly annotation, and straightforward parameter list, the description covers the tool's purpose, usage, behavioral expectations, and next steps. Minor gaps like behavior when no parameters are supplied or direct alternatives among the find_by_* siblings are not addressed, but these are secondary for a fuzzy search tool.
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, and the description adds meaningful semantics by framing all three parameters as fuzzy, substring-based search inputs and emphasizing multi-match behavior. It clarifies that exact slug matching is not required, which is not directly stated in the schema. This provides additional operational meaning beyond the field-level 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?
The description clearly identifies a specific resource (Gebiete) and operation (multi-match search by q, name, or slug), stating it returns all matching point cards. It distinguishes itself by emphasizing substring matching, umlaut tolerance, and the lack of an exact slug requirement. This is specific enough to tell it apart from the many sibling find_by_* 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?
The description gives a clear usage context ('USE for fuzzy place names') and asserts a key exclusion ('DOES NOT require exact slug'). It also suggests follow-up tools (get_service_area, get_grenze) via 'NEXT'. It does not explicitly contrast with find_by_plz or find_by_keyword, but it provides sufficient contextual guidance for when to choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_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?
Beyond the readOnlyHint annotation, the description discloses key edge behavior: '(0,0) and far points → ok=false outside_service_area' and the return field 'distance_km'. It also clarifies ordering semantics ('nearest N') and that routing is not supported.
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-loaded with labeled sections ('WHAT', 'RETURNS', 'USE', 'DOES NOT', 'NEXT'), making it easy to scan. Every sentence adds value, and there is no redundant 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?
Given the read-only annotation, complete schema descriptions, and presence of an output schema, the description covers the essential behavior, parameter interactions, edge cases, and usage guidance. No critical operational information appears missing for an agent to select and invoke the tool 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 schema already covers 100% of parameters in detail. The description adds interaction semantics by explaining 'Optional radius_km; else nearest N (limit, default 5)' and linking coordinates to the outside_service_area edge case, which goes beyond the schema 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?
The description clearly states the action ('Rank Einsatzgebiete by lat/lng (or icbm)') and the resource being queried. The 'RETURNS items with distance_km' statement makes the purpose concrete and distinguishes it from sibling tools like find_by_plz or find_by_area.
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 explicitly says 'USE for "near this coordinate"' and 'DOES NOT route or drive-time', which tells the agent when to choose this tool and what it will not do. The 'NEXT:' list also points to related tools, providing helpful routing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_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?
Beyond the readOnlyHint annotation, the description discloses the special (0,0) → outside_service_area behavior and the ranking equivalence with find_by_geo. This gives agents useful behavioral context for interpreting results that annotations alone do not provide.
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 well-structured with 'WHAT:', 'USE when', and 'NEXT:' labels. Every sentence earns its place, front-loading the core action before edge cases and suggested follow-ups.
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 fully documented schema and an output schema, the description covers the key usage context, special-case behavior, and next steps. Its only minor gap is not disambiguating from find_by_icbm when raw ICBM coordinates are pasted, but it is otherwise complete for the stated Maps pin scenario.
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 description is not burdened with documenting parameters. It does restate the q/icbm/lat/lng alternatives in prose, but adds minimal new meaning beyond the schema's own parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Paste Google Maps / ICBM coordinates' yields 'nearest ikeytz Gebiete'. It also distinguishes itself by noting the same ranking as find_by_geo and the (0,0) edge case, making it clear which coordinate-paste scenario this tool handles.
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 description explicitly says 'USE when the user pastes a Maps pin', providing a clear trigger condition. It does not, however, explicitly state when not to use it or compare to closely related siblings like find_by_icbm or find_by_geo beyond the ranking note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_by_icbmARead-onlyInspect
WHAT: Same as find_by_geo but prefers icbm string 'lat, lng'. Optional lat/lng/radius_km/limit. (0,0) → outside_service_area. USE when the user pastes ICBM metadata. NEXT: 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 already declare readOnlyHint=true, so the description does not need to cover safety. It adds some behavioral context beyond annotations, such as preferring the ICBM string when both forms are supplied and the '(0,0) → outside_service_area' special case, though '(0,0)' is also present in the schema. The behavior is not richly described, but it is adequate for a read-only 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?
The description is compact and skimmable, using labeled fragments (WHAT/USE/NEXT) that front-load the core purpose and trigger. It earns its length, though 'Same as find_by_geo' is not fully self-contained and shifts some burden onto the sibling's definition.
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 tool with five optional parameters, full schema coverage, an output schema, and a read-only annotation, the description covers the essential selection trigger and special edge case. It could say more about what the tool returns or which sibling to use for plain lat/lng, but the provided information is sufficient for correct tool selection in most cases.
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. The description repeats the parameter list and adds the priority of ICBM over lat/lng, but provides no substantially new meaning beyond what the schema already conveys. Baseline of 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 identifies a specific find operation with a clear input preference (ICBM 'lat, lng') and distinguishes it from the sibling find_by_geo by saying it is 'same as find_by_geo but prefers icbm string.' It does not state what entity is being found, so it relies partly on the sibling's definition, but the name and trigger make the purpose reasonably clear.
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 description gives an explicit trigger: 'USE when the user pastes ICBM metadata.' This is clear, practical guidance for selection. It does not explicitly say when not to use it or fully contrast it with find_by_geo, but the reference to find_by_geo and the input preference imply the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_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?
The readOnlyHint annotation already declares the read-only safety profile, so the bar is lower here. The description adds meaningful behavioral context: it targets maps llms-keywords.txt, returns keyword/url rows, applies a clamped limit, and explicitly does not search www keywords. These are non-obvious behaviors beyond annotation defaults.
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 tightly structured with WHAT/RETURNS/USE/DOES NOT/NEXT, and every phrase earns its place. It is short, scannable, and front-loads the most important facts before the follow-up guidance. There is no filler or repetition of schema details.
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 has an output schema, so return structure is covered elsewhere. The description covers the data source, required parameter, result shape, intended use case, non-www exclusion, and a clear next step. For a search tool with one truly required parameter, the definition is complete enough for an agent to select and 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?
The schema description coverage is 100%, so the baseline is 3. The description confirms that q is required and that results are clamped, but it does not add meaning beyond what the rich schema already provides for q, limit, and locale. The schema itself carries the parameter documentation burden, so no penalty is warranted, but there is also no extra semantic lift.
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 uses a specific verb ('Search') plus a precise resource ('maps llms-keywords.txt (keyword → maps URL)'), immediately making the tool's job unambiguous. It also states the 'DOES NOT search www keywords' exclusion, which distinguishes it from a likely point of confusion. The format clearly communicates the verb, resource, and scope.
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 description gives an explicit use case ('USE for SEO/keyword → Gebiet page') and a clear exclusion ('DOES NOT search www keywords'). It also provides a follow-up workflow ('NEXT: get_service_area / get_embed_map'), but it does not explicitly name alternative sibling tools like find_by_geo or find_by_gebiet for when this tool is not appropriate. Still, the when-to-use guidance is concrete and useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_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?
The annotation only declares readOnlyHint=true; the description adds meaningful behavioral details beyond that, such as returning all matching entries rather than just the first, and the response shape 'items[] point cards + count.' This enriches the agent's understanding of what will happen.
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 well-structured with WHAT, RETURNS, USE, and NEXT labels. Every sentence adds a distinct piece of information, and the most important scoping detail is 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 simple read-only lookup with an existing output schema and full schema coverage, this description covers the essential points: what it returns, when to use it, how to specify the postcode, and what to do next. 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%, so the schema already documents plz and q well. The description's 'plz required (or q as PLZ)' restates the schema's alias relationship without adding new format, constraints, or interaction details, so it stays at the 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?
The description clearly states that the tool returns all Einsatzgebiete matching a PLZ, with the explicit caveat 'not only the first' to distinguish it from tools that might return a single result. It also names the next tool in the workflow, get_service_area(slug), for drilling into one card.
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 usage condition: 'USE when several Stadtteile share a postcode.' It also provides an alternative path with 'NEXT: get_service_area(slug) for one card,' which tells the agent when to move on to a different tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_by_serpARead-onlyInspect
WHAT: Search maps llms-serp.txt blocks by q, path, url, or slug. RETURNS path/url/snippet items. 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?
Annotations provide readOnlyHint=true, so the safety profile is already covered. The description adds useful behavioral context beyond that: it searches a specific local file format rather than live HTML, and returns path/url/snippet items, giving the agent a clear expectation of scope and output granularity.
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?
Each label (WHAT, RETURNS, USE, DOES NOT, NEXT) carries distinct information with no wasted words. The description is front-loaded with the core action and purpose, then covers boundaries and alternatives efficiently.
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 an output schema and well-documented parameters, the description supplies the missing context: the data source scope, the intended use case, the no-scraping boundary, and the follow-up tool. An agent has enough to select and invoke it correctly among many find_by_* 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 description coverage is 100%, so the schema already documents q, url, path, slug, and limit. The description adds a compact grouping of the searchable fields but no additional parameter-level semantics beyond what the schema provides. 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 ('Search maps llms-serp.txt blocks') plus the searchable fields and the returned item shape. The description clearly differentiates from siblings by naming get_serp_snippet for full-block retrieval and noting it does not scrape 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?
Explicitly says when to use it ('USE for title/H1/description SERP cards on maps'), what it does not do ('DOES NOT scrape live HTML'), and names the next appropriate tool ('get_serp_snippet for one full block'). This gives an agent actionable routing guidance beyond the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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 the description does not need to restate safety. It adds meaningful behavioral context: the tool is scoped to maps.ikeytz.com, returns the same core card as site_overview, and excludes the www about body. This goes beyond the annotation without contradicting it.
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 structure front-loads the key facts in a compact, scannable format. Every sentence contributes distinct information, and there is no filler or repetition of the 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?
For a single-optional-parameter read-only tool with schema coverage at 100% and an output schema present, the description is complete. It covers scope, exclusions, related tools, and the intended use case, leaving no critical gap for the agent 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%, and the schema already documents locale fully: enum de, default de, and explanation that maps is German-only and locale is not a www switch. The description adds little parameter-level meaning beyond what the schema already provides, so the baseline score 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 clearly identifies the resource ('About maps.ikeytz.com'), the intended query ('what is this host'), and the exact scope ('52 maps, not www Über-uns corpus'). It also explicitly states what the tool does NOT return, which sharply distinguishes it from related tools like site_overview and www about pages.
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 case ('what is this host'), an explicit exclusion ('DOES NOT return www about body'), and names related/next tools. It also routes the agent to list_locales when a www multi-locale switch is needed, so the agent knows when to pick a different tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_agbARead-onlyInspect
WHAT: www pointer only — AGB live at www.ikeytz.com/agb. maps returns html + note, not the corpus. USE to open/hand off to www MCP. DOES NOT return AGB body text. NEXT: @ikeytz/mcp get_legal(doc=agb).
| 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?
Beyond the readOnlyHint annotation, the description discloses that the tool returns a pointer/html+note rather than the corpus, and that the body text is deliberately not returned. The 'maps' wording is unclear, but the core behavioral limitation is stated directly.
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 short and front-loaded with 'WHAT: www pointer only,' which is good. However, the compressed fragments and the unclear 'maps returns html + note' clause make it feel cryptic rather than cleanly concise.
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 that this is a zero-argument pointer tool with an output schema and a read-only annotation, the description covers the essential context: the URL, the purpose, the non-return of body text, and the alternative tool for the full document. The ambiguity around 'maps' prevents a perfect score.
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 has zero parameters and the schema already documents that no arguments are needed, so the baseline for this dimension is 4. The description adds no parameter-specific meaning, but none is needed.
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 identifies the tool as a www pointer to the AGB page at www.ikeytz.com/agb and explicitly states it does not return the AGB body text. The 'maps returns html + note, not the corpus' clause is ambiguous and slightly muddles 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 explicitly says to use this tool for opening or handing off to the www MCP, and names get_legal(doc=agb) as the next step for the actual document body. This gives the agent a clear when-to-use and when-not-to-use boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ai_pageARead-onlyInspect
WHAT: Read maps /ai-pages/de/{slug}.txt when present; else www pointer for the path. path or slug. RETURNS text for maps AI pages. USE for agent-ready Gebiet prose. NEXT: get_service_area, get_lage.
| 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?
Beyond the readOnlyHint annotation, the description discloses a real behavioral trait: it reads the maps file 'when present; else www pointer for the path'. It also clarifies that the return value is text. The 'www pointer' phrase is vague, but there is no annotation contradiction and the read-only nature is accurately represented.
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 labeled WHAT / RETURNS / USE / NEXT structure is compact, front-loaded, and mostly free of filler. The telegraphic style and the ambiguous 'www pointer' phrase keep it from 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?
For a read-only tool with no required parameters, an output schema, and 100% schema coverage, the description covers the target resource, fallback behavior, return type, and intended use case. The main gaps are the unexplained 'www pointer' and the absence of explicit sibling selection guidance.
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 input schema already explains path, slug, and locale in detail. The description only adds 'path or slug', which is a marginal restatement of the schema. Baseline 3 applies because 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?
Description opens with the verb 'Read' and a precise resource, 'maps /ai-pages/de/{slug}.txt', and distinguishes the tool by calling it 'maps AI pages' with 'agent-ready Gebiet prose'. It does not fully contrast with sibling tools like get_ai_txt or get_page_summary, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'USE for agent-ready Gebiet prose' gives a clear intended context, and 'NEXT: get_service_area, get_lage' suggests related follow-ups. However, the description does not state when not to use this tool or name alternatives for the same task; the locale-based exclusion lives in the schema rather than the tool description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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 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. | |
| 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. |
| body | No | UTF-8 text window after offset/limit |
| 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 | Alias/window of body when present |
| 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. |
| 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds that the tool maps /.well-known/ai.txt 1:1, clarifying it is a direct read of a static resource. The readOnlyHint annotation already covers the safe-read behavior, and no contradictions are present. However, it does not disclose error handling, encoding, or content shape beyond what the schema and output schema already imply.
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 uses clear WHAT/USE/NEXT labels to front-load the key information. Every segment earns its place, though the 'ai-train=no' parenthetical is somewhat cryptic and could be clearer.
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 discovery-file tool with fully documented parameters and an output schema, the description provides enough context: what it aliases, what it maps, when to use it, and where to go next. The only minor gap is that the exact meaning of 'ai-train=no' is left unexplained.
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 limit and offset parameters are fully documented in the schema. The description itself adds no parameter-level meaning, so the baseline score 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 clearly states this tool is an alias for get_discovery(which=ai-txt) and maps /.well-known/ai.txt 1:1, making the resource and operation explicit. It also distinguishes itself from nearby siblings like get_discovery and get_llms_txt by naming the alias target and the next tool.
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 description explicitly says 'USE for crawl/train policy', giving a concrete scenario for when to invoke this tool. It also points to get_llms_txt as the next tool, which implies an alternative, though it does not fully explain the trade-off between the two.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_auswahl_itemBRead-onlyInspect
WHAT: www pointer only — one Auswahl item on www /auswahl/{slug}. slug required. maps returns html to that path. NEXT: www get_auswahl_item.
| 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?
With readOnlyHint=true, the safety profile is already covered by annotations. The description adds minor behavioral context by calling it a 'www pointer only' and mentioning that 'maps returns html to that path,' but these phrases are cryptic and do not clearly explain what the agent should expect beyond the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with WHAT/NEXT labels, but the 'NEXT: www get_auswahl_item' line is redundant and the sentence 'maps returns html to that path' is unclear. It is concise but not cleanly structured for an AI agent.
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 with only two parameters, an output schema, and a read-only annotation, so the description does not need to explain return values. However, the cryptic phrasing and lack of routing guidance leave enough gaps that the description is only minimally 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%, so the description does not need to explain the parameters. It only repeats that slug is required, which the schema already states, and adds no meaningful semantics 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?
The description states a specific verb and resource: it retrieves one Auswahl item at the www path /auswahl/{slug}, and notes that slug is required. This distinguishes it from list_auswahl, which would return multiple items, even though the phrase 'www pointer only' and the trailing 'NEXT: www get_auswahl_item' add some ambiguity.
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?
There is no explicit guidance about when to use this tool versus alternatives such as list_auswahl or get_wissen_entry. The description implies it is for a single Auswahl item by slug, but it never states conditions, exclusions, or sibling tool routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_business_identityARead-onlyInspect
WHO: Inhaber, brand, legalName, hours, NAP, office coords. walkIn=false — mobile only. USE for LocalBusiness / impressum-grade facts on maps. DOES NOT update records. NEXT: get_contact, get_geo_office, get_impressum.
| 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?
Annotations already declare readOnlyHint=true, and the description reinforces it with 'DOES NOT update records.' It also adds a non-obvious behavioral/data fact: 'walkIn=false — mobile only.' This is useful context beyond the annotation, though it mostly describes the business entity rather than tool 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?
The description is four compact, scannable segments (WHO/USE/DOES NOT/NEXT) with no filler. Each segment earns its place and key information is 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?
Given a single optional parameter, a full output schema, and a readOnly annotation, the description covers the scope of data, use case, exclusivity, and follow-up tools. The only small gap is an explicit statement that the tool can be called with no arguments, but the schema/context already conveys this.
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 parameter is fully documented in the schema, including its German-only behavior and ignored values. The tool description adds no parameter-level information, 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 explicitly lists the returned data fields (Inhaber, brand, legalName, hours, NAP, office coords) and states 'USE for LocalBusiness / impressum-grade facts on maps.' This clearly identifies the tool as a getter for business identity and distinguishes it from update tools with 'DOES NOT update records.' It only misses a direct verb phrase, relying on the name for 'get.'
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 case ('USE for LocalBusiness / impressum-grade facts on maps') and an exclusion ('DOES NOT update records'). The 'NEXT: get_contact, get_geo_office, get_impressum' hints at related tools but doesn't explicitly state when to choose them over this one, so the guidance is more implied than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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?
The readOnlyHint annotation already signals a safe read; the description adds an explicit behavioral disclaimer that the tool 'DOES NOT open tickets or send messages' and contributes domain context like 'Public NAP' and 'walkIn=false'. It does not go into availability/caching details, but given the low side-effect surface and the existing annotation, this is a solid disclosure.
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 effectively front-loaded: WHAT enumerates the payload, USE gives the trigger, DOES NOT sets boundaries, and NEXT provides routing. Every sentence earns its place, and the labeled structure makes scanning easy for an agent.
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 low-complexity getter with one optional parameter, a rich parameter schema, readOnlyHint, and an output schema, the description covers purpose, usage, exclusions, and follow-up tools. Nothing an agent needs to decide to call it or interpret its side effects 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 description itself contributes no parameter-level meaning, but schema description coverage is 100% and the schema's locale description is highly detailed (German-only, default de, ignored other values, distinction from www list_locales). Per the high-coverage baseline, the schema carries the parameter semantics adequately, so no penalty beyond 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?
The description opens with 'WHAT: Public NAP' and enumerates exactly which contact fields are returned (mobile, landline, fax, email, mapsEmail, WhatsApp, address, office coords), making the verb+resource mapping explicit. It also distinguishes itself from action-oriented siblings by stating 'DOES NOT open tickets or send messages' and listing NEXT compose tools, so an agent can tell it apart from compose_* and list_* 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 for call/WhatsApp/mail CTAs' explicitly states when the tool should be selected, and 'DOES NOT open tickets or send messages' defines exclusions. The NEXT line names the concrete alternatives (compose_tel_mobile, compose_whatsapp, compose_mailto, list_whatsapp_options) that should be used when the agent wants to take an action rather than fetch contact data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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 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. | |
| 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?
Annotations already declare readOnlyHint=true, so no mutation caveats are needed. The description adds that the tool reads the specific maps/llms-copyright.txt file and supports optional offset/limit, giving useful behavioral context beyond the annotation; the output schema covers 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?
The WHAT/USE/NEXT labels make the role, trigger, and next step scannable in three short fragments 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 read-only list/file getter with an output schema and fully documented optional pagination parameters, the description supplies the source path, language scope, and intended use. Nothing essential for choosing or invoking the tool 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 already documents limit and offset defaults and paging behavior. The description only repeats 'Optional offset/limit' without adding 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?
The description states a specific verb and resource: retrieving English map copyright text from maps/llms-copyright.txt, and frames the use case as EN map authorship citations. The sibling name get_urheberrecht is called out via NEXT, which helps an agent distinguish it from the likely German counterpart.
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' is an explicit invocation condition. 'NEXT: get_urheberrecht' names the natural alternative, though it infers rather than states the when-not condition (e.g., German citations).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_datenschutzARead-onlyInspect
WHAT: www pointer only — Datenschutz on www.ikeytz.com. maps returns html link. DOES NOT return the privacy policy body. NEXT: www MCP.
| 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 only declare readOnlyHint; the description adds meaningful behavioral context by explicitly stating that the tool returns only a pointer/link and does NOT return the privacy policy body. This prevents the agent from expecting full policy content and sets accurate output expectations.
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 short and front-loaded with the core limitation ('www pointer only'). The 'WHAT:/NEXT:' structure is efficient, though 'maps returns html link' is slightly unclear and could be rewritten for smoother 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?
Given zero parameters, an output schema, and a readOnly annotation, the description covers the essential facts: what the tool returns, what it does not return, and the domain. It is complete enough for correct invocation, though it could name sibling alternatives for better routing.
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 has zero parameters, so the description need not clarify parameter meanings. The baseline of 4 applies here, and the description appropriately focuses on behavior rather than inputs.
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 names the resource (Datenschutz on www.ikeytz.com) and clarifies the exact behavior: it returns an HTML link/pointer, not the privacy policy body. This distinguishes it from the many sibling get_* tools, though the phrasing 'maps returns html link' is somewhat awkward.
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?
There is no explicit guidance on when to use this tool instead of related tools such as get_legal, get_impressum, or other content-returning getters. The 'NEXT: www MCP' line hints at next steps but does not explain selection criteria or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_discoveryARead-onlyInspect
WHAT: 1:1 mirror of a maps discovery file (UTF-8 text/JSON). 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-impressum-kontakt, llms-orte-geo, llms-urheberrecht, llms-copyright, llms-mcp-server, llms-mcp-web, robots, sitemap-txt, sitemap-xml. Optional offset/limit line window. 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 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. | |
| 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-impressum-kontakt, llms-orte-geo, 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. |
| body | No | UTF-8 text window after offset/limit |
| 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 | Alias/window of body when present |
| 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. |
| 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds value beyond that by disclosing the file format (UTF-8 text/JSON), the 1:1 mirror behavior, the optional offset/limit line window, and the behavior for missing files ('DOES NOT invent missing files (missing=true)'). This is solid supplemental behavioral context.
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 uses helpful labels (WHAT, USE, DOES NOT, NEXT) and is information-dense without being excessive. It repeats some examples already present in the schema, but the overall structure makes the key facts easy to scan.
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 retrieval tool with a fully documented schema, output schema, and readOnlyHint annotation, the description provides enough context: what the tool returns, when to use it, what it does not do, and which sibling tools to use next. Nothing critical is missing for correct invocation.
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 three parameters thoroughly. The description adds a little context via 'which is required' and 'Optional offset/limit line window', but most parameter meaning is already in the schema, and the repeated id list does not add new 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 ('get') and resource ('maps discovery file') and clearly describes a 1:1 mirror of that file. It lists concrete discovery ids and explicitly names sibling aliases (get_llms_txt / get_ai_txt), distinguishing this tool from related getters and structured-search 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?
The description explicitly says 'USE for agent-ready catalogs and robots/sitemap' and directs to alternatives: 'NEXT: find_by_keyword / find_by_serp for structured search'. It also tells the agent that missing files are not invented, which helps decide when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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 + canonicalUrl. USE for embedding or linking a Gebiet map. NEXT: get_geo_api, get_grenze, get_lage.
| 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. |
| 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 already declare readOnlyHint=true, so the safety profile is covered. The description adds useful behavioral context beyond that, including the canonical URL form, the supported lookup modes, and the return value ('area card + canonicalUrl'). No contradiction with annotations is present.
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 well-structured with WHAT, RETURNS, USE, and NEXT labels. Every segment earns its place, and the most important information is 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?
With a fully documented input schema, an output schema, and a read-only annotation, the description covers the essential selection and invocation context. It states the use case, lookup modes, and return shape. It could be slightly stronger by mentioning when to prefer a sibling like find_by_plz or resolve_maps_url, but 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%, so the parameters are already fully documented in the input schema. The description merely lists slug, plz, and name as lookup keys without adding new semantic details; the schema already explains lookup order and edge cases like shared PLZ.
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 the tool's purpose: it returns the canonical map page URL for a Gebiet, for use in iframe/src and Visitenkarte. It identifies the lookup keys (slug|plz|name) and the return shape (area card + canonicalUrl). It does not explicitly distinguish itself from close siblings like resolve_maps_url, so it stops short of full sibling differentiation.
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 description gives explicit usage context: 'USE for embedding or linking a Gebiet map.' This tells the agent when the tool is appropriate. However, it does not state when not to use it or mention alternatives such as resolve_maps_url, so exclusions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_emergencyBRead-onlyInspect
WHAT: www pointer only — Notfall-Türöffnung page on www. maps returns html; use get_contact / compose_tel_mobile here for phones. DOES NOT dispatch. NEXT: compose_tel_mobile, www get_emergency.
| 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 declare readOnlyHint=true, so the safety profile is covered. The description adds 'DOES NOT dispatch' and 'www pointer only,' which are useful behavioral signals, but it never defines what a 'pointer' is or what the HTML/maps distinction means for the caller.
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 short and uses a 'WHAT'/'NEXT' structure, but it reads as telegraphic fragments ('maps returns html; use get_contact / compose_tel_mobile here for phones') rather than clear prose. Compactness is achieved at the cost of comprehensibility.
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 input schema and output schema cover the return shape and locale semantics, and the description gives some workflow context. However, the core output concept ('www pointer only') is left unexplained, and the phrase 'NEXT: compose_tel_mobile, www get_emergency' is confusing enough to leave the overall behavior incomplete.
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 parameter is thoroughly documented with enum, default, and behavior for ignored values. The tool description itself adds no parameter-level information, so the baseline of 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 names a concrete resource (the Notfall-Türöffnung page) but expresses the action as 'www pointer only' rather than an explicit verb like 'returns' or 'fetches.' The phrase 'maps returns html' further blurs what get_emergency itself actually returns.
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 useful routing guidance: use get_contact / compose_tel_mobile for phones, and it explicitly says 'DOES NOT dispatch,' which helps the agent avoid misuse. It also suggests next steps with 'NEXT: compose_tel_mobile, www get_emergency,' though it never states the positive 'use this when...' condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_faqCRead-onlyInspect
WHAT: www pointer only — one FAQ answer lives on www. Optional id/q for www; maps returns /faq html. 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?
Annotations already provide readOnlyHint=true; the description adds that maps returns an HTML page and acts as a pointer to www rather than the terminal answer source. This is useful but phrased ambiguously, and the 'NEXT' instruction reads more like a directive than a disclosed 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?
The description is short, but it sacrifices clarity for brevity, relying on jargon ('www pointer only', 'maps returns /faq html', 'NEXT:') that requires inference. It is terse but not well-structured for an agent.
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 (0 required params, no nesting, output schema present), yet the description leaves the core return value ('/faq html') and the routing semantics ambiguous. An agent cannot confidently predict what invoking this tool yields or when to chain it with the www-side get_faq.
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 fully documents q, id, and locale — including that locale is German-only and other values are ignored. The description's 'Optional id/q for www' restates the schema without adding new meaning, 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?
The description indicates this tool is a 'www pointer' to a FAQ answer that lives on www, with maps returning '/faq html'. The verb+resource are inferable ('point to FAQ on www'), but the phrasing is cryptic and fails to plainly state what the tool does and what an agent gets back.
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: www get_faq' line hints that the actual answer must be fetched from a www-side tool, but it never states when to call this tool versus siblings like list_faq or get_llms_txt, nor does it explain the routing condition clearly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_geo_apiARead-onlyInspect
WHAT: Public embed JSON URL https://maps.ikeytz.com/api/v1/embed/ort/{slug} (point + Grenze on that endpoint). Lookup slug|plz|name. RETURNS URL pointer + area card; note that the MCP payload itself is not the polygon. USE to fetch/open the public JSON. NEXT: get_grenze for GeoJSON polygon inside MCP.
| 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 pointer; 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. |
| 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?
Beyond the readOnlyHint annotation, the description reveals that the tool returns a URL pointer and area card rather than the polygon itself, which is critical behavioral context. It also specifies the endpoint contains point and Grenze data without delivering the polygon payload in MCP.
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 highly structured using WHAT, RETURNS, USE, and NEXT labels. Every segment adds distinct operational value, and the essential disambiguation about the polygon payload is front-loaded in the RETURNS section.
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 that an output schema exists and the tool has three optional parameters fully documented in the schema, the description covers the needed usage context, including the endpoint, return type, and relationship to get_grenze. It is complete for an agent to select and invoke this tool 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 schema already documents all three parameters in detail with 100% coverage, so the baseline is 3. The description adds only the shorthand 'Lookup slug|plz|name' without materially meaning more than the schema's parameter descriptions, though the URL pattern does clarify how slug maps to the endpoint.
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 action — fetch/open the public embed JSON — and identifies the exact URL pattern with the resource ({slug}). It also distinguishes itself from get_grenze by explicitly noting what it returns and what it does not return.
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 contains an explicit 'USE' directive telling the agent when to call this tool, and a 'NEXT' pointer directing the agent to get_grenze when a GeoJSON polygon is needed. This gives clear routing between this tool and the most relevant alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_geo_officeARead-onlyInspect
WHO/WHAT: Gewerbesitz (registered office) coordinates and street in Ludwigsburg. walkIn=false always — mobile locksmith, not a shop counter. RETURNS street, postal, city, lat, lng, google_maps/icbm, walkIn. USE for NAP/schema or distance_to_office. DOES NOT accept walk-in customers or bookings. NEXT: get_contact, distance_to_office, 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 |
|---|---|---|
| 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 |
| 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 |
| 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' |
| 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?
The annotations declare readOnlyHint=true, and the description adds meaningful behavioral context beyond that: 'walkIn=false always — mobile locksmith, not a shop counter' and 'DOES NOT accept walk-in customers or bookings.' It also discloses the return fields, though the output schema may already cover some of that detail.
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 well-structured with scannable labels: WHO/WHAT, RETURNS, USE, DOES NOT, NEXT. Every sentence adds useful information, and the most important behavioral constraint (walkIn=false) is front-loaded. There is no fluff or repetition.
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, fully documented parameter and an output schema. The description fills the remaining context by explaining the business context, the return values, the intended use cases, and the walk-in limitation. For an agent needing to correctly invoke the tool, nothing essential 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?
Even though the schema covers the 'locale' parameter at 100%, the description adds substantial practical meaning: 'maps is German-only (de). Omit or pass de. Other values are ignored; URLs stay https://maps.ikeytz.com/…' It also clarifies the distinction from the www multi-locale switch and points to list_locales as the alternative. This far exceeds a plain schema definition.
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: 'Gewerbesitz (registered office) coordinates and street in Ludwigsburg.' It also differentiates the tool from siblings by explicitly noting 'walkIn=false always — mobile locksmith, not a shop counter,' which prevents confusion with other location-related 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?
The description gives explicit usage context: 'USE for NAP/schema or distance_to_office.' It also lists relevant next steps and clearly states what the tool does not do: 'DOES NOT accept walk-in customers or bookings.' This provides actionable guidance for selecting this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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?
The readOnlyHint annotation already signals a safe read operation, and the description adds useful lookup behavior on top: slug-first ordering when parameters are combined, first-match-wins for shared PLZ, and case-insensitive name matching. It also states exactly what gets returned.
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 uses a compact, labeled structure (WHAT, Lookup, RETURNS, USE, NEXT) that front-loads purpose, output, and usage. Every segment earns its place, and there is no filler or redundant restating of the input 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?
For a read-only tool with three optional parameters, full schema coverage, and an output schema, the description is nearly complete: it covers lookup order, return fields, the intended use case, and related next tools. The only minor gap is not specifying what happens if none of slug/plz/name are provided, but the schema already marks all as optional.
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 parameter descriptions already explain PLZ sharing, name fallback, and slug-first lookup order. The tool description's 'Lookup slug|plz|name' line is a concise summary but does not add meaningful semantics beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool returns: German history text for one Einsatzgebiet Visitenkarte, with the specific lookup fields (slug, plz, name) and output fields (slug, name, geschichte). The 'USE for place history prose on the map page' line makes it easy to distinguish from the many get_* sibling 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 a clear use context ('USE for place history prose on the map page') and points to related tools in NEXT (get_lage, get_ai_page). It does not explicitly say when not to use this tool, but the map-page context and schema note about find_by_plz provide enough orientation for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_grenzeARead-onlyInspect
WHAT: OSM Gebietspolygon for one Einsatzgebiet as GeoJSON FeatureCollection inside the MCP result. Lookup slug|plz|name. RETURNS hasPolygon, polygon, point, osmRelationId/osmWayId, via. USE when the agent needs the boundary geometry. DOES NOT replace get_geo_api (that remains the URL pointer). NEXT: 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?
With readOnlyHint=true already covering safety, the description adds meaningful behavior: it names the return fields (hasPolygon, polygon, point, osmRelationId/osmWayId, via) and clarifies the output is a GeoJSON FeatureCollection. There is no contradiction with 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?
The description is compact, front-loaded, and every labeled segment (WHAT, RETURNS, USE, DOES NOT, NEXT) earns its place. It packs purpose, return fields, usage trigger, and an exclusion into a few short lines.
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 an output schema, the description covers what the tool returns, when to use it, and what it does not replace. It does not state behavior when no parameters are supplied or when lookup fails, but the schema and output schema already carry much of that burden.
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 already explains slug priority, PLZ first-match behavior, and name substring matching. The description only restates 'Lookup slug|plz|name', adding no new parameter semantics 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?
The description identifies a specific verb+resource: returns the OSM Gebietspolygon for one Einsatzgebiet as a GeoJSON FeatureCollection, with lookup by slug|plz|name. It actively separates itself from get_geo_api by stating it is not the URL pointer, so the tool's unique purpose is clear.
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 agent needs the boundary geometry') and an explicit counter-rule ('DOES NOT replace get_geo_api'). It does not, however, explain when to prefer related siblings like get_lage/get_embed_map or find_by_plz, so the routing guidance is good but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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?
Annotations already declare readOnlyHint=true. The description adds value beyond that by describing the response shape ('title/h1 + 52 Gebiet links') and a meaningful limitation ('DOES NOT include www prices'). This is useful behavioral context without contradicting 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-loaded with WHAT/USE/NEXT sections, and nearly every fragment adds value. The 'Call with {}' fragment is redundant with the schema, but the overall structure is highly scannable and 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 zero-parameter read-only tool with an output schema, the description supplies everything needed to select and invoke it: purpose, resource URL, expected content, exclusions, and follow-up tools. Nothing important appears 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 has zero parameters and schema description coverage is 100%, so there is no parameter burden for the description to carry. The description's 'Call with {}' merely restates what the schema already states, but no additional parameter semantics are needed.
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 resource ('maps hub card at https://maps.ikeytz.com/'), exactly what it returns ('title/h1 + 52 Gebiet links'), and what it is not ('not a single Visitenkarte'). This clearly distinguishes it from sibling get_* tools that return individual entries.
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 description explicitly says to use this as 'the maps landing overview' and notes it 'DOES NOT include www prices,' which is a useful exclusion. It names follow-up tools ('NEXT: get_service_area, list_service_areas'), though it does not spell out explicit when-not-to-use conditions for every sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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 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. | |
| 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 that this is a safe read operation. The description adds useful behavioral context by naming the exact source file and clarifying that the content is plain-text NAP/legal imprint. It does not contradict the annotation and gives enough beyond the schema to help an agent understand what this tool actually reads.
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: WHAT names the resource first, USE gives the purpose, and NEXT supplies routing to alternatives. Every clause carries useful information 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 simple read-only paginated text retrieval tool with 0 required parameters and a full output schema, the description covers the source, purpose, pagination option, and sibling alternatives. Nothing essential is missing for an agent to select and 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 description coverage is 100%, so the schema already fully documents offset and limit with detailed semantics. The description only repeats 'Optional offset/limit', adding no new meaning beyond the structured parameter definitions.
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 names a specific resource ('maps /llms-impressum-kontakt.txt') and a clear purpose: retrieving Impressum/Kontakt text for NAP/legal imprint on maps. It also distinguishes itself from sibling tools by pointing to get_contact and get_business_identity as next steps and noting the HTML variant is at /impressum.
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 for NAP/legal imprint on maps' phrase gives a clear intended context. The 'NEXT' pointer provides alternatives, but it does not explicitly state when to choose those alternatives over this tool, so it stops short of a full when/when-not specification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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?
Annotations only declare readOnlyHint; the description goes well beyond that by disclosing that the tool returns no totalEur, ignores whenKey/breakdown for the pointer payload, is German-only, and leaves URLs without a locale prefix. These are exactly the unexpected behaviors an agent needs to know.
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 dense sentences with WHAT/NEXT labels and front-loaded scoping; no filler. One minor deduction because the 'NEXT:' line is a slightly cryptic developer-style pointer rather than a plain instruction, though it remains informative.
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 description, schema, readOnly annotation, and output schema together cover return type, ignored params, locale behavior, and the correct alternative tool. It is complete for a pointer tool, but the situationKey requirement ambiguity and the unexplained 'Berlin clock/whenKey' reference keep it from being fully self-sufficient.
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 covers 100% of parameters and already documents locale, whenKey, breakdown, and situationKey. The description adds useful 'for symmetry' semantics that the params are mostly ignored in the maps pointer payload. However, the situationKey description says 'Required for www' while the schema marks it required here, leaving some ambiguity about whether/how it is required on maps.
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 immediately identifies the tool as a 'www pointer only' and states exactly what it returns: an html link to /preise, not totals, and explicitly 'DOES NOT return totalEur.' This distinguishes it from the actual @ikeytz/mcp get_invoice_line_items tool and from siblings like get_prices.
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 names the proper alternative for real invoice line items ('NEXT: @ikeytz/mcp get_invoice_line_items') and routes whenKey/Berlin-clock needs to get_ort_datetime here. The 'maps accepts ... for symmetry' phrasing tells the agent this maps tool is only for pointer/link purposes, giving clear when-to-use versus when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lageARead-onlyInspect
WHAT: Lage (location description) text for one Einsatzgebiet Visitenkarte. Lookup slug|plz|name. RETURNS slug, name, lage. USE for human-readable geography prose. NEXT: get_geschichte, 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. |
| 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, and the description's 'Lookup' and 'RETURNS' wording confirms a read-only operation. The description adds the single-object scoping ('for one Einsatzgebiet'), which is useful, but it doesn't go into edge cases like first-match-wins behavior — that detail lives in the parameter schema. This is adequate given the annotation coverage.
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 key information with clear 'WHAT', 'RETURNS', 'USE', and 'NEXT' labels. Every sentence earns its place and there is no filler or redundancy.
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 lookup tool with full parameter schema coverage and an output schema present, the description covers selection context (geography prose), lookup keys, and return fields. The schema handles the remaining edge cases (e.g., first-match PLZ), so nothing critical is missing for an agent to invoke 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 description coverage is 100%: each parameter (plz, name, slug) is already well documented with examples and lookup rules. The description only restates the lookup keys as 'slug|plz|name', adding no new meaning beyond the schema. A 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 states a specific resource ('Lage (location description) text for one Einsatzgebiet Visitenkarte'), the lookup keys (slug|plz|name), and the exact return fields (slug, name, lage). This is unambiguous and distinguishes the tool from siblings like get_geschichte and get_service_area by its geography-prose focus.
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 for human-readable geography prose' phrase gives a clear context for when to select this tool. It also names related next tools ('NEXT: get_geschichte, get_service_area'), but does not explicitly state when those should be used instead of this one, so it stops short of full exclusion logic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_legalARead-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?
readOnlyHint already signals a safe read operation, and the description adds meaningful behavioral context: maps docs are served via discovery text, www docs return only URL pointers, and the tool intentionally excludes www legal HTML bodies. This is beyond what the annotation alone conveys.
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 labeled WHAT/USE/NEXT format packs a lot of information into a very compact space with no filler. Each segment earns its place, and the most important routing distinction is 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?
With an output schema present and rich parameter documentation, the description covers the essential routing behavior, citation use case, and exclusions. It could be slightly clearer about how locale interacts with the maps vs www split, but the schema already covers that.
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 four parameters thoroughly. The description mostly paraphrases the doc enum split and the offset/limit applicability rather than adding new semantic 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 opens with a clear 'Legal doc router' identity and enumerates the exact doc values split by maps vs www behavior. It distinguishes itself from the many sibling get_* legal tools by specifying what it serves and pointing to get_urheberrecht/get_impressum as shortcuts.
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 explicitly states 'USE for citations,' clearly says this tool 'DOES NOT serve www legal HTML body on maps,' and names the relevant alternatives: get_urheberrecht/get_impressum shortcuts and www for AGB body. This gives the agent actionable when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_linksARead-onlyInspect
WHAT: maps discovery URLs — hub, mcp, server-card, agent-skills, llms, registry search, npm @ikeytz/maps-mcp. USE as the machine bookmark set. NEXT: get_discovery, get_llms_txt.
| 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 known. The description adds that the tool maps URLs and serves as a bookmark set, which gives some behavioral context. It doesn't contradict annotations and doesn't overpromise. With annotations covering safety and an output schema present, this is sufficient.
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 concise and well-structured with clear labels (WHAT, USE, NEXT). It front-loads the core purpose, adds a practical usage note, and identifies follow-up tools—all in three short segments with zero waste. Excellent formatting for agent consumption.
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 tool with one optional parameter and an output schema, the description is mostly complete. It states what URLs are covered, how to use it, and what to do next. The only minor gap is that it doesn't describe the output format, but the output schema likely handles that. The presence of annotations further reduces the burden.
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's description for the locale parameter is detailed: it explains allowed values ('de'), the default, that other values are ignored, and points to an alternative for multi-locale. The tool description itself doesn't mention parameters, but since the schema fully covers it, the baseline of 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 states a clear verb and resource: 'maps discovery URLs' and explicitly lists the types of URLs covered (hub, mcp, server-card, agent-skills, llms, registry search, npm). It also adds a usage note ('USE as the machine bookmark set'), which clarifies its role. However, it doesn't explicitly differentiate from sibling tools beyond mentioning get_discovery and get_llms_txt as next steps, so it's clear but not perfectly differentiated.
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 description gives a usage suggestion ('USE as the machine bookmark set') and points to next tools, implying when to follow up. It doesn't explicitly state when not to use this tool or compare with alternatives. The schema description for locale does provide an alternative for locales (list_locales on www), but the main description lacks such exclusions, so usage guidance is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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 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. | |
| 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. |
| body | No | UTF-8 text window after offset/limit |
| 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 | Alias/window of body when present |
| 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. |
| 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds the disclosure that this is an alias of get_discovery and returns 'machine/catalog text'. This gives useful semantic context beyond the structured fields, though it does not describe pagination clamps or output formatting in detail.
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, labeled, and front-loaded with WHAT, USE, and NEXT. Every clause provides actionable information 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?
The tool is simple, has an output schema, readOnlyHint annotation, and the description covers its alias relationship, purpose, and next-step siblings. Nothing an agent needs to select and 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 description coverage is 100%, so the parameters are already fully documented. The description only restates that offset/limit are optional and does not add substantive meaning 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 it is an alias of get_discovery(which=llms-mcp-server) for serving the maps MCP catalog, which is a specific verb+resource. The reference to sibling tools get_llms_mcp_web and get_links helps differentiate it from neighboring retrieval 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?
Explicitly states when to use it ('USE when an agent needs the server-side llms MCP catalog') and points to follow-on alternatives with 'NEXT'. It stops short of explicitly naming situations where another sibling should be chosen instead, so it is clear context without full exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_llms_mcp_webARead-onlyInspect
WHAT: Alias of get_discovery(which=llms-mcp-web) — web/UI-oriented MCP catalog on maps. Optional offset/limit. USE for browser/agent web discovery copy. NEXT: get_llms_mcp_server, get_mcp hub HTML /mcp-hub.
| 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. | |
| 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. |
| body | No | UTF-8 text window after offset/limit |
| 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 | Alias/window of body when present |
| 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. |
| 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. |
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 some behavioral context by noting it is an alias, web/UI-oriented, and supports optional offset/limit, but it does not go deep into pagination clamps or return behavior; however, an output schema exists to cover return structure.
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 structured into WHAT, USE, and NEXT segments. Every part contributes useful routing or scoping information 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?
Given the simple two-parameter schema, full schema coverage, output schema presence, and read-only annotation, the description supplies enough extra routing context. It identifies the source alias, its web-oriented purpose, pagination options, and related tools, leaving no critical gap for correct invocation.
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 detailed descriptions for both limit and offset. The description only restates 'Optional offset/limit,' adding no semantic value beyond the schema, so the baseline of 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?
Description states the tool is an alias of get_discovery(which=llms-mcp-web) and identifies it as a 'web/UI-oriented MCP catalog on maps,' making the resource and scope explicit. It also differentiates itself from sibling tools by naming get_llms_mcp_server and the MCP hub HTML as distinct alternatives.
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 provides a use directive: 'USE for browser/agent web discovery copy.' It also names next-step alternatives, which helps an agent decide when this tool is appropriate versus related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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 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. | |
| 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. |
| body | No | UTF-8 text window after offset/limit |
| 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 | Alias/window of body when present |
| 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. |
| 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety/read-only profile. The description adds value by disclosing the alias relationship to get_discovery(which=llms), the 1:1 correspondence with /llms.txt, and the optional offset/limit behavior. There is no contradiction with the read-only 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, front-loaded with WHAT and USE, and each segment earns its place. The NEXT line is terse and informative rather than filler, and the structure makes the key facts easy to scan.
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 retrieval tool with an output schema and fully documented parameters, the description provides the essential selection context: alias, primary use, pagination capability, and related tools. It doesn't fully explain when to avoid this tool in favor of alternatives, but the NEXT list and sibling names partially compensate.
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 input schema provides 100% coverage of both parameters, including detailed semantics, defaults, and pagination guidance. The description only says 'optional offset/limit,' which adds no new meaning beyond the schema. Baseline 3 is appropriate because 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 names a concrete resource (/llms.txt), identifies the tool as an alias for get_discovery(which=llms), and labels it 'the primary maps machine index.' This is specific and clearly not a tautology. However, it doesn't explicitly differentiate get_llms_txt from similar sibling tools like get_links or get_sitemap_txt, so it stops short of full sibling distinction.
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' provides clear guidance on when to prefer this tool. The NEXT pointer to related tools hints at alternatives, but there are no explicit when-not conditions or selection criteria explaining when to choose get_ai_txt, get_sitemap_txt, or get_links instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nutzungsbedingungenARead-onlyInspect
WHAT: www pointer only — Nutzungsbedingungen on www.ikeytz.com. maps returns html link. DOES NOT return the body. NEXT: www MCP / open html.
| 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?
Beyond the readOnlyHint annotation, the description discloses a critical behavioral trait: the tool returns only a link and not the terms-of-use body. It also tells the agent that a follow-up action ('www MCP / open html') is required, which prevents an incorrect expectation of receiving full content.
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 short and front-loaded with the most important fact ('WHAT: www pointer only'). The labeled fragments are efficient, though the phrase 'maps returns html link' is slightly ambiguous and the all-caps structure is telegraphic rather than polished.
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-parameter, read-only pointer tool with an output schema, the description covers purpose, return type, what it does not return, and the recommended next step. Nothing essential is missing for an agent 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?
The tool takes zero parameters and the schema already covers this completely, so no additional parameter explanation is needed. The description does not need to compensate for missing parameter docs, and the 0-parameter baseline 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 clearly states the resource ('Nutzungsbedingungen on www.ikeytz.com') and the exact behavior: it returns only an HTML link/pointer, not the body. It also distinguishes itself from content-returning sibling tools by explicitly saying 'DOES NOT return the body.'
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?
Usage is implied through phrases like 'www pointer only' and the explicit next step 'NEXT: www MCP / open html.' However, the description does not name alternatives or state conditions for choosing this tool over closely related siblings such as get_agb or get_legal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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?
With readOnlyHint=true, the safety profile is already known, and the description adds meaningful context beyond that: it returns a second-precision wall clock value, applies to all 52 places when parameters are omitted, and explicitly excludes euro pricing. It also discloses the returned fields including the day/night whenKey classification. Minor gaps like rate limits or auth are not relevant for a read-only clock 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?
The description is compact and front-loads the core WHAT, then RETURNS, USE, DOES NOT, and NEXT sections. Every sentence serves a purpose. The use of ALL-CAPS labels keeps sections scannable, though some phrasing is awkward and dense ('stand YYYY-MM-DD HH:MM:SS CEST|CET' and 'whenKey context') which slightly hurts 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, all parameters are documented in the schema, and the annotation confirms this is read-only. The description adds the remaining needed context: usage timing before quoting, the all-52-places behavior, the day/night whenKey output, and what it deliberately does not return. This is sufficient for correct invocation, with minor ambiguity around terminology like 'stand'.
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, but the description adds real value by explaining that omitting all parameters returns all 52 places with the same clock and that slug/plz/name behave like get_service_area. It also provides format context for the returned stand timestamp. This meaningfully supplements the already well-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 identifies a specific resource (Europe/Berlin wall clock) and states the output fields returned (timezone, stand, iso, unix, date, time, tz, whenKey). It distinguishes itself from pricing tools with 'DOES NOT return euro amounts' and points to get_invoice_line_items as the next step. The phrasing is slightly metaphorical and dense, but an agent can determine what the tool does.
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 description explicitly says 'USE before quoting via www get_invoice_line_items' and gives the next call shape with parameters. It also states what the tool does NOT return ('DOES NOT return euro amounts'), routing agents to get_prices/get_invoice_line_items instead. This is direct, actionable guidance with little 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_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). 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?
With readOnlyHint=true, the safety profile is already known. The description adds meaningful behavioral context: map paths yield an area card, non-maps paths yield a pointer fallback, and locale values beyond de are ignored rather than switching the www locale. This goes beyond the annotation without contradicting it.
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/NEXT format front-loads the essential information in two compact sentences with zero filler. The maps-vs-www behavior, required input, and follow-up tools are all communicated efficiently.
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 tool with three well-documented parameters and an output schema, the description provides the selection context, fallback behavior, and locale caveat. Nothing an agent needs to choose and invoke this tool correctly appears to be 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 schema already documents path, slug, and locale. The description's 'path required (or slug)' and maps-vs-www mapping add some relational meaning, but most parameter semantics are already present in the schema, keeping this at the 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?
The description states an explicit operation: return a short summary for a maps Gebiet (as an area card) or a www pointer for non-maps paths. This clearly distinguishes the tool from the many sibling get_* tools by keying on the maps-vs-www path distinction.
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 the primary invocation condition directly, and the locale-parameter description explicitly excludes a multi-locale use case, pointing to @ikeytz/mcp list_locales instead. The NEXT line also names the natural follow-up tools, so an agent has both the when and the when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_partner_infoCRead-onlyInspect
WHAT: www pointer only — Partner-werden on www. maps returns html. NEXT: www get_partner_info.
| 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?
The readOnlyHint annotation already signals safety; the description adds only a cryptic 'maps returns html' fragment and notes in the parameter description that other locale values are ignored. These are useful but minimal and ambiguously connected to the tool's actual behavior. No clear statement covers side effects, output format, or operational traits 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 short but severely under-specified and cryptic, using telegraphic internal labels like 'WHAT:', 'NEXT:', and 'www pointer only'. It is not effective conciseness; it sacrifices clarity to the point that the main action is unclear.
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 has only one optional parameter and has an output schema plus a readOnly annotation, so the surface is simple. However, the description never explains what partner info is returned, how it relates to 'Partner-werden', or what 'NEXT: www get_partner_info' instructs the agent to do. An agent cannot confidently select or invoke it based on the provided wording.
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 schema gives an enum of 'de' and a default, but the description adds substantial meaning: it explains that maps is German-only, that omitting or passing 'de' is expected, that other values are ignored, and that URLs remain with no locale prefix. It also explicitly redirects multi-locale use to list_locales. This greatly exceeds the schema's bare coverage.
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 never states that the tool retrieves partner information; it reads as an internal note ('www pointer only', 'NEXT: www get_partner_info') rather than a functional definition. It neither names a clear verb+resource nor distinguishes this from the many sibling get_* tools. It is effectively missing/misleading as a purpose statement.
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 parameter description does provide one exclusion: it says not to use this as a www multi-locale switch and points to list_locales for other locales. However, there is no general guidance on when to call get_partner_info versus the many sibling get_* tools. The parenthetical alternative is buried in parameter semantics and does not establish tool-level usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pricesARead-onlyInspect
WHAT: www pointer only — Festpreis matrix lives on www.ikeytz.com/preise via @ikeytz/mcp get_prices. maps returns html + note, no euro rows. USE to hand off. DOES NOT invent prices. NEXT: www get_prices; maps get_ort_datetime for 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 |
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 readOnlyHint=true, so this is known to be a safe read operation. The description adds genuinely useful behavioral detail beyond that: the tool returns only html + note, contains no euro rows, and explicitly 'DOES NOT invent prices'. This manages agent expectations about hallucinated pricing data. No contradiction with 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?
The description is highly compact and front-loaded with the core point ('www pointer only'), then gives return behavior, usage, and next steps in short labeled sections. Every clause contributes. Some domain jargon ('Festpreis matrix', 'euro rows', 'whenKey') is cryptic to outsiders, but within its context the density is efficient rather than bloated.
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 the tool has only one optional parameter, a readOnly annotation, and an output schema, the description covers what an agent needs to invoke it correctly: the pointer-to-www behavior, the non-invention guarantee, and suggested next tools. The only slight gap is the unexplained 'whenKey', but that relates to a follow-up tool and does not affect calling get_prices itself.
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 input schema already documents the only parameter (locale) thoroughly, including its enum, default, German-only constraint, behavior for other values, and pointer to list_locales for multi-locale needs. With 100% schema description coverage, the description does not need to add parameter details. It adds no param semantics, so the 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 opens with 'www pointer only' and clearly identifies the Festpreis matrix as living on www.ikeytz.com/preise, so the agent knows this maps-side tool does not itself serve prices. It also states 'maps returns html + note, no euro rows', reinforcing the pointer role. The action is a bit implied ('USE to hand off') rather than a clean verb+resource, but it is specific enough to distinguish from the many get_* 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?
'USE to hand off' explicitly gives the call context, and 'NEXT: www get_prices; maps get_ort_datetime for whenKey' names follow-up alternatives. This gives clear guidance on when to invoke this tool versus proceeding to the www pricing tool. A formal when-not-to-use statement is absent, but the pointer-only framing makes the boundary reasonably explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ratgeberBRead-onlyInspect
WHAT: www pointer only — Ratgeber page /ratgeber/{slug}. slug required. maps returns html. NEXT: www get_ratgeber.
| 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?
With readOnlyHint already set, the description adds useful behavioral context: this tool is a pointer, not a content fetcher, and 'maps returns html' hints at the response format. It does not fully explain the 'NEXT' relationship, but it does not contradict 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 short and front-loaded, but the labels and fragment 'NEXT: www get_ratgeber' are cryptic and not self-explanatory. Brevity is achieved at the cost of 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?
For a simple 2-parameter tool with an output schema, the input contract is adequately covered. But the workflow hint 'NEXT: www get_ratgeber' is unresolved and the tool's relationship to the many get_* siblings is left unclear, so an agent cannot confidently decide this is the right endpoint.
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 slug and locale, including the German-only constraint and ignored values. The description only restates that slug is required and adds no parameter behavior 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 concrete resource and operation: a pointer to the Ratgeber page at /ratgeber/{slug}, with slug required. It is more specific than a tautology, but never names sibling tools, so an agent must infer how 'www pointer only' differs from tools like get_wissen_entry or get_ai_page.
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?
Only cryptic hints ('www pointer only', 'NEXT: www get_ratgeber') suggest a multi-server workflow, with no explicit when-to-use or when-not-to-use against siblings. No alternatives are named and no conditions select this tool over list_ratgeber or get_wissen_entry.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_review_urlBRead-onlyInspect
WHAT: www pointer only — Google review entry on www /review. maps returns html. NEXT: www get_review_url.
| 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?
The readOnlyHint annotation already covers the safety profile, and the description adds the useful behavioral detail that the result is only a pointer, not HTML. It does not contradict annotations, but it also does not reveal much else beyond what the annotation plus tool name already imply.
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 short and front-loaded with a 'WHAT' label, which is good. However, the fragmented phrasing and the apparently redundant 'NEXT: www get_review_url' weaken the structure; not every fragment clearly 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 simple read-only tool with one optional parameter, an output schema, and a detailed parameter schema, the description is largely adequate for invocation. The 'NEXT' fragment is confusing and does not clearly explain what follows or why, leaving some ambiguity around the intended flow.
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 main description provides no parameter-specific detail, but the input schema fully documents locale: it explains the German-only enum, the default, ignored values, and the direction to list_locales for multi-locale needs. With schema description coverage at 100%, the description does not need to compensate.
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 resource ('Google review entry on www /review') and clarifies that the tool returns 'www pointer only' rather than full content. The contrast with 'maps returns html' also helps distinguish the tool from the maps variant, though the telegraphic phrasing keeps it from being fully polished.
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?
'maps returns html' implies this tool is for the www pointer form and not for maps HTML output, giving some context. However, it never explicitly names alternatives or states when to prefer this tool over siblings, and the cryptic 'NEXT: www get_review_url' does not act as a real usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_serp_snippetARead-onlyInspect
WHAT: One SERP block from maps llms-serp.txt via path, url, slug, or q. RETURNS path, url, matchContext (full block). 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 already establishes this is a safe read operation, and the description adds a meaningful behavioral guarantee: it does not invent meta tags. It also clarifies that matchContext is the full block, which sets expectations beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The labeled WHAT/RETURNS/USE/DOES NOT/NEXT structure is compact, front-loaded, and each sentence serves a distinct purpose. There is 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?
Given the read-only annotation, output schema, and fully documented parameters, the description covers purpose, selector semantics, return contents, and next steps. The only notable gap is the exact precedence or fallback behavior when multiple lookup parameters are supplied.
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 schema already documents all four parameters, and the description adds the useful relationship that path, url, slug, or q are alternative lookup routes. The fallback nature of q could be clearer, but the description still adds meaning beyond the individual 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?
The description states a specific operation: retrieving one SERP block from maps llms-serp.txt, and identifies the key selectors and return fields. It also clarifies this is for a single page's SERP copy, distinguishing it from broader search/body-content 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 explicitly says to use this tool for a single page's SERP copy and points to get_ai_page or get_page_summary for body content. It does not explicitly distinguish it from find_by_serp, but the context and follow-up guidance make the primary use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_service_areaARead-onlyInspect
WHAT: One Einsatzgebiet by slug → plz (first match) → name substring. RETURNS point card + 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 only. |
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. |
| embed_map | No | |
| 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?
Beyond readOnlyHint=true, the description discloses the lookup precedence chain, the response shape variation with compact, the fields filtering role, and the failure mode (unknown → ok=false unknown_place). It also flags the boundary condition that free addresses outside the 52 are not geocoded. This is far more behavioral context than the annotation alone.
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 a compact set of labeled clauses (WHAT/RETURNS/USE/DOES NOT/NEXT) with no filler. Every clause adds operational information, and the most important lookup semantics are front-loaded. This is well-structured and appropriately sized.
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 available and 100% parameter coverage, the description only needs to provide selection and behavioral context, which it does thoroughly: when to use, what it won't do, failure mode, and related next tools. Nothing an agent needs to invoke 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?
The input schema already documents all six parameters with 100% coverage, so the baseline is 3. The description adds the lookup order (slug first, then plz first-match, then name substring) and that fields filters keys, which is not obvious from individual parameter docs. That extra precedence information justifies a 4.
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 'WHAT: One Einsatzgebiet by slug → plz (first match) → name substring,' clearly stating the verb (get), the resource (one Einsatzgebiet), and the exact lookup keys. It also specifies the return shape ('point card + optional Lage texts'), which distinguishes it from sibling search tools like find_by_plz and list_service_areas. This is a precise, unambiguous statement of 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?
'USE when the user names a town/district in Landkreis Ludwigsburg' gives an explicit trigger condition, and 'DOES NOT geocode free addresses outside the 52; unknown → ok=false unknown_place' states an exclusion. The schema note to use find_by_plz for all matches when multiple Gebiete share a PLZ reinforces routing, though the main description doesn't name alternatives beyond the NEXT list. This is clear context, with a slight reliance on the schema and sibling list for alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sitemap_txtARead-onlyInspect
WHAT: Alias get_discovery(which=sitemap-txt) — maps /sitemap.txt 1:1 (embed URLs). Optional offset/limit. USE to list public maps URLs. NEXT: resolve_maps_url, get_embed_map.
| 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. | |
| 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. |
| body | No | UTF-8 text window after offset/limit |
| 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 | Alias/window of body when present |
| 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. |
| 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. |
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 valuable behavioral context beyond that: it explains the tool is a 1:1 map of /sitemap.txt, that it returns embed URLs, and that it supports optional offset/limit pagination. This gives an agent a clear model of what to expect without contradicting 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-loaded: WHAT, source mapping, optional parameters, USE, and NEXT are all conveyed in a few short clauses. Every sentence contributes distinct information, and there is no filler or repetition of schema 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 simple read-only tool with two optional parameters, complete schema descriptions, an output schema, and a readOnlyHint annotation, the description is fully adequate. It states the data source, the purpose, the parameter option, and the natural next tools, so an agent has everything needed to select and 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 description coverage is 100%, and the schema already documents limit and offset in detail. The description only adds 'Optional offset/limit', which is useful but does not meaningfully extend the schema's parameter semantics. Baseline 3 is appropriate since the schema carries the parameter documentation 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?
The description clearly states what the tool does: it is an alias for get_discovery(which=sitemap-txt) and maps /sitemap.txt 1:1 to embed URLs. It adds an explicit use case, 'USE to list public maps URLs', and distinguishes itself from related follow-up tools by listing NEXT: resolve_maps_url, get_embed_map.
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 description explicitly says when to use it ('USE to list public maps URLs') and provides follow-up tool guidance ('NEXT: resolve_maps_url, get_embed_map'). It does not explicitly state when not to use it or compare it directly with sibling get_* tools, but the alias relationship to get_discovery and the clear use case are sufficient context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_urheberrechtARead-onlyInspect
WHAT: Karten-Urheberrecht text from maps /llms-urheberrecht.txt (HTML page remains www /urheberrecht). Optional offset/limit. USE when citing map copyright (Mahmud Reza Kashani · ikeytz). NEXT: get_copyright, get_legal(doc=urheberrecht).
| 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. | |
| 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?
With readOnlyHint=true, the safety profile is already disclosed, so the description's main job is to add source and behavior context. It reveals that the tool reads from a specific text file, that the HTML page remains at /urheberrecht, and that offset/limit are optional for paging. This goes meaningfully beyond the annotation without contradicting it, though it does not describe edge cases like empty results or invalid offsets.
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 scannable, using WHAT/USE/NEXT labels that front-load the key information. Every phrase contributes something, but some fragments are cryptic (e.g., 'HTML page remains www /urheberrecht') and the overall style is terse to the point of mild ambiguity. It earns a strong score for efficiency, not a perfect one for 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?
For a simple read-only retrieval tool with two optional parameters, an output schema, and readOnlyHint annotation, the description covers the essential context: what is returned, where it comes from, when to use it, and which related tools to consider next. It does not explain return-value shape, but the presence of an output schema makes that unnecessary. The only minor gap is the unclear relationship between this tool, get_copyright, and get_legal.
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 offset and limit in detail, including line-splitting and pagination behavior. The description only restates that offset/limit are optional, adding no extra semantics. Baseline 3 is appropriate because the schema carries the parameter documentation burden and the description does not need to compensate.
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 identifies the resource as 'Karten-Urheberrecht text from maps /llms-urheberrecht.txt' and notes the HTML counterpart, so an agent can tell this returns map copyright text rather than a web page. It does not use an explicit action verb like 'retrieves' or 'lists', but the 'WHAT:' label plus the tool name makes the operation clear. It also points to related sibling tools, adding some differentiation.
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 description explicitly states when to use this tool: 'USE when citing map copyright', including the exact copyright attribution '(Mahmud Reza Kashani · ikeytz)'. It also names related next steps ('NEXT: get_copyright, get_legal(doc=urheberrecht)'), though it does not explain the conditions for choosing those alternatives instead. This is clear usage context but not a full when-not-to-use guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_widerrufARead-onlyInspect
WHAT: www pointer only — Widerruf on www.ikeytz.com. maps returns html link. DOES NOT return withdrawal text. NEXT: www MCP.
| 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?
Despite readOnlyHint=true, the description adds behavioral context by revealing the tool is a 'www pointer only' and returns an HTML link rather than the actual Widerruf content. This goes beyond the annotation and helps set agent expectations, though it omits details like error or timeout 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?
The description is short and front-loads the key 'www pointer only' concept, but the sentence 'maps returns html link' is grammatically muddled and 'NEXT: www MCP' is cryptic. These fragments do not fully earn their place and could confuse an agent.
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 tool with an output schema, the description covers the essential context: the target resource, the return type, the explicit limitation, and a suggested next step. The ambiguity of the 'maps returns' wording keeps it from being 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?
The tool has zero parameters and schema coverage is 100%, so the baseline of 4 applies. The description correctly spends no space on arguments and adds no unnecessary 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?
The description identifies the specific resource (Widerruf page on www.ikeytz.com) and states it returns an HTML link, not the withdrawal text. This distinguishes it from sibling tools like get_legal or get_impressum, though the phrasing 'maps returns html link' is awkward and could be clearer.
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 clearly warns that the tool does NOT return withdrawal text, which tells an agent when not to use it, and 'NEXT: www MCP' hints at a follow-up. However, it never names an alternative tool or states an explicit when-to-use condition, leaving usage mostly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wissen_entryBRead-onlyInspect
WHAT: www pointer only — Wissen article /wissen/{id}. id required. maps returns html. NEXT: www get_wissen_entry.
| 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?
The readOnlyHint=true annotation already signals a safe read operation, lowering the descriptive burden. The description adds the useful behavioral fact that this is pointer-only and mentions "maps returns html", but this line is cryptic and does not clearly disclose return behavior or constraints beyond what annotations and the schema already imply.
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 brief and front-loads the core WHAT statement, but the "maps returns html. NEXT: www get_wissen_entry." fragment is opaque and requires domain context to interpret. Compactness is achieved at the cost of 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?
Given the output schema exists and annotations mark the tool read-only, the description does not need to explain return values or safety. However, the ambiguous "maps returns html" and the unexplained NEXT notation leave enough room for an agent to misunderstand the tool's exact purpose and output.
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 fully documents both id and locale. The description only repeats that "id required" and does not add meaningful parameter semantics beyond what the schema already provides, matching the baseline for full coverage.
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 specifies a concrete resource, "Wissen article /wissen/{id}", and a clear behavior: it is a "www pointer only" tool, so it returns a pointer/URL rather than content. It also distinguishes itself from the www-side entry by the "NEXT: www get_wissen_entry" note, though the terse phrasing keeps it from being a 5.
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 "www pointer only" phrasing implies this tool is for pointer/URL retrieval rather than full entry content, and "NEXT: www get_wissen_entry" names an alternative. However, it never explicitly states when to prefer this tool over alternatives such as list_wissen or get_ai_page, leaving the decision partially to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_auswahlCRead-onlyInspect
WHAT: www pointer only — Auswahl hub on www /auswahl. maps returns html. NEXT: www list_auswahl / get_auswahl_item.
| 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 declare readOnlyHint=true, and the description does not contradict this. It adds the behavioral note that the tool is a 'www pointer only' and that 'maps returns html,' which signals context-dependent behavior, but the note is too abbreviated to describe the actual return format or side effects 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 very short and front-loaded with WHAT/NEXT labels; there is no padding or unnecessary prose. However, the telegraphic style and odd fragments ('www pointer only', 'maps returns html') reduce readability despite the appropriate size.
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 structurally simple: one optional, fully documented parameter, an output schema, and a read-only annotation. But because the description never clearly states what list_auswahl returns or the exact purpose of the tool, an agent cannot confidently decide when to invoke it; the cryptic pointer-only note is insufficient.
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 fully documents the locale parameter, including the warning that it is not a www multi-locale switch. The description adds no parameter information, but the high schema coverage makes the baseline 3 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 labels the tool as a 'www pointer only' and names the resource 'Auswahl hub on www /auswahl,' but it never plainly states that this tool lists Auswahl entries or what the returned data represents. The contrast with 'maps returns html' is suggestive, but the wording is cryptic and relies heavily on the tool name and the sibling get_auswahl_item.
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?
No explicit when-to-use or when-not-to-use guidance is provided. The phrase 'www pointer only' implies the www context and 'maps returns html' hints at a different behavior, but neither states conditions for choosing this tool over alternatives. 'NEXT' mentions get_auswahl_item as a follow-up but does not clarify selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_faqARead-onlyInspect
WHAT: www pointer only — FAQ list on www /faq. maps returns html, not FAQ rows. NEXT: www list_faq / 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?
With readOnlyHint=true already covering safety, the description adds a useful behavioral fact: the tool returns html and does not return FAQ rows. This is meaningful beyond the annotation, even if the exact structure of the html/pointer is left to the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded with the essential WHAT and NEXT information. The internal 'WHAT:'/'NEXT:' structure is efficient, though the telegraphic style makes some parts cryptic.
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 tool with one optional parameter, an output schema, and a simple pointer behavior, the description covers purpose, output nature, and alternatives. Slight ambiguity around what exactly the 'pointer' returns and the terse 'NEXT' phrasing keep it from being fully 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 thoroughly explains locale behavior, defaults, and ignored values. The tool description itself adds no parameter-level meaning, so the baseline of 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 identifies the tool as a 'www pointer only' for the FAQ list at www /faq and explicitly clarifies that the maps version returns html, not FAQ rows. This is specific enough to distinguish it from a real FAQ-list retrieval tool, though the 'pointer only' phrasing is jargon-heavy.
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 states that maps returns html rather than FAQ rows, helping an agent decide not to use it when structured FAQ data is needed. The 'NEXT: www list_faq / get_faq' line explicitly points to alternative tools for the actual FAQ content, though it doesn't state a crisp when-to-use condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_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 already signal readOnlyHint=true, and the description adds meaningful behavioral detail: the locale scope is limited to de, the return shape is items[{locale,url}], and it does not cover the www site's seven locales. This goes beyond the annotation without contradicting it. A small deduction because it does not explain what MAPS-E8 refers to, but the core behavior is transparent enough.
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 telegraphic and front-loaded: purpose first, then return shape, then usage ordering, then the exclusion and alternative. Every sentence earns its place; there is no filler or redundancy.
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 parameterless, read-only list tool with an output schema, the description covers what the tool returns, the locale limitation, ordering relative to resolve_locale_url, and the sibling alternative. An agent has everything needed to decide when and how to invoke 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?
There are zero parameters and the schema description coverage is 100%, so the baseline is high. The description reinforces the no-argument call with 'Call with {}' and clarifies the expected invocation form outside the schema. Nothing more is needed for a parameterless 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?
The description states a specific verb ('list'), a specific resource ('locales on maps'), and an explicit constraint ('only de (MAPS-E8: no /en)'). It clearly distinguishes this tool from resolve_locale_url and from a different list_locales tool, so an agent can select it correctly without ambiguity.
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?
Usage is explicitly guided: 'Call with {}', 'USE before resolve_locale_url', and a clear exclusion with an alternative ('DOES NOT list www's seven locales — use @ikeytz/mcp list_locales for those'). The when-to-use and when-not-to-use guidance is direct and unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_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?
With readOnlyHint=true already covering safety, the description adds useful behavioral scope: only shared/multi-Gebiet PLZs are included, and the return shape is explicitly summarized as items[{plz,count,slugs}]. No hidden side effects or prerequisites are omitted for this argument-free read 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?
The description is a tightly organized labeled sequence (WHAT, Call, RETURNS, USE, NEXT) where each segment serves a distinct purpose. There is no filler, and the scope is front-loaded before the alternative pointer.
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, read-only list tool with an output schema, the description covers purpose, invocation style, return shape, and a sibling pointer. Nothing an agent needs to safely call this tool 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 no parameters and the schema already documents this with 100% coverage. The description reinforces the calling convention with 'Call with {}', which adds no ambiguity but is harmless; the baseline for zero-parameter tools 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 opens with a concrete data contract: it maps PLZ to slugs across the 52 Gebiete, specifically for shared postcodes. The 'USE' clause ties it to a distinct need (multi-Gebiet PLZ) and names the next sibling, helping an agent distinguish it from the find_by_* family.
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 description states the primary use case ('USE to see multi-Gebiet PLZ') and points to find_by_plz as the follow-up, giving clear context for when this tool is relevant. However, it never explicitly says when not to use it or contrasts it with the sibling, so exclusions remain implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ratgeberCRead-onlyInspect
WHAT: www pointer only — Ratgeber list on www /ratgeber. maps returns html. NEXT: www list_ratgeber.
| 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 already covers the safety profile, and the description adds some behavioral detail: 'maps returns html,' other locale values are ignored, and URLs retain no locale prefix. But the cryptic 'www pointer only' does not explain what actually happens or what the agent will receive.
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 short but telegraphic, relying on 'WHAT' and 'NEXT' fragments instead of clear sentences. 'NEXT: www list_ratgeber' does not earn its place because it is ambiguous and does not explain a concrete follow-up.
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, read-only, has one optional parameter, and an output schema exists, so the schema carries much of the needed context. However, the description does not clarify what the returned pointer/list represents or whether the 'NEXT' step must be invoked, leaving a meaningful 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?
The schema fully documents the single optional locale parameter with enum, default, and detailed behavior, so schema coverage is 100%. The tool description adds no parameter semantics beyond that, which places it at the high-coverage 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?
The description names the resource ('Ratgeber list on www /ratgeber') and labels the tool as a 'www pointer only,' but it never clearly states what is returned or what 'pointer only' means. The fragment 'NEXT: www list_ratgeber' adds confusion rather than clarifying the tool's function.
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?
There is one explicit exclusion: 'Not a www multi-locale switch — use @ikeytz/mcp list_locales on www for en|fr|ru|fa|ar|tr,' which prevents misuse of the locale parameter. However, there is no guidance on when to use list_ratgeber versus related list/get siblings, so usage direction is partial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_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) — not polygons. 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 (use get_grenze 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?
With readOnlyHint=true already declaring the safety profile, the description adds meaningful behavioral context: the exact return envelope (items[], count, total, offset, limit), the point-card field set, pagination behavior, and what is deliberately excluded (OSM boundaries, prices). This 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, label-structured (WHAT, RETURNS, USE, DOES NOT, NEXT), and every clause adds information about scope, output, usage, or exclusions. There is no redundant 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 list tool with four optional, well-documented parameters and an existing output schema, the description covers what the tool returns, how to page/filter, what to use it for, and which alternatives cover excluded cases. 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 description coverage is 100% and the schema already documents highlight, all four parameters with detailed semantics. The description only restates the fields and paging options that the schema already covers, so it adds little beyond the baseline expected 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 names a specific verb and resource: 'List all 52 ikeytz Einsatzgebiete' as point cards, and explicitly contrasts itself with polygon-returning tools by adding 'not polygons'. It also names the sibling tool for boundaries, so an agent can distinguish it from get_grenze 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 explicit use cases ('USE to enumerate the service area or build a picker'), explicit non-goals ('DOES NOT return OSM boundaries or prices'), and names the alternative for the boundary case ('use get_grenze per slug'). It also mentions the NEXT related tools, giving clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_servicesARead-onlyInspect
WHAT: www pointer only — Leistungen list on www /leistungen. maps returns html link. DOES NOT list service rows. NEXT: www list_services.
| 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 declare readOnlyHint=true, and the description adds a valuable behavioral trait: it returns an HTML link and does not list service rows. This goes beyond the annotation by clarifying the tool's limited scope, but it still does not describe the exact link structure (which is likely covered by the output schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using clear 'WHAT' and 'NEXT' markers to structure the information. Each clause adds value: it defines the tool as a pointer, states the target URL, clarifies it does not list rows, and directs to the successor tool. No wasteful 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, one well-documented parameter, and annotations covering read-only behavior, the description is sufficiently complete. It clearly positions the tool relative to its purpose and the alternative for actual listing. The only minor gap is the lack of detail about the exact format of the returned HTML link, but that is likely specified in 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?
The single parameter 'locale' has a thorough schema description covering default, allowed enum, behavior for other values, and pointers to alternative locale tools. Schema coverage is 100%, so the description does not need to add parameter details; it only reinforces the German-only constraint. Given high coverage, a baseline of 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 clearly states the tool's role: it is a 'www pointer only' that returns an HTML link to the /leistungen page, and explicitly disclaims that it does not list service rows. This distinguishes it from any list-like sibling and is a specific verb+resource action.
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 description tells the agent that this tool provides a pointer/link rather than actual data, and points to 'www list_services' as the next step for getting the actual list. It clearly indicates when not to use this tool (if service rows are needed) and suggests an alternative, though it does not elaborate on the full set of use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_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?
Annotations already mark the tool readOnlyHint=true, so the safety profile is established. The description adds useful behavioral detail by specifying that all slugs are returned in a flat string array and that there are exactly 52, plus explicitly stating the no-argument call shape. This goes beyond the minimal annotation-only disclosure.
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 well structured with WHAT/USE/NEXT labels. Every sentence carries meaningful information and there is no filler or repetition of the tool name.
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-parameter, read-only tool with an output schema, the description fully covers what the tool does, why to use it, and what to do next. The downstream tool hints complete the picture, so an agent has everything needed 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?
The tool has zero parameters and the schema already documents that no arguments are needed. The description's 'Call with {}' reinforces this, and with 100% schema coverage there is no missing parameter information to compensate for. A baseline of 4 is appropriate for a no-parameter 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?
The description states exactly what the tool returns: 'All 52 maps slugs as a flat string array.' It names the specific resource (map slugs) and the output format, which clearly separates it from sibling list tools. The 'NEXT' note also anchors it in the workflow by naming get_service_area(slug) and get_embed_map(slug).
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 description explicitly says 'USE for validation or autocomplete,' giving clear contexts where this tool is the right choice. It does not enumerate alternatives or exclusion cases, but the 'NEXT' line implies downstream usage and the sibling list names make the distinction inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_whatsapp_optionsARead-onlyInspect
WHAT: WhatsApp situation options (link only — zugefallen/abgeschlossen/zylinder/beratung style ids). 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds valuable behavioral context: it returns link-only options, performs no form submission, and has no message-sending side effect. It also hints at the nature of the returned ids. No contradiction with annotations; it enriches them.
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 telegraphic but information-dense, with clear labels (WHAT, USE, NEXT) front-loading the key points. Every sentence earns its place: purpose, side-effect negation, usage ordering, and follow-up options. No fluff.
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 readOnlyHint annotation, the description covers the remaining essentials: what the tool returns conceptually, what it does not do, and what to call next. It is complete for correct selection and invocation.
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 locale parameter is fully documented in the schema. The tool description does not need to repeat parameter details; it focuses on overall behavior. Baseline 3 is appropriate since the schema carries the semantic 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?
The description states a specific verb and resource: 'list' 'WhatsApp situation options', and differentiates from compose_whatsapp by noting it is link-only and does not send a message. Examples of option ids (zugefallen/abgeschlossen/zylinder/beratung) further clarify the resource. This clearly distinguishes it from siblings in the tool 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?
Explicitly says 'USE before compose_whatsapp' and provides the next step 'compose_whatsapp(option)'. It also states what it does NOT do ('No form submit', 'DOES NOT send a message'), helping the agent avoid misuse. This is direct, actionable guidance with clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_wissenCRead-onlyInspect
WHAT: www pointer only — Wissen lexicon hub on www /wissen. maps returns html. NEXT: www list_wissen.
| 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 state readOnlyHint=true, and the description adds 'www pointer only', which suggests the tool returns pointers rather than full content. However, the phrasing is so cryptic that the behavioral contract remains unclear, and 'maps returns html' is not clearly tied to this 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?
The text is short, but brevity is not the issue: clarity is. Fragments like 'WHAT: www pointer only', 'maps returns html', and 'NEXT: www list_wissen' are under-specified rather than concise, and they do not form a coherent structure.
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?
Even with a trivial parameter set, an output schema, and readOnly annotations, the description fails to state plainly what list_wissen returns or what 'Wissen lexicon hub' means in practice. An agent would still be guessing about the tool's actual purpose and result shape.
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 input schema already explains the locale parameter in detail, including its German-only behavior and the alternative for multi-locale usage. The description adds no parameter-specific meaning, so the baseline of 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 mentions 'Wissen lexicon hub on www /wissen' as the resource, but it never states the action clearly. 'www pointer only' and 'NEXT: www list_wissen' read like developer shorthand rather than a specification of what the tool does or how it differs from siblings like get_wissen_entry.
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?
No explicit guidance is given on when to use list_wissen versus alternatives such as get_wissen_entry or list_locales. The phrase 'maps returns html' hints at an environment distinction but does not explain a decision rule, and 'NEXT: www list_wissen' is not actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_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 provide readOnlyHint=true, but the description goes well beyond that by revealing non-obvious trap behaviors: maps is de-only, non-de locales still resolve to a de URL, unknown paths may return a www-pointer, and /en is never created. This gives an agent critical behavioral context that prevents incorrect assumptions about locale 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 compact and information-dense, using labeled segments (WHAT, REQUIRED, DOES NOT, NEXT) that are easy to scan and front-loaded with the core purpose. The telegraphic style sacrifices some readability, but every segment earns its place by covering behavior, requirements, limitations, and next steps.
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 the tool's two required parameters and the presence of an output schema, the description covers the important edge cases: de-only maps, unknown-path fallback, and the absence of /en creation. The phrase 'may www-pointer' leaves some ambiguity about the exact outcome for unknown paths, but the overall guidance is sufficient for correct invocation in most cases.
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% for both parameters, so baseline is 3. The description adds value by explaining that known Gebiet paths resolve to maps while unknown paths may yield a www-pointer, and it elaborates on locale behavior ('non-de requested still yields ... with locale=de'). This enriches the semantics beyond the schema's own 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?
The description starts with 'WHAT: path + locale → maps URL', giving a clear transform and resource. It further clarifies the exact scope with 'maps is de-only' and 'Known Gebiet paths resolve to maps; unknown paths may www-pointer', so an agent can tell what the tool does. It does not explicitly differentiate from siblings like resolve_maps_url, but the behavior is clear enough.
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 description provides explicit situational guidance: 'non-de requested still yields ... with locale=de' and 'DOES NOT create /en on maps' tell the agent when this tool is not appropriate. The line 'NEXT: get_embed_map, www resolve_locale_url for marketing locales' points to alternatives, though 'www resolve_locale_url' is not a clearly named sibling, slightly reducing clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_maps_urlARead-onlyInspect
WHAT: Resolve a maps.ikeytz.com url/path/q to hub or Gebiet. RETURNS kind=hub|ort + area fields when ort. USE to normalize pasted maps links. DOES NOT accept www hosts (not_maps_host). NEXT: get_service_area, get_embed_map.
| 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 provide readOnlyHint, and the description adds meaningful behavior beyond that: it specifies the output discriminator ('kind=hub|ort') and a validation boundary ('DOES NOT accept www hosts (not_maps_host)'). No contradiction with annotations. It could disclose more about invalid or empty input, but the key traits are covered.
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 uses compact labeled sections (WHAT, RETURNS, USE, DOES NOT, NEXT) with no filler. Each sentence carries distinct operational information and the most important scoping details 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 simple optional-parameter resolver with an output schema, the description covers the host, the accepted input forms, the purpose, and an error boundary. The main gap is the absence of behavior when multiple params (q/url/path) are passed together, but the low complexity and existing output schema keep this from being a serious deficiency.
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 adds the grouping 'url/path/q' and the maps.ikeytz.com host context, but it does not explain precedence when multiple optional parameters are supplied, nor does it add formats beyond what the schema already gives.
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 'WHAT: Resolve a maps.ikeytz.com url/path/q to hub or Gebiet', naming a specific verb, resource, and outcome. It also states the return shape ('kind=hub|ort + area fields when ort') and the normalization use case. It does not explicitly name sibling tools it is not, so it misses the top tier, but the purpose 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?
'USE to normalize pasted maps links' gives a clear, concrete trigger for when to invoke this tool. 'DOES NOT accept www hosts' is an explicit exclusion. No alternatives are named for when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_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?
readOnlyHint=true already signals a safe read; the description adds return payload fields, the walkIn=false constant, the sister www MCP note, and the no-euro exclusion, all useful behavioral 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?
Compact and front-loaded with the resource identity; labeled fragments (WHO/WHAT, RETURNS, USE, DOES NOT, NEXT) make it scannable. The phrase 'sister www MCP note' is 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?
For a single optional-parameter read-only tool with an output schema, the description covers what the site is, what is returned, when to use it, what it does not do, and which tools to try next—nothing material 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 parameter is fully explained in the schema (German-only, omit or pass de, other values ignored, not a www locale switch). The description itself adds no parameter-level detail, so the 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 precisely that the tool describes maps.ikeytz.com (52 Einsatzgebiet maps for Schlüsseldienst Ludwigsburg) and explicitly excludes the www price-site scope, distinguishing it from the many get_* siblings. 'RETURNS brand, owner, count, mcp, registry...' supplies a concrete operational outcome.
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 use case ('USE as the maps brand card') and a clear exclusion ('DOES NOT quote euro', 'not the www price site'). It does not name a specific sibling to use instead for pricing, so it stops short of a full 5.
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. Dates show when Glama detected each change.
67 tool updates
- Changed
compose_mailto3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / descriptionAdded value: +"This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "href": { + "description": "mailto:info@ikeytz.com", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "mapsEmail": { + "description": "info@maps.ikeytz.com", + "type": "string" + }, + "mapsHref": { + "description": "mailto:info@maps.ikeytz.com", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
compose_tel_landline3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / descriptionAdded value: +"This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "display": { + "description": "Human display number", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "href": { + "description": "tel:+49…", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
compose_tel_mobile3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / descriptionAdded value: +"This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "display": { + "description": "Human display number", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "href": { + "description": "tel:+49…", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
compose_whatsapp2 fields changed- added
Input schema / properties / option / descriptionAdded value: +"Optional situation id: zugefallen|abgeschlossen|zylinder|beratung (or ids from list_whatsapp_options)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "href": { + "description": "https://wa.me/…", + "format": "uri", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "Link only. Kein Formular.", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "option": { + "description": "Echoed option", + "type": [ + "string", + "null" + ] + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
distance_to_office7 fields changed- added
Input schema / properties / icbm / descriptionAdded value: +"Optional 'lat, lng' instead of place lookup" - added
Input schema / properties / lat / descriptionAdded value: +"Optional query latitude instead of place lookup" - added
Input schema / properties / lng / descriptionAdded value: +"Optional query longitude" - added
Input schema / properties / name / descriptionAdded value: +"German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted." - added
Input schema / properties / plz / descriptionAdded value: +"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." - added
Input schema / properties / slug / descriptionAdded value: +"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." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "distance_km": { + "description": "Air distance kilometres", + "type": "number" + }, + "error": { + "description": "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.", + "type": "string" + }, + "from": { + "description": "Origin {lat,lng}", + "properties": { + "lat": { + "type": "number" + }, + "lng": { + "type": "number" + } + }, + "type": "object" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "office": { + "description": "Office {lat,lng,icbm}", + "type": "object" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "slug": { + "description": "Resolved slug if from place lookup", + "type": [ + "string", + "null" + ] + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "walkIn": { + "description": "Always false", + "type": "boolean" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
find_by_area4 fields changed- added
Input schema / properties / name / descriptionAdded value: +"German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted." - added
Input schema / properties / q / descriptionAdded value: +"Name or slug query" - added
Input schema / properties / slug / descriptionAdded value: +"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." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "count": { + "type": "number" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "items": { + "items": { + "additionalProperties": true, + "description": "One Einsatzgebiet point card (not a polygon).", + "properties": { + "distance_km": { + "description": "Present on geo-ranked results: air distance from query point", + "type": "number" + }, + "embed_map": { + "description": "https://maps.ikeytz.com/{slug}", + "format": "uri", + "type": "string" + }, + "geo_api": { + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}", + "format": "uri", + "type": "string" + }, + "google_maps": { + "description": "Paste-ready 'lat, lng'", + "type": "string" + }, + "icbm": { + "description": "ICBM 'lat, lng' (same as google_maps)", + "type": "string" + }, + "kind": { + "description": "stadtteil | ort", + "type": "string" + }, + "lat": { + "description": "WGS84 latitude of THIS place", + "type": "number" + }, + "lng": { + "description": "WGS84 longitude of THIS place", + "type": "number" + }, + "maps_mcp": { + "const": "https://maps.ikeytz.com/mcp", + "description": "maps MCP endpoint", + "format": "uri", + "type": "string" + }, + "name": { + "description": "German place name", + "type": "string" + }, + "parent": { + "description": "Ludwigsburg or Landkreis Ludwigsburg", + "type": "string" + }, + "plz": { + "description": "Postcode", + "type": "string" + }, + "slug": { + "description": "maps slug", + "type": "string" + }, + "url": { + "description": "Keyword/www page URL when present", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "q": { + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
find_by_gebiet4 fields changed- added
Input schema / properties / name / descriptionAdded value: +"German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted." - added
Input schema / properties / q / descriptionAdded value: +"Name or slug query (preferred)" - added
Input schema / properties / slug / descriptionAdded value: +"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." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "count": { + "type": "number" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "items": { + "items": { + "additionalProperties": true, + "description": "One Einsatzgebiet point card (not a polygon).", + "properties": { + "distance_km": { + "description": "Present on geo-ranked results: air distance from query point", + "type": "number" + }, + "embed_map": { + "description": "https://maps.ikeytz.com/{slug}", + "format": "uri", + "type": "string" + }, + "geo_api": { + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}", + "format": "uri", + "type": "string" + }, + "google_maps": { + "description": "Paste-ready 'lat, lng'", + "type": "string" + }, + "icbm": { + "description": "ICBM 'lat, lng' (same as google_maps)", + "type": "string" + }, + "kind": { + "description": "stadtteil | ort", + "type": "string" + }, + "lat": { + "description": "WGS84 latitude of THIS place", + "type": "number" + }, + "lng": { + "description": "WGS84 longitude of THIS place", + "type": "number" + }, + "maps_mcp": { + "const": "https://maps.ikeytz.com/mcp", + "description": "maps MCP endpoint", + "format": "uri", + "type": "string" + }, + "name": { + "description": "German place name", + "type": "string" + }, + "parent": { + "description": "Ludwigsburg or Landkreis Ludwigsburg", + "type": "string" + }, + "plz": { + "description": "Postcode", + "type": "string" + }, + "slug": { + "description": "maps slug", + "type": "string" + }, + "url": { + "description": "Keyword/www page URL when present", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "q": { + "description": "Resolved query", + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
find_by_geo7 fields changed- added
Input schema / properties / icbm / descriptionAdded value: +"ICBM or paste 'lat, lng' (comma-separated). Alternative to lat+lng." - added
Input schema / properties / lat / descriptionAdded value: +"WGS84 latitude. Required with lng unless icbm is set. (0,0) → outside_service_area." - added
Input schema / properties / limit / descriptionAdded 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." - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / lng / descriptionAdded value: +"WGS84 longitude. Required with lat unless icbm is set." - added
Input schema / properties / radius_km / descriptionAdded value: +"Optional air-radius filter in km. Omit = return nearest N (limit). Far points / (0,0) → outside_service_area." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "count": { + "type": "number" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "icbm": { + "description": "Query ICBM", + "type": "string" + }, + "items": { + "description": "Ranked Gebiete with distance_km", + "items": { + "additionalProperties": true, + "description": "One Einsatzgebiet point card (not a polygon).", + "properties": { + "distance_km": { + "description": "Present on geo-ranked results: air distance from query point", + "type": "number" + }, + "embed_map": { + "description": "https://maps.ikeytz.com/{slug}", + "format": "uri", + "type": "string" + }, + "geo_api": { + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}", + "format": "uri", + "type": "string" + }, + "google_maps": { + "description": "Paste-ready 'lat, lng'", + "type": "string" + }, + "icbm": { + "description": "ICBM 'lat, lng' (same as google_maps)", + "type": "string" + }, + "kind": { + "description": "stadtteil | ort", + "type": "string" + }, + "lat": { + "description": "WGS84 latitude of THIS place", + "type": "number" + }, + "lng": { + "description": "WGS84 longitude of THIS place", + "type": "number" + }, + "maps_mcp": { + "const": "https://maps.ikeytz.com/mcp", + "description": "maps MCP endpoint", + "format": "uri", + "type": "string" + }, + "name": { + "description": "German place name", + "type": "string" + }, + "parent": { + "description": "Ludwigsburg or Landkreis Ludwigsburg", + "type": "string" + }, + "plz": { + "description": "Postcode", + "type": "string" + }, + "slug": { + "description": "maps slug", + "type": "string" + }, + "url": { + "description": "Keyword/www page URL when present", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "lat": { + "description": "Query latitude", + "type": "number" + }, + "lng": { + "description": "Query longitude", + "type": "number" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "nearest_km": { + "description": "On outside_service_area failures: nearest distance if any", + "type": [ + "number", + "null" + ] + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "radius_km": { + "description": "Applied radius or null", + "type": [ + "number", + "null" + ] + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
find_by_google_maps8 fields changed- added
Input schema / properties / icbm / descriptionAdded value: +"ICBM or paste 'lat, lng' (comma-separated). Alternative to lat+lng." - added
Input schema / properties / lat / descriptionAdded value: +"WGS84 latitude. Required with lng unless icbm is set. (0,0) → outside_service_area." - added
Input schema / properties / limit / descriptionAdded 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." - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / lng / descriptionAdded value: +"WGS84 longitude. Required with lat unless icbm is set." - added
Input schema / properties / q / descriptionAdded value: +"Paste string containing 'lat, lng'" - added
Input schema / properties / radius_km / descriptionAdded value: +"Optional air-radius filter in km. Omit = return nearest N (limit). Far points / (0,0) → outside_service_area." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "count": { + "type": "number" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "icbm": { + "type": "string" + }, + "items": { + "items": { + "additionalProperties": true, + "description": "One Einsatzgebiet point card (not a polygon).", + "properties": { + "distance_km": { + "description": "Present on geo-ranked results: air distance from query point", + "type": "number" + }, + "embed_map": { + "description": "https://maps.ikeytz.com/{slug}", + "format": "uri", + "type": "string" + }, + "geo_api": { + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}", + "format": "uri", + "type": "string" + }, + "google_maps": { + "description": "Paste-ready 'lat, lng'", + "type": "string" + }, + "icbm": { + "description": "ICBM 'lat, lng' (same as google_maps)", + "type": "string" + }, + "kind": { + "description": "stadtteil | ort", + "type": "string" + }, + "lat": { + "description": "WGS84 latitude of THIS place", + "type": "number" + }, + "lng": { + "description": "WGS84 longitude of THIS place", + "type": "number" + }, + "maps_mcp": { + "const": "https://maps.ikeytz.com/mcp", + "description": "maps MCP endpoint", + "format": "uri", + "type": "string" + }, + "name": { + "description": "German place name", + "type": "string" + }, + "parent": { + "description": "Ludwigsburg or Landkreis Ludwigsburg", + "type": "string" + }, + "plz": { + "description": "Postcode", + "type": "string" + }, + "slug": { + "description": "maps slug", + "type": "string" + }, + "url": { + "description": "Keyword/www page URL when present", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "lat": { + "type": "number" + }, + "lng": { + "type": "number" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "nearest_km": { + "type": [ + "number", + "null" + ] + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "radius_km": { + "type": [ + "number", + "null" + ] + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
find_by_icbm7 fields changed- added
Input schema / properties / icbm / descriptionAdded value: +"ICBM or paste 'lat, lng' (comma-separated). Alternative to lat+lng." - added
Input schema / properties / lat / descriptionAdded value: +"WGS84 latitude. Required with lng unless icbm is set. (0,0) → outside_service_area." - added
Input schema / properties / limit / descriptionAdded 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." - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / lng / descriptionAdded value: +"WGS84 longitude. Required with lat unless icbm is set." - added
Input schema / properties / radius_km / descriptionAdded value: +"Optional air-radius filter in km. Omit = return nearest N (limit). Far points / (0,0) → outside_service_area." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "count": { + "type": "number" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "icbm": { + "type": "string" + }, + "items": { + "items": { + "additionalProperties": true, + "description": "One Einsatzgebiet point card (not a polygon).", + "properties": { + "distance_km": { + "description": "Present on geo-ranked results: air distance from query point", + "type": "number" + }, + "embed_map": { + "description": "https://maps.ikeytz.com/{slug}", + "format": "uri", + "type": "string" + }, + "geo_api": { + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}", + "format": "uri", + "type": "string" + }, + "google_maps": { + "description": "Paste-ready 'lat, lng'", + "type": "string" + }, + "icbm": { + "description": "ICBM 'lat, lng' (same as google_maps)", + "type": "string" + }, + "kind": { + "description": "stadtteil | ort", + "type": "string" + }, + "lat": { + "description": "WGS84 latitude of THIS place", + "type": "number" + }, + "lng": { + "description": "WGS84 longitude of THIS place", + "type": "number" + }, + "maps_mcp": { + "const": "https://maps.ikeytz.com/mcp", + "description": "maps MCP endpoint", + "format": "uri", + "type": "string" + }, + "name": { + "description": "German place name", + "type": "string" + }, + "parent": { + "description": "Ludwigsburg or Landkreis Ludwigsburg", + "type": "string" + }, + "plz": { + "description": "Postcode", + "type": "string" + }, + "slug": { + "description": "maps slug", + "type": "string" + }, + "url": { + "description": "Keyword/www page URL when present", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "lat": { + "type": "number" + }, + "lng": { + "type": "number" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "nearest_km": { + "type": [ + "number", + "null" + ] + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "radius_km": { + "type": [ + "number", + "null" + ] + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
find_by_keyword7 fields changed- added
Input schema / properties / limit / descriptionAdded 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." - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - added
Input schema / properties / q / descriptionAdded value: +"Required search string matched against keyword and URL (substring, case-insensitive)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "count": { + "description": "Returned hits", + "type": "number" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "items": { + "description": "keyword + url rows", + "items": { + "properties": { + "keyword": { + "type": "string" + }, + "url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "lines": { + "description": "Raw TSV lines", + "items": { + "type": "string" + }, + "type": "array" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "q": { + "description": "Query echoed", + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "total": { + "description": "Total matches before limit", + "type": "number" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
find_by_plz3 fields changed- added
Input schema / properties / plz / descriptionAdded value: +"Required German postcode." - added
Input schema / properties / q / descriptionAdded value: +"Alias for plz if plz omitted" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "count": { + "description": "Number of Gebiete", + "type": "number" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "items": { + "description": "All matches", + "items": { + "additionalProperties": true, + "description": "One Einsatzgebiet point card (not a polygon).", + "properties": { + "distance_km": { + "description": "Present on geo-ranked results: air distance from query point", + "type": "number" + }, + "embed_map": { + "description": "https://maps.ikeytz.com/{slug}", + "format": "uri", + "type": "string" + }, + "geo_api": { + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}", + "format": "uri", + "type": "string" + }, + "google_maps": { + "description": "Paste-ready 'lat, lng'", + "type": "string" + }, + "icbm": { + "description": "ICBM 'lat, lng' (same as google_maps)", + "type": "string" + }, + "kind": { + "description": "stadtteil | ort", + "type": "string" + }, + "lat": { + "description": "WGS84 latitude of THIS place", + "type": "number" + }, + "lng": { + "description": "WGS84 longitude of THIS place", + "type": "number" + }, + "maps_mcp": { + "const": "https://maps.ikeytz.com/mcp", + "description": "maps MCP endpoint", + "format": "uri", + "type": "string" + }, + "name": { + "description": "German place name", + "type": "string" + }, + "parent": { + "description": "Ludwigsburg or Landkreis Ludwigsburg", + "type": "string" + }, + "plz": { + "description": "Postcode", + "type": "string" + }, + "slug": { + "description": "maps slug", + "type": "string" + }, + "url": { + "description": "Keyword/www page URL when present", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "plz": { + "description": "Queried PLZ", + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
find_by_serp7 fields changed- added
Input schema / properties / limit / descriptionAdded 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." - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / path / descriptionAdded value: +"maps path fragment, e.g. /pattonville" - added
Input schema / properties / q / descriptionAdded value: +"Free-text search in SERP blocks" - added
Input schema / properties / slug / descriptionAdded value: +"Gebiet slug" - added
Input schema / properties / url / descriptionAdded value: +"Full https://maps.ikeytz.com/… URL" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "count": { + "type": "number" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "items": { + "description": "SERP hits", + "items": { + "properties": { + "path": { + "type": "string" + }, + "snippet": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "q": { + "description": "Resolved query", + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "total": { + "type": "number" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_about4 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "brand": { + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "count": { + "type": "number" + }, + "error": { + "description": "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.", + "type": "string" + }, + "h1": { + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "legalName": { + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "mcp": { + "format": "uri", + "type": "string" + }, + "note": { + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "owner": { + "type": "string" + }, + "registry": { + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "sister": { + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "title": { + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "walkIn": { + "type": "boolean" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_agb3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / descriptionAdded value: +"This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp", + "format": "uri", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "maps only points; Volltext/Preise/FAQ live on www", + "type": "string" + }, + "npm": { + "description": "www CLI package @ikeytz/mcp", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "description": "Locale the caller asked for; maps still returns locale=de", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "www_mcp": { + "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus", + "format": "uri", + "type": "string" + }, + "www_tool": { + "description": "Same tool name on www MCP that holds the real payload", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_ai_page6 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - added
Input schema / properties / path / descriptionAdded value: +"Path or ai-pages path fragment" - added
Input schema / properties / slug / descriptionAdded value: +"Gebiet or ai-page slug" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "When www pointer", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "path": { + "description": "/ai-pages/de/{slug}.txt", + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "slug": { + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "text": { + "description": "Full ai-page UTF-8 text", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_ai_txt6 fields changed- added
Input schema / properties / limit / descriptionAdded 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." - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / offset / defaultAdded value: +0 - added
Input schema / properties / offset / descriptionAdded value: +"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." - added
Input schema / properties / offset / minimumAdded value: +0 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "body": { + "description": "UTF-8 text window after offset/limit", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "limit": { + "description": "Applied line limit, or null if omitted", + "type": [ + "number", + "null" + ] + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "missing": { + "description": "true if the discovery file was not found on disk", + "type": "boolean" + }, + "offset": { + "description": "Applied 0-based line offset", + "type": "number" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "path": { + "description": "Public relative path of the file on maps", + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "text": { + "description": "Alias/window of body when present", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "total_lines": { + "description": "Line count of the full file", + "type": "number" + }, + "which": { + "description": "Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_auswahl_item5 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - added
Input schema / properties / slug / descriptionAdded value: +"Required Auswahl slug on www" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp", + "format": "uri", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "maps only points; Volltext/Preise/FAQ live on www", + "type": "string" + }, + "npm": { + "description": "www CLI package @ikeytz/mcp", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "description": "Locale the caller asked for; maps still returns locale=de", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "www_mcp": { + "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus", + "format": "uri", + "type": "string" + }, + "www_tool": { + "description": "Same tool name on www MCP that holds the real payload", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_business_identity4 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "brand": { + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "hours": { + "type": "string" + }, + "legalName": { + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "maps": { + "format": "uri", + "type": "string" + }, + "nap": { + "description": "Public NAP payload", + "type": "object" + }, + "note": { + "type": "string" + }, + "office": { + "description": "lat/lng/google_maps/icbm", + "type": "object" + }, + "office_note": { + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "owner": { + "description": "Mahmud Reza Kashani", + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "walkIn": { + "description": "Always false", + "type": "boolean" + }, + "www": { + "format": "uri", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_contact4 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "address": { + "description": "Structured address block", + "type": "object" + }, + "addressLine": { + "description": "Single-line address", + "type": "string" + }, + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "email": { + "description": "info@ikeytz.com", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "fax": { + "description": "Fax display", + "type": "string" + }, + "google_maps": { + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "icbm": { + "type": "string" + }, + "landline": { + "description": "Landline display", + "type": "string" + }, + "lat": { + "description": "Office lat", + "type": "number" + }, + "lng": { + "description": "Office lng", + "type": "number" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "mapsEmail": { + "description": "info@maps.ikeytz.com", + "type": "string" + }, + "mobile": { + "description": "Mobile display", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "walkIn": { + "description": "Always false", + "type": "boolean" + }, + "whatsapp": { + "description": "wa.me URL", + "format": "uri", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_copyright6 fields changed- added
Input schema / properties / limit / descriptionAdded 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." - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / offset / defaultAdded value: +0 - added
Input schema / properties / offset / descriptionAdded value: +"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." - added
Input schema / properties / offset / minimumAdded value: +0 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "body": { + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "doc": { + "const": "copyright", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "which": { + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_datenschutz3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / descriptionAdded value: +"This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp", + "format": "uri", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "maps only points; Volltext/Preise/FAQ live on www", + "type": "string" + }, + "npm": { + "description": "www CLI package @ikeytz/mcp", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "description": "Locale the caller asked for; maps still returns locale=de", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "www_mcp": { + "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus", + "format": "uri", + "type": "string" + }, + "www_tool": { + "description": "Same tool name on www MCP that holds the real payload", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_discovery8 fields changed- added
Input schema / properties / limit / descriptionAdded 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." - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / offset / defaultAdded value: +0 - added
Input schema / properties / offset / descriptionAdded value: +"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." - added
Input schema / properties / offset / minimumAdded value: +0 - added
Input schema / properties / which / descriptionAdded 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." - removed
Input schema / properties / which / enumRemoved value: -[ - "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", - "ai-txt", - "ai-plugin", - "answer-engine", - "ai-catalog", - "ard", - "agent-skills" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "body": { + "description": "UTF-8 text window after offset/limit", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "limit": { + "description": "Applied line limit, or null if omitted", + "type": [ + "number", + "null" + ] + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "missing": { + "description": "true if the discovery file was not found on disk", + "type": "boolean" + }, + "offset": { + "description": "Applied 0-based line offset", + "type": "number" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "path": { + "description": "Public relative path of the file on maps", + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "text": { + "description": "Alias/window of body when present", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "total_lines": { + "description": "Line count of the full file", + "type": "number" + }, + "which": { + "description": "Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_embed_map4 fields changed- added
Input schema / properties / name / descriptionAdded value: +"German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted." - added
Input schema / properties / plz / descriptionAdded value: +"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." - added
Input schema / properties / slug / descriptionAdded value: +"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." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "embed_map": { + "format": "uri", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "geo_api": { + "format": "uri", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "lat": { + "type": "number" + }, + "lng": { + "type": "number" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "plz": { + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "slug": { + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_emergency4 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp", + "format": "uri", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "maps only points; Volltext/Preise/FAQ live on www", + "type": "string" + }, + "npm": { + "description": "www CLI package @ikeytz/mcp", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "description": "Locale the caller asked for; maps still returns locale=de", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "www_mcp": { + "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus", + "format": "uri", + "type": "string" + }, + "www_tool": { + "description": "Same tool name on www MCP that holds the real payload", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_faq6 fields changed- added
Input schema / properties / id / descriptionAdded value: +"FAQ id on www" - added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - added
Input schema / properties / q / descriptionAdded value: +"FAQ question search on www" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp", + "format": "uri", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "maps only points; Volltext/Preise/FAQ live on www", + "type": "string" + }, + "npm": { + "description": "www CLI package @ikeytz/mcp", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "description": "Locale the caller asked for; maps still returns locale=de", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "www_mcp": { + "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus", + "format": "uri", + "type": "string" + }, + "www_tool": { + "description": "Same tool name on www MCP that holds the real payload", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_geo_api4 fields changed- added
Input schema / properties / name / descriptionAdded value: +"German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted." - added
Input schema / properties / plz / descriptionAdded value: +"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." - added
Input schema / properties / slug / descriptionAdded value: +"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." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "embed_map": { + "format": "uri", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "geo_api": { + "format": "uri", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "lat": { + "type": "number" + }, + "lng": { + "type": "number" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "note": { + "description": "Public JSON pointer; use get_grenze for polygon in MCP", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "plz": { + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "slug": { + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_geo_office4 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "city": { + "description": "City", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "google_maps": { + "description": "'lat, lng'", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "icbm": { + "description": "ICBM string", + "type": "string" + }, + "lat": { + "description": "Office latitude", + "type": "number" + }, + "lng": { + "description": "Office longitude", + "type": "number" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "postal": { + "description": "Postal code", + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "street": { + "description": "Office street", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "walkIn": { + "description": "Always false — no shop counter", + "type": "boolean" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_geschichte4 fields changed- added
Input schema / properties / name / descriptionAdded value: +"German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted." - added
Input schema / properties / plz / descriptionAdded value: +"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." - added
Input schema / properties / slug / descriptionAdded value: +"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." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "geschichte": { + "description": "Geschichte prose (may be empty)", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "slug": { + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_grenze4 fields changed- added
Input schema / properties / name / descriptionAdded value: +"German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted." - added
Input schema / properties / plz / descriptionAdded value: +"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." - added
Input schema / properties / slug / descriptionAdded value: +"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." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "geo_api": { + "format": "uri", + "type": "string" + }, + "hasPolygon": { + "description": "true if polygon.features length > 0", + "type": "boolean" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "lat": { + "type": "number" + }, + "lng": { + "type": "number" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "osmRelationId": { + "description": "OSM relation id if any", + "type": [ + "number", + "null" + ] + }, + "osmWayId": { + "description": "OSM way id if any", + "type": [ + "number", + "null" + ] + }, + "plz": { + "type": "string" + }, + "point": { + "description": "Point feature or null", + "type": [ + "object", + "null" + ] + }, + "polygon": { + "description": "GeoJSON FeatureCollection (may be empty)", + "type": "object" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "slug": { + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "via": { + "description": "Fetch path hint", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_hub3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / descriptionAdded value: +"This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "count": { + "description": "52", + "type": "number" + }, + "error": { + "description": "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.", + "type": "string" + }, + "h1": { + "description": "Hub H1", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "items": { + "description": "slug/name/embed_map rows", + "items": { + "properties": { + "embed_map": { + "format": "uri", + "type": "string" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "title": { + "description": "Hub title", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_impressum6 fields changed- added
Input schema / properties / limit / descriptionAdded 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." - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / offset / defaultAdded value: +0 - added
Input schema / properties / offset / descriptionAdded value: +"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." - added
Input schema / properties / offset / minimumAdded value: +0 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "body": { + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "doc": { + "const": "impressum", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "www /impressum", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "which": { + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_invoice_line_items7 fields changed- added
Input schema / properties / breakdown / descriptionAdded value: +"www flag; ignored for maps pointer payload." - added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - added
Input schema / properties / situationKey / descriptionAdded value: +"Required for www. Situation id (opening_slam, opening_locked, pkg_key_*, cylinder_only, cylinder_mount, aliases)." - added
Input schema / properties / whenKey / descriptionAdded value: +"day|night|now — used on www; maps only points." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp", + "format": "uri", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "maps only points; Volltext/Preise/FAQ live on www", + "type": "string" + }, + "npm": { + "description": "www CLI package @ikeytz/mcp", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "description": "Locale the caller asked for; maps still returns locale=de", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "www_mcp": { + "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus", + "format": "uri", + "type": "string" + }, + "www_tool": { + "description": "Same tool name on www MCP that holds the real payload", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_lage4 fields changed- added
Input schema / properties / name / descriptionAdded value: +"German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted." - added
Input schema / properties / plz / descriptionAdded value: +"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." - added
Input schema / properties / slug / descriptionAdded value: +"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." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "lage": { + "description": "Lage prose (may be empty)", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "slug": { + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_legal10 fields changed- added
Input schema / properties / doc / descriptionAdded value: +"Required. maps corpus: urheberrecht|copyright|impressum. www links only: agb|nutzungsbedingungen|datenschutz|widerruf." - added
Input schema / properties / limit / descriptionAdded 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." - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - added
Input schema / properties / offset / defaultAdded value: +0 - added
Input schema / properties / offset / descriptionAdded value: +"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." - added
Input schema / properties / offset / minimumAdded value: +0 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "body": { + "description": "maps text window when applicable", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "doc": { + "description": "Resolved doc id", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "www HTML URL when applicable", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "Host split note", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "which": { + "description": "Discovery id for maps text docs", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_links4 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "items": { + "description": "Named absolute URLs", + "properties": { + "card": { + "format": "uri", + "type": "string" + }, + "hub": { + "format": "uri", + "type": "string" + }, + "llms": { + "format": "uri", + "type": "string" + }, + "mcp": { + "format": "uri", + "type": "string" + }, + "npm": { + "format": "uri", + "type": "string" + }, + "registry": { + "format": "uri", + "type": "string" + }, + "skills": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_llms_mcp_server6 fields changed- added
Input schema / properties / limit / descriptionAdded 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." - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / offset / defaultAdded value: +0 - added
Input schema / properties / offset / descriptionAdded value: +"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." - added
Input schema / properties / offset / minimumAdded value: +0 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "body": { + "description": "UTF-8 text window after offset/limit", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "limit": { + "description": "Applied line limit, or null if omitted", + "type": [ + "number", + "null" + ] + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "missing": { + "description": "true if the discovery file was not found on disk", + "type": "boolean" + }, + "offset": { + "description": "Applied 0-based line offset", + "type": "number" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "path": { + "description": "Public relative path of the file on maps", + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "text": { + "description": "Alias/window of body when present", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "total_lines": { + "description": "Line count of the full file", + "type": "number" + }, + "which": { + "description": "Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_llms_mcp_web6 fields changed- added
Input schema / properties / limit / descriptionAdded 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." - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / offset / defaultAdded value: +0 - added
Input schema / properties / offset / descriptionAdded value: +"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." - added
Input schema / properties / offset / minimumAdded value: +0 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "body": { + "description": "UTF-8 text window after offset/limit", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "limit": { + "description": "Applied line limit, or null if omitted", + "type": [ + "number", + "null" + ] + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "missing": { + "description": "true if the discovery file was not found on disk", + "type": "boolean" + }, + "offset": { + "description": "Applied 0-based line offset", + "type": "number" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "path": { + "description": "Public relative path of the file on maps", + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "text": { + "description": "Alias/window of body when present", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "total_lines": { + "description": "Line count of the full file", + "type": "number" + }, + "which": { + "description": "Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_llms_txt6 fields changed- added
Input schema / properties / limit / descriptionAdded 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." - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / offset / defaultAdded value: +0 - added
Input schema / properties / offset / descriptionAdded value: +"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." - added
Input schema / properties / offset / minimumAdded value: +0 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "body": { + "description": "UTF-8 text window after offset/limit", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "limit": { + "description": "Applied line limit, or null if omitted", + "type": [ + "number", + "null" + ] + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "missing": { + "description": "true if the discovery file was not found on disk", + "type": "boolean" + }, + "offset": { + "description": "Applied 0-based line offset", + "type": "number" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "path": { + "description": "Public relative path of the file on maps", + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "text": { + "description": "Alias/window of body when present", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "total_lines": { + "description": "Line count of the full file", + "type": "number" + }, + "which": { + "description": "Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_nutzungsbedingungen3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / descriptionAdded value: +"This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp", + "format": "uri", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "maps only points; Volltext/Preise/FAQ live on www", + "type": "string" + }, + "npm": { + "description": "www CLI package @ikeytz/mcp", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "description": "Locale the caller asked for; maps still returns locale=de", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "www_mcp": { + "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus", + "format": "uri", + "type": "string" + }, + "www_tool": { + "description": "Same tool name on www MCP that holds the real payload", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_ort_datetime4 fields changed- added
Input schema / properties / name / descriptionAdded value: +"German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted." - added
Input schema / properties / plz / descriptionAdded value: +"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." - added
Input schema / properties / slug / descriptionAdded value: +"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." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "count": { + "description": "52 when listing all places", + "type": "number" + }, + "date": { + "description": "YYYY-MM-DD in Berlin", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "iso": { + "description": "ISO-8601 with Berlin offset", + "type": "string" + }, + "items": { + "description": "All 52 slug/name/plz + clock when called without lookup", + "items": { + "additionalProperties": true, + "properties": { + "date": { + "description": "YYYY-MM-DD in Berlin", + "type": "string" + }, + "iso": { + "description": "ISO-8601 with Berlin offset", + "type": "string" + }, + "name": { + "type": "string" + }, + "plz": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "stand": { + "description": "Human clock 'YYYY-MM-DD HH:MM:SS CEST|CET' Europe/Berlin to the second", + "type": "string" + }, + "time": { + "description": "HH:MM:SS in Berlin (24h)", + "type": "string" + }, + "timezone": { + "const": "Europe/Berlin", + "description": "Always Europe/Berlin", + "type": "string" + }, + "tz": { + "description": "Abbreviation", + "enum": [ + "CET", + "CEST" + ], + "type": "string" + }, + "unix": { + "description": "Unix timestamp seconds", + "type": "number" + }, + "whenKey": { + "description": "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.", + "enum": [ + "day", + "night" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "name": { + "description": "Place name when resolved", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "plz": { + "description": "PLZ when resolved", + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "slug": { + "description": "Present when a place was resolved", + "type": "string" + }, + "stand": { + "description": "Human clock 'YYYY-MM-DD HH:MM:SS CEST|CET' Europe/Berlin to the second", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "time": { + "description": "HH:MM:SS in Berlin (24h)", + "type": "string" + }, + "timezone": { + "const": "Europe/Berlin", + "description": "Always Europe/Berlin", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "tz": { + "description": "Abbreviation", + "enum": [ + "CET", + "CEST" + ], + "type": "string" + }, + "unix": { + "description": "Unix timestamp seconds", + "type": "number" + }, + "whenKey": { + "description": "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.", + "enum": [ + "day", + "night" + ], + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_page_summary6 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - added
Input schema / properties / path / descriptionAdded value: +"Required. maps path (/pattonville) or www path for pointer fallback." - added
Input schema / properties / slug / descriptionAdded value: +"Alias for path/slug" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "embed_map": { + "format": "uri", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "When www pointer", + "type": "string" + }, + "lat": { + "type": "number" + }, + "lng": { + "type": "number" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "note": { + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "plz": { + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "slug": { + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_partner_info4 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp", + "format": "uri", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "maps only points; Volltext/Preise/FAQ live on www", + "type": "string" + }, + "npm": { + "description": "www CLI package @ikeytz/mcp", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "description": "Locale the caller asked for; maps still returns locale=de", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "www_mcp": { + "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus", + "format": "uri", + "type": "string" + }, + "www_tool": { + "description": "Same tool name on www MCP that holds the real payload", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_prices4 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp", + "format": "uri", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "maps only points; Volltext/Preise/FAQ live on www", + "type": "string" + }, + "npm": { + "description": "www CLI package @ikeytz/mcp", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "description": "Locale the caller asked for; maps still returns locale=de", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "www_mcp": { + "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus", + "format": "uri", + "type": "string" + }, + "www_tool": { + "description": "Same tool name on www MCP that holds the real payload", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_ratgeber5 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - added
Input schema / properties / slug / descriptionAdded value: +"Required Ratgeber slug" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp", + "format": "uri", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "maps only points; Volltext/Preise/FAQ live on www", + "type": "string" + }, + "npm": { + "description": "www CLI package @ikeytz/mcp", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "description": "Locale the caller asked for; maps still returns locale=de", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "www_mcp": { + "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus", + "format": "uri", + "type": "string" + }, + "www_tool": { + "description": "Same tool name on www MCP that holds the real payload", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_review_url4 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp", + "format": "uri", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "maps only points; Volltext/Preise/FAQ live on www", + "type": "string" + }, + "npm": { + "description": "www CLI package @ikeytz/mcp", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "description": "Locale the caller asked for; maps still returns locale=de", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "www_mcp": { + "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus", + "format": "uri", + "type": "string" + }, + "www_tool": { + "description": "Same tool name on www MCP that holds the real payload", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_serp_snippet5 fields changed- added
Input schema / properties / path / descriptionAdded value: +"maps path, e.g. /pattonville" - added
Input schema / properties / q / descriptionAdded value: +"Fallback search string" - added
Input schema / properties / slug / descriptionAdded value: +"Gebiet slug" - added
Input schema / properties / url / descriptionAdded value: +"Full maps URL" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "matchContext": { + "description": "Full SERP markdown block", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "path": { + "description": "Matched path", + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "url": { + "description": "Matched maps URL", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_service_area9 fields changed- added
Input schema / properties / compact / descriptionAdded value: +"If true, omit h1/kicker/blurb/lage/geschichte — coords + URLs only." - added
Input schema / properties / fields / descriptionAdded value: +"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." - added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - added
Input schema / properties / name / descriptionAdded value: +"German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted." - added
Input schema / properties / plz / descriptionAdded value: +"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." - added
Input schema / properties / slug / descriptionAdded value: +"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." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "blurb": { + "description": "Short blurb when not compact", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "compact": { + "description": "Whether compact mode was applied", + "type": "boolean" + }, + "embed_map": { + "format": "uri", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "geo_api": { + "format": "uri", + "type": "string" + }, + "geschichte": { + "description": "Geschichte text when not compact", + "type": "string" + }, + "google_maps": { + "description": "'lat, lng'", + "type": "string" + }, + "h1": { + "description": "Visitenkarte H1 when not compact", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "icbm": { + "description": "ICBM string", + "type": "string" + }, + "kicker": { + "description": "Kicker when not compact", + "type": "string" + }, + "kind": { + "description": "stadtteil | ort", + "type": "string" + }, + "lage": { + "description": "Lage text when not compact", + "type": "string" + }, + "lat": { + "description": "Place latitude", + "type": "number" + }, + "lng": { + "description": "Place longitude", + "type": "number" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "name": { + "description": "German name", + "type": "string" + }, + "office_lat": { + "description": "Gewerbesitz lat", + "type": "number" + }, + "office_lng": { + "description": "Gewerbesitz lng", + "type": "number" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "parent": { + "description": "Parent label", + "type": "string" + }, + "plz": { + "description": "Postcode", + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "slug": { + "description": "Resolved slug", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "walkIn": { + "description": "Always false", + "type": "boolean" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_sitemap_txt6 fields changed- added
Input schema / properties / limit / descriptionAdded 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." - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / offset / defaultAdded value: +0 - added
Input schema / properties / offset / descriptionAdded value: +"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." - added
Input schema / properties / offset / minimumAdded value: +0 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "body": { + "description": "UTF-8 text window after offset/limit", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "limit": { + "description": "Applied line limit, or null if omitted", + "type": [ + "number", + "null" + ] + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "missing": { + "description": "true if the discovery file was not found on disk", + "type": "boolean" + }, + "offset": { + "description": "Applied 0-based line offset", + "type": "number" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "path": { + "description": "Public relative path of the file on maps", + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "text": { + "description": "Alias/window of body when present", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "total_lines": { + "description": "Line count of the full file", + "type": "number" + }, + "which": { + "description": "Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_urheberrecht6 fields changed- added
Input schema / properties / limit / descriptionAdded 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." - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / offset / defaultAdded value: +0 - added
Input schema / properties / offset / descriptionAdded value: +"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." - added
Input schema / properties / offset / minimumAdded value: +0 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "body": { + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "doc": { + "const": "urheberrecht", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "www /urheberrecht", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "which": { + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_widerruf3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / descriptionAdded value: +"This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp", + "format": "uri", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "maps only points; Volltext/Preise/FAQ live on www", + "type": "string" + }, + "npm": { + "description": "www CLI package @ikeytz/mcp", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "description": "Locale the caller asked for; maps still returns locale=de", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "www_mcp": { + "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus", + "format": "uri", + "type": "string" + }, + "www_tool": { + "description": "Same tool name on www MCP that holds the real payload", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
get_wissen_entry5 fields changed- added
Input schema / properties / id / descriptionAdded value: +"Required Wissen entry id" - added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp", + "format": "uri", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "maps only points; Volltext/Preise/FAQ live on www", + "type": "string" + }, + "npm": { + "description": "www CLI package @ikeytz/mcp", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "description": "Locale the caller asked for; maps still returns locale=de", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "www_mcp": { + "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus", + "format": "uri", + "type": "string" + }, + "www_tool": { + "description": "Same tool name on www MCP that holds the real payload", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
list_auswahl4 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp", + "format": "uri", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "maps only points; Volltext/Preise/FAQ live on www", + "type": "string" + }, + "npm": { + "description": "www CLI package @ikeytz/mcp", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "description": "Locale the caller asked for; maps still returns locale=de", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "www_mcp": { + "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus", + "format": "uri", + "type": "string" + }, + "www_tool": { + "description": "Same tool name on www MCP that holds the real payload", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
list_faq4 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp", + "format": "uri", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "maps only points; Volltext/Preise/FAQ live on www", + "type": "string" + }, + "npm": { + "description": "www CLI package @ikeytz/mcp", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "description": "Locale the caller asked for; maps still returns locale=de", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "www_mcp": { + "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus", + "format": "uri", + "type": "string" + }, + "www_tool": { + "description": "Same tool name on www MCP that holds the real payload", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
list_footer4 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "email": { + "description": "info@ikeytz.com", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html_www": { + "description": "www HTML footer links (host=www)", + "type": "array" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "maps": { + "description": "maps-hosted footer links", + "type": "array" + }, + "mapsEmail": { + "description": "info@maps.ikeytz.com", + "type": "string" + }, + "note": { + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
list_locales3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / descriptionAdded value: +"This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "items": { + "description": "Only de", + "items": { + "properties": { + "locale": { + "const": "de", + "type": "string" + }, + "url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
list_nav4 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "count": { + "type": "number" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "items": { + "description": "Nav links {label,url,slug?}", + "items": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "format": "uri", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
list_plz3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / descriptionAdded value: +"This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "count": { + "description": "Distinct PLZ count", + "type": "number" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "items": { + "description": "PLZ groups", + "items": { + "properties": { + "count": { + "type": "number" + }, + "plz": { + "type": "string" + }, + "slugs": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
list_ratgeber4 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp", + "format": "uri", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "maps only points; Volltext/Preise/FAQ live on www", + "type": "string" + }, + "npm": { + "description": "www CLI package @ikeytz/mcp", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "description": "Locale the caller asked for; maps still returns locale=de", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "www_mcp": { + "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus", + "format": "uri", + "type": "string" + }, + "www_tool": { + "description": "Same tool name on www MCP that holds the real payload", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
list_service_areas10 fields changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Komma-Liste oder Array: slug,name,plz,…"New value: +"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." - added
Input schema / properties / limit / descriptionAdded 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." - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - added
Input schema / properties / offset / defaultAdded value: +0 - added
Input schema / properties / offset / descriptionAdded value: +"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." - added
Input schema / properties / offset / minimumAdded value: +0 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "count": { + "description": "Items in this page", + "type": "number" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "items": { + "description": "Service-area point cards", + "items": { + "additionalProperties": true, + "description": "One Einsatzgebiet point card (not a polygon).", + "properties": { + "distance_km": { + "description": "Present on geo-ranked results: air distance from query point", + "type": "number" + }, + "embed_map": { + "description": "https://maps.ikeytz.com/{slug}", + "format": "uri", + "type": "string" + }, + "geo_api": { + "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}", + "format": "uri", + "type": "string" + }, + "google_maps": { + "description": "Paste-ready 'lat, lng'", + "type": "string" + }, + "icbm": { + "description": "ICBM 'lat, lng' (same as google_maps)", + "type": "string" + }, + "kind": { + "description": "stadtteil | ort", + "type": "string" + }, + "lat": { + "description": "WGS84 latitude of THIS place", + "type": "number" + }, + "lng": { + "description": "WGS84 longitude of THIS place", + "type": "number" + }, + "maps_mcp": { + "const": "https://maps.ikeytz.com/mcp", + "description": "maps MCP endpoint", + "format": "uri", + "type": "string" + }, + "name": { + "description": "German place name", + "type": "string" + }, + "parent": { + "description": "Ludwigsburg or Landkreis Ludwigsburg", + "type": "string" + }, + "plz": { + "description": "Postcode", + "type": "string" + }, + "slug": { + "description": "maps slug", + "type": "string" + }, + "url": { + "description": "Keyword/www page URL when present", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "limit": { + "description": "Applied limit", + "type": "number" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "offset": { + "description": "Applied offset", + "type": "number" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "total": { + "description": "Total Gebiete (52)", + "type": "number" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
list_services4 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp", + "format": "uri", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "maps only points; Volltext/Preise/FAQ live on www", + "type": "string" + }, + "npm": { + "description": "www CLI package @ikeytz/mcp", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "description": "Locale the caller asked for; maps still returns locale=de", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "www_mcp": { + "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus", + "format": "uri", + "type": "string" + }, + "www_tool": { + "description": "Same tool name on www MCP that holds the real payload", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
list_slugs3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / descriptionAdded value: +"This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "count": { + "description": "52", + "type": "number" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "items": { + "description": "Slug strings", + "items": { + "type": "string" + }, + "type": "array" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
list_whatsapp_options4 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "items": { + "description": "Options {id,label,href}", + "items": { + "properties": { + "href": { + "format": "uri", + "type": "string" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "Link only; Festpreis SSOT remains www", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
list_wissen4 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp", + "format": "uri", + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "note": { + "description": "maps only points; Volltext/Preise/FAQ live on www", + "type": "string" + }, + "npm": { + "description": "www CLI package @ikeytz/mcp", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "description": "Locale the caller asked for; maps still returns locale=de", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "www_mcp": { + "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus", + "format": "uri", + "type": "string" + }, + "www_tool": { + "description": "Same tool name on www MCP that holds the real payload", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
resolve_locale_url3 fields changed- added
Input schema / properties / locale / descriptionAdded value: +"Required. Only de is meaningful on maps; others ignored with a note." - added
Input schema / properties / path / descriptionAdded value: +"Required. Path starting with / (e.g. /pattonville) or a maps URL." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "html": { + "description": "Present when falling through to www pointer", + "type": "string" + }, + "locale": { + "const": "de", + "type": "string" + }, + "note": { + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "path": { + "description": "Normalized path", + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "type": "string" + }, + "slug": { + "description": "When a Gebiet matched", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
resolve_maps_url4 fields changed- added
Input schema / properties / path / descriptionAdded value: +"Path e.g. /pattonville" - added
Input schema / properties / q / descriptionAdded value: +"URL or path alias" - added
Input schema / properties / url / descriptionAdded value: +"Full https://maps.ikeytz.com/… URL" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "embed_map": { + "format": "uri", + "type": "string" + }, + "error": { + "description": "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.", + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "kind": { + "description": "Resolved kind", + "enum": [ + "hub", + "ort" + ], + "type": "string" + }, + "lat": { + "type": "number" + }, + "lng": { + "type": "number" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "name": { + "description": "Place name when ort", + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "plz": { + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "slug": { + "description": "null for hub", + "type": [ + "string", + "null" + ] + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
- Changed
site_overview4 fields changed- added
Input schema / properties / locale / defaultAdded value: +"de" - added
Input schema / properties / locale / descriptionAdded value: +"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." - added
Input schema / properties / locale / enumAdded value: +[ + "de" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.", + "properties": { + "attribution": { + "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'", + "type": "string" + }, + "brand": { + "type": "string" + }, + "canonicalUrl": { + "description": "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.", + "type": "string" + }, + "count": { + "description": "52", + "type": "number" + }, + "error": { + "description": "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.", + "type": "string" + }, + "h1": { + "type": "string" + }, + "hint": { + "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.", + "type": "string" + }, + "legalName": { + "type": "string" + }, + "locale": { + "description": "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.", + "enum": [ + "de" + ], + "type": "string" + }, + "mcp": { + "format": "uri", + "type": "string" + }, + "note": { + "type": "string" + }, + "ok": { + "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.", + "type": "boolean" + }, + "owner": { + "type": "string" + }, + "registry": { + "description": "com.ikeytz/maps", + "type": "string" + }, + "related": { + "description": "Always includes https://maps.ikeytz.com/llms.txt.", + "items": { + "format": "uri", + "type": "string" + }, + "type": "array" + }, + "requested_locale": { + "type": "string" + }, + "sister": { + "description": "www MCP / npm hint", + "type": "string" + }, + "summary": { + "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.", + "type": "string" + }, + "title": { + "type": "string" + }, + "tool": { + "description": "Echo of the tool name that produced this object (e.g. get_service_area).", + "type": "string" + }, + "walkIn": { + "type": "boolean" + } + }, + "required": [ + "ok", + "tool", + "attribution" + ], + "type": "object" +}
2 tool updates
- Changed
get_discovery1 field changed- changed
Input schema / properties / which / enumPrevious value: -[ - "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", - "ai-txt", - "ai-plugin", - "answer-engine", - "ai-catalog", - "agent-skills" -]New value: +[ + "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", + "ai-txt", + "ai-plugin", + "answer-engine", + "ai-catalog", + "ard", + "agent-skills" +]
- Added
get_grenze
66 tool updates
- First observed
compose_mailto - First observed
compose_tel_landline - First observed
compose_tel_mobile - First observed
compose_whatsapp - First observed
distance_to_office - First observed
find_by_area - First observed
find_by_gebiet - First observed
find_by_geo - First observed
find_by_google_maps - First observed
find_by_icbm - First observed
find_by_keyword - First observed
find_by_plz - First observed
find_by_serp - First observed
get_about - First observed
get_agb - First observed
get_ai_page - First observed
get_ai_txt - First observed
get_auswahl_item - First observed
get_business_identity - First observed
get_contact - First observed
get_copyright - First observed
get_datenschutz - First observed
get_discovery - First observed
get_embed_map - First observed
get_emergency - First observed
get_faq - First observed
get_geo_api - First observed
get_geo_office - First observed
get_geschichte - First observed
get_hub - First observed
get_impressum - First observed
get_invoice_line_items - First observed
get_lage - First observed
get_legal - First observed
get_links - First observed
get_llms_mcp_server - First observed
get_llms_mcp_web - First observed
get_llms_txt - First observed
get_nutzungsbedingungen - First observed
get_ort_datetime - First observed
get_page_summary - First observed
get_partner_info - First observed
get_prices - First observed
get_ratgeber - First observed
get_review_url - First observed
get_serp_snippet - First observed
get_service_area - First observed
get_sitemap_txt - First observed
get_urheberrecht - First observed
get_widerruf - First observed
get_wissen_entry - First observed
list_auswahl - First observed
list_faq - First observed
list_footer - First observed
list_locales - First observed
list_nav - First observed
list_plz - First observed
list_ratgeber - First observed
list_service_areas - First observed
list_services - First observed
list_slugs - First observed
list_whatsapp_options - First observed
list_wissen - First observed
resolve_locale_url - First observed
resolve_maps_url - First observed
site_overview
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Read/Link MCP tools for Schlüsseldienst Ludwigsburg ikeytz. Public read-only. No forms. ai-train=no.
Read-only MCP for the Eco game wiki: search, Markdown pages, and wiki_* lookups. No keys, no writes.
Read-only MCP server for Mark Siazon's professional profile: projects, FAQ, proof, availability.
2,000+ MCP servers read at source level. Know what one does before you connect. Free, no key.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenancePublic browse-first MCP server for AI capability discovery and grounded Agent feedback. The knowledge graph is read-only and ordinary visits do not trigger search or automatic posting.-
- AlicenseAqualityAmaintenanceRead-only MCP server for aggregate HitKeep analytics and official documentation, including traffic, events, goals, funnels, ecommerce, Search Console, and AI visibility reporting.1685MIT
- AlicenseNot gradedqualityDmaintenanceA read-only MCP server for operator-grade release inspection and benchmark browsing.51MIT
- AlicenseNot gradedqualityFmaintenanceRead-only MCP server for Kan's FxTwitter API proxy, enabling public X/Twitter search and retrieval.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Many tools have heavily overlapping purposes: find_by_geo, find_by_google_maps, and find_by_icbm all do the same coordinate ranking, while find_by_area is an explicit alias of find_by_gebiet. Several get_llms_* and get_ai_txt/get_sitemap_txt tools are just aliases of get_discovery, forcing agents to distinguish between near-identical accessors.
The vast majority follow a clear verb_noun snake_case pattern (compose_*, find_by_*, get_*, list_*). Minor deviations like distance_to_office, site_overview, and resolve_maps_url break the pattern slightly, but the overall convention is highly predictable.
67 tools is extreme for a read-only maps discovery server. Many are aliases or www pointer-only stubs that add bulk without adding distinct capability, making the surface far larger than the underlying domain requires.
The core domain of listing, finding, and describing the 52 Einsatzgebiete is thoroughly covered: enumeration, slug/PLZ/geo/keyword lookup, polygons, embed URLs, prose texts, and discovery files. The main gap is that many legal and content tools return only www pointers rather than actual content, but this is explicit and mitigated by handoff notes.