MCP 서버

ikeytz Einsatzgebiet-Karten

com.ikeytz/maps
지도 및 위치 공개 · 연결 가능 MCP 2026-07-28

이 MCP로 할 수 있는 일

Provides public map and service-area data, geographic search, proximity calculations, area boundaries, business contact details, embed links, and location-specific page content.

compose_mailto
WHAT: mailto:info@ikeytz.com plus mapsEmail info@maps.ikeytz.com (mapsHref). Call with {}. USE for email CTAs. DOES NOT send mail. NEXT: get_contact, list_footer.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {}, 'description': 'This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.', 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'href': {'type': 'string', 'description': 'mailto:info@ikeytz.com'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'mapsHref': {'type': 'string', 'description': 'mailto:info@maps.ikeytz.com'}, 'mapsEmail': {'type': 'string', 'description': 'info@maps.ikeytz.com'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
compose_tel_landline
WHAT: tel: href for the public landline. Call with {}. RETURNS href + display. USE as secondary call CTA. NEXT: compose_tel_mobile.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {}, 'description': 'This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.', 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'href': {'type': 'string', 'description': 'tel:+49…'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'display': {'type': 'string', 'description': 'Human display number'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
compose_tel_mobile
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {}, 'description': 'This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.', 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'href': {'type': 'string', 'description': 'tel:+49…'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'display': {'type': 'string', 'description': 'Human display number'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
compose_whatsapp
WHAT: wa.me link. Optional option=zugefallen|abgeschlossen|zylinder (list_whatsapp_options ids). Unknown option → ok:false unknown_option + hint ids. Link only — no form. USE to open WhatsApp with a prefab. NEXT: compose_mailto, get_contact.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'option': {'type': 'string', 'description': 'Optional situation id from list_whatsapp_options (zugefallen|abgeschlossen|zylinder). Unknown → ok:false.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'href': {'type': 'string', 'format': 'uri', 'description': 'https://wa.me/…'}, 'note': {'type': 'string', 'description': 'Link only. Kein Formular.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'option': {'type': ['string', 'null'], 'description': 'Echoed option (null if omitted)'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
distance_to_office
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'lat': {'type': 'number', 'description': 'Optional query latitude instead of place lookup'}, 'lng': {'type': 'number', 'description': 'Optional query longitude'}, 'plz': {'type': 'string', 'description': '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': {'type': 'string', 'description': "Optional 'lat, lng' instead of place lookup"}, 'name': {'type': 'string', 'description': 'German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.'}, 'slug': {'type': 'string', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'from': {'type': 'object', 'properties': {'lat': {'type': 'number'}, 'lng': {'type': 'number'}}, 'description': 'Origin {lat,lng}'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'slug': {'type': ['string', 'null'], 'description': 'Resolved slug if from place lookup'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'office': {'type': 'object', 'description': 'Office {lat,lng,icbm}'}, 'walkIn': {'type': 'boolean', 'description': 'Always false'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'distance_km': {'type': 'number', 'description': 'Air distance kilometres'}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
find_by_area
WHAT: Alias of find_by_gebiet — multi-match by q/name/slug. Same inputs and outputs. USE when the agent prefers 'area' naming. NEXT: get_service_area, get_embed_map.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'q': {'type': 'string', 'description': 'Name or slug query'}, 'name': {'type': 'string', 'description': 'German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.'}, 'slug': {'type': 'string', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'q': {'type': 'string'}, 'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'count': {'type': 'number'}, 'error': {'type': 'string', '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.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'lat': {'type': 'number', 'description': 'WGS84 latitude of THIS place'}, 'lng': {'type': 'number', 'description': 'WGS84 longitude of THIS place'}, 'plz': {'type': 'string', 'description': 'Postcode'}, 'url': {'type': 'string', 'description': 'Keyword/www page URL when present'}, 'icbm': {'type': 'string', 'description': "ICBM 'lat, lng' (same as google_maps)"}, 'kind': {'type': 'string', 'description': 'stadtteil | ort'}, 'name': {'type': 'string', 'description': 'German place name'}, 'slug': {'type': 'string', 'description': 'maps slug'}, 'parent': {'type': 'string', 'description': 'Ludwigsburg or Landkreis Ludwigsburg'}, 'geo_api': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/api/v1/embed/ort/{slug}'}, 'maps_mcp': {'type': 'string', 'const': 'https://maps.ikeytz.com/mcp', 'format': 'uri', 'description': 'maps MCP endpoint'}, 'embed_map': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/{slug}'}, 'distance_km': {'type': 'number', 'description': 'Present on geo-ranked results: air distance from query point'}, 'google_maps': {'type': 'string', 'description': "Paste-ready 'lat, lng'"}}, 'description': 'One Einsatzgebiet point card (not a polygon).', 'additionalProperties': True}}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
find_by_gebiet
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'q': {'type': 'string', 'description': 'Name or slug query (preferred)'}, 'name': {'type': 'string', 'description': 'German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.'}, 'slug': {'type': 'string', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'q': {'type': 'string', 'description': 'Resolved query'}, 'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'count': {'type': 'number'}, 'error': {'type': 'string', '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.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'lat': {'type': 'number', 'description': 'WGS84 latitude of THIS place'}, 'lng': {'type': 'number', 'description': 'WGS84 longitude of THIS place'}, 'plz': {'type': 'string', 'description': 'Postcode'}, 'url': {'type': 'string', 'description': 'Keyword/www page URL when present'}, 'icbm': {'type': 'string', 'description': "ICBM 'lat, lng' (same as google_maps)"}, 'kind': {'type': 'string', 'description': 'stadtteil | ort'}, 'name': {'type': 'string', 'description': 'German place name'}, 'slug': {'type': 'string', 'description': 'maps slug'}, 'parent': {'type': 'string', 'description': 'Ludwigsburg or Landkreis Ludwigsburg'}, 'geo_api': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/api/v1/embed/ort/{slug}'}, 'maps_mcp': {'type': 'string', 'const': 'https://maps.ikeytz.com/mcp', 'format': 'uri', 'description': 'maps MCP endpoint'}, 'embed_map': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/{slug}'}, 'distance_km': {'type': 'number', 'description': 'Present on geo-ranked results: air distance from query point'}, 'google_maps': {'type': 'string', 'description': "Paste-ready 'lat, lng'"}}, 'description': 'One Einsatzgebiet point card (not a polygon).', 'additionalProperties': True}}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
find_by_geo
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'lat': {'type': 'number', 'description': 'WGS84 latitude. Required with lng unless icbm is set. (0,0) → outside_service_area.'}, 'lng': {'type': 'number', 'description': 'WGS84 longitude. Required with lat unless icbm is set.'}, 'icbm': {'type': 'string', 'description': "ICBM or paste 'lat, lng' (comma-separated). Alternative to lat+lng."}, 'limit': {'type': 'integer', 'minimum': 1, 'description': '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': {'type': 'number', 'description': 'Optional air-radius filter in km. Omit = return nearest N (limit). Far points / (0,0) → outside_service_area.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'lat': {'type': 'number', 'description': 'Query latitude'}, 'lng': {'type': 'number', 'description': 'Query longitude'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'icbm': {'type': 'string', 'description': 'Query ICBM'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'count': {'type': 'number'}, 'error': {'type': 'string', '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.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'lat': {'type': 'number', 'description': 'WGS84 latitude of THIS place'}, 'lng': {'type': 'number', 'description': 'WGS84 longitude of THIS place'}, 'plz': {'type': 'string', 'description': 'Postcode'}, 'url': {'type': 'string', 'description': 'Keyword/www page URL when present'}, 'icbm': {'type': 'string', 'description': "ICBM 'lat, lng' (same as google_maps)"}, 'kind': {'type': 'string', 'description': 'stadtteil | ort'}, 'name': {'type': 'string', 'description': 'German place name'}, 'slug': {'type': 'string', 'description': 'maps slug'}, 'parent': {'type': 'string', 'description': 'Ludwigsburg or Landkreis Ludwigsburg'}, 'geo_api': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/api/v1/embed/ort/{slug}'}, 'maps_mcp': {'type': 'string', 'const': 'https://maps.ikeytz.com/mcp', 'format': 'uri', 'description': 'maps MCP endpoint'}, 'embed_map': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/{slug}'}, 'distance_km': {'type': 'number', 'description': 'Present on geo-ranked results: air distance from query point'}, 'google_maps': {'type': 'string', 'description': "Paste-ready 'lat, lng'"}}, 'description': 'One Einsatzgebiet point card (not a polygon).', 'additionalProperties': True}, 'description': 'Ranked Gebiete with distance_km'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': ['number', 'null'], 'description': 'Applied radius or null'}, 'nearest_km': {'type': ['number', 'null'], 'description': 'On outside_service_area failures: nearest distance if any'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
find_by_google_maps
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'q': {'type': 'string', 'description': "Paste string containing 'lat, lng'"}, 'lat': {'type': 'number', 'description': 'WGS84 latitude. Required with lng unless icbm is set. (0,0) → outside_service_area.'}, 'lng': {'type': 'number', 'description': 'WGS84 longitude. Required with lat unless icbm is set.'}, 'icbm': {'type': 'string', 'description': "ICBM or paste 'lat, lng' (comma-separated). Alternative to lat+lng."}, 'limit': {'type': 'integer', 'minimum': 1, 'description': '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': {'type': 'number', 'description': 'Optional air-radius filter in km. Omit = return nearest N (limit). Far points / (0,0) → outside_service_area.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'lat': {'type': 'number'}, 'lng': {'type': 'number'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'icbm': {'type': 'string'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'count': {'type': 'number'}, 'error': {'type': 'string', '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.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'lat': {'type': 'number', 'description': 'WGS84 latitude of THIS place'}, 'lng': {'type': 'number', 'description': 'WGS84 longitude of THIS place'}, 'plz': {'type': 'string', 'description': 'Postcode'}, 'url': {'type': 'string', 'description': 'Keyword/www page URL when present'}, 'icbm': {'type': 'string', 'description': "ICBM 'lat, lng' (same as google_maps)"}, 'kind': {'type': 'string', 'description': 'stadtteil | ort'}, 'name': {'type': 'string', 'description': 'German place name'}, 'slug': {'type': 'string', 'description': 'maps slug'}, 'parent': {'type': 'string', 'description': 'Ludwigsburg or Landkreis Ludwigsburg'}, 'geo_api': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/api/v1/embed/ort/{slug}'}, 'maps_mcp': {'type': 'string', 'const': 'https://maps.ikeytz.com/mcp', 'format': 'uri', 'description': 'maps MCP endpoint'}, 'embed_map': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/{slug}'}, 'distance_km': {'type': 'number', 'description': 'Present on geo-ranked results: air distance from query point'}, 'google_maps': {'type': 'string', 'description': "Paste-ready 'lat, lng'"}}, 'description': 'One Einsatzgebiet point card (not a polygon).', 'additionalProperties': True}}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': ['number', 'null']}, 'nearest_km': {'type': ['number', 'null']}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
find_by_icbm
WHAT: Same as find_by_geo but prefers icbm string 'lat, lng'. Optional lat/lng/radius_km/limit. (0,0) → outside_service_area. USE when the user pastes ICBM metadata. NEXT: get_embed_map, get_grenze.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'lat': {'type': 'number', 'description': 'WGS84 latitude. Required with lng unless icbm is set. (0,0) → outside_service_area.'}, 'lng': {'type': 'number', 'description': 'WGS84 longitude. Required with lat unless icbm is set.'}, 'icbm': {'type': 'string', 'description': "ICBM or paste 'lat, lng' (comma-separated). Alternative to lat+lng."}, 'limit': {'type': 'integer', 'minimum': 1, 'description': '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': {'type': 'number', 'description': 'Optional air-radius filter in km. Omit = return nearest N (limit). Far points / (0,0) → outside_service_area.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'lat': {'type': 'number'}, 'lng': {'type': 'number'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'icbm': {'type': 'string'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'count': {'type': 'number'}, 'error': {'type': 'string', '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.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'lat': {'type': 'number', 'description': 'WGS84 latitude of THIS place'}, 'lng': {'type': 'number', 'description': 'WGS84 longitude of THIS place'}, 'plz': {'type': 'string', 'description': 'Postcode'}, 'url': {'type': 'string', 'description': 'Keyword/www page URL when present'}, 'icbm': {'type': 'string', 'description': "ICBM 'lat, lng' (same as google_maps)"}, 'kind': {'type': 'string', 'description': 'stadtteil | ort'}, 'name': {'type': 'string', 'description': 'German place name'}, 'slug': {'type': 'string', 'description': 'maps slug'}, 'parent': {'type': 'string', 'description': 'Ludwigsburg or Landkreis Ludwigsburg'}, 'geo_api': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/api/v1/embed/ort/{slug}'}, 'maps_mcp': {'type': 'string', 'const': 'https://maps.ikeytz.com/mcp', 'format': 'uri', 'description': 'maps MCP endpoint'}, 'embed_map': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/{slug}'}, 'distance_km': {'type': 'number', 'description': 'Present on geo-ranked results: air distance from query point'}, 'google_maps': {'type': 'string', 'description': "Paste-ready 'lat, lng'"}}, 'description': 'One Einsatzgebiet point card (not a polygon).', 'additionalProperties': True}}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': ['number', 'null']}, 'nearest_km': {'type': ['number', 'null']}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
find_by_keyword
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.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['q'], 'properties': {'q': {'type': 'string', 'description': 'Required search string matched against keyword and URL (substring, case-insensitive).'}, 'limit': {'type': 'integer', 'minimum': 1, 'description': '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': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'q': {'type': 'string', 'description': 'Query echoed'}, 'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'count': {'type': 'number', 'description': 'Returned hits'}, 'error': {'type': 'string', '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.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'keyword': {'type': 'string'}}}, 'description': 'keyword + url rows'}, 'lines': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Raw TSV lines'}, 'total': {'type': 'number', 'description': 'Total matches before limit'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
find_by_plz
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.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['plz'], 'properties': {'q': {'type': 'string', 'description': 'Alias for plz if plz omitted'}, 'plz': {'type': 'string', 'description': 'Required German postcode.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'plz': {'type': 'string', 'description': 'Queried PLZ'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'count': {'type': 'number', 'description': 'Number of Gebiete'}, 'error': {'type': 'string', '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.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'lat': {'type': 'number', 'description': 'WGS84 latitude of THIS place'}, 'lng': {'type': 'number', 'description': 'WGS84 longitude of THIS place'}, 'plz': {'type': 'string', 'description': 'Postcode'}, 'url': {'type': 'string', 'description': 'Keyword/www page URL when present'}, 'icbm': {'type': 'string', 'description': "ICBM 'lat, lng' (same as google_maps)"}, 'kind': {'type': 'string', 'description': 'stadtteil | ort'}, 'name': {'type': 'string', 'description': 'German place name'}, 'slug': {'type': 'string', 'description': 'maps slug'}, 'parent': {'type': 'string', 'description': 'Ludwigsburg or Landkreis Ludwigsburg'}, 'geo_api': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/api/v1/embed/ort/{slug}'}, 'maps_mcp': {'type': 'string', 'const': 'https://maps.ikeytz.com/mcp', 'format': 'uri', 'description': 'maps MCP endpoint'}, 'embed_map': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/{slug}'}, 'distance_km': {'type': 'number', 'description': 'Present on geo-ranked results: air distance from query point'}, 'google_maps': {'type': 'string', 'description': "Paste-ready 'lat, lng'"}}, 'description': 'One Einsatzgebiet point card (not a polygon).', 'additionalProperties': True}, 'description': 'All matches'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
find_by_serp
WHAT: Search maps llms-serp.txt blocks by q, path, url, or slug. RETURNS path/url/snippet items. USE for title/H1/description SERP cards on maps. DOES NOT scrape live HTML. NEXT: get_serp_snippet for one full block.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'q': {'type': 'string', 'description': 'Free-text search in SERP blocks'}, 'url': {'type': 'string', 'description': 'Full https://maps.ikeytz.com/… URL'}, 'path': {'type': 'string', 'description': 'maps path fragment, e.g. /pattonville'}, 'slug': {'type': 'string', 'description': 'Gebiet slug'}, 'limit': {'type': 'integer', 'minimum': 1, 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'q': {'type': 'string', 'description': 'Resolved query'}, 'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'count': {'type': 'number'}, 'error': {'type': 'string', '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.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string'}, 'path': {'type': 'string'}, 'snippet': {'type': 'string'}}}, 'description': 'SERP hits'}, 'total': {'type': 'number'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
get_about
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'h1': {'type': 'string'}, 'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'mcp': {'type': 'string', 'format': 'uri'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'note': {'type': 'string'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'brand': {'type': 'string'}, 'count': {'type': 'number'}, 'error': {'type': 'string', '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.'}, 'owner': {'type': 'string'}, 'title': {'type': 'string'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'sister': {'type': 'string'}, 'walkIn': {'type': 'boolean'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'registry': {'type': 'string'}, 'legalName': {'type': 'string'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
get_agb
WHAT: www pointer only — AGB live at www.ikeytz.com/agb. maps returns html + note, not the corpus. USE to open/hand off to www MCP. DOES NOT return AGB body text. NEXT: @ikeytz/mcp get_legal(doc=agb).
읽기 전용
입력 스키마
{'type': 'object', 'properties': {}, 'description': 'This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.', 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'npm': {'type': 'string', 'description': 'www CLI package @ikeytz/mcp'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'format': 'uri', 'description': 'Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp'}, 'note': {'type': 'string', 'description': 'maps only points; Volltext/Preise/FAQ live on www'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri', 'description': 'https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus'}, 'www_tool': {'type': 'string', 'description': 'Same tool name on www MCP that holds the real payload'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string', 'description': 'Locale the caller asked for; maps still returns locale=de'}}, '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.', 'additionalProperties': True}
get_ai_page
WHAT: Read maps /ai-pages/de/{slug}.txt when present; else www pointer for the path. path or slug. RETURNS text for maps AI pages. USE for agent-ready Gebiet prose. NEXT: get_service_area, get_lage.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'path': {'type': 'string', 'description': 'Path or ai-pages path fragment'}, 'slug': {'type': 'string', 'description': 'Gebiet or ai-page slug'}, 'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'description': 'When www pointer'}, 'note': {'type': 'string'}, 'path': {'type': 'string', 'description': '/ai-pages/de/{slug}.txt'}, 'slug': {'type': 'string'}, 'text': {'type': 'string', 'description': 'Full ai-page UTF-8 text'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
get_ai_txt
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'minimum': 1, 'description': 'Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius.'}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'path': {'type': 'string', 'description': 'Public relative path of the file on maps'}, 'text': {'type': 'string', 'description': 'UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'limit': {'type': ['number', 'null'], 'description': 'Applied line limit, or null if omitted'}, 'which': {'type': 'string', 'description': 'Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …).'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'offset': {'type': 'number', 'description': 'Applied 0-based line offset'}, 'missing': {'type': 'boolean', 'description': 'true if the discovery file was not found on disk'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'totalUrls': {'type': 'number', 'description': 'http(s) lines in the full file'}, 'truncated': {'type': 'boolean', 'description': 'true if offset+limit left more lines. Also in trailing # MCP-META.'}, 'nextOffset': {'type': ['number', 'null'], 'description': 'Pass as next offset when truncated; else null. Also in # MCP-META.'}, 'totalBytes': {'type': 'number', 'description': 'Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META.'}, 'totalChars': {'type': 'number', 'description': 'Full discovery file character length before offset/limit. Also in # MCP-META.'}, 'totalLines': {'type': 'number', 'description': 'Alias of total_lines'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'total_lines': {'type': 'number', 'description': 'Line count of the full file'}, 'canonicalUrl': {'type': 'string', '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.'}, 'returnedUrls': {'type': 'number', 'description': 'http(s) lines in this window'}, 'bytesReturned': {'type': 'number', 'description': 'UTF-8 length of text window'}, 'returnedLines': {'type': 'number', 'description': 'Lines in this window (before # MCP-META)'}, 'fetchTruncated': {'type': 'boolean', 'description': 'true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false.'}}, '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.', 'additionalProperties': True}
get_auswahl_item
WHAT: www pointer only — one Auswahl item on www /auswahl/{slug}. slug required. maps returns html to that path. NEXT: www get_auswahl_item.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Required Auswahl slug on www'}, 'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'npm': {'type': 'string', 'description': 'www CLI package @ikeytz/mcp'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'format': 'uri', 'description': 'Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp'}, 'note': {'type': 'string', 'description': 'maps only points; Volltext/Preise/FAQ live on www'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri', 'description': 'https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus'}, 'www_tool': {'type': 'string', 'description': 'Same tool name on www MCP that holds the real payload'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string', 'description': 'Locale the caller asked for; maps still returns locale=de'}}, '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.', 'additionalProperties': True}
get_business_identity
WHO: Inhaber, brand, legalName, hours, NAP, office coords. walkIn=false — mobile only. USE for LocalBusiness / impressum-grade facts on maps. DOES NOT update records. NEXT: get_contact, get_geo_office, get_impressum.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'nap': {'type': 'object', 'description': 'Public NAP payload'}, 'www': {'type': 'string', 'format': 'uri'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'maps': {'type': 'string', 'format': 'uri'}, 'note': {'type': 'string'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'brand': {'type': 'string'}, 'error': {'type': 'string', '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.'}, 'hours': {'type': 'string'}, 'owner': {'type': 'string', 'description': 'Mahmud Reza Kashani'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'office': {'type': 'object', 'description': 'lat/lng/google_maps/icbm'}, 'walkIn': {'type': 'boolean', 'description': 'Always false'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'legalName': {'type': 'string'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'office_note': {'type': 'string'}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
get_contact
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'fax': {'type': 'string', 'description': 'Fax display'}, 'lat': {'type': 'number', 'description': 'Office lat'}, 'lng': {'type': 'number', 'description': 'Office lng'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'icbm': {'type': 'string'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'email': {'type': 'string', 'description': 'info@ikeytz.com'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'mobile': {'type': 'string', 'description': 'Mobile display'}, 'walkIn': {'type': 'boolean', 'description': 'Always false'}, 'address': {'type': 'object', 'description': 'Structured address block'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'landline': {'type': 'string', 'description': 'Landline display'}, 'whatsapp': {'type': 'string', 'format': 'uri', 'description': 'wa.me URL'}, 'mapsEmail': {'type': 'string', 'description': 'info@maps.ikeytz.com'}, 'addressLine': {'type': 'string', 'description': 'Single-line address'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'google_maps': {'type': 'string'}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
get_copyright
WHAT: English map copyright text from maps /llms-copyright.txt. Optional offset/limit. USE for EN citations of map authorship. NEXT: get_urheberrecht.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'minimum': 1, 'description': 'Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius.'}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'doc': {'type': 'string', 'const': 'copyright'}, 'body': {'type': 'string'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'which': {'type': 'string'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
get_datenschutz
WHAT: www pointer only — Datenschutz on www.ikeytz.com. maps returns html link. DOES NOT return the privacy policy body. NEXT: www MCP.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {}, 'description': 'This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.', 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'npm': {'type': 'string', 'description': 'www CLI package @ikeytz/mcp'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'format': 'uri', 'description': 'Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp'}, 'note': {'type': 'string', 'description': 'maps only points; Volltext/Preise/FAQ live on www'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri', 'description': 'https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus'}, 'www_tool': {'type': 'string', 'description': 'Same tool name on www MCP that holds the real payload'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string', 'description': 'Locale the caller asked for; maps still returns locale=de'}}, '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.', 'additionalProperties': True}
get_discovery
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-impressum-kontakt, llms-orte-geo, llms-urheberrecht, llms-copyright, llms-mcp-server, llms-mcp-web, robots, sitemap-txt, sitemap-xml. Optional offset/limit line window. USE for agent-ready catalogs and robots/sitemap. DOES NOT invent missing files (missing=true). NEXT: find_by_keyword / find_by_serp for structured search; get_llms_txt / get_ai_txt aliases.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['which'], 'properties': {'limit': {'type': 'integer', 'minimum': 1, 'description': 'Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius.'}, 'which': {'type': 'string', 'description': 'Required discovery id. Examples: ard, ai-catalog, ai-txt, ai-plugin, answer-engine, agent-skills, llms, llms-full, llms-index, llms-keywords, llms-serp, llms-impressum-kontakt, llms-orte-geo, llms-urheberrecht, llms-copyright, llms-mcp-server, llms-mcp-web, robots, sitemap-txt, sitemap-xml.'}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'path': {'type': 'string', 'description': 'Public relative path of the file on maps'}, 'text': {'type': 'string', 'description': 'UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'limit': {'type': ['number', 'null'], 'description': 'Applied line limit, or null if omitted'}, 'which': {'type': 'string', 'description': 'Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …).'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'offset': {'type': 'number', 'description': 'Applied 0-based line offset'}, 'missing': {'type': 'boolean', 'description': 'true if the discovery file was not found on disk'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'totalUrls': {'type': 'number', 'description': 'http(s) lines in the full file'}, 'truncated': {'type': 'boolean', 'description': 'true if offset+limit left more lines. Also in trailing # MCP-META.'}, 'nextOffset': {'type': ['number', 'null'], 'description': 'Pass as next offset when truncated; else null. Also in # MCP-META.'}, 'totalBytes': {'type': 'number', 'description': 'Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META.'}, 'totalChars': {'type': 'number', 'description': 'Full discovery file character length before offset/limit. Also in # MCP-META.'}, 'totalLines': {'type': 'number', 'description': 'Alias of total_lines'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'total_lines': {'type': 'number', 'description': 'Line count of the full file'}, 'canonicalUrl': {'type': 'string', '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.'}, 'returnedUrls': {'type': 'number', 'description': 'http(s) lines in this window'}, 'bytesReturned': {'type': 'number', 'description': 'UTF-8 length of text window'}, 'returnedLines': {'type': 'number', 'description': 'Lines in this window (before # MCP-META)'}, 'fetchTruncated': {'type': 'boolean', 'description': 'true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false.'}}, '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.', 'additionalProperties': True}
get_embed_map
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'plz': {'type': 'string', 'description': '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': {'type': 'string', 'description': 'German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.'}, 'slug': {'type': 'string', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'lat': {'type': 'number'}, 'lng': {'type': 'number'}, 'plz': {'type': 'string'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'geo_api': {'type': 'string', 'format': 'uri'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'object', 'properties': {'hub': {'type': 'string', 'format': 'uri'}, 'buero': {'type': 'string', 'format': 'uri'}, 'mcp_hub': {'type': 'string', 'format': 'uri'}}, 'description': 'MAPS-IL1 mini-chrome URLs'}, 'embed_map': {'type': 'string', 'format': 'uri'}, 'neighbors': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'embed_map': {'type': 'string', 'format': 'uri'}}}, 'description': 'Up to 5 nearest Gebiete'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
get_emergency
WHAT: www pointer only — Notfall-Türöffnung page on www. maps returns html; use get_contact / compose_tel_mobile here for phones. DOES NOT dispatch. NEXT: compose_tel_mobile, www get_emergency.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'npm': {'type': 'string', 'description': 'www CLI package @ikeytz/mcp'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'format': 'uri', 'description': 'Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp'}, 'note': {'type': 'string', 'description': 'maps only points; Volltext/Preise/FAQ live on www'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri', 'description': 'https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus'}, 'www_tool': {'type': 'string', 'description': 'Same tool name on www MCP that holds the real payload'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string', 'description': 'Locale the caller asked for; maps still returns locale=de'}}, '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.', 'additionalProperties': True}
get_faq
WHAT: www pointer only — one FAQ answer lives on www. Optional id/q for www; maps returns /faq html. NEXT: www get_faq.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'q': {'type': 'string', 'description': 'FAQ question search on www'}, 'id': {'type': 'string', 'description': 'FAQ id on www'}, 'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'npm': {'type': 'string', 'description': 'www CLI package @ikeytz/mcp'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'format': 'uri', 'description': 'Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp'}, 'note': {'type': 'string', 'description': 'maps only points; Volltext/Preise/FAQ live on www'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri', 'description': 'https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus'}, 'www_tool': {'type': 'string', 'description': 'Same tool name on www MCP that holds the real payload'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string', 'description': 'Locale the caller asked for; maps still returns locale=de'}}, '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.', 'additionalProperties': True}
get_geo_api
WHAT: Public embed JSON URL https://maps.ikeytz.com/api/v1/embed/ort/{slug} (point + Grenze on that endpoint). Lookup slug|plz|name. RETURNS URL pointer + area card; note that the MCP payload itself is not the polygon. USE to fetch/open the public JSON. NEXT: get_grenze for GeoJSON polygon inside MCP.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'plz': {'type': 'string', 'description': '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': {'type': 'string', 'description': 'German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.'}, 'slug': {'type': 'string', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'lat': {'type': 'number'}, 'lng': {'type': 'number'}, 'plz': {'type': 'string'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'name': {'type': 'string'}, 'note': {'type': 'string', 'description': 'Public JSON pointer; use get_grenze for polygon in MCP'}, 'slug': {'type': 'string'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'geo_api': {'type': 'string', 'format': 'uri'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
get_geo_office
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'lat': {'type': 'number', 'description': 'Office latitude'}, 'lng': {'type': 'number', 'description': 'Office longitude'}, 'city': {'type': 'string', 'description': 'City'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'icbm': {'type': 'string', 'description': 'ICBM string (same as google_maps)'}, 'note': {'type': 'string', 'description': 'Büro · kein Kundenverkehr vor Ort'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'postal': {'type': 'string', 'description': 'Postal code'}, 'street': {'type': 'string', 'description': 'Office street'}, 'walkIn': {'type': 'boolean', 'description': 'Always false — no shop counter'}, 'geo_api': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/api/v1/embed/office'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/buero'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'google_maps': {'type': 'string', 'description': "'lat, lng'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
get_geschichte
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'plz': {'type': 'string', 'description': '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': {'type': 'string', 'description': 'German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.'}, 'slug': {'type': 'string', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'geschichte': {'type': 'string', 'description': 'Geschichte prose (may be empty)'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
get_grenze
WHAT: OSM Gebietspolygon for one Einsatzgebiet as GeoJSON FeatureCollection inside the MCP result. Lookup slug|plz|name. RETURNS hasPolygon, polygon, point, osmRelationId/osmWayId, via. USE when the agent needs the boundary geometry. DOES NOT replace get_geo_api (URL pointer) or get_grenze_koordinaten (full embed blob). NEXT: get_grenze_koordinaten, get_lage, get_embed_map.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'plz': {'type': 'string', 'description': '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': {'type': 'string', 'description': 'German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.'}, 'slug': {'type': 'string', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'lat': {'type': 'number'}, 'lng': {'type': 'number'}, 'plz': {'type': 'string'}, 'via': {'type': ['string', 'null'], 'description': 'Fetch path hint'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'point': {'type': ['object', 'null'], 'description': 'Point feature or null'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'geo_api': {'type': 'string', 'format': 'uri'}, 'polygon': {'type': 'object', 'description': 'GeoJSON FeatureCollection (may be empty)'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'osmWayId': {'type': ['number', 'null'], 'description': 'OSM way id if any'}, 'hasPolygon': {'type': 'boolean', 'description': 'true if polygon.features length > 0'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'osmRelationId': {'type': ['number', 'null'], 'description': 'OSM relation id if any'}}, '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.', 'additionalProperties': True}
get_grenze_koordinaten
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, points, polygon, featureCollection, OSM ids, embed paths, iframe. 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 only). NEXT: get_grenze, get_contact, get_embed_map.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'plz': {'type': 'string', 'description': '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': {'type': 'string', 'description': 'German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.'}, 'slug': {'type': 'string', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'lat': {'type': 'number'}, 'lng': {'type': 'number'}, 'plz': {'type': 'string'}, 'via': {'type': ['string', 'null']}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'href': {'type': 'string', 'format': 'uri', 'description': 'www keyword page'}, 'icbm': {'type': 'string'}, 'name': {'type': 'string'}, 'part': {'type': 'string', 'description': 'Always full'}, 'slug': {'type': 'string'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'color': {'type': 'string'}, 'embed': {'type': 'string', 'description': 'Relative fn embed path'}, 'error': {'type': 'string', '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.'}, 'phone': {'type': 'object', 'description': 'NAP block (mobile, landline, fax, email, address, …)'}, 'point': {'type': ['object', 'null']}, 'store': {'type': 'string'}, 'style': {'type': 'object', 'description': 'MapLibre-ish style colors'}, 'gruppe': {'type': 'string'}, 'iframe': {'type': 'string', 'format': 'uri'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'points': {'type': 'object', 'description': 'GeoJSON FeatureCollection'}, 'polygon': {'type': 'object', 'description': 'GeoJSON FeatureCollection (polygons only)'}, 'purpose': {'type': 'string'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'osmWayId': {'type': ['number', 'null']}, 'embedPunkt': {'type': 'string'}, 'hasPolygon': {'type': 'boolean'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'countPoints': {'type': 'number'}, 'embedGrenze': {'type': 'string'}, 'embedPublic': {'type': 'string'}, 'geoPosition': {'type': 'string', 'description': 'lat;lng'}, 'canonicalUrl': {'type': 'string', '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.'}, 'countPolygons': {'type': 'number'}, 'osmRelationId': {'type': ['number', 'null']}, 'hasPolygonKnown': {'type': 'boolean'}, 'featureCollection': {'type': 'object', 'description': 'Polygon + point FeatureCollection'}}, '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.', 'additionalProperties': True}
get_hub
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {}, 'description': 'This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.', 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'h1': {'type': 'string', 'description': 'Hub H1'}, 'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'count': {'type': 'number', 'description': '52'}, 'error': {'type': 'string', '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.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'embed_map': {'type': 'string', 'format': 'uri'}}}, 'description': 'slug/name/embed_map rows'}, 'title': {'type': 'string', 'description': 'Hub title'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
get_impressum
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'minimum': 1, 'description': 'Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius.'}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'doc': {'type': 'string', 'const': 'impressum'}, 'body': {'type': 'string'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'description': 'www /impressum'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'which': {'type': 'string'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
get_invoice_line_items
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.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['situationKey'], 'properties': {'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}, 'whenKey': {'type': 'string', 'description': 'day|night|now — used on www; maps only points.'}, 'breakdown': {'type': 'boolean', 'description': 'www flag; ignored for maps pointer payload.'}, 'situationKey': {'type': 'string', 'description': 'Required for www. Situation id (opening_slam, opening_locked, pkg_key_*, cylinder_only, cylinder_mount, aliases).'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'npm': {'type': 'string', 'description': 'www CLI package @ikeytz/mcp'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'format': 'uri', 'description': 'Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp'}, 'note': {'type': 'string', 'description': 'maps only points; Volltext/Preise/FAQ live on www'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri', 'description': 'https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus'}, 'www_tool': {'type': 'string', 'description': 'Same tool name on www MCP that holds the real payload'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string', 'description': 'Locale the caller asked for; maps still returns locale=de'}}, '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.', 'additionalProperties': True}
get_lage
WHAT: Lage (location description) text for one Einsatzgebiet Visitenkarte. Lookup slug|plz|name. RETURNS slug, name, lage. USE for human-readable geography prose. NEXT: get_geschichte, get_service_area.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'plz': {'type': 'string', 'description': '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': {'type': 'string', 'description': 'German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.'}, 'slug': {'type': 'string', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'lage': {'type': 'string', 'description': 'Lage prose (may be empty)'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
get_legal
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.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['doc'], 'properties': {'doc': {'enum': ['urheberrecht', 'copyright', 'impressum', 'agb', 'nutzungsbedingungen', 'datenschutz', 'widerruf'], 'type': 'string', 'description': 'Required. maps corpus: urheberrecht|copyright|impressum. www links only: agb|nutzungsbedingungen|datenschutz|widerruf.'}, 'limit': {'type': 'integer', 'minimum': 1, 'description': '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': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'doc': {'type': 'string', 'description': 'Resolved doc id'}, 'body': {'type': 'string', 'description': 'maps text window when applicable'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'description': 'www HTML URL when applicable'}, 'note': {'type': 'string', 'description': 'Host split note'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'which': {'type': 'string', 'description': 'Discovery id for maps text docs'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
get_links
WHAT: maps discovery URLs — hub, mcp, server-card, agent-skills, llms, registry search, npm @ikeytz/maps-mcp. USE as the machine bookmark set. NEXT: get_discovery, get_llms_txt.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'note': {'type': 'string'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'items': {'type': 'object', 'properties': {'hub': {'type': 'string', 'format': 'uri'}, 'mcp': {'type': 'string', 'format': 'uri'}, 'npm': {'type': 'string', 'format': 'uri'}, 'card': {'type': 'string', 'format': 'uri'}, 'llms': {'type': 'string', 'format': 'uri'}, 'skills': {'type': 'string', 'format': 'uri'}, 'registry': {'type': 'string', 'format': 'uri'}}, 'description': 'Named absolute URLs'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
get_llms_mcp_server
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'minimum': 1, 'description': 'Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius.'}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'path': {'type': 'string', 'description': 'Public relative path of the file on maps'}, 'text': {'type': 'string', 'description': 'UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'limit': {'type': ['number', 'null'], 'description': 'Applied line limit, or null if omitted'}, 'which': {'type': 'string', 'description': 'Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …).'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'offset': {'type': 'number', 'description': 'Applied 0-based line offset'}, 'missing': {'type': 'boolean', 'description': 'true if the discovery file was not found on disk'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'totalUrls': {'type': 'number', 'description': 'http(s) lines in the full file'}, 'truncated': {'type': 'boolean', 'description': 'true if offset+limit left more lines. Also in trailing # MCP-META.'}, 'nextOffset': {'type': ['number', 'null'], 'description': 'Pass as next offset when truncated; else null. Also in # MCP-META.'}, 'totalBytes': {'type': 'number', 'description': 'Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META.'}, 'totalChars': {'type': 'number', 'description': 'Full discovery file character length before offset/limit. Also in # MCP-META.'}, 'totalLines': {'type': 'number', 'description': 'Alias of total_lines'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'total_lines': {'type': 'number', 'description': 'Line count of the full file'}, 'canonicalUrl': {'type': 'string', '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.'}, 'returnedUrls': {'type': 'number', 'description': 'http(s) lines in this window'}, 'bytesReturned': {'type': 'number', 'description': 'UTF-8 length of text window'}, 'returnedLines': {'type': 'number', 'description': 'Lines in this window (before # MCP-META)'}, 'fetchTruncated': {'type': 'boolean', 'description': 'true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false.'}}, '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.', 'additionalProperties': True}
get_llms_mcp_web
WHAT: Alias of get_discovery(which=llms-mcp-web) — web/UI-oriented MCP catalog on maps. Optional offset/limit. USE for browser/agent web discovery copy. NEXT: get_llms_mcp_server, get_mcp hub HTML /mcp-hub.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'minimum': 1, 'description': 'Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius.'}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'path': {'type': 'string', 'description': 'Public relative path of the file on maps'}, 'text': {'type': 'string', 'description': 'UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'limit': {'type': ['number', 'null'], 'description': 'Applied line limit, or null if omitted'}, 'which': {'type': 'string', 'description': 'Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …).'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'offset': {'type': 'number', 'description': 'Applied 0-based line offset'}, 'missing': {'type': 'boolean', 'description': 'true if the discovery file was not found on disk'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'totalUrls': {'type': 'number', 'description': 'http(s) lines in the full file'}, 'truncated': {'type': 'boolean', 'description': 'true if offset+limit left more lines. Also in trailing # MCP-META.'}, 'nextOffset': {'type': ['number', 'null'], 'description': 'Pass as next offset when truncated; else null. Also in # MCP-META.'}, 'totalBytes': {'type': 'number', 'description': 'Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META.'}, 'totalChars': {'type': 'number', 'description': 'Full discovery file character length before offset/limit. Also in # MCP-META.'}, 'totalLines': {'type': 'number', 'description': 'Alias of total_lines'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'total_lines': {'type': 'number', 'description': 'Line count of the full file'}, 'canonicalUrl': {'type': 'string', '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.'}, 'returnedUrls': {'type': 'number', 'description': 'http(s) lines in this window'}, 'bytesReturned': {'type': 'number', 'description': 'UTF-8 length of text window'}, 'returnedLines': {'type': 'number', 'description': 'Lines in this window (before # MCP-META)'}, 'fetchTruncated': {'type': 'boolean', 'description': 'true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false.'}}, '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.', 'additionalProperties': True}
get_llms_txt
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'minimum': 1, 'description': 'Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius.'}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'path': {'type': 'string', 'description': 'Public relative path of the file on maps'}, 'text': {'type': 'string', 'description': 'UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'limit': {'type': ['number', 'null'], 'description': 'Applied line limit, or null if omitted'}, 'which': {'type': 'string', 'description': 'Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …).'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'offset': {'type': 'number', 'description': 'Applied 0-based line offset'}, 'missing': {'type': 'boolean', 'description': 'true if the discovery file was not found on disk'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'totalUrls': {'type': 'number', 'description': 'http(s) lines in the full file'}, 'truncated': {'type': 'boolean', 'description': 'true if offset+limit left more lines. Also in trailing # MCP-META.'}, 'nextOffset': {'type': ['number', 'null'], 'description': 'Pass as next offset when truncated; else null. Also in # MCP-META.'}, 'totalBytes': {'type': 'number', 'description': 'Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META.'}, 'totalChars': {'type': 'number', 'description': 'Full discovery file character length before offset/limit. Also in # MCP-META.'}, 'totalLines': {'type': 'number', 'description': 'Alias of total_lines'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'total_lines': {'type': 'number', 'description': 'Line count of the full file'}, 'canonicalUrl': {'type': 'string', '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.'}, 'returnedUrls': {'type': 'number', 'description': 'http(s) lines in this window'}, 'bytesReturned': {'type': 'number', 'description': 'UTF-8 length of text window'}, 'returnedLines': {'type': 'number', 'description': 'Lines in this window (before # MCP-META)'}, 'fetchTruncated': {'type': 'boolean', 'description': 'true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false.'}}, '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.', 'additionalProperties': True}
get_nutzungsbedingungen
WHAT: www pointer only — Nutzungsbedingungen on www.ikeytz.com. maps returns html link. DOES NOT return the body. NEXT: www MCP / open html.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {}, 'description': 'This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.', 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'npm': {'type': 'string', 'description': 'www CLI package @ikeytz/mcp'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'format': 'uri', 'description': 'Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp'}, 'note': {'type': 'string', 'description': 'maps only points; Volltext/Preise/FAQ live on www'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri', 'description': 'https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus'}, 'www_tool': {'type': 'string', 'description': 'Same tool name on www MCP that holds the real payload'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string', 'description': 'Locale the caller asked for; maps still returns locale=de'}}, '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.', 'additionalProperties': True}
get_ort_datetime
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'plz': {'type': 'string', 'description': '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': {'type': 'string', 'description': 'German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.'}, 'slug': {'type': 'string', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'tz': {'enum': ['CET', 'CEST'], 'type': 'string', 'description': 'Abbreviation'}, 'iso': {'type': 'string', 'description': 'ISO-8601 with Berlin offset'}, 'plz': {'type': 'string', 'description': 'PLZ when resolved'}, 'date': {'type': 'string', 'description': 'YYYY-MM-DD in Berlin'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'name': {'type': 'string', 'description': 'Place name when resolved'}, 'slug': {'type': 'string', 'description': 'Present when a place was resolved'}, 'time': {'type': 'string', 'description': 'HH:MM:SS in Berlin (24h)'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'unix': {'type': 'number', 'description': 'Unix timestamp seconds'}, 'count': {'type': 'number', 'description': '52 when listing all places'}, 'error': {'type': 'string', '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.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'tz': {'enum': ['CET', 'CEST'], 'type': 'string', 'description': 'Abbreviation'}, 'iso': {'type': 'string', 'description': 'ISO-8601 with Berlin offset'}, 'plz': {'type': 'string'}, 'date': {'type': 'string', 'description': 'YYYY-MM-DD in Berlin'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'time': {'type': 'string', 'description': 'HH:MM:SS in Berlin (24h)'}, 'unix': {'type': 'number', 'description': 'Unix timestamp seconds'}, 'stand': {'type': 'string', 'description': "Human clock 'YYYY-MM-DD HH:MM:SS CEST|CET' Europe/Berlin to the second"}, 'whenKey': {'enum': ['day', 'night'], 'type': 'string', '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.'}, 'timezone': {'type': 'string', 'const': 'Europe/Berlin', 'description': 'Always Europe/Berlin'}}, 'additionalProperties': True}, 'description': 'All 52 slug/name/plz + clock when called without lookup'}, 'stand': {'type': 'string', 'description': "Human clock 'YYYY-MM-DD HH:MM:SS CEST|CET' Europe/Berlin to the second"}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'whenKey': {'enum': ['day', 'night'], 'type': 'string', '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.'}, 'timezone': {'type': 'string', 'const': 'Europe/Berlin', 'description': 'Always Europe/Berlin'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
get_page_summary
WHAT: Short summary for a maps Gebiet (path/slug → area card) or www pointer for non-maps paths. path required (or slug). USE to decide maps vs www. NEXT: get_ai_page, get_service_area.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['path'], 'properties': {'path': {'type': 'string', 'description': 'Required. maps path (/pattonville) or www path for pointer fallback.'}, 'slug': {'type': 'string', 'description': 'Alias for path/slug'}, 'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'lat': {'type': 'number'}, 'lng': {'type': 'number'}, 'plz': {'type': 'string'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'description': 'When www pointer'}, 'name': {'type': 'string'}, 'note': {'type': 'string'}, 'slug': {'type': 'string'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
get_partner_info
WHAT: www pointer only — Partner-werden on www. maps returns html. NEXT: www get_partner_info.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'npm': {'type': 'string', 'description': 'www CLI package @ikeytz/mcp'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'format': 'uri', 'description': 'Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp'}, 'note': {'type': 'string', 'description': 'maps only points; Volltext/Preise/FAQ live on www'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri', 'description': 'https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus'}, 'www_tool': {'type': 'string', 'description': 'Same tool name on www MCP that holds the real payload'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string', 'description': 'Locale the caller asked for; maps still returns locale=de'}}, '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.', 'additionalProperties': True}
get_prices
WHAT: www pointer only — Festpreis matrix lives on www.ikeytz.com/preise via @ikeytz/mcp get_prices. maps returns html + note, no euro rows. USE to hand off. DOES NOT invent prices. NEXT: www get_prices; maps get_ort_datetime for whenKey.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'npm': {'type': 'string', 'description': 'www CLI package @ikeytz/mcp'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'format': 'uri', 'description': 'Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp'}, 'note': {'type': 'string', 'description': 'maps only points; Volltext/Preise/FAQ live on www'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri', 'description': 'https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus'}, 'www_tool': {'type': 'string', 'description': 'Same tool name on www MCP that holds the real payload'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string', 'description': 'Locale the caller asked for; maps still returns locale=de'}}, '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.', 'additionalProperties': True}
get_ratgeber
WHAT: www pointer only — Ratgeber page /ratgeber/{slug}. slug required. maps returns html. NEXT: www get_ratgeber.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Required Ratgeber slug'}, 'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'npm': {'type': 'string', 'description': 'www CLI package @ikeytz/mcp'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'format': 'uri', 'description': 'Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp'}, 'note': {'type': 'string', 'description': 'maps only points; Volltext/Preise/FAQ live on www'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri', 'description': 'https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus'}, 'www_tool': {'type': 'string', 'description': 'Same tool name on www MCP that holds the real payload'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string', 'description': 'Locale the caller asked for; maps still returns locale=de'}}, '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.', 'additionalProperties': True}
get_review_url
WHAT: www pointer only — Google review entry on www /review. maps returns html. NEXT: www get_review_url.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'npm': {'type': 'string', 'description': 'www CLI package @ikeytz/mcp'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'format': 'uri', 'description': 'Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp'}, 'note': {'type': 'string', 'description': 'maps only points; Volltext/Preise/FAQ live on www'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri', 'description': 'https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus'}, 'www_tool': {'type': 'string', 'description': 'Same tool name on www MCP that holds the real payload'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string', 'description': 'Locale the caller asked for; maps still returns locale=de'}}, '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.', 'additionalProperties': True}
get_serp_snippet
WHAT: One SERP block from maps llms-serp.txt via path, url, slug, or q. RETURNS path, url, matchContext (full block). USE for a single page's SERP copy. DOES NOT invent meta tags. NEXT: get_ai_page or get_page_summary for body.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'q': {'type': 'string', 'description': 'Fallback search string'}, 'url': {'type': 'string', 'description': 'Full maps URL'}, 'path': {'type': 'string', 'description': 'maps path, e.g. /pattonville'}, 'slug': {'type': 'string', 'description': 'Gebiet slug'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'url': {'type': 'string', 'description': 'Matched maps URL'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'path': {'type': 'string', 'description': 'Matched path'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'matchContext': {'type': 'string', 'description': 'Full SERP markdown block'}}, '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.', 'additionalProperties': True}
get_service_area
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'plz': {'type': 'string', 'description': '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': {'type': 'string', 'description': 'German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.'}, 'slug': {'type': 'string', 'description': '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': {'type': 'string', 'description': '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': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}, 'compact': {'type': 'boolean', 'description': 'If true, omit h1/kicker/blurb/lage/geschichte — coords + URLs + neighbors still present.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'h1': {'type': 'string', 'description': 'Visitenkarte H1 when not compact'}, 'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'lat': {'type': 'number', 'description': 'Place latitude'}, 'lng': {'type': 'number', 'description': 'Place longitude'}, 'plz': {'type': 'string', 'description': 'Postcode'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'icbm': {'type': 'string', 'description': 'ICBM string'}, 'kind': {'type': 'string', 'description': 'stadtteil | ort'}, 'lage': {'type': 'string', 'description': 'Lage text when not compact'}, 'name': {'type': 'string', 'description': 'German name'}, 'slug': {'type': 'string', 'description': 'Resolved slug'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'blurb': {'type': 'string', 'description': 'Short blurb when not compact'}, 'error': {'type': 'string', '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.'}, 'kicker': {'type': 'string', 'description': 'Kicker when not compact'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'parent': {'type': 'string', 'description': 'Parent label'}, 'walkIn': {'type': 'boolean', 'description': 'Always false'}, 'compact': {'type': 'boolean', 'description': 'Whether compact mode was applied'}, 'geo_api': {'type': 'string', 'format': 'uri'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'object', 'properties': {'hub': {'type': 'string', 'format': 'uri'}, 'buero': {'type': 'string', 'format': 'uri'}, 'mcp_hub': {'type': 'string', 'format': 'uri'}}, 'description': 'MAPS-IL1 mini-chrome URLs'}, 'embed_map': {'type': 'string', 'format': 'uri'}, 'neighbors': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'embed_map': {'type': 'string', 'format': 'uri'}}}, 'description': 'Up to 5 nearest Gebiete (slug/name/embed_map)'}, 'geschichte': {'type': 'string', 'description': 'Geschichte text when not compact'}, 'office_lat': {'type': 'number', 'description': 'Gewerbesitz lat'}, 'office_lng': {'type': 'number', 'description': 'Gewerbesitz lng'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'google_maps': {'type': 'string', 'description': "'lat, lng'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
get_sitemap_txt
WHAT: Alias get_discovery(which=sitemap-txt) — maps /sitemap.txt 1:1 (embed URLs incl. /buero). summary ≡ file window + # MCP-META (not a stub). Optional offset/limit. USE to list public maps URLs. NEXT: resolve_maps_url, get_embed_map, get_geo_office.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'minimum': 1, 'description': 'Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius.'}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'path': {'type': 'string', 'description': 'Public relative path of the file on maps'}, 'text': {'type': 'string', 'description': 'UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'limit': {'type': ['number', 'null'], 'description': 'Applied line limit, or null if omitted'}, 'which': {'type': 'string', 'description': 'Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …).'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'offset': {'type': 'number', 'description': 'Applied 0-based line offset'}, 'missing': {'type': 'boolean', 'description': 'true if the discovery file was not found on disk'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'totalUrls': {'type': 'number', 'description': 'http(s) lines in the full file'}, 'truncated': {'type': 'boolean', 'description': 'true if offset+limit left more lines. Also in trailing # MCP-META.'}, 'nextOffset': {'type': ['number', 'null'], 'description': 'Pass as next offset when truncated; else null. Also in # MCP-META.'}, 'totalBytes': {'type': 'number', 'description': 'Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META.'}, 'totalChars': {'type': 'number', 'description': 'Full discovery file character length before offset/limit. Also in # MCP-META.'}, 'totalLines': {'type': 'number', 'description': 'Alias of total_lines'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'total_lines': {'type': 'number', 'description': 'Line count of the full file'}, 'canonicalUrl': {'type': 'string', '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.'}, 'returnedUrls': {'type': 'number', 'description': 'http(s) lines in this window'}, 'bytesReturned': {'type': 'number', 'description': 'UTF-8 length of text window'}, 'returnedLines': {'type': 'number', 'description': 'Lines in this window (before # MCP-META)'}, 'fetchTruncated': {'type': 'boolean', 'description': 'true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false.'}}, '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.', 'additionalProperties': True}
get_urheberrecht
WHAT: Karten-Urheberrecht text from maps /llms-urheberrecht.txt (HTML page remains www /urheberrecht). Optional offset/limit. USE when citing map copyright (Mahmud Reza Kashani · ikeytz). NEXT: get_copyright, get_legal(doc=urheberrecht).
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'minimum': 1, 'description': 'Maximum items or lines to return after offset. Omit = all remaining in the window (subject to tool-specific clamps). For geo near-search default is often 5 without radius_km, up to 52 with radius.'}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'doc': {'type': 'string', 'const': 'urheberrecht'}, 'body': {'type': 'string'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'description': 'www /urheberrecht'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'which': {'type': 'string'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
get_widerruf
WHAT: www pointer only — Widerruf on www.ikeytz.com. maps returns html link. DOES NOT return withdrawal text. NEXT: www MCP.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {}, 'description': 'This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.', 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'npm': {'type': 'string', 'description': 'www CLI package @ikeytz/mcp'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'format': 'uri', 'description': 'Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp'}, 'note': {'type': 'string', 'description': 'maps only points; Volltext/Preise/FAQ live on www'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri', 'description': 'https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus'}, 'www_tool': {'type': 'string', 'description': 'Same tool name on www MCP that holds the real payload'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string', 'description': 'Locale the caller asked for; maps still returns locale=de'}}, '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.', 'additionalProperties': True}
get_wissen_entry
WHAT: www pointer only — Wissen article /wissen/{id}. id required. maps returns html. NEXT: www get_wissen_entry.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Required Wissen entry id'}, 'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'npm': {'type': 'string', 'description': 'www CLI package @ikeytz/mcp'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'format': 'uri', 'description': 'Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp'}, 'note': {'type': 'string', 'description': 'maps only points; Volltext/Preise/FAQ live on www'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri', 'description': 'https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus'}, 'www_tool': {'type': 'string', 'description': 'Same tool name on www MCP that holds the real payload'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string', 'description': 'Locale the caller asked for; maps still returns locale=de'}}, '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.', 'additionalProperties': True}
list_auswahl
WHAT: www pointer only — Auswahl hub on www /auswahl. maps returns html. NEXT: www list_auswahl / get_auswahl_item.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'npm': {'type': 'string', 'description': 'www CLI package @ikeytz/mcp'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'format': 'uri', 'description': 'Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp'}, 'note': {'type': 'string', 'description': 'maps only points; Volltext/Preise/FAQ live on www'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri', 'description': 'https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus'}, 'www_tool': {'type': 'string', 'description': 'Same tool name on www MCP that holds the real payload'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string', 'description': 'Locale the caller asked for; maps still returns locale=de'}}, '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.', 'additionalProperties': True}
list_faq
WHAT: www pointer only — FAQ list on www /faq. maps returns html, not FAQ rows. NEXT: www list_faq / get_faq.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'npm': {'type': 'string', 'description': 'www CLI package @ikeytz/mcp'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'format': 'uri', 'description': 'Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp'}, 'note': {'type': 'string', 'description': 'maps only points; Volltext/Preise/FAQ live on www'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri', 'description': 'https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus'}, 'www_tool': {'type': 'string', 'description': 'Same tool name on www MCP that holds the real payload'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string', 'description': 'Locale the caller asked for; maps still returns locale=de'}}, '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.', 'additionalProperties': True}
list_footer
WHAT: maps footer links (Hub, MCP-Hub, MCP, mapsEmail mailto, Urheberrecht, Copyright, Impressum-Kontakt) plus www HTML legal links (no price corpus). RETURNS maps[], html_www[], email, mapsEmail. USE for footer/legal discovery. NEXT: get_legal, compose_mailto.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'maps': {'type': 'array', 'description': 'maps-hosted footer links'}, 'note': {'type': 'string'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'email': {'type': 'string', 'description': 'info@ikeytz.com'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'html_www': {'type': 'array', 'description': 'www HTML footer links (host=www)'}, 'mapsEmail': {'type': 'string', 'description': 'info@maps.ikeytz.com'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
list_locales
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {}, 'description': 'This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.', 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'note': {'type': 'string'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'locale': {'type': 'string', 'const': 'de'}}}, 'description': 'Only de'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
list_nav
WHAT: maps navigation links — Hub, MCP, Urheberrecht, plus all 52 Gebiet URLs. USE to pick a maps page. DOES NOT include www header hubs (Preise/FAQ). NEXT: get_embed_map, get_page_summary.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'note': {'type': 'string'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'count': {'type': 'number'}, 'error': {'type': 'string', '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.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'slug': {'type': 'string'}, 'label': {'type': 'string'}}, 'additionalProperties': True}, 'description': 'Nav links {label,url,slug?}'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
list_plz
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {}, 'description': 'This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.', 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'count': {'type': 'number', 'description': 'Distinct PLZ count'}, 'error': {'type': 'string', '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.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'plz': {'type': 'string'}, 'count': {'type': 'number'}, 'slugs': {'type': 'array', 'items': {'type': 'string'}}}}, 'description': 'PLZ groups'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
list_ratgeber
WHAT: www pointer only — Ratgeber list on www /ratgeber. maps returns html. NEXT: www list_ratgeber.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'npm': {'type': 'string', 'description': 'www CLI package @ikeytz/mcp'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'format': 'uri', 'description': 'Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp'}, 'note': {'type': 'string', 'description': 'maps only points; Volltext/Preise/FAQ live on www'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri', 'description': 'https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus'}, 'www_tool': {'type': 'string', 'description': 'Same tool name on www MCP that holds the real payload'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string', 'description': 'Locale the caller asked for; maps still returns locale=de'}}, '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.', 'additionalProperties': True}
list_service_areas
WHAT: List all 52 ikeytz Einsatzgebiete on maps.ikeytz.com as point cards (slug, name, plz, lat/lng, embed_map, geo_api) — not polygons. RETURNS items[], count, total, offset, limit. Optional fields= comma filter; limit/offset page the list. USE to enumerate the service area or build a picker. DOES NOT return OSM boundaries (use get_grenze per slug) or prices. NEXT: get_service_area, get_embed_map, get_grenze, find_by_plz.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'minimum': 1, 'description': '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': {'type': 'string', 'description': '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': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'count': {'type': 'number', 'description': 'Items in this page'}, 'error': {'type': 'string', '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.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'lat': {'type': 'number', 'description': 'WGS84 latitude of THIS place'}, 'lng': {'type': 'number', 'description': 'WGS84 longitude of THIS place'}, 'plz': {'type': 'string', 'description': 'Postcode'}, 'url': {'type': 'string', 'description': 'Keyword/www page URL when present'}, 'icbm': {'type': 'string', 'description': "ICBM 'lat, lng' (same as google_maps)"}, 'kind': {'type': 'string', 'description': 'stadtteil | ort'}, 'name': {'type': 'string', 'description': 'German place name'}, 'slug': {'type': 'string', 'description': 'maps slug'}, 'parent': {'type': 'string', 'description': 'Ludwigsburg or Landkreis Ludwigsburg'}, 'geo_api': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/api/v1/embed/ort/{slug}'}, 'maps_mcp': {'type': 'string', 'const': 'https://maps.ikeytz.com/mcp', 'format': 'uri', 'description': 'maps MCP endpoint'}, 'embed_map': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/{slug}'}, 'distance_km': {'type': 'number', 'description': 'Present on geo-ranked results: air distance from query point'}, 'google_maps': {'type': 'string', 'description': "Paste-ready 'lat, lng'"}}, 'description': 'One Einsatzgebiet point card (not a polygon).', 'additionalProperties': True}, 'description': 'Service-area point cards'}, 'limit': {'type': 'number', 'description': 'Applied limit'}, 'total': {'type': 'number', 'description': 'Total Gebiete (52)'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'offset': {'type': 'number', 'description': 'Applied offset'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
list_services
WHAT: www pointer only — Leistungen list on www /leistungen. maps returns html link. DOES NOT list service rows. NEXT: www list_services.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'npm': {'type': 'string', 'description': 'www CLI package @ikeytz/mcp'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'format': 'uri', 'description': 'Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp'}, 'note': {'type': 'string', 'description': 'maps only points; Volltext/Preise/FAQ live on www'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri', 'description': 'https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus'}, 'www_tool': {'type': 'string', 'description': 'Same tool name on www MCP that holds the real payload'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string', 'description': 'Locale the caller asked for; maps still returns locale=de'}}, '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.', 'additionalProperties': True}
list_slugs
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).
읽기 전용
입력 스키마
{'type': 'object', 'properties': {}, 'description': 'This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.', 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'count': {'type': 'number', 'description': '52'}, 'error': {'type': 'string', '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.'}, 'items': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Slug strings'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
list_whatsapp_options
WHAT: WhatsApp situation options (link only — zugefallen/abgeschlossen/zylinder/beratung style ids). No form submit. USE before compose_whatsapp. DOES NOT send a message. NEXT: compose_whatsapp(option), compose_tel_mobile.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'note': {'type': 'string', 'description': 'Link only; Festpreis SSOT remains www'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'href': {'type': 'string', 'format': 'uri'}, 'label': {'type': 'string'}}}, 'description': 'Options {id,label,href}'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
list_wissen
WHAT: www pointer only — Wissen lexicon hub on www /wissen. maps returns html. NEXT: www list_wissen.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'npm': {'type': 'string', 'description': 'www CLI package @ikeytz/mcp'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'format': 'uri', 'description': 'Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp'}, 'note': {'type': 'string', 'description': 'maps only points; Volltext/Preise/FAQ live on www'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri', 'description': 'https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus'}, 'www_tool': {'type': 'string', 'description': 'Same tool name on www MCP that holds the real payload'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string', 'description': 'Locale the caller asked for; maps still returns locale=de'}}, '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.', 'additionalProperties': True}
resolve_locale_url
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.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['path', 'locale'], 'properties': {'path': {'type': 'string', 'description': 'Required. Path starting with / (e.g. /pattonville) or a maps URL.'}, 'locale': {'type': 'string', 'description': 'Required. Only de is meaningful on maps; others ignored with a note.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'html': {'type': 'string', 'description': 'Present when falling through to www pointer'}, 'note': {'type': 'string'}, 'path': {'type': 'string', 'description': 'Normalized path'}, 'slug': {'type': 'string', 'description': 'When a Gebiet matched'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'type': 'string', 'const': 'de'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string'}}, '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.', 'additionalProperties': True}
resolve_maps_url
WHAT: Resolve a maps.ikeytz.com url/path/q to hub or Gebiet. RETURNS kind=hub|ort + area fields when ort. USE to normalize pasted maps links. DOES NOT accept www hosts (not_maps_host). NEXT: get_service_area, get_embed_map.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'q': {'type': 'string', 'description': 'URL or path alias'}, 'url': {'type': 'string', 'description': 'Full https://maps.ikeytz.com/… URL'}, 'path': {'type': 'string', 'description': 'Path e.g. /pattonville'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'lat': {'type': 'number'}, 'lng': {'type': 'number'}, 'plz': {'type': 'string'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'kind': {'enum': ['hub', 'ort'], 'type': 'string', 'description': 'Resolved kind'}, 'name': {'type': 'string', 'description': 'Place name when ort'}, 'slug': {'type': ['string', 'null'], 'description': 'null for hub'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', '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.'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': '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': {'type': 'string', 'format': 'uri'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}}, '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.', 'additionalProperties': True}
site_overview
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'locale': {'enum': ['de'], 'type': 'string', 'default': 'de', 'description': '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.'}}}
출력 스키마
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'h1': {'type': 'string'}, 'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'mcp': {'type': 'string', 'format': 'uri'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.'}, 'note': {'type': 'string'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'brand': {'type': 'string'}, 'count': {'type': 'number', 'description': '52'}, 'error': {'type': 'string', '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.'}, 'owner': {'type': 'string'}, 'title': {'type': 'string'}, 'locale': {'enum': ['de'], 'type': 'string', '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.'}, 'sister': {'type': 'string', 'description': 'www MCP / npm hint'}, 'walkIn': {'type': 'boolean'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.'}, 'registry': {'type': 'string', 'description': 'com.ikeytz/maps'}, 'legalName': {'type': 'string'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', '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.'}, 'requested_locale': {'type': 'string'}}, '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.', 'additionalProperties': True}
변경됨
compose_whatsapp
2026년 9월 27일 2:53 AM
변경됨
get_sitemap_txt
2026년 9월 27일 2:53 AM
변경됨
get_ai_txt
2026년 9월 27일 2:53 AM
변경됨
get_llms_txt
2026년 9월 27일 2:53 AM
추가됨
get_grenze_koordinaten
2026년 9월 27일 2:53 AM
변경됨
get_grenze
2026년 9월 27일 2:53 AM
변경됨
get_llms_mcp_web
2026년 9월 27일 2:53 AM
변경됨
get_llms_mcp_server
2026년 9월 27일 2:53 AM
변경됨
get_discovery
2026년 9월 27일 2:53 AM
변경됨
get_embed_map
2026년 9월 25일 3:02 AM
변경됨
get_service_area
2026년 9월 25일 3:02 AM
변경됨
get_sitemap_txt
2026년 9월 23일 2:53 AM
변경됨
get_ai_txt
2026년 9월 23일 2:53 AM
변경됨
get_llms_txt
2026년 9월 23일 2:53 AM
변경됨
get_llms_mcp_web
2026년 9월 23일 2:53 AM
변경됨
get_llms_mcp_server
2026년 9월 23일 2:53 AM
변경됨
get_discovery
2026년 9월 23일 2:53 AM
변경됨
get_geo_office
2026년 9월 23일 2:53 AM
추가됨
compose_mailto
2026년 9월 17일 12:35 PM
추가됨
compose_whatsapp
2026년 9월 17일 12:35 PM
추가됨
compose_tel_landline
2026년 9월 17일 12:35 PM
추가됨
compose_tel_mobile
2026년 9월 17일 12:35 PM
추가됨
list_whatsapp_options
2026년 9월 17일 12:35 PM
추가됨
get_sitemap_txt
2026년 9월 17일 12:35 PM
추가됨
get_ai_txt
2026년 9월 17일 12:35 PM
추가됨
get_llms_txt
2026년 9월 17일 12:35 PM
추가됨
get_ai_page
2026년 9월 17일 12:35 PM
추가됨
get_page_summary
2026년 9월 17일 12:35 PM
추가됨
get_ratgeber
2026년 9월 17일 12:35 PM
추가됨
list_ratgeber
2026년 9월 17일 12:35 PM