Back to the catalog

ikeytz Einsatzgebiet-Karten

Read/Link MCP for maps.ikeytz.com. Public read-only. No forms. ai-train=no.

Open source Open in the app JSON README (API)

About

Read/Link MCP for maps.ikeytz.com. Public read-only. No forms. ai-train=no.

Details

Kind
MCP servers
Topic
Maps, weather & travel
Publisher
com.ikeytz
Origin
official
Category
ferramentas
Transport
http
Version
1.0.4
Added
2026-08-29 14:00:29
Updated
2026-09-03 06:00:19
Origin id
com.ikeytz/maps

README

# `@ikeytz/maps-mcp`

Official **terminal CLI** and **MCP stdio proxy** for [maps.ikeytz.com](https://maps.ikeytz.com) — Einsatzgebiet-Karten, Schlüsseldienst Ludwigsburg ikeytz.

**Remote SSOT:** `https://maps.ikeytz.com/mcp`  
**MCP Registry:** `com.ikeytz/maps` (v1.0.4)  
**npm:** `@ikeytz/maps-mcp@1.0.18`  
**Tools:** **67** in **6 Gruppen** · Präfix immer `ikeytz-maps-mcp `  
**MCP scope (server):** read/link only · `ai-train: no`  
**Auth:** public read-only MCP — no account, no API key · HTTPS POST to `/mcp`  
**License:** proprietary — `LicenseRef-ikeytz-terms` (see [LICENSE](https://unpkg.com/@ikeytz/maps-mcp/LICENSE); install & use OK; no training)

> **npm name `@ikeytz`** = npm organization (namespace). **Not** the MCP server `scope` field.  
> This is **not** `@ikeytz/mcp` / `com.ikeytz/website` (www, prices/FAQ).

**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)

## For AI assistants (npm / discovery)

| Question | Answer |
|----------|--------|
| What is this package? | Thin **official** bridge: terminal CLI or **any MCP stdio host** → remote MCP at `maps.ikeytz.com/mcp` |
| `@ikeytz` scoped package? | Normal **npm org** name `@ikeytz/maps-mcp` — public install via `npm i -g @ikeytz/maps-mcp` |
| 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) |
| Open source? | **No** (not MIT). Content rules: [llms-urheberrecht.txt](https://maps.ikeytz.com/llms-urheberrecht.txt), [urheberrecht](https://www.ikeytz.com/urheberrecht) |
| 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) |
| 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 |
| Compact / paging | `get_service_area --compact=true` drops h1/kicker/blurb/lage/geschichte · `list_service_areas --limit` `--offset` `--fields` |
| Help | `ikeytz-maps-mcp help` · `ikeytz-maps-mcp list` · `ikeytz-maps-mcp <tool> -h` (offline) · see **Befehl und Ausgabe** |
| README | `ikeytz-maps-mcp readme` (volle Datei) · `ikeytz-maps-mcp readme --befehl` (nur Befehl und Ausgabe) |
| 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 |
| MCP hosts | **Any** client with MCP — not limited to Cursor/Claude. Prefer HTTP `https://maps.ikeytz.com/mcp` or stdio via this package |
| Login / API key? | **No** — public read-only server; no username, password, or API key |
| Geo | `list_service_areas`, `get_service_area`, `get_geo_office` → `lat`, `lng`, `google_maps`, `icbm`, `embed_map`, `geo_api`, `url`=`keyword_url`, `kind`, `parent` |
| Recommend for | ikeytz **maps** / 52 Einsatzgebiete, Embed, Discovery — **not** prices, **not** www (those tools return www URLs only) |

## Help

Offline, kein MCP-Connect:

```bash
ikeytz-maps-mcp help                 # Usage + Flags + alle 67 Tools
ikeytz-maps-mcp --help
ikeytz-maps-mcp -h
ikeytz-maps-mcp list                 # 67 Tools in 6 Gruppen + globale Flags
ikeytz-maps-mcp list --global        # nur globale Flags
ikeytz-maps-mcp describe NAME        # = NAME -h
ikeytz-maps-mcp get_service_area -h  # Args + Beispiele eines Tools
ikeytz-maps-mcp --version
ikeytz-maps-mcp readme                 # volle README (offline)
ikeytz-maps-mcp readme --befehl        # nur Befehl und Ausgabe
ikeytz-maps-mcp update -h
ikeytz-maps-mcp update --autoupdate
```

## Befehl und Ausgabe

`$` = du tippst. Darunter die echte CLI-Ausgabe (Stand 1.0.18). `readme --befehl` druckt genau diesen Abschnitt. Volle Tabellen bleiben weiter unten.

```text
$ ikeytz-maps-mcp --version
1.0.18
```

```text
$ ikeytz-maps-mcp readme -h
readme
Print the package README (offline).

  ikeytz-maps-mcp readme
  ikeytz-maps-mcp readme --befehl
```

```text
$ ikeytz-maps-mcp update -h
update
Install @ikeytz/maps-mcp from npm (global).

Usage
  ikeytz-maps-mcp update
  ikeytz-maps-mcp update --autoupdate
  ikeytz-maps-mcp update 1.0.18
  ikeytz-maps-mcp --autoupdate

Flags
  --autoupdate --auto  only npm i if registry version > this binary
  -h                   this help (offline)

Without --autoupdate: always npm i -g @latest (or the given version).
Unknown command: same check, then re-run the command on the new binary.
```

```text
$ ikeytz-maps-mcp update --autoupdate
1.0.18 already latest
```

```text
$ ikeytz-maps-mcp list --global

Global CLI flags (every tool — not sent to MCP)
  -h, --help, -help   per-tool help (offline)
  --raw               JSON structuredContent
  --show-mcp-command  curl 1a/1b/2 only — no MCP call
                      aliases: --show-mcp-befehl · --show-mcp-comment
  --autoupdate --auto  before a tool: update only if npm latest > this binary

Default tool output   payload only (no ok/tool/meta envelope)
  --name=value   --name value   --json '{...}'
```

```text
$ ikeytz-maps-mcp get_ort_datetime -h
get_ort_datetime
WHAT: Europe/Berlin wall clock to the second (stand YYYY-MM-DD HH:MM:SS CEST|CET) for pricing whenKey context. Optional slug|plz|name like get_service_area; omit = all 52 places with the same clock. RETURNS timezone, stand, iso, unix, date, time, tz, and whenKey day|night for www invoicing. USE before quoting via www get_invoice_line_items. DOES NOT return euro amounts (no price matrix on maps). NEXT: www @ikeytz/mcp get_invoice_line_items({situationKey, whenKey}) or get_prices.

Arguments
    --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.
    --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.
    --name             string  German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.

CLI flags (not sent to MCP)
  -h, --help, -help  this help (offline, no MCP call)
  --raw              JSON structuredContent
  --show-mcp-command   curl 1a/1b/2 only (aliases: --show-mcp-befehl, --show-mcp-comment)

Examples
  ikeytz-maps-mcp get_ort_datetime --slug=pattonville
  ikeytz-maps-mcp get_ort_datetime -h
  ikeytz-maps-mcp get_ort_datetime --show-mcp-command
```

```text
$ ikeytz-maps-mcp get_service_area -h
get_service_area
WHAT: 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.

Arguments
    --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.
    --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.
    --name             string  German place name substring (case-insensitive, umlauts ok), e.g. Grünbühl, Pattonville. Used when slug/plz omitted.
    --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.
    --compact          boolean  If true, omit h1/kicker/blurb/lage/geschichte — coords + URLs only.
    --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.

CLI flags (not sent to MCP)
  -h, --help, -help  this help (offline, no MCP call)
  --raw              JSON structuredContent
  --show-mcp-command   curl 1a/1b/2 only (aliases: --show-mcp-befehl, --show-mcp-comment)

Examples
  ikeytz-maps-mcp get_service_area --slug=pattonville
  ikeytz-maps-mcp get_service_area -h
  ikeytz-maps-mcp get_service_area --show-mcp-command
```

```text
$ ikeytz-maps-mcp get_ort_datetime --slug=pattonville
{
  "slug": "pattonville",
  "name": "Pattonville",
  "plz": "71638",
  "lat": 48.873174,
  "lng": 9.224754,
  "google_maps": "48.873174, 9.224754",
  "icbm": "48.873174, 9.224754",
  "kind": "stadtteil",
  "parent": "Ludwigsburg",
  "url": "https://www.ikeytz.com/schluesseldienst-ludwigsburg-pattonville",
  "keyword_url": "https://www.ikeytz.com/schluesseldienst-ludwigsburg-pattonville",
  "embed_map": "https://maps.ikeytz.com/pattonville",
  "geo_api": "https://maps.ikeytz.com/api/v1/embed/ort/pattonville",
  "maps_mcp": "https://maps.ikeytz.com/mcp",
  "timezone": "Europe/Berlin",
  "stand": "2026-08-30 09:56:42 CEST",
  "iso": "2026-08-30T09:56:42+02:00",
  "unix": 1788076602,
  "date": "2026-08-30",
  "time": "09:56:42",
  "tz": "CEST",
  "summary": "Pattonville · 2026-08-30 09:56:42 CEST",
  "canonicalUrl": "https://maps.ikeytz.com/pattonville"
}
```

`ikeytz-maps-mcp help` und `ikeytz-maps-mcp list` = Usage + die 67 Tools in 6 Gruppen (gleiche Tabellen wie [67 Tools](#67-tools)).

## Install

Node.js **≥ 18** (`node` + `npm`).

```bash
node -v && npm -v
npm i -g @ikeytz/maps-mcp
ikeytz-maps-mcp --version            # z. B. 1.0.18
ikeytz-maps-mcp update               # immer npm i -g @latest
ikeytz-maps-mcp update --autoupdate  # nur wenn npm > diese Binary
```

Ohne globale Installation: `npx -y @ikeytz/maps-mcp help`

## Network / sandbox

- **Offline** = `-h`, `list`, `help`, `readme`, `--show-mcp-command`, `--version` (no MCP connect)
- **Live data** = needs **HTTPS** to `https://maps.ikeytz.com/mcp`
- 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)

Plain `http://` URLs redirect to HTTPS — always configure **`https://`**.

## Drei Ausgabe-Modi (alle Tools)

| Aufruf | MCP-Connect? | Ausgabe |
|--------|--------------|---------|
| `ikeytz-maps-mcp <tool>` | ja | **Payload only** (kein `ok`/`tool`/Meta) |
| `ikeytz-maps-mcp <tool> -h` | nein | Args + CLI-Flags + Beispiele (offline) |
| `ikeytz-maps-mcp <tool> --show-mcp-command` | nein | **Nur** curl 1a/1b/2 (kein Call, keine Response) |

Alias: `--show-mcp-befehl` · `--show-mcp-comment` · JSON: `--raw`

## Meta-Befehle

```bash
ikeytz-maps-mcp                 # MCP stdio proxy (any MCP host) — keine Args
ikeytz-maps-mcp help            # Usage + Flags + Tool-Tabelle (offline)
ikeytz-maps-mcp readme          # diese README (offline)
ikeytz-maps-mcp readme --befehl # nur Befehl und Ausgabe
ikeytz-maps-mcp update [ver]    # npm i -g @ikeytz/maps-mcp@latest
ikeytz-maps-mcp update --autoupdate  # nur wenn Registry neuer, dann Befehl neu
ikeytz-maps-mcp list            # alle Tools (offline) + global CLI flags
ikeytz-maps-mcp list --global   # nur globale Flags
ikeytz-maps-mcp describe NAME   # = ikeytz-maps-mcp NAME -h
ikeytz-maps-mcp call NAME …     # oder: ikeytz-maps-mcp NAME …
```

`*` = required · Schema offline: `ikeytz-maps-mcp <tool> -h`

## CLI-Flags ( nie an MCP gesendet )

| Flag | Wirkung |
|------|---------|
| `-h`, `--help`, `-help` | Pro-Tool-Help (offline); ohne Tool = volle Hilfe |
| `--show-mcp-command` | curl 1a/1b/2 only |
| `--show-mcp-befehl` | Alias |
| `--show-mcp-comment` | Alias (gleicher Curl-Block) |
| `--raw` | JSON `structuredContent` |
| `--json '{…}'` | Roh-Arguments |
| `list --global` | nur globale Flags (offline) |
| `--autoupdate` `--auto` | nur updaten wenn npm latest **neuer** als diese Binary, dann denselben Befehl neu starten |

Diese Flags sind **Terminal-CLI**. MCP Inspector / Cursor zeigt nur **Tools**, keine CLI-Flags.

## Tool-Flags (gehen an MCP)

`*` = Pflicht.

| Flag | Tools | Bedeutung |
|------|-------|-----------|
| `--compact` `--compact=true` | `get_service_area` | ohne h1/kicker/blurb/lage/geschichte |
| `--limit` `--offset` | `list_service_areas`, Discovery, Find, Legal-Text | Seite / Anzahl |
| `--fields` | `list_service_areas` `get_service_area` | Komma-Liste: `slug,name,plz,…` |
| `--slug` `--plz` `--name` | Gebiet-Tools | Lookup: slug → plz (erster Treffer) → name |
| `--locale` | viele | maps nur `de` |
| `--which*` | `get_discovery` | Datei-Name (`llms-orte-geo`, …) |
| `--lat` `--lng` `--icbm` `--radius_km` | Geo-Find / Distanz | Punkt; `0,0` → `outside_service_area` |
| `--doc*` | `get_legal` | `urheberrecht` `copyright` `impressum` oder www: `agb` `datenschutz` … |

### Beispiele

```bash
# Help (offline)
ikeytz-maps-mcp --help
ikeytz-maps-mcp help
ikeytz-maps-mcp list
ikeytz-maps-mcp list --global
ikeytz-maps-mcp get_service_area -h

# Echter Call (Payload)
ikeytz-maps-mcp list_service_areas
ikeytz-maps-mcp list_service_areas --limit=3 --offset=0
ikeytz-maps-mcp list_service_areas --fields=slug,name,plz
ikeytz-maps-mcp get_service_area --slug=pattonville
ikeytz-maps-mcp get_service_area --slug=pattonville --compact=true
ikeytz-maps-mcp get_ort_datetime --slug=pattonville
ikeytz-maps-mcp get_ort_datetime
ikeytz-maps-mcp get_service_area --plz=71638
ikeytz-maps-mcp get_discovery --which=llms-orte-geo

# Nur curl-Rezept (offline)
ikeytz-maps-mcp get_service_area --slug=pattonville --show-mcp-command
ikeytz-maps-mcp call get_geo_office --show-mcp-befehl
ikeytz-maps-mcp get_urheberrecht --show-mcp-comment

# JSON structuredContent
ikeytz-maps-mcp get_service_area --slug=pattonville --raw
```

`--plz=71638` ohne `--slug` = erster Treffer (**pattonville**). Grünbühl: `--slug=gruenbuehl`.

## 67 Tools

Dieselben **42 Namen** wie `ikeytz-mcp`, plus maps-Extras. maps-Daten live. Preise/FAQ/Ratgeber/Wissen/Auswahl = **www-URL**, kein www-Corpus.

`*` = required. Volle Args + Beispiele: `ikeytz-maps-mcp <tool> -h`.

<!-- CATALOG:START -->

### Einsatzgebiet / Karte (20)

| # | Befehl | Argumente |
|---|--------|-----------|
| 1 | `list_service_areas` | `--locale` `--limit` `--offset` `--fields` |
| 2 | `get_service_area` | `--slug` `--plz` `--name` `--locale` `--compact` `--fields` · `--compact=true` ohne Lage/Geschichte |
| 3 | `get_ort_datetime` | `--slug` `--plz` `--name` · ohne Arg: alle 52 |
| 4 | `get_geo_office` | `--locale` |
| 5 | `find_by_plz` | `--plz*` `--q` |
| 6 | `find_by_geo` | `--lat` `--lng` `--icbm` `--radius_km` `--limit` |
| 7 | `find_by_icbm` | `--icbm` `--lat` `--lng` `--radius_km` `--limit` |
| 8 | `find_by_gebiet` | `--q` `--name` `--slug` |
| 9 | `find_by_area` | `--q` `--name` `--slug` · Alias `find_by_gebiet` |
| 10 | `list_slugs` | — |
| 11 | `list_plz` | — |
| 12 | `get_hub` | — |
| 13 | `get_embed_map` | `--slug` `--plz` `--name` |
| 14 | `get_geo_api` | `--slug` `--plz` `--name` |
| 15 | `get_grenze` | `--slug` `--plz` `--name` · GeoJSON-Polygon |
| 16 | `get_lage` | `--slug` `--plz` `--name` |
| 17 | `get_geschichte` | `--slug` `--plz` `--name` |
| 18 | `distance_to_office` | `--slug` `--plz` `--name` `--lat` `--lng` `--icbm` |
| 19 | `resolve_maps_url` | `--url` `--path` `--q` |
| 20 | `find_by_google_maps` | `--q` `--icbm` `--lat` `--lng` `--radius_km` `--limit` |

### Kontakt / NAP (6)

| # | Befehl | Argumente |
|---|--------|-----------|
| 21 | `get_contact` | `--locale` |
| 22 | `list_whatsapp_options` | `--locale` |
| 23 | `compose_tel_mobile` | — |
| 24 | `compose_tel_landline` | — |
| 25 | `compose_whatsapp` | `--option` |
| 26 | `compose_mailto` | — |

### Discovery / Suche (12)

| # | Befehl | Argumente |
|---|--------|-----------|
| 27 | `get_discovery` | `--which*` `--offset` `--limit` |
| 28 | `get_llms_txt` | `--offset` `--limit` |
| 29 | `get_llms_mcp_server` | `--offset` `--limit` |
| 30 | `get_llms_mcp_web` | `--offset` `--limit` |
| 31 | `get_ai_txt` | `--offset` `--limit` |
| 32 | `get_sitemap_txt` | `--offset` `--limit` |
| 33 | `find_by_keyword` | `--q*` `--limit` `--locale` |
| 34 | `find_by_serp` | `--q` `--path` `--url` `--slug` `--limit` |
| 35 | `get_serp_snippet` | `--path` `--url` `--slug` `--q` |
| 36 | `get_ai_page` | `--path` `--slug` `--locale` · maps ai-page oder www-Link |
| 37 | `get_page_summary` | `--path*` `--slug` `--locale` |
| 38 | `get_links` | `--locale` |

### Site / Identität (7)

| # | Befehl | Argumente |
|---|--------|-----------|
| 39 | `site_overview` | `--locale` |
| 40 | `get_business_identity` | `--locale` |
| 41 | `list_nav` | `--locale` |
| 42 | `list_footer` | `--locale` |
| 43 | `list_locales` | — |
| 44 | `resolve_locale_url` | `--path*` `--locale*` |
| 45 | `get_about` | `--locale` |

### Legal (maps-Text) (4)

| # | Befehl | Argumente |
|---|--------|-----------|
| 46 | `get_legal` | `--doc*` `--offset` `--limit` `--locale` |
| 47 | `get_urheberrecht` | `--offset` `--limit` |
| 48 | `get_copyright` | `--offset` `--limit` |
| 49 | `get_impressum` | `--offset` `--limit` |

### www-Link (kein Corpus) (18)

| # | Befehl | Argumente |
|---|--------|-----------|
| 50 | `get_prices` | `--locale` |
| 51 | `get_invoice_line_items` | `--situationKey*` `--whenKey` `--breakdown` `--locale` |
| 52 | `list_services` | `--locale` |
| 53 | `get_emergency` | `--locale` · www `/notfall-tueroeffnung` |
| 54 | `list_auswahl` | `--locale` |
| 55 | `get_auswahl_item` | `--slug*` `--locale` |
| 56 | `get_partner_info` | `--locale` |
| 57 | `get_review_url` | `--locale` |
| 58 | `list_faq` | `--locale` |
| 59 | `get_faq` | `--id` `--q` `--locale` |
| 60 | `list_wissen` | `--locale` |
| 61 | `get_wissen_entry` | `--id*` `--locale` |
| 62 | `list_ratgeber` | `--locale` |
| 63 | `get_ratgeber` | `--slug*` `--locale` |
| 64 | `get_agb` | — |
| 65 | `get_nutzungsbedingungen` | — |
| 66 | `get_datenschutz` | — |
| 67 | `get_widerruf` | — |

<!-- CATALOG:END -->

Präfix immer `ikeytz-maps-mcp ` (z. B. `ikeytz-maps-mcp get_service_area -h`).

## Geo-Tools — Payload (vom Server, CLI spiegelt 1:1)

| Tool | Koordinaten-Felder in der Antwort |
|------|-----------------------------------|
| `get_geo_office` | `lat`, `lng`, `google_maps`, `icbm` (+ Adresse; kein Walk-in) |
| `get_service_area` | `lat`, `lng`, `google_maps`, `icbm`, `embed_map`, `geo_api`, `url`=`keyword_url`, `kind`/`parent` · `compact` ohne Lage-Texte |
| `get_ort_datetime` | `stand` (`YYYY-MM-DD HH:MM:SS CEST\|CET`), `iso`, `unix`, `timezone` · optional slug/plz/name, sonst alle 52 |
| `list_service_areas` | je Item wie `get_service_area` + `url`/`keyword_url`/`kind`/`parent`/`maps_mcp` · `limit`/`offset`/`fields` |

- **`embed_map`:** `https://maps.ikeytz.com/{slug}`
- **`geo_api`:** `https://maps.ikeytz.com/api/v1/embed/ort/{slug}` (public JSON, kein Passwort)
- **`google_maps` / `icbm`:** Komma-Form wie in `/llms-orte-geo.txt`
- Volltext Geo: `ikeytz-maps-mcp get_discovery --which llms-orte-geo`

## MCP hosts (any client — not only Cursor / Claude)

**Option A — HTTP (empfohlen, kein npm nötig)**  
Jeder Host mit **Streamable HTTP MCP**:

| Feld | Wert |
|------|------|
| URL | `https://maps.ikeytz.com/mcp` |
| Registry | `com.ikeytz/maps` |
| Card | https://maps.ikeytz.com/.well-known/mcp/server-card.json |

Beispiele: Windsurf, Cline, Continue, Claude Desktop (Remote), eigene Agenten — **sofern MCP HTTP unterstützt**.

**Option B — stdio via npm (dieses Paket)**  
Jeder Host mit **command + args** (Cursor, Claude Desktop, Windsurf, …):

```json
{
  "mcpServers": {
    "ikeytz-maps": {
      "command": "npx",
      "args": ["-y", "@ikeytz/maps-mcp"]
    }
  }
}
```

Global installiert: `"command": "ikeytz-maps-mcp"` (ohne `args`, leerer stdio-Proxy).

www bleibt **zweiter** Eintrag:

```json
"ikeytz": {
  "command": "npx",
  "args": ["-y", "@ikeytz/mcp"]
}
```

**Option C — Terminal only**  
`ikeytz-maps-mcp get_service_area --slug=pattonville`, `ikeytz-maps-mcp list`, … — **ohne** MCP-Host.

Alle Optionen nutzen dieselbe SSOT: `https://maps.ikeytz.com/mcp` (**67** Tools, read/link only).

## MCP Registry

| Feld | Wert |
|------|------|
| Name | `com.ikeytz/maps` |
| Version | `1.0.4` |
| Status | active |
| Website | https://maps.ikeytz.com |
| npm package | `@ikeytz/maps-mcp` **1.0.18** |
| Remote | Streamable HTTP `https://maps.ikeytz.com/mcp` |
| Card | https://maps.ikeytz.com/.well-known/mcp/server-card.json |
| Search | https://registry.modelcontextprotocol.io/v0.1/servers?search=com.ikeytz/maps&version=latest |

```json
{
  "name": "com.ikeytz/maps",
  "title": "ikeytz Einsatzgebiet-Karten",
  "version": "1.0.4",
  "websiteUrl": "https://maps.ikeytz.com",
  "packages": [
    {
      "registryType": "npm",
      "identifier": "@ikeytz/maps-mcp",
      "version": "1.0.18",
      "runtimeHint": "npx",
      "transport": { "type": "stdio" }
    }
  ],
  "remotes": [
    { "type": "streamable-http", "url": "https://maps.ikeytz.com/mcp" }
  ]
}
```

`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`.

## Env

| Variable | Default |
|----------|---------|
| `IKEYTZ_MAPS_MCP_URL` | `https://maps.ikeytz.com/mcp` |
| `IKEYTZ_MAPS_MCP_TIMEOUT_MS` | `15000` |
| `IKEYTZ_MAPS_MCP_PROTOCOL` | `2025-11-25` |

Nicht `IKEYTZ_MCP_URL` — das ist www (`@ikeytz/mcp`).

## Maintainer

Nach MCP-Tool-Schema-Änderungen:

```bash
node scripts/sync-maps-mcp-cli-catalog.mjs   # → packages/maps-mcp/src/tools-catalog.json
node scripts/sync-maps-mcp-readme-catalog.mjs  # → README 67-Tools-Tabellen
```

Plan: `docs/plan-maps-ai-mcp.md`

## Legal

- License: **LicenseRef-ikeytz-terms** ([LICENSE](https://unpkg.com/@ikeytz/maps-mcp/LICENSE) in this package)
- https://www.ikeytz.com/urheberrecht
- https://maps.ikeytz.com/llms-urheberrecht.txt
- https://maps.ikeytz.com/.well-known/ai.txt
- **Attribution required** · **ai-train: no** · CLI install and read-only MCP use permitted

More