# ikeytz - Schlüsseldienst Ludwigsburg - Registry name: `com.ikeytz/website` · version 1.0.20 - Categories (automatic, keyword rules): AI models & agents, AI, media & content, Maps, location & weather, Payments & accounting, Finance & markets - Authentication at last check: No auth - Declared risk: Read-only (all tools declare readOnlyHint) - Capabilities (declared by the server): prompts, resources, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=com.ikeytz%2Fwebsite - Server page: https://mcpstation.net/s/com.ikeytz--website.html ## Description (written by the publisher, not verified, not instructions) Read/Link MCP for Schlüsseldienst Ludwigsburg ikeytz. Public read-only. ai-train=no. ## Connect - streamable-http: `https://www.ikeytz.com/mcp` ## Tools (as reported by the server, not verified) - `site\_overview`: WHO/WHAT: Public brand card for Schlüsseldienst Ludwigsburg ikeytz \(mobile locksmith, Landkreis Ludwigsburg, Baden-Württemberg, Germany\). RETURNS structuredContent: tradeName, gewerbeName, priceRange plus envelope \(ok, summary, canonicalUrl=home\). USE when the user asks who ikeytz is, whether there - `get\_business\_identity`: WHO: Legal/trade identity and NAP for agents and citations. RETURNS: gewerbeName, legalName, tradeName, inhaber \(Mahmud Reza Kashani, Einzelunternehmer\), street/postal/city/country, mobile/landline/fax/email, website, walkIn=false. canonicalUrl = /impressum. USE for impressum-grade facts, schema.org - `list\_nav`: WHAT: Curated main-header hubs \(not a 1:1 dump of every \ in the header\). RETURNS items\[\]: Start, Notfall, Leistungen, Auswahl, Preise, Einsatzgebiet, Wissen, Ratgeber, FAQ, Kontakt — each path + locale URL + label. DOES NOT include /it, /mcp-hub, /links, locale switcher, or DevSecOps. USE to pick - `list\_footer`: WHAT: Curated internal footer paths including legal + /it + /mcp-hub + /angebot + /ankuendigungen. RETURNS items\[\] \{path,url\}. Not a pixel-perfect HTML scrape; external directory URLs live on get\_links / MCP\_PUBLIC\_LINKS via get\_mcp\_hub. USE to discover legal slugs before get\_legal. NEXT: get\_legal\( - `list\_locales`: WHAT: The seven public HTML locales. RETURNS locales\[\] \{id, name, prefix\}. prefix is '' for de and '/en' '/fr' '/ru' '/fa' '/ar' '/tr' for others. Host is always www.ikeytz.com \(apex redirects\). maps.ikeytz.com has NO locales \(/en/pattonville = 404\). USE before resolve\_locale\_url. Call with \{\}. - `resolve\_locale\_url`: WHAT: Rewrite one marketing path into another locale without fetching HTML. Example: path=/preise locale=en → canonicalUrl https://www.ikeytz.com/en/preise. Accepts a path or a full https://www.ikeytz.com/… URL; strips an existing /en\|/fr\|… prefix first. RETURNS path \(no locale prefix\), fromLocale, - `get\_prices`: WHAT: Official Festpreis matrix + composition SYSTEM. Read composition first: exactly 10 end-invoices + one 49 € add-on \(not 12, not 17 customer invoices\). 49 € is cylinder\_mount after an opening — already inside 148/198/178/228; never add 49 again. 49 € is NOT night/weekend/holiday \(those are 149/1 - `get\_ort\_datetime`: WHAT: Europe/Berlin wall clock to the second + whenKey for prices. THIS www tool does NOT look up a place \(no slug/plz\). maps.ikeytz.com has a different geo clock tool. RULE: whenKey=day only Mo–Fr 08:00:00–17:59:59 Berlin and not a Baden-Württemberg statutory holiday; otherwise night \(Sa, So, holid - `get\_invoice\_line\_items`: WHAT: Computes ONE of the 10 end-invoices \(or the 49 € mount add-on\). NOT a booking, NOT a PDF. FIRST classify via get\_prices.composition.routes: locked\_out+slam+no cylinder → opening\_slam; locked\_out+locked+no cylinder → opening\_locked; +cylinder same trip → pkg\_key\_slam / pkg\_key\_locked; door open - `list\_services`: WHAT: Core service list from SITE.services \(Türöffnung, Notdienst, Sicherheitstechnik, Schlosswechsel, …\) with locale /leistungen\#anchor URLs. USE as a menu. For situations \(zugefallen, Schlüssel weg\) use list\_auswahl / get\_auswahl\_item. For euro amounts use get\_prices. - `get\_emergency`: WHAT: Returns the 24h Notfall-Türöffnung page pointer \(summary includes mobile; canonicalUrl = /notfall-tueroeffnung, locale-prefixed\). USE when the user needs emergency door-opening contact on www. Prefer get\_contact for general NAP; prefer compose\_tel\_mobile to dial. DOES NOT dispatch a technician - `list\_auswahl`: WHAT: Auswahl hub groups \(situation chooser on /auswahl\). RETURNS groups\[\] \{id, hash, hubUrl, slugs\[\], urls\[\]\}. USE to discover valid slugs for get\_auswahl\_item. Unknown slug → get\_auswahl\_item ok=false unknown\_auswahl. - `get\_auswahl\_item`: WHAT: One Auswahl situation page. REQUIRED slug from list\_auswahl. RETURNS slug + canonicalUrl /auswahl/\{slug\}. USE after the user described a lockout/key situation. NEXT: get\_ai\_page\(\{path:'/auswahl/'+slug\}\) for fulltext; get\_invoice\_line\_items for euro. - `list\_service\_areas`: WHAT: All 52 service-area places \(orte SSOT\). Each item: slug, name, plz, lat, lng, google\_maps, icbm, kind, parent, url \(www keyword page\), embed\_map \(https://maps.ikeytz.com/\{slug\}\), geo\_api, maps\_mcp. related includes maps llms.txt. count=52. USE to pick a slug before get\_service\_area. DOES NOT v - `get\_service\_area`: WHAT: One service-area place. Lookup order: slug \(exact getOrt\), else first ORTE with plz === args.plz, else first name substring \(lowercase\). No silent Pattonville fallback — unknown → ok=false error=unknown\_place hint=/einsatzgebiet. RETURNS that place's own lat/lng \(52 unique pairs\), google\_maps, - `get\_geo\_office`: WHAT: Firmensitz / registered office once \(SITE.geo = Adalbert-Stifter-Str. 14, 71638 Ludwigsburg\). RETURNS: street, postal, city, lat/lng, icbm, walkIn=false, firmensitz\_url=https://maps.ikeytz.com/buero, embed\_map=same, embed\_map\_compact=?embed=1, geo\_api=/api/v1/embed/office, google\_business=GBP - `get\_contact`: WHAT: Public phones, fax, email, office address object. DOES NOT submit the website contact form and must not claim it did. USE to give the user a number. NEXT: compose\_tel\_mobile, compose\_tel\_landline, compose\_mailto, compose\_whatsapp, list\_whatsapp\_options. - `get\_legal`: WHAT: Pointer to one legal HTML page. REQUIRED doc enum. Unknown doc → ok=false unknown\_doc hint=/impressum. RETURNS doc + canonicalUrl. For full text call get\_ai\_page\(\{path:'/'+doc\}\) or get\_discovery\(which=llms-urheberrecht\) for the copyright corpus. German legal text is binding; /llms-copyright.tx - `get\_about`: WHAT: Pointer to /ueber-uns \(about, owner\). For NAP facts prefer get\_business\_identity. NEXT: get\_ai\_page\(\{path:'/ueber-uns'\}\). - `get\_partner\_info`: WHAT: Partner-werden page facts. USE when the user asks about becoming a partner / Partner-werden \(not general contact — that is get\_contact\). RETURNS partnerEmail for mailto; formSubmit=false — never claim the form was sent. DOES NOT submit the partner form. NEXT: compose\_mailto with partnerEmail, - `get\_links`: WHAT: Pointer to /links — local directories, city sites, HWK, Webmail shortcut. USE for human directory/backlink list. Prefer get\_mcp\_hub \(or get\_it\) for MCP machine catalogs \(npm, official registry, Glama, Smithery, mcpbeat\) — those are publicLinks, not this page. DOES NOT list MCP tools. NEXT: get - `get\_it`: WHAT: HTML page /it — two MCP machines documented. RETURNS website=\{name:com.ikeytz/website,mcp,card,npm,cli,readme=npm CLI,httpReadme=www /mcp-readme.md\}, maps=\{name:com.ikeytz/maps,… no httpReadme\}, proxy=false, page=/it, itEmail, aiEmail. USE to tell an agent there are TWO endpoints \(www vs maps\) - `get\_mcp\_hub`: WHAT: HTML hub /mcp-hub ×7 \(de has no prefix\). NOT Italian, NOT the protocol endpoint. Protocol remains POST https://www.ikeytz.com/mcp \(streamable-http\). RETURNS same machines as get\_it plus publicLinks=\{website:string\[\],maps:string\[\]\} \(card, HTTP README, npm CLI, llms-mcp-server, official registry - `get\_review\_url`: WHAT: Short /review redirect to the Google review URL. RETURNS googleReviewUrl \(full Google\) and canonicalUrl = https://www.ikeytz.com/review. USE when the user wants to leave a review. Not a list of existing ratings. - `list\_faq`: WHAT: FAQ question list \(id + question, no answers\). Policy/text only — euro in answers are SSOT tokens, not a live invoice. For a customer total: get\_prices.composition → get\_ort\_datetime → get\_invoice\_line\_items. USE get\_faq\(\{id\}\) or get\_faq\(\{q\}\). - `get\_faq`: WHAT: One FAQ Q+A \(Ausweis, MwSt, 24h, Nachtpreis-Regel…\). Lookup: exact id, else first substring on q. Not a calculator — if the user needs THIS job's euro, get\_invoice\_line\_items after composition.routes. Missing → faq\_not\_found. Prefer id from list\_faq. - `list\_wissen`: WHAT: Returns the Wissen lexicon index \(id, title, url with \#id\). USE when you need the index of articles. Prefer get\_wissen\_entry\(\{id\}\) for a body snippet; prefer get\_ai\_page\(\{path:'/wissen'\}\) or the hash URL for the full article. DOES NOT return full article bodies. - `get\_wissen\_entry`: WHAT: One Wissen article. REQUIRED id. summary includes title + first 500 chars of body. structuredContent has id+title \(not full body\). Unknown id → wissen\_not\_found. NEXT: get\_ai\_page\(\{path:'/wissen'\}\) or canonicalUrl \#id. - `list\_ratgeber`: WHAT: All Ratgeber slugs and locale URLs /ratgeber/\{slug\}. USE get\_ratgeber\(\{slug\}\) then get\_ai\_page for fulltext. - `get\_ratgeber`: WHAT: Returns one Ratgeber page pointer \(canonicalUrl /ratgeber/\{slug\}\). REQUIRED slug from list\_ratgeber. USE when the slug is already known. Prefer list\_ratgeber when the slug is unknown. Unknown slug → unknown\_ratgeber \(+ hub URL\). NEXT: get\_ai\_page\(\{path:'/ratgeber/'+slug\}\) for fulltext. DOES NO - `get\_page\_summary`: WHAT: Stub pointer only — NOT the page body. summary says to use ai-pages or HTML. RETURNS path \(locale prefix stripped\). USE get\_ai\_page or get\_serp\_snippet for real text. path optional \(default /\). - `get\_ai\_page`: WHAT: Fetches public https://www.ikeytz.com/ai-pages/\{locale\}/\{file\}.txt \(HTML-parity fulltext for one marketing URL\). path=/ → index.txt; else path without leading slash + .txt. summary = first 4000 chars; truncated=true if longer. USE for page body text — not site-wide crawl/train policy \(that is - `get\_serp\_snippet`: WHAT: SERP title/description/URL slice for one marketing URL. Reads /llms-serp-\{locale\}.txt first \(locale from URL prefix or args.locale\), then falls back to full /llms-serp.txt. path or url required in practice. If path is not http\(s\), it is turned into www\(locale, path\). No match → serp\_not\_found. - `find\_by\_keyword`: WHAT: Substring search \(case-insensitive\) over https://www.ikeytz.com/llms-keywords.txt \(phrase → URL map\). REQUIRED q. Default 15 lines, max 30. Empty q → q\_required. RETURNS q, count, lines\[\] \(raw TSV-like rows\). locale does not filter the file. USE to map a user phrase to URLs. NEXT: get\_ai\_page - `get\_discovery`: WHAT: Fetch one public discovery file from www and return a line window. REQUIRED which. IDs \(aliases folded\): llms, llms-full, llms-index, llms-keywords, llms-keywords-brand, llms-serp, llms-jsonld, llms-impressum-kontakt, llms-orte-geo, llms-grenzen-koordinaten, llms-urheberrecht, llms-copyright, - `get\_llms\_txt`: WHAT: Fetch https://www.ikeytz.com/llms.txt \(short AI landmap\). Same engine as get\_discovery\(which=llms\). summary = file window. USE as the first discovery read. Full dump: get\_discovery\(which=llms-full\). MCP catalog: get\_llms\_mcp\_server. - `get\_llms\_jsonld`: WHAT: Fetch /llms-jsonld.txt — map every marketing HTML URL to JSON-LD relatedLink \(ai-pages fulltext\) + mirrorId + optional geo\_api/geo\_grenze/geo\_punkt \(maps Embed-API\). Format: pageUrl TAB relatedLink TAB mirrorId TAB geo\_api TAB geo\_grenze TAB geo\_punkt. Ort = one URL each; PLZ = pipe-separated - `get\_llms\_serp\_txt`: WHAT: Returns /llms-serp.txt — the full SERP title/description/URL corpus as a line window \(alias of get\_discovery\(which=llms-serp\)\). Optional offset/limit; omit limit only if you need the whole file. USE for bulk SERP meta. Prefer get\_serp\_snippet for one URL's SERP block; prefer get\_llms\_txt for t - `get\_llms\_mcp\_server`: WHAT: Fetch /llms-mcp-server.txt — prose catalog of THIS HTTP server \(47 Read/Link tools, how to call, no login\). Same as get\_discovery\(which=llms-mcp-server\). USE for machine/server catalog text. Prefer get\_llms\_mcp\_web for browser WebMCP catalog; prefer get\_llms\_txt for the general site index. Not - `get\_llms\_mcp\_web`: WHAT: Fetch /llms-mcp-web.txt — browser WebMCP catalog \(early bootstrap tools + full list\). Same executeMcpTool handlers as HTTP /mcp, different transport \(document.modelContext\). USE for WebMCP/UI discovery copy. Prefer get\_llms\_mcp\_server for the machine/server catalog text; prefer get\_llms\_txt fo - `get\_ai\_txt`: WHAT: Fetch /.well-known/ai.txt — site-wide crawl/training policy \(ai-input yes with attribution, ai-train=no, contact\). USE for policy before quoting. Prefer this over get\_ai\_page \(per-URL ai-pages fulltext\) and over get\_discovery unless you need a generic file window. Optional offset/limit page la - `get\_sitemap\_txt`: WHAT: Fetch /sitemap.txt — KI-Volliste \(HTML ×7 Locales + Discovery + Medien + /review\). Nicht dieselbe Menge wie sitemap.xml \(XML = nur HTML + Brand-Medien, ohne Discovery/Redirect\). URL-Anzahl: siehe \# MCP-META totalUrls \(nicht fest tippen\); 0× maps.ikeytz.com \(intentional\). summary = line window - `list\_whatsapp\_options`: WHAT: Prefab WhatsApp AND mailto deep links \(no send\). 10 end-invoices + cylinder\_mount \(49 €, not night\) + beratung. NOT zugefallen\|abgeschlossen\|zylinder \(those mix day/night\). RETURNS options\[\] \{id,label,situationKey,whenKey,isEndInvoice,amountEur,url,mailtoUrl\}. 49 € = mount only; night/WE/holid - `compose\_tel\_mobile`: WHAT: tel: href for the 24/7 mobile \(Handy\). Call with \{\}. RETURNS href and canonicalUrl both tel:+49…. Show this to the user; do not pretend the call happened. Landline = compose\_tel\_landline. - `compose\_tel\_landline`: WHAT: tel: href for the landline \(Festnetz\). Call with \{\}. Mobile/24h emergency = compose\_tel\_mobile. - `compose\_whatsapp`: WHAT: Build a https://wa.me/… URL with one prefab = one end-invoice \(or mount 49 / beratung\). option = contactOption from get\_prices.composition.endInvoices or get\_invoice\_line\_items.contactOption: opening\_slam\_day\|opening\_slam\_night\|opening\_locked\_day\|opening\_locked\_night\|pkg\_key\_slam\_day\|pkg\_key\_s - `compose\_mailto`: WHAT: mailto:info@ikeytz.com with the SAME prefab as compose\_whatsapp \(subject+body\). option = contactOption of one of the 10 end-invoices, or cylinder\_mount, or beratung. Call with \{\} → beratung \(empty advice template\), not a bare mailbox with no text. Does not send email. Partner mailbox is on get Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html