{
  "data": {
    "tool": {
      "category": "",
      "endpoint": "https://maps.ikeytz.com/mcp",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/ikeytz-maps.json",
      "kind": "mcp",
      "listed": "indexed",
      "liveUrl": "https://www.anchorterminal.com/api/v1/live/ikeytz-maps.json",
      "markdownUrl": "https://www.anchorterminal.com/tools/ikeytz-maps.md",
      "mcpTools": {
        "check": {
          "checker": "anchor-check/1.0",
          "totalTokens": 64781,
          "counts": {
            "error": 0,
            "note": 0,
            "warn": 4
          },
          "findings": [
            {
              "rule": "TC14",
              "severity": "warn",
              "tool": "compose_whatsapp",
              "message": "allowed values are in the description, not an enum: option",
              "fix": "Move them into enum."
            },
            {
              "rule": "TC14",
              "severity": "warn",
              "tool": "get_invoice_line_items",
              "message": "allowed values are in the description, not an enum: whenKey",
              "fix": "Move them into enum."
            },
            {
              "rule": "TC21",
              "severity": "warn",
              "tool": "list_auswahl",
              "message": "described almost the same as list_ratgeber (80% of the same words)",
              "fix": "Say in each description when to use it instead of the other."
            },
            {
              "rule": "TC23",
              "severity": "warn",
              "message": "68 tools, about 64,809 tokens of definitions",
              "fix": "Split the server by job, or offer a smaller default toolset (a read-only set, or a search-then-call pattern)."
            }
          ]
        },
        "checkedAt": "2026-10-04T22:23:05Z",
        "count": 68,
        "note": "answered without the initialize handshake",
        "schemaTokens": 64781,
        "status": "ok",
        "tools": [
          {
            "name": "list_service_areas",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "fields": {
                  "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.",
                  "type": "string"
                },
                "limit": {
                  "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.",
                  "minimum": 1,
                  "type": "integer"
                },
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "offset": {
                  "default": 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.",
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "count": {
                  "description": "Items in this page",
                  "type": "number"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "items": {
                  "description": "Service-area point cards",
                  "items": {
                    "additionalProperties": true,
                    "description": "One Einsatzgebiet point card (not a polygon).",
                    "properties": {
                      "distance_km": {
                        "description": "Present on geo-ranked results: air distance from query point",
                        "type": "number"
                      },
                      "embed_map": {
                        "description": "https://maps.ikeytz.com/{slug}",
                        "format": "uri",
                        "type": "string"
                      },
                      "geo_api": {
                        "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}",
                        "format": "uri",
                        "type": "string"
                      },
                      "google_maps": {
                        "description": "Paste-ready 'lat, lng'",
                        "type": "string"
                      },
                      "icbm": {
                        "description": "ICBM 'lat, lng' (same as google_maps)",
                        "type": "string"
                      },
                      "kind": {
                        "description": "stadtteil | ort",
                        "type": "string"
                      },
                      "lat": {
                        "description": "WGS84 latitude of THIS place",
                        "type": "number"
                      },
                      "lng": {
                        "description": "WGS84 longitude of THIS place",
                        "type": "number"
                      },
                      "maps_mcp": {
                        "const": "https://maps.ikeytz.com/mcp",
                        "description": "maps MCP endpoint",
                        "format": "uri",
                        "type": "string"
                      },
                      "name": {
                        "description": "German place name",
                        "type": "string"
                      },
                      "parent": {
                        "description": "Ludwigsburg or Landkreis Ludwigsburg",
                        "type": "string"
                      },
                      "plz": {
                        "description": "Postcode",
                        "type": "string"
                      },
                      "slug": {
                        "description": "maps slug",
                        "type": "string"
                      },
                      "url": {
                        "description": "Keyword/www page URL when present",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "limit": {
                  "description": "Applied limit",
                  "type": "number"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "offset": {
                  "description": "Applied offset",
                  "type": "number"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "total": {
                  "description": "Total Gebiete (52)",
                  "type": "number"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_service_area",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "compact": {
                  "description": "If true, omit h1/kicker/blurb/lage/geschichte — coords + URLs + neighbors still present.",
                  "type": "boolean"
                },
                "fields": {
                  "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.",
                  "type": "string"
                },
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "name": {
                  "description": "German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.",
                  "type": "string"
                },
                "plz": {
                  "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.",
                  "type": "string"
                },
                "slug": {
                  "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": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "blurb": {
                  "description": "Short blurb when not compact",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "compact": {
                  "description": "Whether compact mode was applied",
                  "type": "boolean"
                },
                "embed_map": {
                  "format": "uri",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "geo_api": {
                  "format": "uri",
                  "type": "string"
                },
                "geschichte": {
                  "description": "Geschichte text when not compact",
                  "type": "string"
                },
                "google_maps": {
                  "description": "'lat, lng'",
                  "type": "string"
                },
                "h1": {
                  "description": "Visitenkarte H1 when not compact",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "icbm": {
                  "description": "ICBM string",
                  "type": "string"
                },
                "kicker": {
                  "description": "Kicker when not compact",
                  "type": "string"
                },
                "kind": {
                  "description": "stadtteil | ort",
                  "type": "string"
                },
                "lage": {
                  "description": "Lage text when not compact",
                  "type": "string"
                },
                "lat": {
                  "description": "Place latitude",
                  "type": "number"
                },
                "lng": {
                  "description": "Place longitude",
                  "type": "number"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "maps_nav": {
                  "description": "MAPS-IL1 mini-chrome URLs",
                  "properties": {
                    "buero": {
                      "format": "uri",
                      "type": "string"
                    },
                    "hub": {
                      "format": "uri",
                      "type": "string"
                    },
                    "mcp_hub": {
                      "format": "uri",
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "name": {
                  "description": "German name",
                  "type": "string"
                },
                "neighbors": {
                  "description": "Up to 5 nearest Gebiete (slug/name/embed_map)",
                  "items": {
                    "properties": {
                      "embed_map": {
                        "format": "uri",
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "slug": {
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "office_lat": {
                  "description": "Gewerbesitz lat",
                  "type": "number"
                },
                "office_lng": {
                  "description": "Gewerbesitz lng",
                  "type": "number"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "parent": {
                  "description": "Parent label",
                  "type": "string"
                },
                "plz": {
                  "description": "Postcode",
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "slug": {
                  "description": "Resolved slug",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "walkIn": {
                  "description": "Always false",
                  "type": "boolean"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_ort_datetime",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "name": {
                  "description": "German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.",
                  "type": "string"
                },
                "plz": {
                  "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.",
                  "type": "string"
                },
                "slug": {
                  "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": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "count": {
                  "description": "52 when listing all places",
                  "type": "number"
                },
                "date": {
                  "description": "YYYY-MM-DD in Berlin",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "iso": {
                  "description": "ISO-8601 with Berlin offset",
                  "type": "string"
                },
                "items": {
                  "description": "All 52 slug/name/plz + clock when called without lookup",
                  "items": {
                    "additionalProperties": true,
                    "properties": {
                      "date": {
                        "description": "YYYY-MM-DD in Berlin",
                        "type": "string"
                      },
                      "iso": {
                        "description": "ISO-8601 with Berlin offset",
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "plz": {
                        "type": "string"
                      },
                      "slug": {
                        "type": "string"
                      },
                      "stand": {
                        "description": "Human clock 'YYYY-MM-DD HH:MM:SS CEST|CET' Europe/Berlin to the second",
                        "type": "string"
                      },
                      "time": {
                        "description": "HH:MM:SS in Berlin (24h)",
                        "type": "string"
                      },
                      "timezone": {
                        "const": "Europe/Berlin",
                        "description": "Always Europe/Berlin",
                        "type": "string"
                      },
                      "tz": {
                        "description": "Abbreviation",
                        "enum": [
                          "CET",
                          "CEST"
                        ],
                        "type": "string"
                      },
                      "unix": {
                        "description": "Unix timestamp seconds",
                        "type": "number"
                      },
                      "whenKey": {
                        "description": "Price bucket for www get_invoice_line_items. day = Mo–Fr 08:00–17:59 Berlin except BW holidays; else night. Pass to www MCP — maps has no euro matrix.",
                        "enum": [
                          "day",
                          "night"
                        ],
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "name": {
                  "description": "Place name when resolved",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "plz": {
                  "description": "PLZ when resolved",
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "slug": {
                  "description": "Present when a place was resolved",
                  "type": "string"
                },
                "stand": {
                  "description": "Human clock 'YYYY-MM-DD HH:MM:SS CEST|CET' Europe/Berlin to the second",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "time": {
                  "description": "HH:MM:SS in Berlin (24h)",
                  "type": "string"
                },
                "timezone": {
                  "const": "Europe/Berlin",
                  "description": "Always Europe/Berlin",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "tz": {
                  "description": "Abbreviation",
                  "enum": [
                    "CET",
                    "CEST"
                  ],
                  "type": "string"
                },
                "unix": {
                  "description": "Unix timestamp seconds",
                  "type": "number"
                },
                "whenKey": {
                  "description": "Price bucket for www get_invoice_line_items. day = Mo–Fr 08:00–17:59 Berlin except BW holidays; else night. Pass to www MCP — maps has no euro matrix.",
                  "enum": [
                    "day",
                    "night"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_geo_office",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "city": {
                  "description": "City",
                  "type": "string"
                },
                "embed_map": {
                  "description": "https://maps.ikeytz.com/buero",
                  "format": "uri",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "geo_api": {
                  "description": "https://maps.ikeytz.com/api/v1/embed/office",
                  "format": "uri",
                  "type": "string"
                },
                "google_maps": {
                  "description": "'lat, lng'",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "icbm": {
                  "description": "ICBM string (same as google_maps)",
                  "type": "string"
                },
                "lat": {
                  "description": "Office latitude",
                  "type": "number"
                },
                "lng": {
                  "description": "Office longitude",
                  "type": "number"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "Büro · kein Kundenverkehr vor Ort",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "postal": {
                  "description": "Postal code",
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "street": {
                  "description": "Office street",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "walkIn": {
                  "description": "Always false — no shop counter",
                  "type": "boolean"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_contact",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "address": {
                  "description": "Structured address block",
                  "type": "object"
                },
                "addressLine": {
                  "description": "Single-line address",
                  "type": "string"
                },
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "email": {
                  "description": "info@ikeytz.com",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "fax": {
                  "description": "Fax display",
                  "type": "string"
                },
                "google_maps": {
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "icbm": {
                  "type": "string"
                },
                "landline": {
                  "description": "Landline display",
                  "type": "string"
                },
                "lat": {
                  "description": "Office lat",
                  "type": "number"
                },
                "lng": {
                  "description": "Office lng",
                  "type": "number"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "mapsEmail": {
                  "description": "info@maps.ikeytz.com",
                  "type": "string"
                },
                "mobile": {
                  "description": "Mobile display",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "walkIn": {
                  "description": "Always false",
                  "type": "boolean"
                },
                "whatsapp": {
                  "description": "wa.me URL",
                  "format": "uri",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_discovery",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "limit": {
                  "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.",
                  "minimum": 1,
                  "type": "integer"
                },
                "offset": {
                  "default": 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.",
                  "minimum": 0,
                  "type": "integer"
                },
                "which": {
                  "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.",
                  "type": "string"
                }
              },
              "required": [
                "which"
              ],
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "bytesReturned": {
                  "description": "UTF-8 length of text window",
                  "type": "number"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "fetchTruncated": {
                  "description": "true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false.",
                  "type": "boolean"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "limit": {
                  "description": "Applied line limit, or null if omitted",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "missing": {
                  "description": "true if the discovery file was not found on disk",
                  "type": "boolean"
                },
                "nextOffset": {
                  "description": "Pass as next offset when truncated; else null. Also in # MCP-META.",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "offset": {
                  "description": "Applied 0-based line offset",
                  "type": "number"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "path": {
                  "description": "Public relative path of the file on maps",
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "returnedLines": {
                  "description": "Lines in this window (before # MCP-META)",
                  "type": "number"
                },
                "returnedUrls": {
                  "description": "http(s) lines in this window",
                  "type": "number"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "text": {
                  "description": "UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "totalBytes": {
                  "description": "Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META.",
                  "type": "number"
                },
                "totalChars": {
                  "description": "Full discovery file character length before offset/limit. Also in # MCP-META.",
                  "type": "number"
                },
                "totalLines": {
                  "description": "Alias of total_lines",
                  "type": "number"
                },
                "totalUrls": {
                  "description": "http(s) lines in the full file",
                  "type": "number"
                },
                "total_lines": {
                  "description": "Line count of the full file",
                  "type": "number"
                },
                "truncated": {
                  "description": "true if offset+limit left more lines. Also in trailing # MCP-META.",
                  "type": "boolean"
                },
                "which": {
                  "description": "Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_llms_mcp_server",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "limit": {
                  "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.",
                  "minimum": 1,
                  "type": "integer"
                },
                "offset": {
                  "default": 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.",
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "bytesReturned": {
                  "description": "UTF-8 length of text window",
                  "type": "number"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "fetchTruncated": {
                  "description": "true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false.",
                  "type": "boolean"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "limit": {
                  "description": "Applied line limit, or null if omitted",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "missing": {
                  "description": "true if the discovery file was not found on disk",
                  "type": "boolean"
                },
                "nextOffset": {
                  "description": "Pass as next offset when truncated; else null. Also in # MCP-META.",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "offset": {
                  "description": "Applied 0-based line offset",
                  "type": "number"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "path": {
                  "description": "Public relative path of the file on maps",
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "returnedLines": {
                  "description": "Lines in this window (before # MCP-META)",
                  "type": "number"
                },
                "returnedUrls": {
                  "description": "http(s) lines in this window",
                  "type": "number"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "text": {
                  "description": "UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "totalBytes": {
                  "description": "Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META.",
                  "type": "number"
                },
                "totalChars": {
                  "description": "Full discovery file character length before offset/limit. Also in # MCP-META.",
                  "type": "number"
                },
                "totalLines": {
                  "description": "Alias of total_lines",
                  "type": "number"
                },
                "totalUrls": {
                  "description": "http(s) lines in the full file",
                  "type": "number"
                },
                "total_lines": {
                  "description": "Line count of the full file",
                  "type": "number"
                },
                "truncated": {
                  "description": "true if offset+limit left more lines. Also in trailing # MCP-META.",
                  "type": "boolean"
                },
                "which": {
                  "description": "Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_llms_mcp_web",
            "description": "WHAT: Returns the web/UI-oriented MCP catalog text on maps (alias of get_discovery(which=llms-mcp-web)). Optional offset/limit. USE for browser/agent web discovery copy. Prefer get_llms_mcp_server for the server-side catalog; prefer get_llms_txt for the primary maps index. DOES NOT replace the live /mcp tools/list.",
            "inputSchema": {
              "properties": {
                "limit": {
                  "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.",
                  "minimum": 1,
                  "type": "integer"
                },
                "offset": {
                  "default": 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.",
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "bytesReturned": {
                  "description": "UTF-8 length of text window",
                  "type": "number"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "fetchTruncated": {
                  "description": "true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false.",
                  "type": "boolean"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "limit": {
                  "description": "Applied line limit, or null if omitted",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "missing": {
                  "description": "true if the discovery file was not found on disk",
                  "type": "boolean"
                },
                "nextOffset": {
                  "description": "Pass as next offset when truncated; else null. Also in # MCP-META.",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "offset": {
                  "description": "Applied 0-based line offset",
                  "type": "number"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "path": {
                  "description": "Public relative path of the file on maps",
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "returnedLines": {
                  "description": "Lines in this window (before # MCP-META)",
                  "type": "number"
                },
                "returnedUrls": {
                  "description": "http(s) lines in this window",
                  "type": "number"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "text": {
                  "description": "UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "totalBytes": {
                  "description": "Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META.",
                  "type": "number"
                },
                "totalChars": {
                  "description": "Full discovery file character length before offset/limit. Also in # MCP-META.",
                  "type": "number"
                },
                "totalLines": {
                  "description": "Alias of total_lines",
                  "type": "number"
                },
                "totalUrls": {
                  "description": "http(s) lines in the full file",
                  "type": "number"
                },
                "total_lines": {
                  "description": "Line count of the full file",
                  "type": "number"
                },
                "truncated": {
                  "description": "true if offset+limit left more lines. Also in trailing # MCP-META.",
                  "type": "boolean"
                },
                "which": {
                  "description": "Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "find_by_keyword",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "limit": {
                  "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.",
                  "minimum": 1,
                  "type": "integer"
                },
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "q": {
                  "description": "Required search string matched against keyword and URL (substring, case-insensitive).",
                  "type": "string"
                }
              },
              "required": [
                "q"
              ],
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "count": {
                  "description": "Returned hits",
                  "type": "number"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "items": {
                  "description": "keyword + url rows",
                  "items": {
                    "properties": {
                      "keyword": {
                        "type": "string"
                      },
                      "url": {
                        "format": "uri",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "lines": {
                  "description": "Raw TSV lines",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "q": {
                  "description": "Query echoed",
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "total": {
                  "description": "Total matches before limit",
                  "type": "number"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "find_by_serp",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "limit": {
                  "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.",
                  "minimum": 1,
                  "type": "integer"
                },
                "path": {
                  "description": "maps path fragment, e.g. /pattonville",
                  "type": "string"
                },
                "q": {
                  "description": "Free-text search in SERP blocks",
                  "type": "string"
                },
                "slug": {
                  "description": "Gebiet slug",
                  "type": "string"
                },
                "url": {
                  "description": "Full https://maps.ikeytz.com/… URL",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "count": {
                  "type": "number"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "items": {
                  "description": "SERP hits",
                  "items": {
                    "properties": {
                      "path": {
                        "type": "string"
                      },
                      "snippet": {
                        "type": "string"
                      },
                      "url": {
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "q": {
                  "description": "Resolved query",
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "total": {
                  "type": "number"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_serp_snippet",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "path": {
                  "description": "maps path, e.g. /pattonville",
                  "type": "string"
                },
                "q": {
                  "description": "Fallback search string",
                  "type": "string"
                },
                "slug": {
                  "description": "Gebiet slug",
                  "type": "string"
                },
                "url": {
                  "description": "Full maps URL",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "matchContext": {
                  "description": "Full SERP markdown block",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "path": {
                  "description": "Matched path",
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "url": {
                  "description": "Matched maps URL",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "find_by_plz",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "plz": {
                  "description": "Required German postcode.",
                  "type": "string"
                },
                "q": {
                  "description": "Alias for plz if plz omitted",
                  "type": "string"
                }
              },
              "required": [
                "plz"
              ],
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "count": {
                  "description": "Number of Gebiete",
                  "type": "number"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "items": {
                  "description": "All matches",
                  "items": {
                    "additionalProperties": true,
                    "description": "One Einsatzgebiet point card (not a polygon).",
                    "properties": {
                      "distance_km": {
                        "description": "Present on geo-ranked results: air distance from query point",
                        "type": "number"
                      },
                      "embed_map": {
                        "description": "https://maps.ikeytz.com/{slug}",
                        "format": "uri",
                        "type": "string"
                      },
                      "geo_api": {
                        "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}",
                        "format": "uri",
                        "type": "string"
                      },
                      "google_maps": {
                        "description": "Paste-ready 'lat, lng'",
                        "type": "string"
                      },
                      "icbm": {
                        "description": "ICBM 'lat, lng' (same as google_maps)",
                        "type": "string"
                      },
                      "kind": {
                        "description": "stadtteil | ort",
                        "type": "string"
                      },
                      "lat": {
                        "description": "WGS84 latitude of THIS place",
                        "type": "number"
                      },
                      "lng": {
                        "description": "WGS84 longitude of THIS place",
                        "type": "number"
                      },
                      "maps_mcp": {
                        "const": "https://maps.ikeytz.com/mcp",
                        "description": "maps MCP endpoint",
                        "format": "uri",
                        "type": "string"
                      },
                      "name": {
                        "description": "German place name",
                        "type": "string"
                      },
                      "parent": {
                        "description": "Ludwigsburg or Landkreis Ludwigsburg",
                        "type": "string"
                      },
                      "plz": {
                        "description": "Postcode",
                        "type": "string"
                      },
                      "slug": {
                        "description": "maps slug",
                        "type": "string"
                      },
                      "url": {
                        "description": "Keyword/www page URL when present",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "plz": {
                  "description": "Queried PLZ",
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "find_by_geo",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "icbm": {
                  "description": "ICBM or paste 'lat, lng' (comma-separated). Alternative to lat+lng.",
                  "type": "string"
                },
                "lat": {
                  "description": "WGS84 latitude. Required with lng unless icbm is set. (0,0) → outside_service_area.",
                  "type": "number"
                },
                "limit": {
                  "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.",
                  "minimum": 1,
                  "type": "integer"
                },
                "lng": {
                  "description": "WGS84 longitude. Required with lat unless icbm is set.",
                  "type": "number"
                },
                "radius_km": {
                  "description": "Optional air-radius filter in km. Omit = return nearest N (limit). Far points / (0,0) → outside_service_area.",
                  "type": "number"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "count": {
                  "type": "number"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "icbm": {
                  "description": "Query ICBM",
                  "type": "string"
                },
                "items": {
                  "description": "Ranked Gebiete with distance_km",
                  "items": {
                    "additionalProperties": true,
                    "description": "One Einsatzgebiet point card (not a polygon).",
                    "properties": {
                      "distance_km": {
                        "description": "Present on geo-ranked results: air distance from query point",
                        "type": "number"
                      },
                      "embed_map": {
                        "description": "https://maps.ikeytz.com/{slug}",
                        "format": "uri",
                        "type": "string"
                      },
                      "geo_api": {
                        "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}",
                        "format": "uri",
                        "type": "string"
                      },
                      "google_maps": {
                        "description": "Paste-ready 'lat, lng'",
                        "type": "string"
                      },
                      "icbm": {
                        "description": "ICBM 'lat, lng' (same as google_maps)",
                        "type": "string"
                      },
                      "kind": {
                        "description": "stadtteil | ort",
                        "type": "string"
                      },
                      "lat": {
                        "description": "WGS84 latitude of THIS place",
                        "type": "number"
                      },
                      "lng": {
                        "description": "WGS84 longitude of THIS place",
                        "type": "number"
                      },
                      "maps_mcp": {
                        "const": "https://maps.ikeytz.com/mcp",
                        "description": "maps MCP endpoint",
                        "format": "uri",
                        "type": "string"
                      },
                      "name": {
                        "description": "German place name",
                        "type": "string"
                      },
                      "parent": {
                        "description": "Ludwigsburg or Landkreis Ludwigsburg",
                        "type": "string"
                      },
                      "plz": {
                        "description": "Postcode",
                        "type": "string"
                      },
                      "slug": {
                        "description": "maps slug",
                        "type": "string"
                      },
                      "url": {
                        "description": "Keyword/www page URL when present",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "lat": {
                  "description": "Query latitude",
                  "type": "number"
                },
                "lng": {
                  "description": "Query longitude",
                  "type": "number"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "nearest_km": {
                  "description": "On outside_service_area failures: nearest distance if any",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "radius_km": {
                  "description": "Applied radius or null",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "find_by_icbm",
            "description": "WHAT: Rank Einsatzgebiete by an ICBM 'lat, lng' string (optional lat/lng, radius_km, limit). RETURNS items with distance_km. USE when the user pastes ICBM metadata. Prefer find_by_geo instead for plain lat/lng without an ICBM string. (0,0) and far points → ok=false outside_service_area. DOES NOT route or drive-time. NEXT: get_service_area, get_embed_map, get_grenze.",
            "inputSchema": {
              "properties": {
                "icbm": {
                  "description": "ICBM or paste 'lat, lng' (comma-separated). Alternative to lat+lng.",
                  "type": "string"
                },
                "lat": {
                  "description": "WGS84 latitude. Required with lng unless icbm is set. (0,0) → outside_service_area.",
                  "type": "number"
                },
                "limit": {
                  "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.",
                  "minimum": 1,
                  "type": "integer"
                },
                "lng": {
                  "description": "WGS84 longitude. Required with lat unless icbm is set.",
                  "type": "number"
                },
                "radius_km": {
                  "description": "Optional air-radius filter in km. Omit = return nearest N (limit). Far points / (0,0) → outside_service_area.",
                  "type": "number"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "count": {
                  "type": "number"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "icbm": {
                  "type": "string"
                },
                "items": {
                  "items": {
                    "additionalProperties": true,
                    "description": "One Einsatzgebiet point card (not a polygon).",
                    "properties": {
                      "distance_km": {
                        "description": "Present on geo-ranked results: air distance from query point",
                        "type": "number"
                      },
                      "embed_map": {
                        "description": "https://maps.ikeytz.com/{slug}",
                        "format": "uri",
                        "type": "string"
                      },
                      "geo_api": {
                        "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}",
                        "format": "uri",
                        "type": "string"
                      },
                      "google_maps": {
                        "description": "Paste-ready 'lat, lng'",
                        "type": "string"
                      },
                      "icbm": {
                        "description": "ICBM 'lat, lng' (same as google_maps)",
                        "type": "string"
                      },
                      "kind": {
                        "description": "stadtteil | ort",
                        "type": "string"
                      },
                      "lat": {
                        "description": "WGS84 latitude of THIS place",
                        "type": "number"
                      },
                      "lng": {
                        "description": "WGS84 longitude of THIS place",
                        "type": "number"
                      },
                      "maps_mcp": {
                        "const": "https://maps.ikeytz.com/mcp",
                        "description": "maps MCP endpoint",
                        "format": "uri",
                        "type": "string"
                      },
                      "name": {
                        "description": "German place name",
                        "type": "string"
                      },
                      "parent": {
                        "description": "Ludwigsburg or Landkreis Ludwigsburg",
                        "type": "string"
                      },
                      "plz": {
                        "description": "Postcode",
                        "type": "string"
                      },
                      "slug": {
                        "description": "maps slug",
                        "type": "string"
                      },
                      "url": {
                        "description": "Keyword/www page URL when present",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "lat": {
                  "type": "number"
                },
                "lng": {
                  "type": "number"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "nearest_km": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "radius_km": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "find_by_gebiet",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "name": {
                  "description": "German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.",
                  "type": "string"
                },
                "q": {
                  "description": "Name or slug query (preferred)",
                  "type": "string"
                },
                "slug": {
                  "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": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "count": {
                  "type": "number"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "items": {
                  "items": {
                    "additionalProperties": true,
                    "description": "One Einsatzgebiet point card (not a polygon).",
                    "properties": {
                      "distance_km": {
                        "description": "Present on geo-ranked results: air distance from query point",
                        "type": "number"
                      },
                      "embed_map": {
                        "description": "https://maps.ikeytz.com/{slug}",
                        "format": "uri",
                        "type": "string"
                      },
                      "geo_api": {
                        "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}",
                        "format": "uri",
                        "type": "string"
                      },
                      "google_maps": {
                        "description": "Paste-ready 'lat, lng'",
                        "type": "string"
                      },
                      "icbm": {
                        "description": "ICBM 'lat, lng' (same as google_maps)",
                        "type": "string"
                      },
                      "kind": {
                        "description": "stadtteil | ort",
                        "type": "string"
                      },
                      "lat": {
                        "description": "WGS84 latitude of THIS place",
                        "type": "number"
                      },
                      "lng": {
                        "description": "WGS84 longitude of THIS place",
                        "type": "number"
                      },
                      "maps_mcp": {
                        "const": "https://maps.ikeytz.com/mcp",
                        "description": "maps MCP endpoint",
                        "format": "uri",
                        "type": "string"
                      },
                      "name": {
                        "description": "German place name",
                        "type": "string"
                      },
                      "parent": {
                        "description": "Ludwigsburg or Landkreis Ludwigsburg",
                        "type": "string"
                      },
                      "plz": {
                        "description": "Postcode",
                        "type": "string"
                      },
                      "slug": {
                        "description": "maps slug",
                        "type": "string"
                      },
                      "url": {
                        "description": "Keyword/www page URL when present",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "q": {
                  "description": "Resolved query",
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "find_by_area",
            "description": "WHAT: Multi-match Einsatzgebiete by q, name, or slug (substring, umlauts ok). RETURNS all matching point cards. Same match rules as find_by_gebiet — prefer this name when the agent thinks in 'area' wording. USE for fuzzy place names. DOES NOT require an exact slug. Prefer find_by_plz for postcode-only queries. NEXT: get_service_area, get_embed_map.",
            "inputSchema": {
              "properties": {
                "name": {
                  "description": "German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.",
                  "type": "string"
                },
                "q": {
                  "description": "Name or slug query",
                  "type": "string"
                },
                "slug": {
                  "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": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "count": {
                  "type": "number"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "items": {
                  "items": {
                    "additionalProperties": true,
                    "description": "One Einsatzgebiet point card (not a polygon).",
                    "properties": {
                      "distance_km": {
                        "description": "Present on geo-ranked results: air distance from query point",
                        "type": "number"
                      },
                      "embed_map": {
                        "description": "https://maps.ikeytz.com/{slug}",
                        "format": "uri",
                        "type": "string"
                      },
                      "geo_api": {
                        "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}",
                        "format": "uri",
                        "type": "string"
                      },
                      "google_maps": {
                        "description": "Paste-ready 'lat, lng'",
                        "type": "string"
                      },
                      "icbm": {
                        "description": "ICBM 'lat, lng' (same as google_maps)",
                        "type": "string"
                      },
                      "kind": {
                        "description": "stadtteil | ort",
                        "type": "string"
                      },
                      "lat": {
                        "description": "WGS84 latitude of THIS place",
                        "type": "number"
                      },
                      "lng": {
                        "description": "WGS84 longitude of THIS place",
                        "type": "number"
                      },
                      "maps_mcp": {
                        "const": "https://maps.ikeytz.com/mcp",
                        "description": "maps MCP endpoint",
                        "format": "uri",
                        "type": "string"
                      },
                      "name": {
                        "description": "German place name",
                        "type": "string"
                      },
                      "parent": {
                        "description": "Ludwigsburg or Landkreis Ludwigsburg",
                        "type": "string"
                      },
                      "plz": {
                        "description": "Postcode",
                        "type": "string"
                      },
                      "slug": {
                        "description": "maps slug",
                        "type": "string"
                      },
                      "url": {
                        "description": "Keyword/www page URL when present",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "q": {
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "list_slugs",
            "description": "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).",
            "inputSchema": {
              "additionalProperties": false,
              "description": "This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.",
              "properties": {},
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "count": {
                  "description": "52",
                  "type": "number"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "items": {
                  "description": "Slug strings",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "list_plz",
            "description": "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.",
            "inputSchema": {
              "additionalProperties": false,
              "description": "This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.",
              "properties": {},
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "count": {
                  "description": "Distinct PLZ count",
                  "type": "number"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "items": {
                  "description": "PLZ groups",
                  "items": {
                    "properties": {
                      "count": {
                        "type": "number"
                      },
                      "plz": {
                        "type": "string"
                      },
                      "slugs": {
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_hub",
            "description": "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.",
            "inputSchema": {
              "additionalProperties": false,
              "description": "This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.",
              "properties": {},
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "count": {
                  "description": "52",
                  "type": "number"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "h1": {
                  "description": "Hub H1",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "items": {
                  "description": "slug/name/embed_map rows",
                  "items": {
                    "properties": {
                      "embed_map": {
                        "format": "uri",
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "slug": {
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "title": {
                  "description": "Hub title",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_embed_map",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "name": {
                  "description": "German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.",
                  "type": "string"
                },
                "plz": {
                  "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.",
                  "type": "string"
                },
                "slug": {
                  "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": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "embed_map": {
                  "format": "uri",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "geo_api": {
                  "format": "uri",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "lat": {
                  "type": "number"
                },
                "lng": {
                  "type": "number"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "maps_nav": {
                  "description": "MAPS-IL1 mini-chrome URLs",
                  "properties": {
                    "buero": {
                      "format": "uri",
                      "type": "string"
                    },
                    "hub": {
                      "format": "uri",
                      "type": "string"
                    },
                    "mcp_hub": {
                      "format": "uri",
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "name": {
                  "type": "string"
                },
                "neighbors": {
                  "description": "Up to 5 nearest Gebiete",
                  "items": {
                    "properties": {
                      "embed_map": {
                        "format": "uri",
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "slug": {
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "plz": {
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "slug": {
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_geo_api",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "name": {
                  "description": "German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.",
                  "type": "string"
                },
                "plz": {
                  "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.",
                  "type": "string"
                },
                "slug": {
                  "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": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "embed_map": {
                  "format": "uri",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "geo_api": {
                  "format": "uri",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "lat": {
                  "type": "number"
                },
                "lng": {
                  "type": "number"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "note": {
                  "description": "Public JSON pointer; use get_grenze for polygon in MCP",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "plz": {
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "slug": {
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_grenze",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "name": {
                  "description": "German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.",
                  "type": "string"
                },
                "plz": {
                  "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.",
                  "type": "string"
                },
                "slug": {
                  "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": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "geo_api": {
                  "format": "uri",
                  "type": "string"
                },
                "hasPolygon": {
                  "description": "true if polygon.features length \u003e 0",
                  "type": "boolean"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "lat": {
                  "type": "number"
                },
                "lng": {
                  "type": "number"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "osmRelationId": {
                  "description": "OSM relation id if any",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "osmWayId": {
                  "description": "OSM way id if any",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "plz": {
                  "type": "string"
                },
                "point": {
                  "description": "Point feature or null",
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "polygon": {
                  "description": "GeoJSON FeatureCollection (may be empty)",
                  "type": "object"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "slug": {
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "via": {
                  "description": "Fetch path hint",
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_grenze_koordinaten",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "name": {
                  "description": "German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.",
                  "type": "string"
                },
                "plz": {
                  "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.",
                  "type": "string"
                },
                "slug": {
                  "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": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "color": {
                  "type": "string"
                },
                "countPoints": {
                  "type": "number"
                },
                "countPolygons": {
                  "type": "number"
                },
                "embed": {
                  "description": "Relative fn embed path",
                  "type": "string"
                },
                "embedGrenze": {
                  "type": "string"
                },
                "embedPublic": {
                  "type": "string"
                },
                "embedPunkt": {
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "featureCollection": {
                  "description": "Polygon + point FeatureCollection",
                  "type": "object"
                },
                "geoPosition": {
                  "description": "lat;lng",
                  "type": "string"
                },
                "gruppe": {
                  "type": "string"
                },
                "hasPolygon": {
                  "type": "boolean"
                },
                "hasPolygonKnown": {
                  "type": "boolean"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "href": {
                  "description": "www keyword page",
                  "format": "uri",
                  "type": "string"
                },
                "icbm": {
                  "type": "string"
                },
                "iframe": {
                  "format": "uri",
                  "type": "string"
                },
                "lat": {
                  "type": "number"
                },
                "lng": {
                  "type": "number"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "osmRelationId": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "osmWayId": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "part": {
                  "description": "Always full",
                  "type": "string"
                },
                "phone": {
                  "description": "NAP block (mobile, landline, fax, email, address, …)",
                  "type": "object"
                },
                "plz": {
                  "type": "string"
                },
                "point": {
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "points": {
                  "description": "GeoJSON FeatureCollection",
                  "type": "object"
                },
                "polygon": {
                  "description": "GeoJSON FeatureCollection (polygons only)",
                  "type": "object"
                },
                "purpose": {
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "slug": {
                  "type": "string"
                },
                "store": {
                  "type": "string"
                },
                "style": {
                  "description": "MapLibre-ish style colors",
                  "type": "object"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "via": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_lage",
            "description": "WHAT: Returns Lage (location description) prose for one Einsatzgebiet Visitenkarte. Lookup slug|plz|name. RETURNS slug, name, lage. USE for human-readable geography prose. Prefer get_geschichte for place history; prefer get_service_area for the full point card/embed. DOES NOT return polygons.",
            "inputSchema": {
              "properties": {
                "name": {
                  "description": "German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.",
                  "type": "string"
                },
                "plz": {
                  "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.",
                  "type": "string"
                },
                "slug": {
                  "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": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "lage": {
                  "description": "Lage prose (may be empty)",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "slug": {
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_geschichte",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "name": {
                  "description": "German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.",
                  "type": "string"
                },
                "plz": {
                  "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.",
                  "type": "string"
                },
                "slug": {
                  "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": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "geschichte": {
                  "description": "Geschichte prose (may be empty)",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "slug": {
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "distance_to_office",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "icbm": {
                  "description": "Optional 'lat, lng' instead of place lookup",
                  "type": "string"
                },
                "lat": {
                  "description": "Optional query latitude instead of place lookup",
                  "type": "number"
                },
                "lng": {
                  "description": "Optional query longitude",
                  "type": "number"
                },
                "name": {
                  "description": "German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.",
                  "type": "string"
                },
                "plz": {
                  "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.",
                  "type": "string"
                },
                "slug": {
                  "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": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "distance_km": {
                  "description": "Air distance kilometres",
                  "type": "number"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "from": {
                  "description": "Origin {lat,lng}",
                  "properties": {
                    "lat": {
                      "type": "number"
                    },
                    "lng": {
                      "type": "number"
                    }
                  },
                  "type": "object"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "office": {
                  "description": "Office {lat,lng,icbm}",
                  "type": "object"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "slug": {
                  "description": "Resolved slug if from place lookup",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "walkIn": {
                  "description": "Always false",
                  "type": "boolean"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "resolve_maps_url",
            "description": "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. Prefer get_service_area when you already have a known slug; prefer resolve_locale_url for locale rewriting. DOES NOT accept www hosts (not_maps_host). When multiple of url/path/q are set, url wins then path then q.",
            "inputSchema": {
              "properties": {
                "path": {
                  "description": "Path e.g. /pattonville",
                  "type": "string"
                },
                "q": {
                  "description": "URL or path alias",
                  "type": "string"
                },
                "url": {
                  "description": "Full https://maps.ikeytz.com/… URL",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "embed_map": {
                  "format": "uri",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "kind": {
                  "description": "Resolved kind",
                  "enum": [
                    "hub",
                    "ort"
                  ],
                  "type": "string"
                },
                "lat": {
                  "type": "number"
                },
                "lng": {
                  "type": "number"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "name": {
                  "description": "Place name when ort",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "plz": {
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "slug": {
                  "description": "null for hub",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "find_by_google_maps",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "icbm": {
                  "description": "ICBM or paste 'lat, lng' (comma-separated). Alternative to lat+lng.",
                  "type": "string"
                },
                "lat": {
                  "description": "WGS84 latitude. Required with lng unless icbm is set. (0,0) → outside_service_area.",
                  "type": "number"
                },
                "limit": {
                  "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.",
                  "minimum": 1,
                  "type": "integer"
                },
                "lng": {
                  "description": "WGS84 longitude. Required with lat unless icbm is set.",
                  "type": "number"
                },
                "q": {
                  "description": "Paste string containing 'lat, lng'",
                  "type": "string"
                },
                "radius_km": {
                  "description": "Optional air-radius filter in km. Omit = return nearest N (limit). Far points / (0,0) → outside_service_area.",
                  "type": "number"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "count": {
                  "type": "number"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "icbm": {
                  "type": "string"
                },
                "items": {
                  "items": {
                    "additionalProperties": true,
                    "description": "One Einsatzgebiet point card (not a polygon).",
                    "properties": {
                      "distance_km": {
                        "description": "Present on geo-ranked results: air distance from query point",
                        "type": "number"
                      },
                      "embed_map": {
                        "description": "https://maps.ikeytz.com/{slug}",
                        "format": "uri",
                        "type": "string"
                      },
                      "geo_api": {
                        "description": "https://maps.ikeytz.com/api/v1/embed/ort/{slug}",
                        "format": "uri",
                        "type": "string"
                      },
                      "google_maps": {
                        "description": "Paste-ready 'lat, lng'",
                        "type": "string"
                      },
                      "icbm": {
                        "description": "ICBM 'lat, lng' (same as google_maps)",
                        "type": "string"
                      },
                      "kind": {
                        "description": "stadtteil | ort",
                        "type": "string"
                      },
                      "lat": {
                        "description": "WGS84 latitude of THIS place",
                        "type": "number"
                      },
                      "lng": {
                        "description": "WGS84 longitude of THIS place",
                        "type": "number"
                      },
                      "maps_mcp": {
                        "const": "https://maps.ikeytz.com/mcp",
                        "description": "maps MCP endpoint",
                        "format": "uri",
                        "type": "string"
                      },
                      "name": {
                        "description": "German place name",
                        "type": "string"
                      },
                      "parent": {
                        "description": "Ludwigsburg or Landkreis Ludwigsburg",
                        "type": "string"
                      },
                      "plz": {
                        "description": "Postcode",
                        "type": "string"
                      },
                      "slug": {
                        "description": "maps slug",
                        "type": "string"
                      },
                      "url": {
                        "description": "Keyword/www page URL when present",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "lat": {
                  "type": "number"
                },
                "lng": {
                  "type": "number"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "nearest_km": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "radius_km": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_legal",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "doc": {
                  "description": "Required. maps corpus: urheberrecht|copyright|impressum. www links only: agb|nutzungsbedingungen|datenschutz|widerruf.",
                  "enum": [
                    "urheberrecht",
                    "copyright",
                    "impressum",
                    "agb",
                    "nutzungsbedingungen",
                    "datenschutz",
                    "widerruf"
                  ],
                  "type": "string"
                },
                "limit": {
                  "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.",
                  "minimum": 1,
                  "type": "integer"
                },
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "offset": {
                  "default": 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.",
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "required": [
                "doc"
              ],
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "body": {
                  "description": "maps text window when applicable",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "doc": {
                  "description": "Resolved doc id",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "www HTML URL when applicable",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "Host split note",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "which": {
                  "description": "Discovery id for maps text docs",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_urheberrecht",
            "description": "WHAT: Returns Karten-Urheberrecht plain text from maps /llms-urheberrecht.txt (attribution: Mahmud Reza Kashani · ikeytz). Optional offset/limit. USE when citing map copyright in German. Prefer get_copyright for the English citation file; prefer get_legal(doc=urheberrecht) for the legal-doc router. DOES NOT return www HTML body.",
            "inputSchema": {
              "properties": {
                "limit": {
                  "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.",
                  "minimum": 1,
                  "type": "integer"
                },
                "offset": {
                  "default": 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.",
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "body": {
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "doc": {
                  "const": "urheberrecht",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "www /urheberrecht",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "which": {
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_copyright",
            "description": "WHAT: English map copyright text from maps /llms-copyright.txt. Optional offset/limit. USE for EN citations of map authorship. NEXT: get_urheberrecht.",
            "inputSchema": {
              "properties": {
                "limit": {
                  "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.",
                  "minimum": 1,
                  "type": "integer"
                },
                "offset": {
                  "default": 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.",
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "body": {
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "doc": {
                  "const": "copyright",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "which": {
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_impressum",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "limit": {
                  "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.",
                  "minimum": 1,
                  "type": "integer"
                },
                "offset": {
                  "default": 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.",
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "body": {
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "doc": {
                  "const": "impressum",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "www /impressum",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "which": {
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_agb",
            "description": "WHAT: Returns only a URL to www.ikeytz.com/agb — not AGB clause text. USE when the user asks for AGB while on maps and you only need the link. Prefer www MCP get_legal(doc=agb) or www get_agb when you need the legal corpus. DOES NOT invent legal clauses.",
            "inputSchema": {
              "additionalProperties": false,
              "description": "This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.",
              "properties": {},
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp",
                  "format": "uri",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "maps only points; Volltext/Preise/FAQ live on www",
                  "type": "string"
                },
                "npm": {
                  "description": "www CLI package @ikeytz/mcp",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "description": "Locale the caller asked for; maps still returns locale=de",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "www_mcp": {
                  "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus",
                  "format": "uri",
                  "type": "string"
                },
                "www_tool": {
                  "description": "Same tool name on www MCP that holds the real payload",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_nutzungsbedingungen",
            "description": "Returns only a maps HTML hand-off to www Nutzungsbedingungen. Does not return the terms body. USE when the user asks for Nutzungsbedingungen on maps; prefer www MCP for the corpus. DOES NOT invent clauses. NEXT: www get_nutzungsbedingungen / get_legal.",
            "inputSchema": {
              "additionalProperties": false,
              "description": "This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.",
              "properties": {},
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp",
                  "format": "uri",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "maps only points; Volltext/Preise/FAQ live on www",
                  "type": "string"
                },
                "npm": {
                  "description": "www CLI package @ikeytz/mcp",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "description": "Locale the caller asked for; maps still returns locale=de",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "www_mcp": {
                  "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus",
                  "format": "uri",
                  "type": "string"
                },
                "www_tool": {
                  "description": "Same tool name on www MCP that holds the real payload",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_datenschutz",
            "description": "WHAT: Returns only a URL to www Datenschutz — not the privacy-policy body. USE when the user asks for Datenschutz while on maps and you only need the link. Prefer www MCP get_datenschutz or get_legal for the corpus. DOES NOT invent privacy clauses.",
            "inputSchema": {
              "additionalProperties": false,
              "description": "This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.",
              "properties": {},
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp",
                  "format": "uri",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "maps only points; Volltext/Preise/FAQ live on www",
                  "type": "string"
                },
                "npm": {
                  "description": "www CLI package @ikeytz/mcp",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "description": "Locale the caller asked for; maps still returns locale=de",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "www_mcp": {
                  "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus",
                  "format": "uri",
                  "type": "string"
                },
                "www_tool": {
                  "description": "Same tool name on www MCP that holds the real payload",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_widerruf",
            "description": "WHAT: Returns only a URL to www Widerruf — not withdrawal-policy text. USE when the user asks for Widerruf while on maps and you only need the link. Prefer www MCP get_widerruf or get_legal for the corpus. DOES NOT invent clauses.",
            "inputSchema": {
              "additionalProperties": false,
              "description": "This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.",
              "properties": {},
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp",
                  "format": "uri",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "maps only points; Volltext/Preise/FAQ live on www",
                  "type": "string"
                },
                "npm": {
                  "description": "www CLI package @ikeytz/mcp",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "description": "Locale the caller asked for; maps still returns locale=de",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "www_mcp": {
                  "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus",
                  "format": "uri",
                  "type": "string"
                },
                "www_tool": {
                  "description": "Same tool name on www MCP that holds the real payload",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "site_overview",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "brand": {
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "count": {
                  "description": "52",
                  "type": "number"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "h1": {
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "legalName": {
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "mcp": {
                  "format": "uri",
                  "type": "string"
                },
                "note": {
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "owner": {
                  "type": "string"
                },
                "registry": {
                  "description": "com.ikeytz/maps",
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "type": "string"
                },
                "sister": {
                  "description": "www MCP / npm hint",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "walkIn": {
                  "type": "boolean"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_business_identity",
            "description": "WHAT: Returns Inhaber, brand, legalName, hours, NAP, and office coords for LocalBusiness / impressum-grade facts on maps. Call with {} or locale=de. walkIn=false — mobile locksmith only. USE when you need the identity card (who owns the business, hours, legal name). Prefer get_contact for phone/email/WhatsApp CTAs; prefer get_geo_office for the /buero pin and embed; prefer get_impressum for the full imprint text file. DOES NOT update records or accept walk-in bookings.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "brand": {
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "hours": {
                  "type": "string"
                },
                "legalName": {
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "maps": {
                  "format": "uri",
                  "type": "string"
                },
                "nap": {
                  "description": "Public NAP payload",
                  "type": "object"
                },
                "note": {
                  "type": "string"
                },
                "office": {
                  "description": "lat/lng/google_maps/icbm",
                  "type": "object"
                },
                "office_note": {
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "owner": {
                  "description": "Mahmud Reza Kashani",
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "walkIn": {
                  "description": "Always false",
                  "type": "boolean"
                },
                "www": {
                  "format": "uri",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "list_nav",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "count": {
                  "type": "number"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "items": {
                  "description": "Nav links {label,url,slug?}",
                  "items": {
                    "additionalProperties": true,
                    "properties": {
                      "label": {
                        "type": "string"
                      },
                      "slug": {
                        "type": "string"
                      },
                      "url": {
                        "format": "uri",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "list_footer",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "email": {
                  "description": "info@ikeytz.com",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html_www": {
                  "description": "www HTML footer links (host=www)",
                  "type": "array"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "maps": {
                  "description": "maps-hosted footer links",
                  "type": "array"
                },
                "mapsEmail": {
                  "description": "info@maps.ikeytz.com",
                  "type": "string"
                },
                "note": {
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "list_locales",
            "description": "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.",
            "inputSchema": {
              "additionalProperties": false,
              "description": "This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.",
              "properties": {},
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "items": {
                  "description": "Only de",
                  "items": {
                    "properties": {
                      "locale": {
                        "const": "de",
                        "type": "string"
                      },
                      "url": {
                        "format": "uri",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "resolve_locale_url",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "description": "Required. Only de is meaningful on maps; others ignored with a note.",
                  "type": "string"
                },
                "path": {
                  "description": "Required. Path starting with / (e.g. /pattonville) or a maps URL.",
                  "type": "string"
                }
              },
              "required": [
                "path",
                "locale"
              ],
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "Present when falling through to www pointer",
                  "type": "string"
                },
                "locale": {
                  "const": "de",
                  "type": "string"
                },
                "note": {
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "path": {
                  "description": "Normalized path",
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "type": "string"
                },
                "slug": {
                  "description": "When a Gebiet matched",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_prices",
            "description": "WHAT: Returns only a URL/note pointing to the Festpreis matrix on www.ikeytz.com/preise — no euro rows. USE to hand the agent from maps to www pricing. Prefer www MCP get_prices for the real matrix; call maps get_ort_datetime first if you need whenKey (day|night) for a later www invoice. DOES NOT invent prices or return totalEur.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp",
                  "format": "uri",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "maps only points; Volltext/Preise/FAQ live on www",
                  "type": "string"
                },
                "npm": {
                  "description": "www CLI package @ikeytz/mcp",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "description": "Locale the caller asked for; maps still returns locale=de",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "www_mcp": {
                  "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus",
                  "format": "uri",
                  "type": "string"
                },
                "www_tool": {
                  "description": "Same tool name on www MCP that holds the real payload",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_invoice_line_items",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "breakdown": {
                  "description": "www flag; ignored for maps pointer payload.",
                  "type": "boolean"
                },
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "situationKey": {
                  "description": "Required for www. Situation id (opening_slam, opening_locked, pkg_key_*, cylinder_only, cylinder_mount, aliases).",
                  "type": "string"
                },
                "whenKey": {
                  "description": "day|night|now — used on www; maps only points.",
                  "type": "string"
                }
              },
              "required": [
                "situationKey"
              ],
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp",
                  "format": "uri",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "maps only points; Volltext/Preise/FAQ live on www",
                  "type": "string"
                },
                "npm": {
                  "description": "www CLI package @ikeytz/mcp",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "description": "Locale the caller asked for; maps still returns locale=de",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "www_mcp": {
                  "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus",
                  "format": "uri",
                  "type": "string"
                },
                "www_tool": {
                  "description": "Same tool name on www MCP that holds the real payload",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "list_services",
            "description": "WHAT: Returns only a URL to www /leistungen — not Leistungs rows or prices. USE when the user asks for services while on maps and you only need the link. Prefer www MCP list_services for the real catalog. Optional locale (de|en|fr|ru|fa|ar|tr, default de) selects the www URL language only — it does not load service rows. DOES NOT invent service rows.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp",
                  "format": "uri",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "maps only points; Volltext/Preise/FAQ live on www",
                  "type": "string"
                },
                "npm": {
                  "description": "www CLI package @ikeytz/mcp",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "description": "Locale the caller asked for; maps still returns locale=de",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "www_mcp": {
                  "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus",
                  "format": "uri",
                  "type": "string"
                },
                "www_tool": {
                  "description": "Same tool name on www MCP that holds the real payload",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_emergency",
            "description": "WHAT: Returns only a URL to the www Notfall-Türöffnung page — not a dispatch. USE for emergency lockout context on maps when you only need the link. Prefer maps get_contact or compose_tel_mobile for phone CTAs here; prefer www MCP get_emergency for the full Notfall body. Optional locale selects the www URL language only. DOES NOT dispatch technicians or claim a van was sent.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp",
                  "format": "uri",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "maps only points; Volltext/Preise/FAQ live on www",
                  "type": "string"
                },
                "npm": {
                  "description": "www CLI package @ikeytz/mcp",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "description": "Locale the caller asked for; maps still returns locale=de",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "www_mcp": {
                  "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus",
                  "format": "uri",
                  "type": "string"
                },
                "www_tool": {
                  "description": "Same tool name on www MCP that holds the real payload",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "list_auswahl",
            "description": "WHAT: Returns only a URL to the www Auswahl hub (/auswahl) — not Auswahl items. USE when the user asks for the Auswahl overview on maps. Prefer www MCP list_auswahl for the real item list; prefer maps get_auswahl_item({slug}) only when a slug is known (still URL-only). Optional locale (de|en|fr|ru|fa|ar|tr, default de) selects the www URL language only — it does not list items. DOES NOT list items.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp",
                  "format": "uri",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "maps only points; Volltext/Preise/FAQ live on www",
                  "type": "string"
                },
                "npm": {
                  "description": "www CLI package @ikeytz/mcp",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "description": "Locale the caller asked for; maps still returns locale=de",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "www_mcp": {
                  "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus",
                  "format": "uri",
                  "type": "string"
                },
                "www_tool": {
                  "description": "Same tool name on www MCP that holds the real payload",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_auswahl_item",
            "description": "WHAT: Returns only a URL to www /auswahl/{slug} — not the Auswahl article body. slug required. USE when the user names a specific Auswahl slug on maps. Prefer list_auswahl for the hub link; prefer www MCP get_auswahl_item({slug}) when you need the full article. DOES NOT return article text.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "slug": {
                  "description": "Required Auswahl slug on www",
                  "type": "string"
                }
              },
              "required": [
                "slug"
              ],
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp",
                  "format": "uri",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "maps only points; Volltext/Preise/FAQ live on www",
                  "type": "string"
                },
                "npm": {
                  "description": "www CLI package @ikeytz/mcp",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "description": "Locale the caller asked for; maps still returns locale=de",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "www_mcp": {
                  "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus",
                  "format": "uri",
                  "type": "string"
                },
                "www_tool": {
                  "description": "Same tool name on www MCP that holds the real payload",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_about",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "brand": {
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "count": {
                  "type": "number"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "h1": {
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "legalName": {
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "mcp": {
                  "format": "uri",
                  "type": "string"
                },
                "note": {
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "owner": {
                  "type": "string"
                },
                "registry": {
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "sister": {
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "walkIn": {
                  "type": "boolean"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_partner_info",
            "description": "Returns only a maps HTML hand-off to www Partner-werden (/partner-werden). Does not return partnerEmail corpus or submit the partner form. USE when the user asks about becoming a partner while on maps. Prefer www MCP get_partner_info if already connected to www. formSubmit=false — never claim a form was sent. NEXT: www get_partner_info; or maps compose_mailto after opening www.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp",
                  "format": "uri",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "maps only points; Volltext/Preise/FAQ live on www",
                  "type": "string"
                },
                "npm": {
                  "description": "www CLI package @ikeytz/mcp",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "description": "Locale the caller asked for; maps still returns locale=de",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "www_mcp": {
                  "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus",
                  "format": "uri",
                  "type": "string"
                },
                "www_tool": {
                  "description": "Same tool name on www MCP that holds the real payload",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_links",
            "description": "WHAT: Returns the maps machine bookmark set of discovery URLs (hub, mcp, server-card, agent-skills, llms, registry search, npm @ikeytz/maps-mcp). USE to open known well-known endpoints by URL. Prefer get_discovery when you need file contents or line windows; prefer get_llms_txt for the primary llms index body. DOES NOT fetch discovery file bodies.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "items": {
                  "description": "Named absolute URLs",
                  "properties": {
                    "card": {
                      "format": "uri",
                      "type": "string"
                    },
                    "hub": {
                      "format": "uri",
                      "type": "string"
                    },
                    "llms": {
                      "format": "uri",
                      "type": "string"
                    },
                    "mcp": {
                      "format": "uri",
                      "type": "string"
                    },
                    "npm": {
                      "format": "uri",
                      "type": "string"
                    },
                    "registry": {
                      "format": "uri",
                      "type": "string"
                    },
                    "skills": {
                      "format": "uri",
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_review_url",
            "description": "WHAT: Returns only a URL to www.ikeytz.com/review (Google-review entry page) — not a review payload. USE when the user asks where to leave a Google review while already on maps. Prefer www MCP get_review_url when connected to www for the canonical review-link payload. DOES NOT post a review.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp",
                  "format": "uri",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "maps only points; Volltext/Preise/FAQ live on www",
                  "type": "string"
                },
                "npm": {
                  "description": "www CLI package @ikeytz/mcp",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "description": "Locale the caller asked for; maps still returns locale=de",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "www_mcp": {
                  "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus",
                  "format": "uri",
                  "type": "string"
                },
                "www_tool": {
                  "description": "Same tool name on www MCP that holds the real payload",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "list_faq",
            "description": "Returns only a maps HTML hand-off to www /faq. Does not return FAQ question rows or answers. USE for the FAQ hub on maps; use get_faq when an id/q is known (still a hand-off). Prefer www MCP list_faq / get_faq for real FAQ data. NEXT: www list_faq; maps get_faq.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp",
                  "format": "uri",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "maps only points; Volltext/Preise/FAQ live on www",
                  "type": "string"
                },
                "npm": {
                  "description": "www CLI package @ikeytz/mcp",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "description": "Locale the caller asked for; maps still returns locale=de",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "www_mcp": {
                  "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus",
                  "format": "uri",
                  "type": "string"
                },
                "www_tool": {
                  "description": "Same tool name on www MCP that holds the real payload",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_faq",
            "description": "Returns only a maps HTML hand-off to www /faq (optional id/q are for www symmetry, not answered here). Does not return the FAQ answer body. USE when the user asks one FAQ while on maps; use list_faq for the hub. Prefer www MCP get_faq({id}|{q}) for the real answer. NEXT: www get_faq.",
            "inputSchema": {
              "properties": {
                "id": {
                  "description": "FAQ id on www",
                  "type": "string"
                },
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "q": {
                  "description": "FAQ question search on www",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp",
                  "format": "uri",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "maps only points; Volltext/Preise/FAQ live on www",
                  "type": "string"
                },
                "npm": {
                  "description": "www CLI package @ikeytz/mcp",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "description": "Locale the caller asked for; maps still returns locale=de",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "www_mcp": {
                  "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus",
                  "format": "uri",
                  "type": "string"
                },
                "www_tool": {
                  "description": "Same tool name on www MCP that holds the real payload",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "list_wissen",
            "description": "WHAT: Returns only a URL to the www Wissen hub (/wissen) — not lexicon entries or article text. USE when the user asks for the Wissen overview on maps. Prefer www MCP list_wissen for the real index; prefer maps get_wissen_entry({id}) only as a URL hand-off for one id. DOES NOT list entries.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp",
                  "format": "uri",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "maps only points; Volltext/Preise/FAQ live on www",
                  "type": "string"
                },
                "npm": {
                  "description": "www CLI package @ikeytz/mcp",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "description": "Locale the caller asked for; maps still returns locale=de",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "www_mcp": {
                  "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus",
                  "format": "uri",
                  "type": "string"
                },
                "www_tool": {
                  "description": "Same tool name on www MCP that holds the real payload",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_wissen_entry",
            "description": "Returns only a maps HTML hand-off to www /wissen/{id}. id required. Does not return the Wissen article body. USE when the user names a Wissen id on maps; use list_wissen for the hub. Prefer www MCP get_wissen_entry for fulltext. NEXT: www get_wissen_entry({id}).",
            "inputSchema": {
              "properties": {
                "id": {
                  "description": "Required Wissen entry id",
                  "type": "string"
                },
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp",
                  "format": "uri",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "maps only points; Volltext/Preise/FAQ live on www",
                  "type": "string"
                },
                "npm": {
                  "description": "www CLI package @ikeytz/mcp",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "description": "Locale the caller asked for; maps still returns locale=de",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "www_mcp": {
                  "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus",
                  "format": "uri",
                  "type": "string"
                },
                "www_tool": {
                  "description": "Same tool name on www MCP that holds the real payload",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "list_ratgeber",
            "description": "WHAT: Returns only a URL to the www Ratgeber hub (/ratgeber) — not titles or article bodies. USE when the user asks for the Ratgeber overview on maps. Prefer www MCP list_ratgeber for the real list; prefer maps get_ratgeber({slug}) only when a slug is known (still URL-only). Optional locale (de|en|fr|ru|fa|ar|tr, default de) selects the www URL language only. DOES NOT list Ratgeber entries.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp",
                  "format": "uri",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "maps only points; Volltext/Preise/FAQ live on www",
                  "type": "string"
                },
                "npm": {
                  "description": "www CLI package @ikeytz/mcp",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "description": "Locale the caller asked for; maps still returns locale=de",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "www_mcp": {
                  "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus",
                  "format": "uri",
                  "type": "string"
                },
                "www_tool": {
                  "description": "Same tool name on www MCP that holds the real payload",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_ratgeber",
            "description": "WHAT: Returns only a URL to www /ratgeber/{slug} — not the article body. slug required. USE when the user names a Ratgeber slug on maps. Prefer list_ratgeber for the hub link when the slug is unknown; prefer www MCP get_ratgeber for fulltext. DOES NOT return article text.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "slug": {
                  "description": "Required Ratgeber slug",
                  "type": "string"
                }
              },
              "required": [
                "slug"
              ],
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "Absolute www.ikeytz.com URL — open there or call @ikeytz/mcp",
                  "format": "uri",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "maps only points; Volltext/Preise/FAQ live on www",
                  "type": "string"
                },
                "npm": {
                  "description": "www CLI package @ikeytz/mcp",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "requested_locale": {
                  "description": "Locale the caller asked for; maps still returns locale=de",
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "www_mcp": {
                  "description": "https://www.ikeytz.com/mcp — sister machine for prices/FAQ/corpus",
                  "format": "uri",
                  "type": "string"
                },
                "www_tool": {
                  "description": "Same tool name on www MCP that holds the real payload",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_page_summary",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "path": {
                  "description": "Required. maps path (/pattonville) or www path for pointer fallback.",
                  "type": "string"
                },
                "slug": {
                  "description": "Alias for path/slug",
                  "type": "string"
                }
              },
              "required": [
                "path"
              ],
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "embed_map": {
                  "format": "uri",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "When www pointer",
                  "type": "string"
                },
                "lat": {
                  "type": "number"
                },
                "lng": {
                  "type": "number"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "plz": {
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "slug": {
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_ai_page",
            "description": "Reads maps /ai-pages/de/{slug}.txt when the path is a maps Gebiet/ai-page; otherwise returns a www HTML hand-off for non-maps paths. path or slug. USE for agent-ready maps Gebiet prose — not for site-wide crawl policy (that is get_ai_txt). DOES NOT invent page bodies. NEXT: get_service_area, get_lage, get_ai_txt.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "path": {
                  "description": "Path or ai-pages path fragment",
                  "type": "string"
                },
                "slug": {
                  "description": "Gebiet or ai-page slug",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "html": {
                  "description": "When www pointer",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "path": {
                  "description": "/ai-pages/de/{slug}.txt",
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "slug": {
                  "type": "string"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "text": {
                  "description": "Full ai-page UTF-8 text",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_llms_txt",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "limit": {
                  "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.",
                  "minimum": 1,
                  "type": "integer"
                },
                "offset": {
                  "default": 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.",
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "bytesReturned": {
                  "description": "UTF-8 length of text window",
                  "type": "number"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "fetchTruncated": {
                  "description": "true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false.",
                  "type": "boolean"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "limit": {
                  "description": "Applied line limit, or null if omitted",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "missing": {
                  "description": "true if the discovery file was not found on disk",
                  "type": "boolean"
                },
                "nextOffset": {
                  "description": "Pass as next offset when truncated; else null. Also in # MCP-META.",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "offset": {
                  "description": "Applied 0-based line offset",
                  "type": "number"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "path": {
                  "description": "Public relative path of the file on maps",
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "returnedLines": {
                  "description": "Lines in this window (before # MCP-META)",
                  "type": "number"
                },
                "returnedUrls": {
                  "description": "http(s) lines in this window",
                  "type": "number"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "text": {
                  "description": "UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "totalBytes": {
                  "description": "Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META.",
                  "type": "number"
                },
                "totalChars": {
                  "description": "Full discovery file character length before offset/limit. Also in # MCP-META.",
                  "type": "number"
                },
                "totalLines": {
                  "description": "Alias of total_lines",
                  "type": "number"
                },
                "totalUrls": {
                  "description": "http(s) lines in the full file",
                  "type": "number"
                },
                "total_lines": {
                  "description": "Line count of the full file",
                  "type": "number"
                },
                "truncated": {
                  "description": "true if offset+limit left more lines. Also in trailing # MCP-META.",
                  "type": "boolean"
                },
                "which": {
                  "description": "Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_ai_txt",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "limit": {
                  "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.",
                  "minimum": 1,
                  "type": "integer"
                },
                "offset": {
                  "default": 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.",
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "bytesReturned": {
                  "description": "UTF-8 length of text window",
                  "type": "number"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "fetchTruncated": {
                  "description": "true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false.",
                  "type": "boolean"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "limit": {
                  "description": "Applied line limit, or null if omitted",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "missing": {
                  "description": "true if the discovery file was not found on disk",
                  "type": "boolean"
                },
                "nextOffset": {
                  "description": "Pass as next offset when truncated; else null. Also in # MCP-META.",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "offset": {
                  "description": "Applied 0-based line offset",
                  "type": "number"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "path": {
                  "description": "Public relative path of the file on maps",
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "returnedLines": {
                  "description": "Lines in this window (before # MCP-META)",
                  "type": "number"
                },
                "returnedUrls": {
                  "description": "http(s) lines in this window",
                  "type": "number"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "text": {
                  "description": "UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "totalBytes": {
                  "description": "Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META.",
                  "type": "number"
                },
                "totalChars": {
                  "description": "Full discovery file character length before offset/limit. Also in # MCP-META.",
                  "type": "number"
                },
                "totalLines": {
                  "description": "Alias of total_lines",
                  "type": "number"
                },
                "totalUrls": {
                  "description": "http(s) lines in the full file",
                  "type": "number"
                },
                "total_lines": {
                  "description": "Line count of the full file",
                  "type": "number"
                },
                "truncated": {
                  "description": "true if offset+limit left more lines. Also in trailing # MCP-META.",
                  "type": "boolean"
                },
                "which": {
                  "description": "Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "get_sitemap_txt",
            "description": "WHAT: Reads maps /sitemap.txt 1:1 (alias of get_discovery(which=sitemap-txt)); summary is a line window plus trailing # MCP-META. Optional offset/limit. USE to list public maps embed URLs including /buero. Prefer get_discovery for other discovery ids; prefer site_overview for the brand card, not a URL list. NEXT: resolve_maps_url, get_embed_map, get_geo_office.",
            "inputSchema": {
              "properties": {
                "limit": {
                  "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.",
                  "minimum": 1,
                  "type": "integer"
                },
                "offset": {
                  "default": 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.",
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "bytesReturned": {
                  "description": "UTF-8 length of text window",
                  "type": "number"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "fetchTruncated": {
                  "description": "true if a load cap cut the file before paging (www Cap). maps reads full from disk → always false.",
                  "type": "boolean"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "limit": {
                  "description": "Applied line limit, or null if omitted",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "missing": {
                  "description": "true if the discovery file was not found on disk",
                  "type": "boolean"
                },
                "nextOffset": {
                  "description": "Pass as next offset when truncated; else null. Also in # MCP-META.",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "offset": {
                  "description": "Applied 0-based line offset",
                  "type": "number"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "path": {
                  "description": "Public relative path of the file on maps",
                  "type": "string"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "returnedLines": {
                  "description": "Lines in this window (before # MCP-META)",
                  "type": "number"
                },
                "returnedUrls": {
                  "description": "http(s) lines in this window",
                  "type": "number"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "text": {
                  "description": "UTF-8 line window (file body before # MCP-META). Same bytes as summary without meta trailer.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                },
                "totalBytes": {
                  "description": "Full discovery file size in bytes (UTF-8). Also in trailing # MCP-META.",
                  "type": "number"
                },
                "totalChars": {
                  "description": "Full discovery file character length before offset/limit. Also in # MCP-META.",
                  "type": "number"
                },
                "totalLines": {
                  "description": "Alias of total_lines",
                  "type": "number"
                },
                "totalUrls": {
                  "description": "http(s) lines in the full file",
                  "type": "number"
                },
                "total_lines": {
                  "description": "Line count of the full file",
                  "type": "number"
                },
                "truncated": {
                  "description": "true if offset+limit left more lines. Also in trailing # MCP-META.",
                  "type": "boolean"
                },
                "which": {
                  "description": "Resolved discovery id (ard, ai-catalog, llms, robots, sitemap-txt, llms-mcp-server, …).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "list_whatsapp_options",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "locale": {
                  "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.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "items": {
                  "description": "Options {id,label,href}",
                  "items": {
                    "properties": {
                      "href": {
                        "format": "uri",
                        "type": "string"
                      },
                      "id": {
                        "type": "string"
                      },
                      "label": {
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "Link only; Festpreis SSOT remains www",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "compose_tel_mobile",
            "description": "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.",
            "inputSchema": {
              "additionalProperties": false,
              "description": "This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.",
              "properties": {},
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "display": {
                  "description": "Human display number",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "href": {
                  "description": "tel:+49…",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "compose_tel_landline",
            "description": "WHAT: tel: href for the public landline. Call with {}. RETURNS href + display. USE as secondary call CTA. NEXT: compose_tel_mobile.",
            "inputSchema": {
              "additionalProperties": false,
              "description": "This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.",
              "properties": {},
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "display": {
                  "description": "Human display number",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "href": {
                  "description": "tel:+49…",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "compose_whatsapp",
            "description": "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.",
            "inputSchema": {
              "properties": {
                "option": {
                  "description": "Optional situation id from list_whatsapp_options (zugefallen|abgeschlossen|zylinder). Unknown → ok:false.",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "href": {
                  "description": "https://wa.me/…",
                  "format": "uri",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "note": {
                  "description": "Link only. Kein Formular.",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "option": {
                  "description": "Echoed option (null if omitted)",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          },
          {
            "name": "compose_mailto",
            "description": "WHAT: Returns mailto:info@ikeytz.com and mapsEmail info@maps.ikeytz.com (mapsHref). Call with {}. USE for email CTAs. Prefer compose_whatsapp or compose_tel_mobile when the user wants chat or a phone call instead. DOES NOT send mail.",
            "inputSchema": {
              "additionalProperties": false,
              "description": "This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored.",
              "properties": {},
              "type": "object"
            },
            "outputSchema": {
              "additionalProperties": true,
              "description": "Always the same envelope. tools/call returns content[0].text = summary (or JSON) AND structuredContent = this object. On success ok=true with summary + canonicalUrl + extra fields. On failure ok=false with error (snake_case code) and hint (recovery URL). Never writes, never submits forms, never books. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no. Host is maps.ikeytz.com (geo/Einsatzgebiet). Prices/FAQ/legal HTML live on www — maps only points.",
              "properties": {
                "attribution": {
                  "description": "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://maps.ikeytz.com/.well-known/ai.txt'",
                  "type": "string"
                },
                "canonicalUrl": {
                  "description": "Best URL to show the user: https://maps.ikeytz.com… page, public embed JSON, tel:+49…, mailto:…, https://wa.me/…, or a www pointer. Prefer this over constructing URLs.",
                  "type": "string"
                },
                "error": {
                  "description": "Present when ok=false. Codes include: unknown_place, unknown_discovery, unknown_doc, q_required, plz_required, coords_required, outside_service_area, url_required, not_maps_host, bad_url, path_or_url_required, serp_not_found, slug_or_coords_required, path_required.",
                  "type": "string"
                },
                "hint": {
                  "description": "Present when ok=false. Absolute URL or short recovery hint the agent should open or pass to another tool.",
                  "type": "string"
                },
                "href": {
                  "description": "mailto:info@ikeytz.com",
                  "type": "string"
                },
                "locale": {
                  "description": "Locale actually used for URLs. maps is German-only: always de (MAPS-E8 — no /en on maps). Requested non-de is ignored; payload locale=de.",
                  "enum": [
                    "de"
                  ],
                  "type": "string"
                },
                "mapsEmail": {
                  "description": "info@maps.ikeytz.com",
                  "type": "string"
                },
                "mapsHref": {
                  "description": "mailto:info@maps.ikeytz.com",
                  "type": "string"
                },
                "ok": {
                  "description": "true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.",
                  "type": "boolean"
                },
                "related": {
                  "description": "Always includes https://maps.ikeytz.com/llms.txt.",
                  "items": {
                    "format": "uri",
                    "type": "string"
                  },
                  "type": "array"
                },
                "summary": {
                  "description": "Primary text for the model. For discovery tools this is the file window. For list tools a compact one-liner. Quote with attribution.",
                  "type": "string"
                },
                "tool": {
                  "description": "Echo of the tool name that produced this object (e.g. get_service_area).",
                  "type": "string"
                }
              },
              "required": [
                "ok",
                "tool",
                "attribution"
              ],
              "type": "object"
            },
            "annotations": {
              "readOnlyHint": true
            }
          }
        ]
      },
      "name": "ikeytz Einsatzgebiet-Karten",
      "note": "Indexed from the official MCP registry: facts and our own checks, not reviewed, so no score, grade or rank.",
      "packages": [
        {
          "registryType": "npm",
          "identifier": "@ikeytz/maps-mcp",
          "version": "1.0.27",
          "transport": "stdio"
        }
      ],
      "pageJsonUrl": "https://www.anchorterminal.com/tools/ikeytz-maps.json",
      "popularity": {
        "npmWeekly": 749
      },
      "registryName": "com.ikeytz/maps",
      "remotes": [
        {
          "type": "streamable-http",
          "url": "https://maps.ikeytz.com/mcp"
        }
      ],
      "repository": "",
      "reviewed": false,
      "slug": "ikeytz-maps",
      "source": "the official MCP registry",
      "sourceUrl": "https://registry.modelcontextprotocol.io/v0.1/servers?search=com.ikeytz/maps",
      "summary": "Read/Link MCP for maps.ikeytz.com. Public read-only. No forms. ai-train=no.",
      "updatedAt": "2026-10-03T16:59:30Z",
      "url": "https://www.anchorterminal.com/tools/ikeytz-maps",
      "vendor": "ikeytz.com",
      "vendorUrl": "https://maps.ikeytz.com",
      "version": "1.0.14",
      "websiteUrl": "https://maps.ikeytz.com",
      "where": "both",
      "why": [
        "vendor"
      ]
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/tools/ikeytz-maps",
    "json": "https://www.anchorterminal.com/tools/ikeytz-maps.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/tools/ikeytz-maps.md",
    "slim": "https://www.anchorterminal.com/tools/ikeytz-maps.min.md"
  },
  "markdown": "# ikeytz Einsatzgebiet-Karten\n\n\u003e Indexed, not reviewed: facts from the official MCP registry and our own checks. No score, grade or rank, and not in the rankings until the panel reviews it. How the index works: https://www.anchorterminal.com/indexed/\n\n- Kind: MCP server, by ikeytz.com (https://maps.ikeytz.com)\n- Listed because: It's published in the registry under ikeytz.com, a namespace the registry only gives to whoever proves they control that domain.\n- What the official MCP registry says: Read/Link MCP for maps.ikeytz.com. Public read-only. No forms. ai-train=no.\n\n## Facts\n\n- MCP registry: `com.ikeytz/maps` 1.0.14\n- Endpoint: https://maps.ikeytz.com/mcp (streamable HTTP)\n- Package: npm `@ikeytz/maps-mcp` (stdio)\n- Website: https://maps.ikeytz.com\n- npm downloads a week: 749\n- Registry entry updated: 2026-10-03\n\n## Tools\n\n- Tools it lists (68, about 64,781 tokens of context, `tools/list` without credentials, checked 2026-10-04 22:23 UTC):\n  - `list_service_areas` (read-only): 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[],…\n  - `get_service_area` (read-only): WHAT: One Einsatzgebiet by slug → plz (first match) → name substring. RETURNS point card + maps_nav (hub/buero/mcp-hub) + neighbors (5 nearest by airline,…\n  - `get_ort_datetime` (read-only): 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;…\n  - `get_geo_office` (read-only): WHO/WHAT: Gewerbesitz (registered office) pin on maps.ikeytz.com/buero. walkIn=false always — mobile locksmith, not a shop counter. RETURNS street, postal,…\n  - `get_contact` (read-only): WHAT: Public NAP — mobile, landline, fax, email, mapsEmail (info@maps.ikeytz.com), WhatsApp, address, office coords. walkIn=false. USE for call/WhatsApp/mail…\n  - `get_discovery` (read-only): 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…\n  - `get_llms_mcp_server` (read-only): 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…\n  - `get_llms_mcp_web` (read-only): WHAT: Returns the web/UI-oriented MCP catalog text on maps (alias of get_discovery(which=llms-mcp-web)). Optional offset/limit. USE for browser/agent web…\n  - `find_by_keyword` (read-only): WHAT: Search maps llms-keywords.txt (keyword → maps URL). q required. RETURNS matching keyword/url rows (clamped limit). USE for SEO/keyword → Gebiet page.…\n  - `find_by_serp` (read-only): 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…\n  - `get_serp_snippet` (read-only): 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…\n  - `find_by_plz` (read-only): 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…\n  - `find_by_geo` (read-only): 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.…\n  - `find_by_icbm` (read-only): WHAT: Rank Einsatzgebiete by an ICBM 'lat, lng' string (optional lat/lng, radius_km, limit). RETURNS items with distance_km. USE when the user pastes ICBM…\n  - `find_by_gebiet` (read-only): 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…\n  - `find_by_area` (read-only): WHAT: Multi-match Einsatzgebiete by q, name, or slug (substring, umlauts ok). RETURNS all matching point cards. Same match rules as find_by_gebiet — prefer…\n  - `list_slugs` (read-only): 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).\n  - `list_plz` (read-only): 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:…\n  - `get_hub` (read-only): 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…\n  - `get_embed_map` (read-only): 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…\n  - `get_geo_api` (read-only): 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…\n  - `get_grenze` (read-only): WHAT: OSM Gebietspolygon for one Einsatzgebiet as GeoJSON FeatureCollection inside the MCP result. Lookup slug|plz|name. RETURNS hasPolygon, polygon, point,…\n  - `get_grenze_koordinaten` (read-only): 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,…\n  - `get_lage` (read-only): WHAT: Returns Lage (location description) prose for one Einsatzgebiet Visitenkarte. Lookup slug|plz|name. RETURNS slug, name, lage. USE for human-readable…\n  - `get_geschichte` (read-only): WHAT: Geschichte (history) text for one Einsatzgebiet Visitenkarte. Lookup slug|plz|name. RETURNS slug, name, geschichte. USE for place history prose on the…\n  - `distance_to_office` (read-only): 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…\n  - `resolve_maps_url` (read-only): 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. Prefer…\n  - `find_by_google_maps` (read-only): 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…\n  - `get_legal` (read-only): WHAT: Legal doc router. doc enum: urheberrecht|copyright|impressum (maps text via discovery) or agb|nutzungsbedingungen|datenschutz|widerruf (www URL pointer…\n  - `get_urheberrecht` (read-only): WHAT: Returns Karten-Urheberrecht plain text from maps /llms-urheberrecht.txt (attribution: Mahmud Reza Kashani · ikeytz). Optional offset/limit. USE when…\n  - `get_copyright` (read-only): WHAT: English map copyright text from maps /llms-copyright.txt. Optional offset/limit. USE for EN citations of map authorship. NEXT: get_urheberrecht.\n  - `get_impressum` (read-only): WHAT: Impressum/Kontakt text from maps /llms-impressum-kontakt.txt. Optional offset/limit. USE for NAP/legal imprint on maps. NEXT: get_contact,…\n  - `get_agb` (read-only): WHAT: Returns only a URL to www.ikeytz.com/agb — not AGB clause text. USE when the user asks for AGB while on maps and you only need the link. Prefer www MCP…\n  - `get_nutzungsbedingungen` (read-only): Returns only a maps HTML hand-off to www Nutzungsbedingungen. Does not return the terms body. USE when the user asks for Nutzungsbedingungen on maps; prefer…\n  - `get_datenschutz` (read-only): WHAT: Returns only a URL to www Datenschutz — not the privacy-policy body. USE when the user asks for Datenschutz while on maps and you only need the link.…\n  - `get_widerruf` (read-only): WHAT: Returns only a URL to www Widerruf — not withdrawal-policy text. USE when the user asks for Widerruf while on maps and you only need the link. Prefer www…\n  - `site_overview` (read-only): 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,…\n  - `get_business_identity` (read-only): WHAT: Returns Inhaber, brand, legalName, hours, NAP, and office coords for LocalBusiness / impressum-grade facts on maps. Call with {} or locale=de.…\n  - `list_nav` (read-only): 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:…\n  - `list_footer` (read-only): WHAT: maps footer links (Hub, MCP-Hub, MCP, mapsEmail mailto, Urheberrecht, Copyright, Impressum-Kontakt) plus www HTML legal links (no price corpus). RETURNS…\n  - `list_locales` (read-only): 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…\n  - `resolve_locale_url` (read-only): 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…\n  - `get_prices` (read-only): WHAT: Returns only a URL/note pointing to the Festpreis matrix on www.ikeytz.com/preise — no euro rows. USE to hand the agent from maps to www pricing. Prefer…\n  - `get_invoice_line_items` (read-only): 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,…\n  - `list_services` (read-only): WHAT: Returns only a URL to www /leistungen — not Leistungs rows or prices. USE when the user asks for services while on maps and you only need the link.…\n  - `get_emergency` (read-only): WHAT: Returns only a URL to the www Notfall-Türöffnung page — not a dispatch. USE for emergency lockout context on maps when you only need the link. Prefer…\n  - `list_auswahl` (read-only): WHAT: Returns only a URL to the www Auswahl hub (/auswahl) — not Auswahl items. USE when the user asks for the Auswahl overview on maps. Prefer www MCP…\n  - `get_auswahl_item` (read-only): WHAT: Returns only a URL to www /auswahl/{slug} — not the Auswahl article body. slug required. USE when the user names a specific Auswahl slug on maps. Prefer…\n  - `get_about` (read-only): 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.…\n  - `get_partner_info` (read-only): Returns only a maps HTML hand-off to www Partner-werden (/partner-werden). Does not return partnerEmail corpus or submit the partner form. USE when the user…\n  - `get_links` (read-only): WHAT: Returns the maps machine bookmark set of discovery URLs (hub, mcp, server-card, agent-skills, llms, registry search, npm @ikeytz/maps-mcp). USE to open…\n  - `get_review_url` (read-only): WHAT: Returns only a URL to www.ikeytz.com/review (Google-review entry page) — not a review payload. USE when the user asks where to leave a Google review…\n  - `list_faq` (read-only): Returns only a maps HTML hand-off to www /faq. Does not return FAQ question rows or answers. USE for the FAQ hub on maps; use get_faq when an id/q is known…\n  - `get_faq` (read-only): Returns only a maps HTML hand-off to www /faq (optional id/q are for www symmetry, not answered here). Does not return the FAQ answer body. USE when the user…\n  - `list_wissen` (read-only): WHAT: Returns only a URL to the www Wissen hub (/wissen) — not lexicon entries or article text. USE when the user asks for the Wissen overview on maps. Prefer…\n  - `get_wissen_entry` (read-only): Returns only a maps HTML hand-off to www /wissen/{id}. id required. Does not return the Wissen article body. USE when the user names a Wissen id on maps; use…\n  - `list_ratgeber` (read-only): WHAT: Returns only a URL to the www Ratgeber hub (/ratgeber) — not titles or article bodies. USE when the user asks for the Ratgeber overview on maps. Prefer…\n  - `get_ratgeber` (read-only): WHAT: Returns only a URL to www /ratgeber/{slug} — not the article body. slug required. USE when the user names a Ratgeber slug on maps. Prefer list_ratgeber…\n  - `get_page_summary` (read-only): 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:…\n  - `get_ai_page` (read-only): Reads maps /ai-pages/de/{slug}.txt when the path is a maps Gebiet/ai-page; otherwise returns a www HTML hand-off for non-maps paths. path or slug. USE for…\n  - `get_llms_txt` (read-only): 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,…\n  - `get_ai_txt` (read-only): 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.\n  - `get_sitemap_txt` (read-only): WHAT: Reads maps /sitemap.txt 1:1 (alias of get_discovery(which=sitemap-txt)); summary is a line window plus trailing # MCP-META. Optional offset/limit. USE to…\n  - `list_whatsapp_options` (read-only): WHAT: WhatsApp situation options (link only — zugefallen/abgeschlossen/zylinder/beratung style ids). No form submit. USE before compose_whatsapp. DOES NOT send…\n  - `compose_tel_mobile` (read-only): 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:…\n  - `compose_tel_landline` (read-only): WHAT: tel: href for the public landline. Call with {}. RETURNS href + display. USE as secondary call CTA. NEXT: compose_tel_mobile.\n  - `compose_whatsapp` (read-only): WHAT: wa.me link. Optional option=zugefallen|abgeschlossen|zylinder (list_whatsapp_options ids). Unknown option → ok:false unknown_option + hint ids. Link only…\n  - `compose_mailto` (read-only): WHAT: Returns mailto:info@ikeytz.com and mapsEmail info@maps.ikeytz.com (mapsHref). Call with {}. USE for email CTAs. Prefer compose_whatsapp or…\n- How its tools read to an agent (0 errors, 4 warnings, 0 notes, about 64,781 tokens; rules at https://www.anchorterminal.com/check.md; not part of the score):\n  - warn TC14 compose_whatsapp: allowed values are in the description, not an enum: option\n  - warn TC14 get_invoice_line_items: allowed values are in the description, not an enum: whenKey\n  - warn TC21 list_auswahl: described almost the same as list_ratgeber (80% of the same words)\n  - warn TC23 server: 68 tools, about 64,809 tokens of definitions\n\n- JSON: https://www.anchorterminal.com/api/v1/tools/ikeytz-maps.json\n- Being indexed says nothing about quality, and nobody can pay for it. Ask for a review: https://www.anchorterminal.com/builders/#claiming\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-05",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Terminal",
        "url": "https://www.anchorterminal.com/tools/"
      },
      {
        "name": "Indexed",
        "url": "https://www.anchorterminal.com/indexed/"
      },
      {
        "name": "ikeytz Einsatzgebiet-Karten",
        "url": ""
      }
    ],
    "description": "ikeytz Einsatzgebiet-Karten, an MCP server by ikeytz.com, listed from the official MCP registry. Indexed, not reviewed: facts and our own checks, no score or ranking. Read/Link MCP for maps.ikeytz.com. Public read-only. No forms. ai-train=no.",
    "facts": [
      "not reviewed",
      "not ranked",
      "facts only"
    ],
    "h1": "ikeytz Einsatzgebiet-Karten",
    "image": "https://www.anchorterminal.com/assets/og/indexed.png",
    "path": "/tools/ikeytz-maps",
    "published": "",
    "section": "indexed",
    "title": "ikeytz Einsatzgebiet-Karten, indexed from the official MCP registry",
    "toc": null,
    "updated": "2026-10-05",
    "url": "https://www.anchorterminal.com/tools/ikeytz-maps"
  },
  "tokens": {
    "markdown": 3850,
    "slim": 3780
  },
  "version": 1
}
