ikeytz – Schlüsseldienst Ludwigsburg
What this MCP does
Publishes read-only business information, locksmith pricing and service details, and links for phone, email, and WhatsApp contact.
Tools
Input schema
{'type': 'object', 'properties': {'option': {'enum': ['opening_slam_day', 'opening_slam_night', 'opening_locked_day', 'opening_locked_night', 'pkg_key_slam_day', 'pkg_key_slam_night', 'pkg_key_locked_day', 'pkg_key_locked_night', 'cylinder_only_day', 'cylinder_only_night', 'cylinder_mount', 'beratung', 'zugefallen', 'abgeschlossen', 'zylinder'], 'type': 'string', 'description': 'Same ids as compose_whatsapp. Omit = beratung template, still a prefab.'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'href': {'type': 'string', 'description': 'mailto:info@ikeytz.com?subject=…&body=…'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'option': {'type': 'string', 'description': 'Resolved contactOption id'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'subject': {'type': 'string'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'whenKey': {'type': ['string', 'null']}, 'ambiguous': {'type': 'boolean'}, 'amountEur': {'type': ['number', 'null']}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}, 'isEndInvoice': {'type': 'boolean'}, 'situationKey': {'type': ['string', 'null']}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {}, 'description': 'This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored. Result is always the same public href (tel/mailto) or locale list.', 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'href': {'type': 'string', 'description': 'tel:+49… landline'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {}, 'description': 'This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored. Result is always the same public href (tel/mailto) or locale list.', 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'href': {'type': 'string', 'description': 'tel:+49… mobile'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'option': {'enum': ['opening_slam_day', 'opening_slam_night', 'opening_locked_day', 'opening_locked_night', 'pkg_key_slam_day', 'pkg_key_slam_night', 'pkg_key_locked_day', 'pkg_key_locked_night', 'cylinder_only_day', 'cylinder_only_night', 'cylinder_mount', 'beratung', 'zugefallen', 'abgeschlossen', 'zylinder'], 'type': 'string', 'description': 'One invoice contactOption. Night/WE/holiday uses *_night (149/179/198/228/119), not 49. cylinder_mount is the 49 € add-on, not an end-invoice.'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'href': {'type': 'string', 'description': 'https://wa.me/… URL'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'option': {'type': 'string', 'description': 'Resolved contactOption id'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'whenKey': {'type': ['string', 'null']}, 'ambiguous': {'type': 'boolean'}, 'amountEur': {'type': ['number', 'null']}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}, 'isEndInvoice': {'type': 'boolean'}, 'situationKey': {'type': ['string', 'null']}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['q'], 'properties': {'q': {'type': 'string', 'minLength': 1, 'description': 'Required search substring. Matched against the entire keyword line (phrase and URLs).'}, 'limit': {'type': 'number', 'default': 15, 'maximum': 30, 'minimum': 1, 'description': 'Max matching lines. Default 15, hard max 30.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'q': {'type': 'string', 'description': 'Search query'}, 'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'count': {'type': 'number', 'description': 'Lines returned'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'lines': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Matching keyword rows'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['path'], 'properties': {'path': {'type': 'string', 'description': 'Required. Marketing path: / , /preise , /en/preise , /schluesseldienst-ludwigsburg-pattonville , /auswahl/tuer-zugefallen . Locale prefix in the path overrides args.locale if present.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'path': {'type': 'string', 'description': 'Resolved path'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'aiPageUrl': {'type': 'string', 'description': 'https://www.ikeytz.com/ai-pages/{locale}/….txt'}, 'truncated': {'type': 'boolean', 'description': 'true if body was cut at 4000 chars'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'number', 'maximum': 10000, 'minimum': 1, 'description': 'Maximum number of lines to return after offset. Omit or null = return every remaining line in the loaded file. Clamped to 1..10000. For sitemap.txt (~9076 http-URLs, Stand 2026-09-22) omit limit to get the full list (or page with offset/limit + nextOffset). For llms-keywords.txt prefer a window; the file is huge. Meta also as trailing # MCP-META lines in summary.'}, 'offset': {'type': 'number', 'default': 0, 'minimum': 0, 'description': '0-based line index into the fetched UTF-8 file (split on \\n). 0 = first line. Omit = 0. Combined with limit = a sliding window. Use nextOffset from the previous result to page. Does not count bytes; one line can be a long URL.'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'path': {'type': 'string', 'description': 'Public path on www, e.g. /llms.txt or /.well-known/ai.txt'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'limit': {'type': ['number', 'null'], 'description': 'Applied line limit, or null if the caller omitted limit.'}, 'which': {'type': 'string', 'description': 'Resolved discovery id after alias fold (llms, sitemap-txt, ard, ai-catalog, …).'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'offset': {'type': 'number', 'description': 'Applied 0-based line offset.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'totalUrls': {'type': 'number', 'description': 'http(s) lines in the loaded file (full count when public/ read succeeds).'}, 'truncated': {'type': 'boolean', 'description': 'true if load hit a byte cap OR offset+limit left more lines. Also mirrored in trailing # MCP-META lines in summary.'}, 'nextOffset': {'type': ['number', 'null'], 'description': 'offset + returnedLines when more lines remain in the loaded file; else null. Pass as the next offset. Also in # MCP-META.'}, 'totalBytes': {'type': 'number', 'description': 'Full origin file size when Content-Length is present (e.g. llms-keywords ~50MB); else character length of the downloaded body before the load cap. Also in # MCP-META.'}, 'totalChars': {'type': 'number', 'description': 'Character length of the downloaded body before applying discoveryFetchMax (may equal totalBytes for ASCII).'}, 'totalLines': {'type': 'number', 'description': 'Line count of the loaded file (full public/ file when available).'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}, 'returnedUrls': {'type': 'number', 'description': 'Lines in this window that start with http(s)://'}, 'bytesReturned': {'type': 'number', 'description': 'UTF-8 byte length of the returned body window (before # MCP-META).'}, 'returnedLines': {'type': 'number', 'description': 'How many lines are in summary/body this call (before # MCP-META).'}, 'fetchTruncated': {'type': 'boolean', 'description': 'true if discoveryFetchMax cut the load (line-boundary safe). Large discovery files (sitemap-xml ~12MB, llms-keywords ~55MB, llms-index ~2MB) must load full so offset/limit can reach EOF.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Required. ASCII slug from list_auswahl groups[].slugs, e.g. tuer-zugefallen, tuer-abgeschlossen, schluessel-verloren, schluessel-gestohlen, notdienst-oeffnung-zylinder. Not an Ort slug.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'slug': {'type': 'string', 'description': 'Resolved Auswahl slug'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'fax': {'type': 'string', 'description': 'Fax display number'}, 'city': {'type': 'string', 'description': 'City'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'email': {'type': 'string', 'description': 'Public email'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'mobile': {'type': 'string', 'description': 'Mobile display number'}, 'postal': {'type': 'string', 'description': 'Postal code'}, 'street': {'type': 'string', 'description': 'Office street (no walk-in)'}, 'walkIn': {'type': 'boolean', 'description': 'Always false — no shop walk-in'}, 'country': {'type': 'string', 'description': 'Country'}, 'inhaber': {'type': 'string', 'description': 'Owner full name'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'website': {'type': 'string', 'description': 'Canonical website URL'}, 'landline': {'type': 'string', 'description': 'Landline display number'}, 'legalName': {'type': 'string', 'description': 'Legal name'}, 'tradeName': {'type': 'string', 'description': 'Trade / SEO name'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'gewerbeName': {'type': 'string', 'description': 'Registered business name'}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'fax': {'type': 'string', 'description': 'Fax display.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'email': {'type': 'string', 'description': 'Public info@ email.'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'mobile': {'type': 'string', 'description': 'Mobile display (Handy), 24/7.'}, 'address': {'type': 'object', 'description': 'Office postal address (no walk-in).', 'additionalProperties': True}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'landline': {'type': 'string', 'description': 'Landline display (Festnetz).'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['which'], 'properties': {'limit': {'type': 'number', 'maximum': 10000, 'minimum': 1, 'description': 'Maximum number of lines to return after offset. Omit or null = return every remaining line in the loaded file. Clamped to 1..10000. For sitemap.txt (~9076 http-URLs, Stand 2026-09-22) omit limit to get the full list (or page with offset/limit + nextOffset). For llms-keywords.txt prefer a window; the file is huge. Meta also as trailing # MCP-META lines in summary.'}, 'which': {'type': 'string', 'description': 'Required discovery id or alias. Examples: llms, llms-full, llms-jsonld, llms-serp, llms-mcp-server, llms-mcp-web, sitemap-txt, robots, ai-txt, ard, ai-catalog, auth-md, mcp-readme, llms-orte-geo, llms-urheberrecht. Underscores accepted (llms_full → llms-full). get_ prefix and _txt suffix stripped.'}, 'offset': {'type': 'number', 'default': 0, 'minimum': 0, 'description': '0-based line index into the fetched UTF-8 file (split on \\n). 0 = first line. Omit = 0. Combined with limit = a sliding window. Use nextOffset from the previous result to page. Does not count bytes; one line can be a long URL.'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'path': {'type': 'string', 'description': 'Public path on www, e.g. /llms.txt or /.well-known/ai.txt'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'limit': {'type': ['number', 'null'], 'description': 'Applied line limit, or null if the caller omitted limit.'}, 'which': {'type': 'string', 'description': 'Resolved discovery id after alias fold (llms, sitemap-txt, ard, ai-catalog, …).'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'offset': {'type': 'number', 'description': 'Applied 0-based line offset.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'totalUrls': {'type': 'number', 'description': 'http(s) lines in the loaded file (full count when public/ read succeeds).'}, 'truncated': {'type': 'boolean', 'description': 'true if load hit a byte cap OR offset+limit left more lines. Also mirrored in trailing # MCP-META lines in summary.'}, 'nextOffset': {'type': ['number', 'null'], 'description': 'offset + returnedLines when more lines remain in the loaded file; else null. Pass as the next offset. Also in # MCP-META.'}, 'totalBytes': {'type': 'number', 'description': 'Full origin file size when Content-Length is present (e.g. llms-keywords ~50MB); else character length of the downloaded body before the load cap. Also in # MCP-META.'}, 'totalChars': {'type': 'number', 'description': 'Character length of the downloaded body before applying discoveryFetchMax (may equal totalBytes for ASCII).'}, 'totalLines': {'type': 'number', 'description': 'Line count of the loaded file (full public/ file when available).'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}, 'returnedUrls': {'type': 'number', 'description': 'Lines in this window that start with http(s)://'}, 'bytesReturned': {'type': 'number', 'description': 'UTF-8 byte length of the returned body window (before # MCP-META).'}, 'returnedLines': {'type': 'number', 'description': 'How many lines are in summary/body this call (before # MCP-META).'}, 'fetchTruncated': {'type': 'boolean', 'description': 'true if discoveryFetchMax cut the load (line-boundary safe). Large discovery files (sitemap-xml ~12MB, llms-keywords ~55MB, llms-index ~2MB) must load full so offset/limit can reach EOF.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'q': {'type': 'string', 'description': 'Fallback search. Lowercased includes() on question or answer. Use when the user asked in natural language.'}, 'id': {'type': 'string', 'description': 'FAQ id from list_faq.items[].id. Tried first if present.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'id': {'type': 'string', 'description': 'FAQ id'}, 'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'answer': {'type': 'string', 'description': 'Answer text'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'question': {'type': 'string', 'description': 'Question text'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'lat': {'type': 'number', 'description': 'WGS84 latitude of THIS place or the office. Unique per slug — never a silent Pattonville fallback. Example Pattonville ≈ 48.863.'}, 'lng': {'type': 'number', 'description': 'WGS84 longitude of THIS place or the office. Example Pattonville ≈ 9.185.'}, 'city': {'type': 'string', 'description': 'Office city (Ludwigsburg).'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'icbm': {'type': 'string', 'description': "ICBM 'lat, lng' string (same as google_maps)."}, 'note': {'type': 'string', 'description': 'Büro · kein Walk-in · nicht Einsatzgebiet.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'postal': {'type': 'string', 'description': 'Office PLZ.'}, 'street': {'type': 'string', 'description': 'Office street line.'}, 'walkIn': {'type': 'boolean', 'const': False, 'description': 'Always false.'}, 'geo_api': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/api/v1/embed/office JSON.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'maps_mcp': {'type': 'string', 'const': 'https://maps.ikeytz.com/mcp', 'format': 'uri', 'description': 'maps machine MCP endpoint.'}, 'embed_map': {'type': 'string', 'format': 'uri', 'description': 'Same as firmensitz_url (iframe-capable page).'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'google_maps': {'type': 'string', 'description': "Paste-ready 'lat, lng' for Google Maps search (same digits as lat/lng)."}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}, 'firmensitz_url': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/buero — Firmensitz map (not an Ort slug).'}, 'google_business': {'type': 'string', 'format': 'uri', 'description': 'Google Business Profile share link (external).'}, 'embed_map_compact': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/buero?embed=1 — map-only embed.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['situationKey'], 'properties': {'at': {'type': 'string', 'description': 'Optional. Same formats as get_ort_datetime.at. Only used when whenKey is now or omitted.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}, 'whenKey': {'enum': ['day', 'night', 'now'], 'type': 'string', 'description': 'day = Mo–Fr 08:00:00–17:59:59 Europe/Berlin except BW holidays. night = weekend, holiday, or 18:00–07:59. now or omit = live get_ort_datetime (or at=). Night is not +49 (49 is only cylinder_mount). Do not invent dusk/dawn.'}, 'breakdown': {'type': 'boolean', 'default': False, 'description': 'If true, pkg_key_slam / pkg_key_locked emit two rows (opening + cylinder_mount_same_trip) instead of one package row. Total euro unchanged.'}, 'situationKey': {'type': 'string', 'description': 'Required. From composition.routes: opening_slam | opening_locked | pkg_key_slam | pkg_key_locked | cylinder_only | cylinder_mount. Aliases: zugefallen, abgeschlossen, schluessel_weg_zugefallen. pkg_slam_only = opening_slam same euro.'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'whenKey': {'type': 'string', 'description': 'Resolved day|night'}, 'totalEur': {'type': 'number', 'description': 'End-invoice euro. Do not add VAT or extra 49.'}, 'line_items': {'type': 'array', 'description': 'Invoice rows'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'composition': {'type': 'object', 'description': 'Same SYSTEM as get_prices.composition — factors, routes, 10 invoices.'}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}, 'situationKey': {'type': 'string', 'description': 'Resolved situation id'}, 'contactOption': {'type': 'string', 'description': 'Prefab id for compose_whatsapp / compose_mailto (opening_slam_day … cylinder_only_night, or cylinder_mount).'}, 'situationLabelDe': {'type': 'string', 'description': 'German situation label'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'maps': {'type': 'object', 'properties': {'cli': {'type': 'string', 'description': 'CLI binary name, e.g. ikeytz-mcp'}, 'mcp': {'type': 'string', 'format': 'uri', 'description': 'HTTPS MCP endpoint …/mcp'}, 'npm': {'type': 'string', 'description': 'npm package name, e.g. @ikeytz/mcp — CLI only, not this HTTP server'}, 'card': {'type': 'string', 'format': 'uri', 'description': 'https://…/.well-known/mcp/server-card.json'}, 'name': {'type': 'string', 'description': 'MCP server name: com.ikeytz/website or com.ikeytz/maps'}, 'readme': {'type': 'string', 'format': 'uri', 'description': 'CLI README on npm — not the HTTP MCP README'}, 'httpReadme': {'type': 'string', 'format': 'uri', 'description': 'HTTP MCP README on the machine host (www: /mcp-readme.md). Not the npm CLI README. Maps has no www copy.'}}, 'description': 'maps machine com.ikeytz/maps'}, 'page': {'type': 'string', 'format': 'uri', 'description': 'Locale /it URL.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'proxy': {'type': 'boolean', 'const': False, 'description': 'www does not proxy maps.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'aiEmail': {'type': 'string', 'description': 'Public AI/abuse mailbox.'}, 'itEmail': {'type': 'string', 'description': 'Public IT contact mailbox.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'website': {'type': 'object', 'properties': {'cli': {'type': 'string', 'description': 'CLI binary name, e.g. ikeytz-mcp'}, 'mcp': {'type': 'string', 'format': 'uri', 'description': 'HTTPS MCP endpoint …/mcp'}, 'npm': {'type': 'string', 'description': 'npm package name, e.g. @ikeytz/mcp — CLI only, not this HTTP server'}, 'card': {'type': 'string', 'format': 'uri', 'description': 'https://…/.well-known/mcp/server-card.json'}, 'name': {'type': 'string', 'description': 'MCP server name: com.ikeytz/website or com.ikeytz/maps'}, 'readme': {'type': 'string', 'format': 'uri', 'description': 'CLI README on npm — not the HTTP MCP README'}, 'httpReadme': {'type': 'string', 'format': 'uri', 'description': 'HTTP MCP README on the machine host (www: /mcp-readme.md). Not the npm CLI README. Maps has no www copy.'}}, 'description': 'www machine com.ikeytz/website'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['doc'], 'properties': {'doc': {'enum': ['impressum', 'datenschutz', 'agb', 'nutzungsbedingungen', 'widerruf', 'urheberrecht'], 'type': 'string', 'description': 'Required legal slug = path /{doc}. impressum=imprint, datenschutz=privacy, agb=T&Cs, nutzungsbedingungen=site terms, widerruf=withdrawal, urheberrecht=copyright/AI policy.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'doc': {'type': 'string', 'description': 'Legal document id'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'number', 'maximum': 10000, 'minimum': 1, 'description': 'Maximum number of lines to return after offset. Omit or null = return every remaining line in the loaded file. Clamped to 1..10000. For sitemap.txt (~9076 http-URLs, Stand 2026-09-22) omit limit to get the full list (or page with offset/limit + nextOffset). For llms-keywords.txt prefer a window; the file is huge. Meta also as trailing # MCP-META lines in summary.'}, 'offset': {'type': 'number', 'default': 0, 'minimum': 0, 'description': '0-based line index into the fetched UTF-8 file (split on \\n). 0 = first line. Omit = 0. Combined with limit = a sliding window. Use nextOffset from the previous result to page. Does not count bytes; one line can be a long URL.'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'path': {'type': 'string', 'description': 'Public path on www, e.g. /llms.txt or /.well-known/ai.txt'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'limit': {'type': ['number', 'null'], 'description': 'Applied line limit, or null if the caller omitted limit.'}, 'which': {'type': 'string', 'description': 'Resolved discovery id after alias fold (llms, sitemap-txt, ard, ai-catalog, …).'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'offset': {'type': 'number', 'description': 'Applied 0-based line offset.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'totalUrls': {'type': 'number', 'description': 'http(s) lines in the loaded file (full count when public/ read succeeds).'}, 'truncated': {'type': 'boolean', 'description': 'true if load hit a byte cap OR offset+limit left more lines. Also mirrored in trailing # MCP-META lines in summary.'}, 'nextOffset': {'type': ['number', 'null'], 'description': 'offset + returnedLines when more lines remain in the loaded file; else null. Pass as the next offset. Also in # MCP-META.'}, 'totalBytes': {'type': 'number', 'description': 'Full origin file size when Content-Length is present (e.g. llms-keywords ~50MB); else character length of the downloaded body before the load cap. Also in # MCP-META.'}, 'totalChars': {'type': 'number', 'description': 'Character length of the downloaded body before applying discoveryFetchMax (may equal totalBytes for ASCII).'}, 'totalLines': {'type': 'number', 'description': 'Line count of the loaded file (full public/ file when available).'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}, 'returnedUrls': {'type': 'number', 'description': 'Lines in this window that start with http(s)://'}, 'bytesReturned': {'type': 'number', 'description': 'UTF-8 byte length of the returned body window (before # MCP-META).'}, 'returnedLines': {'type': 'number', 'description': 'How many lines are in summary/body this call (before # MCP-META).'}, 'fetchTruncated': {'type': 'boolean', 'description': 'true if discoveryFetchMax cut the load (line-boundary safe). Large discovery files (sitemap-xml ~12MB, llms-keywords ~55MB, llms-index ~2MB) must load full so offset/limit can reach EOF.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'number', 'maximum': 10000, 'minimum': 1, 'description': 'Maximum number of lines to return after offset. Omit or null = return every remaining line in the loaded file. Clamped to 1..10000. For sitemap.txt (~9076 http-URLs, Stand 2026-09-22) omit limit to get the full list (or page with offset/limit + nextOffset). For llms-keywords.txt prefer a window; the file is huge. Meta also as trailing # MCP-META lines in summary.'}, 'offset': {'type': 'number', 'default': 0, 'minimum': 0, 'description': '0-based line index into the fetched UTF-8 file (split on \\n). 0 = first line. Omit = 0. Combined with limit = a sliding window. Use nextOffset from the previous result to page. Does not count bytes; one line can be a long URL.'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'path': {'type': 'string', 'description': 'Public path on www, e.g. /llms.txt or /.well-known/ai.txt'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'limit': {'type': ['number', 'null'], 'description': 'Applied line limit, or null if the caller omitted limit.'}, 'which': {'type': 'string', 'description': 'Resolved discovery id after alias fold (llms, sitemap-txt, ard, ai-catalog, …).'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'offset': {'type': 'number', 'description': 'Applied 0-based line offset.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'totalUrls': {'type': 'number', 'description': 'http(s) lines in the loaded file (full count when public/ read succeeds).'}, 'truncated': {'type': 'boolean', 'description': 'true if load hit a byte cap OR offset+limit left more lines. Also mirrored in trailing # MCP-META lines in summary.'}, 'nextOffset': {'type': ['number', 'null'], 'description': 'offset + returnedLines when more lines remain in the loaded file; else null. Pass as the next offset. Also in # MCP-META.'}, 'totalBytes': {'type': 'number', 'description': 'Full origin file size when Content-Length is present (e.g. llms-keywords ~50MB); else character length of the downloaded body before the load cap. Also in # MCP-META.'}, 'totalChars': {'type': 'number', 'description': 'Character length of the downloaded body before applying discoveryFetchMax (may equal totalBytes for ASCII).'}, 'totalLines': {'type': 'number', 'description': 'Line count of the loaded file (full public/ file when available).'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}, 'returnedUrls': {'type': 'number', 'description': 'Lines in this window that start with http(s)://'}, 'bytesReturned': {'type': 'number', 'description': 'UTF-8 byte length of the returned body window (before # MCP-META).'}, 'returnedLines': {'type': 'number', 'description': 'How many lines are in summary/body this call (before # MCP-META).'}, 'fetchTruncated': {'type': 'boolean', 'description': 'true if discoveryFetchMax cut the load (line-boundary safe). Large discovery files (sitemap-xml ~12MB, llms-keywords ~55MB, llms-index ~2MB) must load full so offset/limit can reach EOF.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'number', 'maximum': 10000, 'minimum': 1, 'description': 'Maximum number of lines to return after offset. Omit or null = return every remaining line in the loaded file. Clamped to 1..10000. For sitemap.txt (~9076 http-URLs, Stand 2026-09-22) omit limit to get the full list (or page with offset/limit + nextOffset). For llms-keywords.txt prefer a window; the file is huge. Meta also as trailing # MCP-META lines in summary.'}, 'offset': {'type': 'number', 'default': 0, 'minimum': 0, 'description': '0-based line index into the fetched UTF-8 file (split on \\n). 0 = first line. Omit = 0. Combined with limit = a sliding window. Use nextOffset from the previous result to page. Does not count bytes; one line can be a long URL.'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'path': {'type': 'string', 'description': 'Public path on www, e.g. /llms.txt or /.well-known/ai.txt'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'limit': {'type': ['number', 'null'], 'description': 'Applied line limit, or null if the caller omitted limit.'}, 'which': {'type': 'string', 'description': 'Resolved discovery id after alias fold (llms, sitemap-txt, ard, ai-catalog, …).'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'offset': {'type': 'number', 'description': 'Applied 0-based line offset.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'totalUrls': {'type': 'number', 'description': 'http(s) lines in the loaded file (full count when public/ read succeeds).'}, 'truncated': {'type': 'boolean', 'description': 'true if load hit a byte cap OR offset+limit left more lines. Also mirrored in trailing # MCP-META lines in summary.'}, 'nextOffset': {'type': ['number', 'null'], 'description': 'offset + returnedLines when more lines remain in the loaded file; else null. Pass as the next offset. Also in # MCP-META.'}, 'totalBytes': {'type': 'number', 'description': 'Full origin file size when Content-Length is present (e.g. llms-keywords ~50MB); else character length of the downloaded body before the load cap. Also in # MCP-META.'}, 'totalChars': {'type': 'number', 'description': 'Character length of the downloaded body before applying discoveryFetchMax (may equal totalBytes for ASCII).'}, 'totalLines': {'type': 'number', 'description': 'Line count of the loaded file (full public/ file when available).'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}, 'returnedUrls': {'type': 'number', 'description': 'Lines in this window that start with http(s)://'}, 'bytesReturned': {'type': 'number', 'description': 'UTF-8 byte length of the returned body window (before # MCP-META).'}, 'returnedLines': {'type': 'number', 'description': 'How many lines are in summary/body this call (before # MCP-META).'}, 'fetchTruncated': {'type': 'boolean', 'description': 'true if discoveryFetchMax cut the load (line-boundary safe). Large discovery files (sitemap-xml ~12MB, llms-keywords ~55MB, llms-index ~2MB) must load full so offset/limit can reach EOF.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'number', 'maximum': 10000, 'minimum': 1, 'description': 'Maximum number of lines to return after offset. Omit or null = return every remaining line in the loaded file. Clamped to 1..10000. For sitemap.txt (~9076 http-URLs, Stand 2026-09-22) omit limit to get the full list (or page with offset/limit + nextOffset). For llms-keywords.txt prefer a window; the file is huge. Meta also as trailing # MCP-META lines in summary.'}, 'offset': {'type': 'number', 'default': 0, 'minimum': 0, 'description': '0-based line index into the fetched UTF-8 file (split on \\n). 0 = first line. Omit = 0. Combined with limit = a sliding window. Use nextOffset from the previous result to page. Does not count bytes; one line can be a long URL.'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'path': {'type': 'string', 'description': 'Public path on www, e.g. /llms.txt or /.well-known/ai.txt'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'limit': {'type': ['number', 'null'], 'description': 'Applied line limit, or null if the caller omitted limit.'}, 'which': {'type': 'string', 'description': 'Resolved discovery id after alias fold (llms, sitemap-txt, ard, ai-catalog, …).'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'offset': {'type': 'number', 'description': 'Applied 0-based line offset.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'totalUrls': {'type': 'number', 'description': 'http(s) lines in the loaded file (full count when public/ read succeeds).'}, 'truncated': {'type': 'boolean', 'description': 'true if load hit a byte cap OR offset+limit left more lines. Also mirrored in trailing # MCP-META lines in summary.'}, 'nextOffset': {'type': ['number', 'null'], 'description': 'offset + returnedLines when more lines remain in the loaded file; else null. Pass as the next offset. Also in # MCP-META.'}, 'totalBytes': {'type': 'number', 'description': 'Full origin file size when Content-Length is present (e.g. llms-keywords ~50MB); else character length of the downloaded body before the load cap. Also in # MCP-META.'}, 'totalChars': {'type': 'number', 'description': 'Character length of the downloaded body before applying discoveryFetchMax (may equal totalBytes for ASCII).'}, 'totalLines': {'type': 'number', 'description': 'Line count of the loaded file (full public/ file when available).'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}, 'returnedUrls': {'type': 'number', 'description': 'Lines in this window that start with http(s)://'}, 'bytesReturned': {'type': 'number', 'description': 'UTF-8 byte length of the returned body window (before # MCP-META).'}, 'returnedLines': {'type': 'number', 'description': 'How many lines are in summary/body this call (before # MCP-META).'}, 'fetchTruncated': {'type': 'boolean', 'description': 'true if discoveryFetchMax cut the load (line-boundary safe). Large discovery files (sitemap-xml ~12MB, llms-keywords ~55MB, llms-index ~2MB) must load full so offset/limit can reach EOF.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'number', 'maximum': 10000, 'minimum': 1, 'description': 'Maximum number of lines to return after offset. Omit or null = return every remaining line in the loaded file. Clamped to 1..10000. For sitemap.txt (~9076 http-URLs, Stand 2026-09-22) omit limit to get the full list (or page with offset/limit + nextOffset). For llms-keywords.txt prefer a window; the file is huge. Meta also as trailing # MCP-META lines in summary.'}, 'offset': {'type': 'number', 'default': 0, 'minimum': 0, 'description': '0-based line index into the fetched UTF-8 file (split on \\n). 0 = first line. Omit = 0. Combined with limit = a sliding window. Use nextOffset from the previous result to page. Does not count bytes; one line can be a long URL.'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'path': {'type': 'string', 'description': 'Public path on www, e.g. /llms.txt or /.well-known/ai.txt'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'limit': {'type': ['number', 'null'], 'description': 'Applied line limit, or null if the caller omitted limit.'}, 'which': {'type': 'string', 'description': 'Resolved discovery id after alias fold (llms, sitemap-txt, ard, ai-catalog, …).'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'offset': {'type': 'number', 'description': 'Applied 0-based line offset.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'totalUrls': {'type': 'number', 'description': 'http(s) lines in the loaded file (full count when public/ read succeeds).'}, 'truncated': {'type': 'boolean', 'description': 'true if load hit a byte cap OR offset+limit left more lines. Also mirrored in trailing # MCP-META lines in summary.'}, 'nextOffset': {'type': ['number', 'null'], 'description': 'offset + returnedLines when more lines remain in the loaded file; else null. Pass as the next offset. Also in # MCP-META.'}, 'totalBytes': {'type': 'number', 'description': 'Full origin file size when Content-Length is present (e.g. llms-keywords ~50MB); else character length of the downloaded body before the load cap. Also in # MCP-META.'}, 'totalChars': {'type': 'number', 'description': 'Character length of the downloaded body before applying discoveryFetchMax (may equal totalBytes for ASCII).'}, 'totalLines': {'type': 'number', 'description': 'Line count of the loaded file (full public/ file when available).'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}, 'returnedUrls': {'type': 'number', 'description': 'Lines in this window that start with http(s)://'}, 'bytesReturned': {'type': 'number', 'description': 'UTF-8 byte length of the returned body window (before # MCP-META).'}, 'returnedLines': {'type': 'number', 'description': 'How many lines are in summary/body this call (before # MCP-META).'}, 'fetchTruncated': {'type': 'boolean', 'description': 'true if discoveryFetchMax cut the load (line-boundary safe). Large discovery files (sitemap-xml ~12MB, llms-keywords ~55MB, llms-index ~2MB) must load full so offset/limit can reach EOF.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'maps': {'type': 'object', 'properties': {'cli': {'type': 'string', 'description': 'CLI binary name, e.g. ikeytz-mcp'}, 'mcp': {'type': 'string', 'format': 'uri', 'description': 'HTTPS MCP endpoint …/mcp'}, 'npm': {'type': 'string', 'description': 'npm package name, e.g. @ikeytz/mcp — CLI only, not this HTTP server'}, 'card': {'type': 'string', 'format': 'uri', 'description': 'https://…/.well-known/mcp/server-card.json'}, 'name': {'type': 'string', 'description': 'MCP server name: com.ikeytz/website or com.ikeytz/maps'}, 'readme': {'type': 'string', 'format': 'uri', 'description': 'CLI README on npm — not the HTTP MCP README'}, 'httpReadme': {'type': 'string', 'format': 'uri', 'description': 'HTTP MCP README on the machine host (www: /mcp-readme.md). Not the npm CLI README. Maps has no www copy.'}}, 'description': 'maps machine'}, 'page': {'type': 'string', 'format': 'uri', 'description': 'Locale /mcp-hub URL.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'proxy': {'type': 'boolean', 'const': False}, 'itPage': {'type': 'string', 'format': 'uri', 'description': 'Locale /it URL.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'aiEmail': {'type': 'string'}, 'itEmail': {'type': 'string'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'website': {'type': 'object', 'properties': {'cli': {'type': 'string', 'description': 'CLI binary name, e.g. ikeytz-mcp'}, 'mcp': {'type': 'string', 'format': 'uri', 'description': 'HTTPS MCP endpoint …/mcp'}, 'npm': {'type': 'string', 'description': 'npm package name, e.g. @ikeytz/mcp — CLI only, not this HTTP server'}, 'card': {'type': 'string', 'format': 'uri', 'description': 'https://…/.well-known/mcp/server-card.json'}, 'name': {'type': 'string', 'description': 'MCP server name: com.ikeytz/website or com.ikeytz/maps'}, 'readme': {'type': 'string', 'format': 'uri', 'description': 'CLI README on npm — not the HTTP MCP README'}, 'httpReadme': {'type': 'string', 'format': 'uri', 'description': 'HTTP MCP README on the machine host (www: /mcp-readme.md). Not the npm CLI README. Maps has no www copy.'}}, 'description': 'www machine'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'publicLinks': {'type': 'object', 'properties': {'maps': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'maps catalogs (no Smithery until that listing exists).'}, 'website': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'www catalogs including official registry search and Smithery page when present.'}}, 'description': 'Full public catalog URLs, same order as the footer MCP tab.'}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'at': {'type': 'string', 'description': 'Optional clock. Formats: ISO-8601 with Z or ±HH:MM; or YYYY-MM-DD; or YYYY-MM-DDTHH:MM[:SS] interpreted as Europe/Berlin if no offset; or unix seconds/ms number-as-string. Omit = now. Invalid → ok=false error=bad_datetime.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'tz': {'enum': ['CET', 'CEST'], 'type': 'string', 'description': 'Abbreviation.'}, 'iso': {'type': 'string', 'description': 'ISO-8601 with Berlin offset.'}, 'date': {'type': 'string', 'description': 'YYYY-MM-DD in Berlin.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'rule': {'type': 'string', 'description': 'Human rule string for day vs night.'}, 'time': {'type': 'string', 'description': 'HH:MM:SS in Berlin (24h).'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'unix': {'type': 'number', 'description': 'Unix timestamp seconds.'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'stand': {'type': 'string', 'description': "Human clock 'YYYY-MM-DD HH:MM:SS CEST|CET' Europe/Berlin."}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'holiday': {'type': 'boolean', 'description': 'true if date is a BW statutory holiday.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'weekday': {'type': 'string', 'description': 'en-GB short weekday (Mon…Sun).'}, 'whenKey': {'enum': ['day', 'night'], 'type': 'string', 'description': 'Price bucket. Pass to get_invoice_line_items.whenKey or use whenKey=now there.'}, 'timezone': {'type': 'string', 'const': 'Europe/Berlin'}, 'pricesTool': {'type': 'string', 'const': 'get_prices'}, 'weekdayIso': {'type': 'number', 'description': 'ISO weekday 1=Monday … 7=Sunday.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'holidayName': {'type': ['string', 'null'], 'description': 'German holiday name or null. Holidays force whenKey=night.'}, 'invoiceTool': {'type': 'string', 'const': 'get_invoice_line_items'}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'path': {'type': 'string', 'description': 'Optional marketing path. Omit or empty = /. Examples: /preise, /en/preise, /kontakt. Locale prefix stripped in the return path.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'path': {'type': 'string', 'description': 'Path without locale prefix'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'note': {'type': 'string', 'description': 'Legal/price note'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'opening': {'type': 'array', 'description': 'Door-opening price blocks'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'packages': {'type': 'array', 'description': 'Invoice packages (day/night)'}, 'surcharges': {'type': 'array', 'description': 'Surcharge rows'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'composition': {'type': 'object', 'description': 'How to assemble: 10 end-invoices, factors, question routes, formulas. Required reading before quoting €.'}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}, 'cylinderOnly': {'type': 'object', 'description': 'Cylinder-only prices'}, 'cylinderAfterOpening': {'type': 'object', 'description': 'Cylinder price after an opening'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Required. Exact Ratgeber slug from list_ratgeber.slugs (ASCII hyphenated).'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'slug': {'type': 'string', 'description': 'Resolved Ratgeber slug'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}, 'googleReviewUrl': {'type': 'string', 'description': 'Full Google review URL'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'If this starts with http, it is used as the search needle instead of path.'}, 'path': {'type': 'string', 'description': 'Site path (/preise) or used with locale to build the www URL to find in llms-serp.txt.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}, 'matchContext': {'type': 'string', 'description': 'Surrounding SERP lines'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'plz': {'type': 'string', 'description': '5-digit German PLZ. First matching place wins (71638 → pattonville). Use slug if you already know it.'}, 'name': {'type': 'string', 'description': "German name substring, case-insensitive (e.g. 'Vaihingen'). First includes() match. Prefer slug."}, 'slug': {'type': 'string', 'description': "Preferred. Exact orte slug: pattonville, asperg, bietigheim-bissingen, kornwestheim, … (52). Not 'ludwigsburg' as a catch-all unless that slug exists."}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'lat': {'type': 'number', 'description': 'WGS84 latitude of THIS place or the office. Unique per slug — never a silent Pattonville fallback. Example Pattonville ≈ 48.863.'}, 'lng': {'type': 'number', 'description': 'WGS84 longitude of THIS place or the office. Example Pattonville ≈ 9.185.'}, 'plz': {'type': 'string', 'description': 'German postcode. First match wins if several places share a PLZ (e.g. 71638 → pattonville).'}, 'url': {'type': 'string', 'format': 'uri', 'description': 'www keyword page https://www.ikeytz.com[/locale]/schluesseldienst-ludwigsburg-{slug}'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'icbm': {'type': 'string', 'description': "ICBM 'lat, lng' string (same as google_maps)."}, 'kind': {'type': 'string', 'description': 'Place kind from orte SSOT (stadtteil / gemeinde / …).'}, 'name': {'type': 'string', 'description': 'German place name as on the website.'}, 'slug': {'type': 'string', 'description': 'URL slug of a service-area place, e.g. pattonville, bietigheim-bissingen, walheim. Matches maps.ikeytz.com/{slug} and www /schluesseldienst-ludwigsburg-{slug}.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'parent': {'type': 'string', 'description': 'Parent place name when this is a district; else empty/omit.'}, 'geo_api': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/api/v1/embed/ort/{slug} JSON for the embed.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'maps_mcp': {'type': 'string', 'const': 'https://maps.ikeytz.com/mcp', 'format': 'uri', 'description': 'maps machine MCP endpoint. www /mcp does not proxy this.'}, 'embed_map': {'type': 'string', 'format': 'uri', 'description': 'iframe/src and maps page: https://maps.ikeytz.com/{slug} (German host, no /en/).'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'google_maps': {'type': 'string', 'description': "Paste-ready 'lat, lng' for Google Maps search (same digits as lat/lng)."}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'number', 'maximum': 10000, 'minimum': 1, 'description': 'Maximum number of lines to return after offset. Omit or null = return every remaining line in the loaded file. Clamped to 1..10000. For sitemap.txt (~9076 http-URLs, Stand 2026-09-22) omit limit to get the full list (or page with offset/limit + nextOffset). For llms-keywords.txt prefer a window; the file is huge. Meta also as trailing # MCP-META lines in summary.'}, 'offset': {'type': 'number', 'default': 0, 'minimum': 0, 'description': '0-based line index into the fetched UTF-8 file (split on \\n). 0 = first line. Omit = 0. Combined with limit = a sliding window. Use nextOffset from the previous result to page. Does not count bytes; one line can be a long URL.'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'path': {'type': 'string', 'description': 'Public path on www, e.g. /llms.txt or /.well-known/ai.txt'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'limit': {'type': ['number', 'null'], 'description': 'Applied line limit, or null if the caller omitted limit.'}, 'which': {'type': 'string', 'description': 'Resolved discovery id after alias fold (llms, sitemap-txt, ard, ai-catalog, …).'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'offset': {'type': 'number', 'description': 'Applied 0-based line offset.'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'totalUrls': {'type': 'number', 'description': 'http(s) lines in the loaded file (full count when public/ read succeeds).'}, 'truncated': {'type': 'boolean', 'description': 'true if load hit a byte cap OR offset+limit left more lines. Also mirrored in trailing # MCP-META lines in summary.'}, 'nextOffset': {'type': ['number', 'null'], 'description': 'offset + returnedLines when more lines remain in the loaded file; else null. Pass as the next offset. Also in # MCP-META.'}, 'totalBytes': {'type': 'number', 'description': 'Full origin file size when Content-Length is present (e.g. llms-keywords ~50MB); else character length of the downloaded body before the load cap. Also in # MCP-META.'}, 'totalChars': {'type': 'number', 'description': 'Character length of the downloaded body before applying discoveryFetchMax (may equal totalBytes for ASCII).'}, 'totalLines': {'type': 'number', 'description': 'Line count of the loaded file (full public/ file when available).'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}, 'returnedUrls': {'type': 'number', 'description': 'Lines in this window that start with http(s)://'}, 'bytesReturned': {'type': 'number', 'description': 'UTF-8 byte length of the returned body window (before # MCP-META).'}, 'returnedLines': {'type': 'number', 'description': 'How many lines are in summary/body this call (before # MCP-META).'}, 'fetchTruncated': {'type': 'boolean', 'description': 'true if discoveryFetchMax cut the load (line-boundary safe). Large discovery files (sitemap-xml ~12MB, llms-keywords ~55MB, llms-index ~2MB) must load full so offset/limit can reach EOF.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Required. Exact Wissen article id from list_wissen.items[].id.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'id': {'type': 'string', 'description': 'Article id'}, 'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'title': {'type': 'string', 'description': 'Article title'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'groups': {'type': 'array', 'description': 'Auswahl groups with slugs and URLs'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'question': {'type': 'string'}}}, 'description': 'FAQ ids and questions'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Absolute https://www.ikeytz.com{prefix}{path} for the requested locale.'}, 'path': {'type': 'string', 'description': 'ASCII site path beginning with /, no host, no locale prefix for de.'}, 'label': {'type': 'string', 'description': 'Short human label (German hub name) when the tool provides one.'}}, 'description': 'One internal www.ikeytz.com link.', 'additionalProperties': True}, 'description': 'Internal footer paths'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {}, 'description': 'This tool takes no arguments. Call tools/call with arguments: {}. Extra keys are ignored. Result is always the same public href (tel/mailto) or locale list.', 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'locales': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Locale code'}, 'name': {'type': 'string', 'description': 'Native language name'}, 'prefix': {'type': 'string', 'description': 'URL prefix; empty for de'}}}, 'description': 'Seven locales with URL prefix'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Absolute https://www.ikeytz.com{prefix}{path} for the requested locale.'}, 'path': {'type': 'string', 'description': 'ASCII site path beginning with /, no host, no locale prefix for de.'}, 'label': {'type': 'string', 'description': 'Short human label (German hub name) when the tool provides one.'}}, 'description': 'One internal www.ikeytz.com link.', 'additionalProperties': True}, 'description': 'Header hub links'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'urls': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Locale Ratgeber URLs'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'slugs': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Ratgeber slugs'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'count': {'type': 'number', 'description': 'Always 52 when ok.'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'lat': {'type': 'number', 'description': 'WGS84 latitude of THIS place or the office. Unique per slug — never a silent Pattonville fallback. Example Pattonville ≈ 48.863.'}, 'lng': {'type': 'number', 'description': 'WGS84 longitude of THIS place or the office. Example Pattonville ≈ 9.185.'}, 'plz': {'type': 'string', 'description': 'German postcode. First match wins if several places share a PLZ (e.g. 71638 → pattonville).'}, 'url': {'type': 'string', 'format': 'uri', 'description': 'www keyword page https://www.ikeytz.com[/locale]/schluesseldienst-ludwigsburg-{slug}'}, 'icbm': {'type': 'string', 'description': "ICBM 'lat, lng' string (same as google_maps)."}, 'kind': {'type': 'string', 'description': 'Place kind from orte SSOT (stadtteil / gemeinde / …).'}, 'name': {'type': 'string', 'description': 'German place name as on the website.'}, 'slug': {'type': 'string', 'description': 'URL slug of a service-area place, e.g. pattonville, bietigheim-bissingen, walheim. Matches maps.ikeytz.com/{slug} and www /schluesseldienst-ludwigsburg-{slug}.'}, 'parent': {'type': 'string', 'description': 'Parent place name when this is a district; else empty/omit.'}, 'geo_api': {'type': 'string', 'format': 'uri', 'description': 'https://maps.ikeytz.com/api/v1/embed/ort/{slug} JSON for the embed.'}, 'maps_mcp': {'type': 'string', 'const': 'https://maps.ikeytz.com/mcp', 'format': 'uri', 'description': 'maps machine MCP endpoint. www /mcp does not proxy this.'}, 'embed_map': {'type': 'string', 'format': 'uri', 'description': 'iframe/src and maps page: https://maps.ikeytz.com/{slug} (German host, no /en/).'}, 'google_maps': {'type': 'string', 'description': "Paste-ready 'lat, lng' for Google Maps search (same digits as lat/lng)."}}, 'additionalProperties': True}, 'description': 'One object per place; fields = PLACE geo + maps URLs.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'services': {'type': 'array', 'description': 'Core services with locale URLs'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'options': {'type': 'array', 'description': 'Prefab WhatsApp options with wa.me URLs'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'items': {'type': 'array', 'description': 'Wissen articles id/title/url'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['path', 'locale'], 'properties': {'path': {'type': 'string', 'description': 'Required. Site path starting with / (e.g. /preise, /en/preise, /schluesseldienst-ludwigsburg-pattonville) OR a full https://www.ikeytz.com/… URL. Host other than www is not normalized here.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Required. Target locale for the rewritten URL.'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'path': {'type': 'string', 'description': 'Path without locale prefix'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'toLocale': {'type': 'string', 'description': 'Requested target locale'}, 'fromLocale': {'type': 'string', 'description': 'Locale parsed from input path'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'default': 'de', 'description': 'HTML locale for canonicalUrl and path prefixes. de = default, URLs have no prefix (https://www.ikeytz.com/preise). en|fr|ru|fa|ar|tr = prefix /{locale}/ (https://www.ikeytz.com/en/preise). Omit or empty = de. Does not change prices, phone numbers, or legal German names. Not a maps.ikeytz.com locale (maps is German-only).'}}}
Output schema
{'type': 'object', 'required': ['ok', 'tool', 'attribution'], 'properties': {'ok': {'type': 'boolean', 'description': 'true = use summary, canonicalUrl, and extra keys. false = do not invent data; read error + hint and retry with valid args or open hint.'}, 'hint': {'type': 'string', 'description': 'Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery.'}, 'tool': {'type': 'string', 'description': 'Echo of the tool name that produced this object (e.g. get_service_area).'}, 'error': {'type': 'string', 'description': 'Present when ok=false. Codes include: unknown_tool, unknown_place, unknown_auswahl, unknown_ratgeber, unknown_doc, unknown_discovery, faq_not_found, wissen_not_found, serp_not_found, q_required, bad_datetime, bad_when_key, plus HTTP errors from fetch.'}, 'locale': {'enum': ['de', 'en', 'fr', 'ru', 'fa', 'ar', 'tr'], 'type': 'string', 'description': 'Locale actually used for URLs (args.locale or de).'}, 'related': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'description': 'Always includes https://www.ikeytz.com/llms.txt. Geo tools also include https://maps.ikeytz.com/llms.txt.'}, 'summary': {'type': 'string', 'description': 'Primary text for the model. For discovery tools this is the file window (possibly thousands of characters). For list tools a compact one-liner. Quote with attribution.'}, 'tradeName': {'type': 'string', 'description': 'Public trade name'}, 'priceRange': {'type': 'string', 'description': 'Price-range hint for schema'}, 'attribution': {'type': 'string', 'description': "Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"}, 'gewerbeName': {'type': 'string', 'description': 'Registered business name'}, 'canonicalUrl': {'type': 'string', 'description': 'Best URL to show the user: https://www.ikeytz.com… page, or tel:+49…, mailto:…, https://wa.me/…. Prefer this over constructing URLs.'}}, '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 calls /api/*. Attribution must be kept when quoting. Policy: ai-input yes with attribution; ai-train=no.', 'additionalProperties': True}
Recent tool changes
Similar MCP servers
独行录 / opcmenu
Supports founder and company discovery, collaboration goals and tasks, events and signups, networking, messaging, profiles, produ…
Odichat
Manages WhatsApp, Instagram, and Facebook inboxes with contacts, conversations, agents, automation rules, labels, canned response…
KaiCalls
Provides AI phone reception, outbound calling campaigns, call transcripts and recordings, lead management, routing, staff alerts,…
anima
Provides agent-owned email inboxes, phone and SMS identities, email drafting and sending, message search and threading, domains, …
agendaforge
Manages events, agendas, sessions, speakers, attendees, sponsors, forms, contacts, email templates, approvals, and organizer work…
Asyntai
Manages website AI support agents, their knowledge bases, conversations, live replies, leads, products, webhooks, analytics, and …
mailbox
Manages physical inbound and outbound mail, postal fulfillment, OCR-backed mail context, facility messaging, delivery tracking, c…
Temsor API — Turkey & EU business data
Provides business identity and payment-data validation, tax and FX information, sanctions-related lookups, and PBX call indexing …