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