{
  "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"
  },
  "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"
    ]
  }
}
