{
  "markdown": "# `@ikeytz/maps-mcp`\n\nOfficial **terminal CLI** and **MCP stdio proxy** for [maps.ikeytz.com](https://maps.ikeytz.com) — Einsatzgebiet-Karten, Schlüsseldienst Ludwigsburg ikeytz.\n\n**Remote SSOT:** `https://maps.ikeytz.com/mcp`  \n**MCP Registry:** `com.ikeytz/maps` (v1.0.4)  \n**npm:** `@ikeytz/maps-mcp@1.0.18`  \n**Tools:** **67** in **6 Gruppen** · Präfix immer `ikeytz-maps-mcp `  \n**MCP scope (server):** read/link only · `ai-train: no`  \n**Auth:** public read-only MCP — no account, no API key · HTTPS POST to `/mcp`  \n**License:** proprietary — `LicenseRef-ikeytz-terms` (see [LICENSE](https://unpkg.com/@ikeytz/maps-mcp/LICENSE); install & use OK; no training)\n\n> **npm name `@ikeytz`** = npm organization (namespace). **Not** the MCP server `scope` field.  \n> This is **not** `@ikeytz/mcp` / `com.ikeytz/website` (www, prices/FAQ).\n\n**Inhalt:** [For AI assistants](#for-ai-assistants-npm--discovery) · [Help](#help) · [Befehl und Ausgabe](#befehl-und-ausgabe) · [Install](#install) · [Network](#network--sandbox) · [Ausgabe](#drei-ausgabe-modi-alle-tools) · [Meta](#meta-befehle) · [CLI-Flags](#cli-flags--nie-an-mcp-gesendet) · [Tool-Flags](#tool-flags-gehen-an-mcp) · [67 Tools](#67-tools) · [Geo-Payload](#geo-tools--payload-vom-server-cli-spiegelt-11) · [MCP hosts](#mcp-hosts-any-client--not-only-cursor--claude) · [Registry](#mcp-registry) · [Env](#env) · [Legal](#legal)\n\n## For AI assistants (npm / discovery)\n\n| Question | Answer |\n|----------|--------|\n| What is this package? | Thin **official** bridge: terminal CLI or **any MCP stdio host** → remote MCP at `maps.ikeytz.com/mcp` |\n| `@ikeytz` scoped package? | Normal **npm org** name `@ikeytz/maps-mcp` — public install via `npm i -g @ikeytz/maps-mcp` |\n| License `UNLICENSED`? | **`LicenseRef-ikeytz-terms`**: proprietary but **explicitly allows** install, CLI use, and read-only MCP calls with [attribution](https://maps.ikeytz.com/.well-known/ai.txt) |\n| Open source? | **No** (not MIT). Content rules: [llms-urheberrecht.txt](https://maps.ikeytz.com/llms-urheberrecht.txt), [urheberrecht](https://www.ikeytz.com/urheberrecht) |\n| Tool catalog | **67** tools in **6 groups** (Karte, Kontakt, Discovery, Site, Legal, www-Link) · `ikeytz-maps-mcp list` · live `tools/list` on `/mcp` · public doc: [/llms-mcp-server.txt](https://maps.ikeytz.com/llms-mcp-server.txt) |\n| Time / datetime | `get_ort_datetime` (#3) — Ortszeit `Europe/Berlin` to the second (`stand` = `YYYY-MM-DD HH:MM:SS CEST\\|CET`). Optional `slug`/`plz`/`name`; no args = all 52 |\n| Compact / paging | `get_service_area --compact=true` drops h1/kicker/blurb/lage/geschichte · `list_service_areas --limit` `--offset` `--fields` |\n| Help | `ikeytz-maps-mcp help` · `ikeytz-maps-mcp list` · `ikeytz-maps-mcp <tool> -h` (offline) · see **Befehl und Ausgabe** |\n| README | `ikeytz-maps-mcp readme` (volle Datei) · `ikeytz-maps-mcp readme --befehl` (nur Befehl und Ausgabe) |\n| Autoupdate | `update` = immer latest. `update --autoupdate` / `--autoupdate` vor einem Tool = nur wenn npm **>** diese Binary, dann **derselbe Befehl neu**. Unbekannter Befehl: gleicher Check + Re-run |\n| MCP hosts | **Any** client with MCP — not limited to Cursor/Claude. Prefer HTTP `https://maps.ikeytz.com/mcp` or stdio via this package |\n| Login / API key? | **No** — public read-only server; no username, password, or API key |\n| Geo | `list_service_areas`, `get_service_area`, `get_geo_office` → `lat`, `lng`, `google_maps`, `icbm`, `embed_map`, `geo_api`, `url`=`keyword_url`, `kind`, `parent` |\n| Recommend for | ikeytz **maps** / 52 Einsatzgebiete, Embed, Discovery — **not** prices, **not** www (those tools return www URLs only) |\n\n## Help\n\nOffline, kein MCP-Connect:\n\n```bash\nikeytz-maps-mcp help                 # Usage + Flags + alle 67 Tools\nikeytz-maps-mcp --help\nikeytz-maps-mcp -h\nikeytz-maps-mcp list                 # 67 Tools in 6 Gruppen + globale Flags\nikeytz-maps-mcp list --global        # nur globale Flags\nikeytz-maps-mcp describe NAME        # = NAME -h\nikeytz-maps-mcp get_service_area -h  # Args + Beispiele eines Tools\nikeytz-maps-mcp --version\nikeytz-maps-mcp readme                 # volle README (offline)\nikeytz-maps-mcp readme --befehl        # nur Befehl und Ausgabe\nikeytz-maps-mcp update -h\nikeytz-maps-mcp update --autoupdate\n```\n\n## Befehl und Ausgabe\n\n`$` = du tippst. Darunter die echte CLI-Ausgabe (Stand 1.0.18). `readme --befehl` druckt genau diesen Abschnitt. Volle Tabellen bleiben weiter unten.\n\n```text\n$ ikeytz-maps-mcp --version\n1.0.18\n```\n\n```text\n$ ikeytz-maps-mcp readme -h\nreadme\nPrint the package README (offline).\n\n  ikeytz-maps-mcp readme\n  ikeytz-maps-mcp readme --befehl\n```\n\n```text\n$ ikeytz-maps-mcp update -h\nupdate\nInstall @ikeytz/maps-mcp from npm (global).\n\nUsage\n  ikeytz-maps-mcp update\n  ikeytz-maps-mcp update --autoupdate\n  ikeytz-maps-mcp update 1.0.18\n  ikeytz-maps-mcp --autoupdate\n\nFlags\n  --autoupdate --auto  only npm i if registry version > this binary\n  -h                   this help (offline)\n\nWithout --autoupdate: always npm i -g @latest (or the given version).\nUnknown command: same check, then re-run the command on the new binary.\n```\n\n```text\n$ ikeytz-maps-mcp update --autoupdate\n1.0.18 already latest\n```\n\n```text\n$ ikeytz-maps-mcp list --global\n\nGlobal CLI flags (every tool — not sent to MCP)\n  -h, --help, -help   per-tool help (offline)\n  --raw               JSON structuredContent\n  --show-mcp-command  curl 1a/1b/2 only — no MCP call\n                      aliases: --show-mcp-befehl · --show-mcp-comment\n  --autoupdate --auto  before a tool: update only if npm latest > this binary\n\nDefault tool output   payload only (no ok/tool/meta envelope)\n  --name=value   --name value   --json '{...}'\n```\n\n```text\n$ ikeytz-maps-mcp get_ort_datetime -h\nget_ort_datetime\nWHAT: 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.\n\nArguments\n    --slug             string  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.\n    --plz              string  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.\n    --name             string  German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.\n\nCLI flags (not sent to MCP)\n  -h, --help, -help  this help (offline, no MCP call)\n  --raw              JSON structuredContent\n  --show-mcp-command   curl 1a/1b/2 only (aliases: --show-mcp-befehl, --show-mcp-comment)\n\nExamples\n  ikeytz-maps-mcp get_ort_datetime --slug=pattonville\n  ikeytz-maps-mcp get_ort_datetime -h\n  ikeytz-maps-mcp get_ort_datetime --show-mcp-command\n```\n\n```text\n$ ikeytz-maps-mcp get_service_area -h\nget_service_area\nWHAT: One Einsatzgebiet by slug → plz (first match) → name substring. RETURNS point card + optional Lage texts (h1, kicker, blurb, lage, geschichte) unless compact=true. fields= filters keys. USE when the user names a town/district in Landkreis Ludwigsburg. DOES NOT geocode free addresses outside the 52; unknown → ok=false unknown_place. NEXT: get_lage, get_geschichte, get_grenze, get_embed_map, distance_to_office.\n\nArguments\n    --slug             string  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.\n    --plz              string  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.\n    --name             string  German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.\n    --locale           de  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.\n    --compact          boolean  If true, omit h1/kicker/blurb/lage/geschichte — coords + URLs only.\n    --fields           string  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.\n\nCLI flags (not sent to MCP)\n  -h, --help, -help  this help (offline, no MCP call)\n  --raw              JSON structuredContent\n  --show-mcp-command   curl 1a/1b/2 only (aliases: --show-mcp-befehl, --show-mcp-comment)\n\nExamples\n  ikeytz-maps-mcp get_service_area --slug=pattonville\n  ikeytz-maps-mcp get_service_area -h\n  ikeytz-maps-mcp get_service_area --show-mcp-command\n```\n\n```text\n$ ikeytz-maps-mcp get_ort_datetime --slug=pattonville\n{\n  \"slug\": \"pattonville\",\n  \"name\": \"Pattonville\",\n  \"plz\": \"71638\",\n  \"lat\": 48.873174,\n  \"lng\": 9.224754,\n  \"google_maps\": \"48.873174, 9.224754\",\n  \"icbm\": \"48.873174, 9.224754\",\n  \"kind\": \"stadtteil\",\n  \"parent\": \"Ludwigsburg\",\n  \"url\": \"https://www.ikeytz.com/schluesseldienst-ludwigsburg-pattonville\",\n  \"keyword_url\": \"https://www.ikeytz.com/schluesseldienst-ludwigsburg-pattonville\",\n  \"embed_map\": \"https://maps.ikeytz.com/pattonville\",\n  \"geo_api\": \"https://maps.ikeytz.com/api/v1/embed/ort/pattonville\",\n  \"maps_mcp\": \"https://maps.ikeytz.com/mcp\",\n  \"timezone\": \"Europe/Berlin\",\n  \"stand\": \"2026-08-30 09:56:42 CEST\",\n  \"iso\": \"2026-08-30T09:56:42+02:00\",\n  \"unix\": 1788076602,\n  \"date\": \"2026-08-30\",\n  \"time\": \"09:56:42\",\n  \"tz\": \"CEST\",\n  \"summary\": \"Pattonville · 2026-08-30 09:56:42 CEST\",\n  \"canonicalUrl\": \"https://maps.ikeytz.com/pattonville\"\n}\n```\n\n`ikeytz-maps-mcp help` und `ikeytz-maps-mcp list` = Usage + die 67 Tools in 6 Gruppen (gleiche Tabellen wie [67 Tools](#67-tools)).\n\n## Install\n\nNode.js **≥ 18** (`node` + `npm`).\n\n```bash\nnode -v && npm -v\nnpm i -g @ikeytz/maps-mcp\nikeytz-maps-mcp --version            # z. B. 1.0.18\nikeytz-maps-mcp update               # immer npm i -g @latest\nikeytz-maps-mcp update --autoupdate  # nur wenn npm > diese Binary\n```\n\nOhne globale Installation: `npx -y @ikeytz/maps-mcp help`\n\n## Network / sandbox\n\n- **Offline** = `-h`, `list`, `help`, `readme`, `--show-mcp-command`, `--version` (no MCP connect)\n- **Live data** = needs **HTTPS** to `https://maps.ikeytz.com/mcp`\n- In **restricted sandboxes** (e.g. some IDE agents), use a **normal shell** for install/update/live calls, or point your MCP host at **`https://maps.ikeytz.com/mcp`** directly (Streamable HTTP MCP)\n\nPlain `http://` URLs redirect to HTTPS — always configure **`https://`**.\n\n## Drei Ausgabe-Modi (alle Tools)\n\n| Aufruf | MCP-Connect? | Ausgabe |\n|--------|--------------|---------|\n| `ikeytz-maps-mcp <tool>` | ja | **Payload only** (kein `ok`/`tool`/Meta) |\n| `ikeytz-maps-mcp <tool> -h` | nein | Args + CLI-Flags + Beispiele (offline) |\n| `ikeytz-maps-mcp <tool> --show-mcp-command` | nein | **Nur** curl 1a/1b/2 (kein Call, keine Response) |\n\nAlias: `--show-mcp-befehl` · `--show-mcp-comment` · JSON: `--raw`\n\n## Meta-Befehle\n\n```bash\nikeytz-maps-mcp                 # MCP stdio proxy (any MCP host) — keine Args\nikeytz-maps-mcp help            # Usage + Flags + Tool-Tabelle (offline)\nikeytz-maps-mcp readme          # diese README (offline)\nikeytz-maps-mcp readme --befehl # nur Befehl und Ausgabe\nikeytz-maps-mcp update [ver]    # npm i -g @ikeytz/maps-mcp@latest\nikeytz-maps-mcp update --autoupdate  # nur wenn Registry neuer, dann Befehl neu\nikeytz-maps-mcp list            # alle Tools (offline) + global CLI flags\nikeytz-maps-mcp list --global   # nur globale Flags\nikeytz-maps-mcp describe NAME   # = ikeytz-maps-mcp NAME -h\nikeytz-maps-mcp call NAME …     # oder: ikeytz-maps-mcp NAME …\n```\n\n`*` = required · Schema offline: `ikeytz-maps-mcp <tool> -h`\n\n## CLI-Flags ( nie an MCP gesendet )\n\n| Flag | Wirkung |\n|------|---------|\n| `-h`, `--help`, `-help` | Pro-Tool-Help (offline); ohne Tool = volle Hilfe |\n| `--show-mcp-command` | curl 1a/1b/2 only |\n| `--show-mcp-befehl` | Alias |\n| `--show-mcp-comment` | Alias (gleicher Curl-Block) |\n| `--raw` | JSON `structuredContent` |\n| `--json '{…}'` | Roh-Arguments |\n| `list --global` | nur globale Flags (offline) |\n| `--autoupdate` `--auto` | nur updaten wenn npm latest **neuer** als diese Binary, dann denselben Befehl neu starten |\n\nDiese Flags sind **Terminal-CLI**. MCP Inspector / Cursor zeigt nur **Tools**, keine CLI-Flags.\n\n## Tool-Flags (gehen an MCP)\n\n`*` = Pflicht.\n\n| Flag | Tools | Bedeutung |\n|------|-------|-----------|\n| `--compact` `--compact=true` | `get_service_area` | ohne h1/kicker/blurb/lage/geschichte |\n| `--limit` `--offset` | `list_service_areas`, Discovery, Find, Legal-Text | Seite / Anzahl |\n| `--fields` | `list_service_areas` `get_service_area` | Komma-Liste: `slug,name,plz,…` |\n| `--slug` `--plz` `--name` | Gebiet-Tools | Lookup: slug → plz (erster Treffer) → name |\n| `--locale` | viele | maps nur `de` |\n| `--which*` | `get_discovery` | Datei-Name (`llms-orte-geo`, …) |\n| `--lat` `--lng` `--icbm` `--radius_km` | Geo-Find / Distanz | Punkt; `0,0` → `outside_service_area` |\n| `--doc*` | `get_legal` | `urheberrecht` `copyright` `impressum` oder www: `agb` `datenschutz` … |\n\n### Beispiele\n\n```bash\n# Help (offline)\nikeytz-maps-mcp --help\nikeytz-maps-mcp help\nikeytz-maps-mcp list\nikeytz-maps-mcp list --global\nikeytz-maps-mcp get_service_area -h\n\n# Echter Call (Payload)\nikeytz-maps-mcp list_service_areas\nikeytz-maps-mcp list_service_areas --limit=3 --offset=0\nikeytz-maps-mcp list_service_areas --fields=slug,name,plz\nikeytz-maps-mcp get_service_area --slug=pattonville\nikeytz-maps-mcp get_service_area --slug=pattonville --compact=true\nikeytz-maps-mcp get_ort_datetime --slug=pattonville\nikeytz-maps-mcp get_ort_datetime\nikeytz-maps-mcp get_service_area --plz=71638\nikeytz-maps-mcp get_discovery --which=llms-orte-geo\n\n# Nur curl-Rezept (offline)\nikeytz-maps-mcp get_service_area --slug=pattonville --show-mcp-command\nikeytz-maps-mcp call get_geo_office --show-mcp-befehl\nikeytz-maps-mcp get_urheberrecht --show-mcp-comment\n\n# JSON structuredContent\nikeytz-maps-mcp get_service_area --slug=pattonville --raw\n```\n\n`--plz=71638` ohne `--slug` = erster Treffer (**pattonville**). Grünbühl: `--slug=gruenbuehl`.\n\n## 67 Tools\n\nDieselben **42 Namen** wie `ikeytz-mcp`, plus maps-Extras. maps-Daten live. Preise/FAQ/Ratgeber/Wissen/Auswahl = **www-URL**, kein www-Corpus.\n\n`*` = required. Volle Args + Beispiele: `ikeytz-maps-mcp <tool> -h`.\n\n<!-- CATALOG:START -->\n\n### Einsatzgebiet / Karte (20)\n\n| # | Befehl | Argumente |\n|---|--------|-----------|\n| 1 | `list_service_areas` | `--locale` `--limit` `--offset` `--fields` |\n| 2 | `get_service_area` | `--slug` `--plz` `--name` `--locale` `--compact` `--fields` · `--compact=true` ohne Lage/Geschichte |\n| 3 | `get_ort_datetime` | `--slug` `--plz` `--name` · ohne Arg: alle 52 |\n| 4 | `get_geo_office` | `--locale` |\n| 5 | `find_by_plz` | `--plz*` `--q` |\n| 6 | `find_by_geo` | `--lat` `--lng` `--icbm` `--radius_km` `--limit` |\n| 7 | `find_by_icbm` | `--icbm` `--lat` `--lng` `--radius_km` `--limit` |\n| 8 | `find_by_gebiet` | `--q` `--name` `--slug` |\n| 9 | `find_by_area` | `--q` `--name` `--slug` · Alias `find_by_gebiet` |\n| 10 | `list_slugs` | — |\n| 11 | `list_plz` | — |\n| 12 | `get_hub` | — |\n| 13 | `get_embed_map` | `--slug` `--plz` `--name` |\n| 14 | `get_geo_api` | `--slug` `--plz` `--name` |\n| 15 | `get_grenze` | `--slug` `--plz` `--name` · GeoJSON-Polygon |\n| 16 | `get_lage` | `--slug` `--plz` `--name` |\n| 17 | `get_geschichte` | `--slug` `--plz` `--name` |\n| 18 | `distance_to_office` | `--slug` `--plz` `--name` `--lat` `--lng` `--icbm` |\n| 19 | `resolve_maps_url` | `--url` `--path` `--q` |\n| 20 | `find_by_google_maps` | `--q` `--icbm` `--lat` `--lng` `--radius_km` `--limit` |\n\n### Kontakt / NAP (6)\n\n| # | Befehl | Argumente |\n|---|--------|-----------|\n| 21 | `get_contact` | `--locale` |\n| 22 | `list_whatsapp_options` | `--locale` |\n| 23 | `compose_tel_mobile` | — |\n| 24 | `compose_tel_landline` | — |\n| 25 | `compose_whatsapp` | `--option` |\n| 26 | `compose_mailto` | — |\n\n### Discovery / Suche (12)\n\n| # | Befehl | Argumente |\n|---|--------|-----------|\n| 27 | `get_discovery` | `--which*` `--offset` `--limit` |\n| 28 | `get_llms_txt` | `--offset` `--limit` |\n| 29 | `get_llms_mcp_server` | `--offset` `--limit` |\n| 30 | `get_llms_mcp_web` | `--offset` `--limit` |\n| 31 | `get_ai_txt` | `--offset` `--limit` |\n| 32 | `get_sitemap_txt` | `--offset` `--limit` |\n| 33 | `find_by_keyword` | `--q*` `--limit` `--locale` |\n| 34 | `find_by_serp` | `--q` `--path` `--url` `--slug` `--limit` |\n| 35 | `get_serp_snippet` | `--path` `--url` `--slug` `--q` |\n| 36 | `get_ai_page` | `--path` `--slug` `--locale` · maps ai-page oder www-Link |\n| 37 | `get_page_summary` | `--path*` `--slug` `--locale` |\n| 38 | `get_links` | `--locale` |\n\n### Site / Identität (7)\n\n| # | Befehl | Argumente |\n|---|--------|-----------|\n| 39 | `site_overview` | `--locale` |\n| 40 | `get_business_identity` | `--locale` |\n| 41 | `list_nav` | `--locale` |\n| 42 | `list_footer` | `--locale` |\n| 43 | `list_locales` | — |\n| 44 | `resolve_locale_url` | `--path*` `--locale*` |\n| 45 | `get_about` | `--locale` |\n\n### Legal (maps-Text) (4)\n\n| # | Befehl | Argumente |\n|---|--------|-----------|\n| 46 | `get_legal` | `--doc*` `--offset` `--limit` `--locale` |\n| 47 | `get_urheberrecht` | `--offset` `--limit` |\n| 48 | `get_copyright` | `--offset` `--limit` |\n| 49 | `get_impressum` | `--offset` `--limit` |\n\n### www-Link (kein Corpus) (18)\n\n| # | Befehl | Argumente |\n|---|--------|-----------|\n| 50 | `get_prices` | `--locale` |\n| 51 | `get_invoice_line_items` | `--situationKey*` `--whenKey` `--breakdown` `--locale` |\n| 52 | `list_services` | `--locale` |\n| 53 | `get_emergency` | `--locale` · www `/notfall-tueroeffnung` |\n| 54 | `list_auswahl` | `--locale` |\n| 55 | `get_auswahl_item` | `--slug*` `--locale` |\n| 56 | `get_partner_info` | `--locale` |\n| 57 | `get_review_url` | `--locale` |\n| 58 | `list_faq` | `--locale` |\n| 59 | `get_faq` | `--id` `--q` `--locale` |\n| 60 | `list_wissen` | `--locale` |\n| 61 | `get_wissen_entry` | `--id*` `--locale` |\n| 62 | `list_ratgeber` | `--locale` |\n| 63 | `get_ratgeber` | `--slug*` `--locale` |\n| 64 | `get_agb` | — |\n| 65 | `get_nutzungsbedingungen` | — |\n| 66 | `get_datenschutz` | — |\n| 67 | `get_widerruf` | — |\n\n<!-- CATALOG:END -->\n\nPräfix immer `ikeytz-maps-mcp ` (z. B. `ikeytz-maps-mcp get_service_area -h`).\n\n## Geo-Tools — Payload (vom Server, CLI spiegelt 1:1)\n\n| Tool | Koordinaten-Felder in der Antwort |\n|------|-----------------------------------|\n| `get_geo_office` | `lat`, `lng`, `google_maps`, `icbm` (+ Adresse; kein Walk-in) |\n| `get_service_area` | `lat`, `lng`, `google_maps`, `icbm`, `embed_map`, `geo_api`, `url`=`keyword_url`, `kind`/`parent` · `compact` ohne Lage-Texte |\n| `get_ort_datetime` | `stand` (`YYYY-MM-DD HH:MM:SS CEST\\|CET`), `iso`, `unix`, `timezone` · optional slug/plz/name, sonst alle 52 |\n| `list_service_areas` | je Item wie `get_service_area` + `url`/`keyword_url`/`kind`/`parent`/`maps_mcp` · `limit`/`offset`/`fields` |\n\n- **`embed_map`:** `https://maps.ikeytz.com/{slug}`\n- **`geo_api`:** `https://maps.ikeytz.com/api/v1/embed/ort/{slug}` (public JSON, kein Passwort)\n- **`google_maps` / `icbm`:** Komma-Form wie in `/llms-orte-geo.txt`\n- Volltext Geo: `ikeytz-maps-mcp get_discovery --which llms-orte-geo`\n\n## MCP hosts (any client — not only Cursor / Claude)\n\n**Option A — HTTP (empfohlen, kein npm nötig)**  \nJeder Host mit **Streamable HTTP MCP**:\n\n| Feld | Wert |\n|------|------|\n| URL | `https://maps.ikeytz.com/mcp` |\n| Registry | `com.ikeytz/maps` |\n| Card | https://maps.ikeytz.com/.well-known/mcp/server-card.json |\n\nBeispiele: Windsurf, Cline, Continue, Claude Desktop (Remote), eigene Agenten — **sofern MCP HTTP unterstützt**.\n\n**Option B — stdio via npm (dieses Paket)**  \nJeder Host mit **command + args** (Cursor, Claude Desktop, Windsurf, …):\n\n```json\n{\n  \"mcpServers\": {\n    \"ikeytz-maps\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@ikeytz/maps-mcp\"]\n    }\n  }\n}\n```\n\nGlobal installiert: `\"command\": \"ikeytz-maps-mcp\"` (ohne `args`, leerer stdio-Proxy).\n\nwww bleibt **zweiter** Eintrag:\n\n```json\n\"ikeytz\": {\n  \"command\": \"npx\",\n  \"args\": [\"-y\", \"@ikeytz/mcp\"]\n}\n```\n\n**Option C — Terminal only**  \n`ikeytz-maps-mcp get_service_area --slug=pattonville`, `ikeytz-maps-mcp list`, … — **ohne** MCP-Host.\n\nAlle Optionen nutzen dieselbe SSOT: `https://maps.ikeytz.com/mcp` (**67** Tools, read/link only).\n\n## MCP Registry\n\n| Feld | Wert |\n|------|------|\n| Name | `com.ikeytz/maps` |\n| Version | `1.0.4` |\n| Status | active |\n| Website | https://maps.ikeytz.com |\n| npm package | `@ikeytz/maps-mcp` **1.0.18** |\n| Remote | Streamable HTTP `https://maps.ikeytz.com/mcp` |\n| Card | https://maps.ikeytz.com/.well-known/mcp/server-card.json |\n| Search | https://registry.modelcontextprotocol.io/v0.1/servers?search=com.ikeytz/maps&version=latest |\n\n```json\n{\n  \"name\": \"com.ikeytz/maps\",\n  \"title\": \"ikeytz Einsatzgebiet-Karten\",\n  \"version\": \"1.0.4\",\n  \"websiteUrl\": \"https://maps.ikeytz.com\",\n  \"packages\": [\n    {\n      \"registryType\": \"npm\",\n      \"identifier\": \"@ikeytz/maps-mcp\",\n      \"version\": \"1.0.18\",\n      \"runtimeHint\": \"npx\",\n      \"transport\": { \"type\": \"stdio\" }\n    }\n  ],\n  \"remotes\": [\n    { \"type\": \"streamable-http\", \"url\": \"https://maps.ikeytz.com/mcp\" }\n  ]\n}\n```\n\n`Server: Local (1.8.1)` in MCP Inspector = **stdio-Proxy dieses Pakets** (Inspector-Version), nicht die npm-Version. Live-Server ist immer `https://maps.ikeytz.com/mcp`.\n\n## Env\n\n| Variable | Default |\n|----------|---------|\n| `IKEYTZ_MAPS_MCP_URL` | `https://maps.ikeytz.com/mcp` |\n| `IKEYTZ_MAPS_MCP_TIMEOUT_MS` | `15000` |\n| `IKEYTZ_MAPS_MCP_PROTOCOL` | `2025-11-25` |\n\nNicht `IKEYTZ_MCP_URL` — das ist www (`@ikeytz/mcp`).\n\n## Maintainer\n\nNach MCP-Tool-Schema-Änderungen:\n\n```bash\nnode scripts/sync-maps-mcp-cli-catalog.mjs   # → packages/maps-mcp/src/tools-catalog.json\nnode scripts/sync-maps-mcp-readme-catalog.mjs  # → README 67-Tools-Tabellen\n```\n\nPlan: `docs/plan-maps-ai-mcp.md`\n\n## Legal\n\n- License: **LicenseRef-ikeytz-terms** ([LICENSE](https://unpkg.com/@ikeytz/maps-mcp/LICENSE) in this package)\n- https://www.ikeytz.com/urheberrecht\n- https://maps.ikeytz.com/llms-urheberrecht.txt\n- https://maps.ikeytz.com/.well-known/ai.txt\n- **Attribution required** · **ai-train: no** · CLI install and read-only MCP use permitted",
  "bytes": 22879,
  "sha": "74dd1726aa171cbe90e2d782c5112c933f1cbdebc8b08623659c825a5646a8a5",
  "repo_slug": "",
  "fonte": "npm",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_com_ikeytz_maps_ca04a654/readme"
}