[{"slug":"ZV-2026-0590","server_name":"ikeytz.com","severity":"breaking","title":"ikeytz.com: Field knownSituations was removed from get_invoice_line_items output; consumers reading it will break.","summary":"[risky] Description of compose_mailto changed (60% word delta). [risky] Optional field option was added to compose_mailto; may shift model behaviour. [risky] Field ambiguous was added to compose_mailto output. [risky] Field amountEur was added to compose_mailto output. [risky] Field isEndInvoice was added to compose_mailto output. [risky] Field option was added to compose_mailto output. [risky] Field situationKey was added to compose_mailto output. [risky] Field subject was added to compose_mailto output. [risky] Field whenKey was added to compose_mailto output. [risky] Description of compose_whatsapp changed (65% word delta). [risky] Enum value opening_slam_day added to option on compose_whatsapp. [risky] Enum value opening_slam_night added to option on compose_whatsapp. [risky] Enum value opening_locked_day added to option on compose_whatsapp. [risky] Enum value opening_locked_night added to option on compose_whatsapp. [risky] Enum value pkg_key_slam_day added to option on compose_whatsapp. [risky] Enum value pkg_key_slam_night added to option on compose_whatsapp. [risky] Enum value pkg_key_locked_day added to option on compose_whatsapp. [risky] Enum value pkg_key_locked_night added to option on compose_whatsapp. [risky] Enum value cylinder_only_day added to option on compose_whatsapp. [risky] Enum value cylinder_only_night added to option on compose_whatsapp. [risky] Enum value cylinder_mount added to option on compose_whatsapp. [risky] Field ambiguous was added to compose_whatsapp output. [risky] Field amountEur was added to compose_whatsapp output. [risky] Field isEndInvoice was added to compose_whatsapp output. [risky] Field situationKey was added to compose_whatsapp output. [risky] Field whenKey was added to compose_whatsapp output. [safe] Description of get_emergency changed (24% word delta). [safe] Description of get_invoice_line_items changed (12% word delta). [breaking] Field knownSituations was removed from get_invoice_line_items output; consumers readin","changes":[{"kind":"description_changed","tool":"compose_mailto","after":"WHAT: mailto:info@ikeytz.com with the SAME prefab as compose_whatsapp (subject+body). option = contactOption of one of the 10 end-invoices, or cylinder_mount, or beratung. Call with {} → beratung (empty advice template), not a bare mailbox with no text. Does not send email. Partner mailbox is on get_partner_info.partnerEmail (not this href).","before":"WHAT: mailto: href to the public info@ mailbox. Call with {}. Does not send email. Partner mailbox is on get_partner_info.partnerEmail (not this href).","detail":"Description of `compose_mailto` changed (60% word delta).","severity":"risky","descriptionDelta":0.6},{"kind":"input_property_added","path":"inputSchema.properties.option","tool":"compose_mailto","after":{"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."},"detail":"Optional field `option` was added to `compose_mailto`; may shift model behaviour.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ambiguous","tool":"compose_mailto","after":{"type":"boolean"},"detail":"Field `ambiguous` was added to `compose_mailto` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.amountEur","tool":"compose_mailto","after":{"type":["number","null"]},"detail":"Field `amountEur` was added to `compose_mailto` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.isEndInvoice","tool":"compose_mailto","after":{"type":"boolean"},"detail":"Field `isEndInvoice` was added to `compose_mailto` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.option","tool":"compose_mailto","after":{"type":"string","description":"Resolved contactOption id"},"detail":"Field `option` was added to `compose_mailto` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.situationKey","tool":"compose_mailto","after":{"type":["string","null"]},"detail":"Field `situationKey` was added to `compose_mailto` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.subject","tool":"compose_mailto","after":{"type":"string"},"detail":"Field `subject` was added to `compose_mailto` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.whenKey","tool":"compose_mailto","after":{"type":["string","null"]},"detail":"Field `whenKey` was added to `compose_mailto` output.","severity":"risky"},{"kind":"description_changed","tool":"compose_whatsapp","after":"WHAT: Build a https://wa.me/… URL with one prefab = one end-invoice (or mount 49 / beratung). option = contactOption from get_prices.composition.endInvoices or get_invoice_line_items.contactOption: opening_slam_day|opening_slam_night|opening_locked_day|opening_locked_night|pkg_key_slam_day|pkg_key_slam_night|pkg_key_locked_day|pkg_key_locked_night|cylinder_only_day|cylinder_only_night|cylinder_mount|beratung. Deprecated aliases zugefallen|abgeschlossen|zylinder map to the *day* invoice and set ambiguous=true — do not use them. Omit/unknown → beratung. 49 € is mount, not night. Does not send WhatsApp. List via list_whatsapp_options.","before":"WHAT: Build a https://wa.me/… URL with a prefab German message. option=zugefallen|abgeschlossen|zylinder|beratung; omit or unknown → first option. RETURNS option id + href. Does not send WhatsApp. List labels via list_whatsapp_options.","detail":"Description of `compose_whatsapp` changed (65% word delta).","severity":"risky","descriptionDelta":0.6470588235294117},{"kind":"enum_value_added","path":"inputSchema.properties.option","tool":"compose_whatsapp","after":"opening_slam_day","detail":"Enum value `opening_slam_day` added to `option` on `compose_whatsapp`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.option","tool":"compose_whatsapp","after":"opening_slam_night","detail":"Enum value `opening_slam_night` added to `option` on `compose_whatsapp`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.option","tool":"compose_whatsapp","after":"opening_locked_day","detail":"Enum value `opening_locked_day` added to `option` on `compose_whatsapp`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.option","tool":"compose_whatsapp","after":"opening_locked_night","detail":"Enum value `opening_locked_night` added to `option` on `compose_whatsapp`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.option","tool":"compose_whatsapp","after":"pkg_key_slam_day","detail":"Enum value `pkg_key_slam_day` added to `option` on `compose_whatsapp`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.option","tool":"compose_whatsapp","after":"pkg_key_slam_night","detail":"Enum value `pkg_key_slam_night` added to `option` on `compose_whatsapp`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.option","tool":"compose_whatsapp","after":"pkg_key_locked_day","detail":"Enum value `pkg_key_locked_day` added to `option` on `compose_whatsapp`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.option","tool":"compose_whatsapp","after":"pkg_key_locked_night","detail":"Enum value `pkg_key_locked_night` added to `option` on `compose_whatsapp`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.option","tool":"compose_whatsapp","after":"cylinder_only_day","detail":"Enum value `cylinder_only_day` added to `option` on `compose_whatsapp`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.option","tool":"compose_whatsapp","after":"cylinder_only_night","detail":"Enum value `cylinder_only_night` added to `option` on `compose_whatsapp`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.option","tool":"compose_whatsapp","after":"cylinder_mount","detail":"Enum value `cylinder_mount` added to `option` on `compose_whatsapp`.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ambiguous","tool":"compose_whatsapp","after":{"type":"boolean"},"detail":"Field `ambiguous` was added to `compose_whatsapp` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.amountEur","tool":"compose_whatsapp","after":{"type":["number","null"]},"detail":"Field `amountEur` was added to `compose_whatsapp` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.isEndInvoice","tool":"compose_whatsapp","after":{"type":"boolean"},"detail":"Field `isEndInvoice` was added to `compose_whatsapp` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.situationKey","tool":"compose_whatsapp","after":{"type":["string","null"]},"detail":"Field `situationKey` was added to `compose_whatsapp` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.whenKey","tool":"compose_whatsapp","after":{"type":["string","null"]},"detail":"Field `whenKey` was added to `compose_whatsapp` output.","severity":"risky"},{"kind":"description_changed","tool":"get_emergency","after":"WHAT: Pointer to the 24h Notfall-Türöffnung page. summary includes mobile number. canonicalUrl = /notfall-tueroeffnung (locale-prefixed). DOES NOT dispatch a technician or take a booking. NEXT: compose_tel_mobile or list_whatsapp_options then compose_whatsapp with a contactOption (opening_slam_day|opening_slam_night|…).","before":"WHAT: Pointer to the 24h Notfall-Türöffnung page. summary includes mobile number. canonicalUrl = /notfall-tueroeffnung (locale-prefixed). DOES NOT dispatch a technician or take a booking. NEXT: compose_tel_mobile or compose_whatsapp(option=zugefallen|abgeschlossen).","detail":"Description of `get_emergency` changed (24% word delta).","severity":"safe","descriptionDelta":0.23684210526315785},{"kind":"description_changed","tool":"get_invoice_line_items","after":"WHAT: Computes ONE of the 10 end-invoices (or the 49 € mount add-on). NOT a booking, NOT a PDF. FIRST classify via get_prices.composition.routes: locked_out+slam+no cylinder → opening_slam; locked_out+locked+no cylinder → opening_locked; +cylinder same trip → pkg_key_slam / pkg_key_locked; door open → cylinder_only; mount after paid opening → cylinder_mount (not an end-invoice). THEN whenKey from get_ort_datetime (day|night|now). Night/WE/holiday is NOT +49 — 49 is only cylinder_mount. Do not invent euro. Do not add 49 on top of pkg_key_*. REQUIRED situationKey. Aliases: zugefallen→opening_slam, abgeschlossen→opening_locked, schluessel_weg_zugefallen→pkg_key_slam. breakdown=true splits combo into opening+49, totalEur unchanged. RETURNS totalEur + composition + contactOption. NEXT: compose_whatsapp or compose_mailto with that contactOption. No VAT.","before":"WHAT: Computes ONE of the 10 end-invoices (or the 49 € mount add-on). NOT a booking, NOT a PDF. FIRST classify via get_prices.composition.routes: locked_out+slam+no cylinder → opening_slam; locked_out+locked+no cylinder → opening_locked; +cylinder same trip → pkg_key_slam / pkg_key_locked; door open → cylinder_only; mount after paid opening → cylinder_mount (not an end-invoice). THEN whenKey from get_ort_datetime (day|night|now). Do not invent euro. Do not add 49 on top of pkg_key_*. REQUIRED situationKey. Aliases: zugefallen→opening_slam, abgeschlossen→opening_locked, schluessel_weg_zugefallen→pkg_key_slam. breakdown=true splits combo into opening+49, totalEur unchanged. RETURNS totalEur + composition. NEXT: compose_tel_mobile. No VAT.","detail":"Description of `get_invoice_line_items` changed (12% word delta).","severity":"safe","descriptionDelta":0.12345679012345678},{"kind":"output_property_removed","path":"outputSchema.properties.knownSituations","tool":"get_invoice_line_items","before":{"type":"array","description":"Valid keys when ok=false"},"detail":"Field `knownSituations` was removed from `get_invoice_line_items` output; consumers reading it will break.","severity":"breaking"},{"kind":"output_property_added","path":"outputSchema.properties.contactOption","tool":"get_invoice_line_items","after":{"type":"string","description":"Prefab id for compose_whatsapp / compose_mailto (opening_slam_day … cylinder_only_night, or cylinder_mount)."},"detail":"Field `contactOption` was added to `get_invoice_line_items` output.","severity":"risky"},{"kind":"description_changed","tool":"get_prices","after":"WHAT: Official Festpreis matrix + composition SYSTEM. Read composition first: exactly 10 end-invoices + one 49 € add-on (not 12, not 17 customer invoices). 49 € is cylinder_mount after an opening — already inside 148/198/178/228; never add 49 again. 49 € is NOT night/weekend/holiday (those are 149/179/198/228/119). RETURNS composition{ruleDe,doNotConfuse[],factors[],routes[],endInvoices[] with contactOption,howTo[]}, opening[], packages[], surcharges[], note. USE to understand how to assemble a price. DOES NOT compute one customer total — that is get_invoice_line_items(situationKey, whenKey). Contact: compose_whatsapp/compose_mailto with contactOption. whenKey: get_ort_datetime. No VAT (§ 19).","before":"WHAT: Official Festpreis matrix + composition SYSTEM. Read composition first: exactly 10 end-invoices + one 49 € add-on (not 12, not 17 customer invoices). 49 € is cylinder_mount after an opening — already inside 148/198/178/228; never add 49 again. RETURNS composition{ruleDe,factors[],routes[],endInvoices[],howTo[]}, opening[], packages[], surcharges[], note. USE to understand how to assemble a price. DOES NOT compute one customer total — that is get_invoice_line_items(situationKey, whenKey). whenKey: get_ort_datetime. No VAT (§ 19).","detail":"Description of `get_prices` changed (19% word delta).","severity":"safe","descriptionDelta":0.18918918918918914},{"kind":"description_changed","tool":"list_whatsapp_options","after":"WHAT: Prefab WhatsApp AND mailto deep links (no send). 10 end-invoices + cylinder_mount (49 €, not night) + beratung. NOT zugefallen|abgeschlossen|zylinder (those mix day/night). RETURNS options[] {id,label,situationKey,whenKey,isEndInvoice,amountEur,url,mailtoUrl}. 49 € = mount only; night/WE/holiday = 149/179/198/228/119. USE compose_whatsapp or compose_mailto with id. Never claims a message was delivered.","before":"WHAT: Prefab WhatsApp deep links (no chat send). RETURNS options[] {id,label,url}. ids: zugefallen, abgeschlossen, zylinder, beratung (see compose_whatsapp). USE then compose_whatsapp({option}) or open url. Never claims a message was delivered.","detail":"Description of `list_whatsapp_options` changed (58% word delta).","severity":"risky","descriptionDelta":0.576271186440678}],"published_at":"2026-09-01T11:23:11.345Z"},{"slug":"ZV-2026-0578","server_name":"ikeytz.com","severity":"breaking","title":"ikeytz.com: option on compose_whatsapp narrowed to a closed enum (zugefallen, abgeschlossen, zylinder, beratung); previously valid values may now be rejected.","summary":"[risky] Description of compose_mailto changed (91% word delta). [risky] Field attribution was added to compose_mailto output. [risky] Field canonicalUrl was added to compose_mailto output. [risky] Field error was added to compose_mailto output. [risky] Field hint was added to compose_mailto output. [risky] Field href was added to compose_mailto output. [risky] Field locale was added to compose_mailto output. [risky] Field ok was added to compose_mailto output. [risky] Field related was added to compose_mailto output. [risky] Field summary was added to compose_mailto output. [risky] Field tool was added to compose_mailto output. [risky] Description of compose_tel_landline changed (87% word delta). [risky] Field attribution was added to compose_tel_landline output. [risky] Field canonicalUrl was added to compose_tel_landline output. [risky] Field error was added to compose_tel_landline output. [risky] Field hint was added to compose_tel_landline output. [risky] Field href was added to compose_tel_landline output. [risky] Field locale was added to compose_tel_landline output. [risky] Field ok was added to compose_tel_landline output. [risky] Field related was added to compose_tel_landline output. [risky] Field summary was added to compose_tel_landline output. [risky] Field tool was added to compose_tel_landline output. [risky] Description of compose_tel_mobile changed (89% word delta). [risky] Field attribution was added to compose_tel_mobile output. [risky] Field canonicalUrl was added to compose_tel_mobile output. [risky] Field error was added to compose_tel_mobile output. [risky] Field hint was added to compose_tel_mobile output. [risky] Field href was added to compose_tel_mobile output. [risky] Field locale was added to compose_tel_mobile output. [risky] Field ok was added to compose_tel_mobile output. [risky] Field related was added to compose_tel_mobile output. [risky] Field summary was added to compose_tel_mobile output. [risky] Field tool was added to compose_t","changes":[{"kind":"description_changed","tool":"compose_mailto","after":"WHAT: mailto: href to the public info@ mailbox. Call with {}. Does not send email. Partner mailbox is on get_partner_info.partnerEmail (not this href).","before":"mailto:info@ikeytz.com","detail":"Description of `compose_mailto` changed (91% word delta).","severity":"risky","descriptionDelta":0.9090909090909091},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"compose_mailto","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `compose_mailto` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"compose_mailto","after":{"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."},"detail":"Field `canonicalUrl` was added to `compose_mailto` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"compose_mailto","after":{"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."},"detail":"Field `error` was added to `compose_mailto` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"compose_mailto","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `compose_mailto` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.href","tool":"compose_mailto","after":{"type":"string","description":"mailto:info@ikeytz.com"},"detail":"Field `href` was added to `compose_mailto` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"compose_mailto","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `compose_mailto` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"compose_mailto","after":{"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."},"detail":"Field `ok` was added to `compose_mailto` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"compose_mailto","after":{"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."},"detail":"Field `related` was added to `compose_mailto` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"compose_mailto","after":{"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."},"detail":"Field `summary` was added to `compose_mailto` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"compose_mailto","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `compose_mailto` output.","severity":"risky"},{"kind":"description_changed","tool":"compose_tel_landline","after":"WHAT: tel: href for the landline (Festnetz). Call with {}. Mobile/24h emergency = compose_tel_mobile.","before":"tel: link to landline","detail":"Description of `compose_tel_landline` changed (87% word delta).","severity":"risky","descriptionDelta":0.8666666666666667},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"compose_tel_landline","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `compose_tel_landline` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"compose_tel_landline","after":{"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."},"detail":"Field `canonicalUrl` was added to `compose_tel_landline` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"compose_tel_landline","after":{"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."},"detail":"Field `error` was added to `compose_tel_landline` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"compose_tel_landline","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `compose_tel_landline` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.href","tool":"compose_tel_landline","after":{"type":"string","description":"tel:+49… landline"},"detail":"Field `href` was added to `compose_tel_landline` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"compose_tel_landline","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `compose_tel_landline` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"compose_tel_landline","after":{"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."},"detail":"Field `ok` was added to `compose_tel_landline` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"compose_tel_landline","after":{"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."},"detail":"Field `related` was added to `compose_tel_landline` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"compose_tel_landline","after":{"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."},"detail":"Field `summary` was added to `compose_tel_landline` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"compose_tel_landline","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `compose_tel_landline` output.","severity":"risky"},{"kind":"description_changed","tool":"compose_tel_mobile","after":"WHAT: tel: href for the 24/7 mobile (Handy). Call with {}. RETURNS href and canonicalUrl both tel:+49…. Show this to the user; do not pretend the call happened. Landline = compose_tel_landline.","before":"tel: link to mobile","detail":"Description of `compose_tel_mobile` changed (89% word delta).","severity":"risky","descriptionDelta":0.8888888888888888},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"compose_tel_mobile","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `compose_tel_mobile` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"compose_tel_mobile","after":{"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."},"detail":"Field `canonicalUrl` was added to `compose_tel_mobile` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"compose_tel_mobile","after":{"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."},"detail":"Field `error` was added to `compose_tel_mobile` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"compose_tel_mobile","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `compose_tel_mobile` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.href","tool":"compose_tel_mobile","after":{"type":"string","description":"tel:+49… mobile"},"detail":"Field `href` was added to `compose_tel_mobile` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"compose_tel_mobile","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `compose_tel_mobile` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"compose_tel_mobile","after":{"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."},"detail":"Field `ok` was added to `compose_tel_mobile` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"compose_tel_mobile","after":{"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."},"detail":"Field `related` was added to `compose_tel_mobile` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"compose_tel_mobile","after":{"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."},"detail":"Field `summary` was added to `compose_tel_mobile` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"compose_tel_mobile","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `compose_tel_mobile` output.","severity":"risky"},{"kind":"description_changed","tool":"compose_whatsapp","after":"WHAT: Build a https://wa.me/… URL with a prefab German message. option=zugefallen|abgeschlossen|zylinder|beratung; omit or unknown → first option. RETURNS option id + href. Does not send WhatsApp. List labels via list_whatsapp_options.","before":"wa.me link; option=zugefallen|abgeschlossen|zylinder|beratung","detail":"Description of `compose_whatsapp` changed (78% word delta).","severity":"risky","descriptionDelta":0.78125},{"kind":"enum_narrowed","path":"inputSchema.properties.option","tool":"compose_whatsapp","after":"enum[zugefallen,abgeschlossen,zylinder,beratung]","before":"open","detail":"`option` on `compose_whatsapp` narrowed to a closed enum (zugefallen, abgeschlossen, zylinder, beratung); previously valid values may now be rejected.","severity":"breaking"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"compose_whatsapp","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `compose_whatsapp` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"compose_whatsapp","after":{"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."},"detail":"Field `canonicalUrl` was added to `compose_whatsapp` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"compose_whatsapp","after":{"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."},"detail":"Field `error` was added to `compose_whatsapp` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"compose_whatsapp","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `compose_whatsapp` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.href","tool":"compose_whatsapp","after":{"type":"string","description":"https://wa.me/… URL"},"detail":"Field `href` was added to `compose_whatsapp` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"compose_whatsapp","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `compose_whatsapp` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"compose_whatsapp","after":{"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."},"detail":"Field `ok` was added to `compose_whatsapp` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.option","tool":"compose_whatsapp","after":{"type":"string","description":"Resolved option id"},"detail":"Field `option` was added to `compose_whatsapp` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"compose_whatsapp","after":{"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."},"detail":"Field `related` was added to `compose_whatsapp` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"compose_whatsapp","after":{"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."},"detail":"Field `summary` was added to `compose_whatsapp` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"compose_whatsapp","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `compose_whatsapp` output.","severity":"risky"},{"kind":"description_changed","tool":"find_by_keyword","after":"WHAT: Substring search (case-insensitive) over https://www.ikeytz.com/llms-keywords.txt (phrase → URL map). REQUIRED q. Default 15 lines, max 30. Empty q → q_required. RETURNS q, count, lines[] (raw TSV-like rows). locale does not filter the file. USE to map a user phrase to URLs. NEXT: get_ai_page on a returned www path.","before":"Search llms-keywords.txt for keyword → URLs","detail":"Description of `find_by_keyword` changed (90% word delta).","severity":"risky","descriptionDelta":0.8979591836734694},{"kind":"default_changed","path":"inputSchema.properties.limit","tool":"find_by_keyword","after":15,"detail":"Default of `limit` on `find_by_keyword` changed unset → 15.","severity":"risky"},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"find_by_keyword","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `find_by_keyword` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"find_by_keyword","after":"de","detail":"Default of `locale` on `find_by_keyword` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"find_by_keyword","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `find_by_keyword` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"find_by_keyword","after":{"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."},"detail":"Field `canonicalUrl` was added to `find_by_keyword` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.count","tool":"find_by_keyword","after":{"type":"number","description":"Lines returned"},"detail":"Field `count` was added to `find_by_keyword` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"find_by_keyword","after":{"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."},"detail":"Field `error` was added to `find_by_keyword` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"find_by_keyword","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `find_by_keyword` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.lines","tool":"find_by_keyword","after":{"type":"array","items":{"type":"string"},"description":"Matching keyword rows"},"detail":"Field `lines` was added to `find_by_keyword` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"find_by_keyword","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `find_by_keyword` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"find_by_keyword","after":{"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."},"detail":"Field `ok` was added to `find_by_keyword` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.q","tool":"find_by_keyword","after":{"type":"string","description":"Search query"},"detail":"Field `q` was added to `find_by_keyword` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"find_by_keyword","after":{"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."},"detail":"Field `related` was added to `find_by_keyword` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"find_by_keyword","after":{"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."},"detail":"Field `summary` was added to `find_by_keyword` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"find_by_keyword","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `find_by_keyword` output.","severity":"risky"},{"kind":"description_changed","tool":"get_about","after":"WHAT: Pointer to /ueber-uns (about, owner). For NAP facts prefer get_business_identity. NEXT: get_ai_page({path:'/ueber-uns'}).","before":"About / Über uns","detail":"Description of `get_about` changed (88% word delta).","severity":"risky","descriptionDelta":0.875},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_about","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_about` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_about","after":"de","detail":"Default of `locale` on `get_about` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_about","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_about` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_about","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_about` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_about","after":{"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."},"detail":"Field `error` was added to `get_about` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_about","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_about` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_about","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_about` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_about","after":{"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."},"detail":"Field `ok` was added to `get_about` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_about","after":{"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."},"detail":"Field `related` was added to `get_about` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_about","after":{"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."},"detail":"Field `summary` was added to `get_about` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_about","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_about` output.","severity":"risky"},{"kind":"description_changed","tool":"get_ai_page","after":"WHAT: Fetches public https://www.ikeytz.com/ai-pages/{locale}/{file}.txt (HTML-parity fulltext). path=/ → index.txt; else path without leading slash + .txt. summary = first 4000 chars; truncated=true if longer. HTTP errors → ok=false. USE for page content. /review has no HTML-parity footer. NEXT: get_serp_snippet for title/description only.","before":"Fetch public /ai-pages/{locale}/… fulltext for a path","detail":"Description of `get_ai_page` changed (85% word delta).","severity":"risky","descriptionDelta":0.8541666666666666},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_ai_page","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_ai_page` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_ai_page","after":"de","detail":"Default of `locale` on `get_ai_page` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.aiPageUrl","tool":"get_ai_page","after":{"type":"string","description":"https://www.ikeytz.com/ai-pages/{locale}/….txt"},"detail":"Field `aiPageUrl` was added to `get_ai_page` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_ai_page","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_ai_page` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_ai_page","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_ai_page` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_ai_page","after":{"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."},"detail":"Field `error` was added to `get_ai_page` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_ai_page","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_ai_page` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_ai_page","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_ai_page` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_ai_page","after":{"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."},"detail":"Field `ok` was added to `get_ai_page` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.path","tool":"get_ai_page","after":{"type":"string","description":"Resolved path"},"detail":"Field `path` was added to `get_ai_page` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_ai_page","after":{"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."},"detail":"Field `related` was added to `get_ai_page` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_ai_page","after":{"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."},"detail":"Field `summary` was added to `get_ai_page` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_ai_page","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_ai_page` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.truncated","tool":"get_ai_page","after":{"type":"boolean","description":"true if body was cut at 4000 chars"},"detail":"Field `truncated` was added to `get_ai_page` output.","severity":"risky"},{"kind":"description_changed","tool":"get_ai_txt","after":"WHAT: Fetch /.well-known/ai.txt — crawl/training policy (ai-input yes with attribution, ai-train=no, contact). Must be respected when quoting site text.","before":"Fetch /.well-known/ai.txt (full mirror; optional offset/limit)","detail":"Description of `get_ai_txt` changed (82% word delta).","severity":"risky","descriptionDelta":0.8214285714285714},{"kind":"default_changed","path":"inputSchema.properties.offset","tool":"get_ai_txt","after":0,"detail":"Default of `offset` on `get_ai_txt` changed unset → 0.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_ai_txt","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.bytesReturned","tool":"get_ai_txt","after":{"type":"number","description":"UTF-8 byte length of the returned body window."},"detail":"Field `bytesReturned` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_ai_txt","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_ai_txt","after":{"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."},"detail":"Field `error` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_ai_txt","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.limit","tool":"get_ai_txt","after":{"type":["number","null"],"description":"Applied line limit, or null if the caller omitted limit."},"detail":"Field `limit` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_ai_txt","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.nextOffset","tool":"get_ai_txt","after":{"type":["number","null"],"description":"offset + returnedLines when more lines remain; else null. Pass as the next offset."},"detail":"Field `nextOffset` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.offset","tool":"get_ai_txt","after":{"type":"number","description":"Applied 0-based line offset."},"detail":"Field `offset` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_ai_txt","after":{"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."},"detail":"Field `ok` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.path","tool":"get_ai_txt","after":{"type":"string","description":"Public path on www, e.g. /llms.txt or /.well-known/ai.txt"},"detail":"Field `path` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_ai_txt","after":{"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."},"detail":"Field `related` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.returnedLines","tool":"get_ai_txt","after":{"type":"number","description":"How many lines are in summary/body this call."},"detail":"Field `returnedLines` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.returnedUrls","tool":"get_ai_txt","after":{"type":"number","description":"Lines in this window that start with http(s)://"},"detail":"Field `returnedUrls` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_ai_txt","after":{"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."},"detail":"Field `summary` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_ai_txt","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.totalLines","tool":"get_ai_txt","after":{"type":"number","description":"Line count of the fetched text (after byte cap)."},"detail":"Field `totalLines` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.totalUrls","tool":"get_ai_txt","after":{"type":"number","description":"http(s) lines in the fetched text."},"detail":"Field `totalUrls` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.truncated","tool":"get_ai_txt","after":{"type":"boolean","description":"true if fetch hit a byte cap OR offset+limit left more lines."},"detail":"Field `truncated` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.which","tool":"get_ai_txt","after":{"type":"string","description":"Resolved discovery id after alias fold (llms, sitemap-txt, ai-catalog, …)."},"detail":"Field `which` was added to `get_ai_txt` output.","severity":"risky"},{"kind":"description_changed","tool":"get_auswahl_item","after":"WHAT: One Auswahl situation page. REQUIRED slug from list_auswahl. RETURNS slug + canonicalUrl /auswahl/{slug}. USE after the user described a lockout/key situation. NEXT: get_ai_page({path:'/auswahl/'+slug}) for fulltext; get_invoice_line_items for euro.","before":"One Auswahl detail page by slug","detail":"Description of `get_auswahl_item` changed (86% word delta).","severity":"risky","descriptionDelta":0.8571428571428572},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_auswahl_item","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_auswahl_item` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_auswahl_item","after":"de","detail":"Default of `locale` on `get_auswahl_item` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_auswahl_item","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_auswahl_item` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_auswahl_item","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_auswahl_item` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_auswahl_item","after":{"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."},"detail":"Field `error` was added to `get_auswahl_item` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_auswahl_item","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_auswahl_item` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_auswahl_item","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_auswahl_item` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_auswahl_item","after":{"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."},"detail":"Field `ok` was added to `get_auswahl_item` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_auswahl_item","after":{"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."},"detail":"Field `related` was added to `get_auswahl_item` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.slug","tool":"get_auswahl_item","after":{"type":"string","description":"Resolved Auswahl slug"},"detail":"Field `slug` was added to `get_auswahl_item` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_auswahl_item","after":{"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."},"detail":"Field `summary` was added to `get_auswahl_item` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_auswahl_item","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_auswahl_item` output.","severity":"risky"},{"kind":"description_changed","tool":"get_business_identity","after":"WHO: Legal/trade identity and NAP for agents and citations. RETURNS: gewerbeName, legalName, tradeName, inhaber (Mahmud Reza Kashani, Einzelunternehmer), street/postal/city/country, mobile/landline/fax/email, website, walkIn=false. canonicalUrl = /impressum. USE for impressum-grade facts, schema.org LocalBusiness fields, 'who owns ikeytz'. DOES NOT: prove licenses beyond what the site states; does not accept updates. walkIn is always false — do not send customers to the office. NEXT: get_legal(doc=impressum), get_contact, get_geo_office.","before":"Business identity: owner, legal/trade names, NAP, phones, email, no walk-in.","detail":"Description of `get_business_identity` changed (93% word delta).","severity":"risky","descriptionDelta":0.9285714285714286},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_business_identity","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_business_identity` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_business_identity","after":"de","detail":"Default of `locale` on `get_business_identity` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_business_identity","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_business_identity","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.city","tool":"get_business_identity","after":{"type":"string","description":"City"},"detail":"Field `city` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.country","tool":"get_business_identity","after":{"type":"string","description":"Country"},"detail":"Field `country` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.email","tool":"get_business_identity","after":{"type":"string","description":"Public email"},"detail":"Field `email` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_business_identity","after":{"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."},"detail":"Field `error` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.fax","tool":"get_business_identity","after":{"type":"string","description":"Fax display number"},"detail":"Field `fax` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.gewerbeName","tool":"get_business_identity","after":{"type":"string","description":"Registered business name"},"detail":"Field `gewerbeName` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_business_identity","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.inhaber","tool":"get_business_identity","after":{"type":"string","description":"Owner full name"},"detail":"Field `inhaber` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.landline","tool":"get_business_identity","after":{"type":"string","description":"Landline display number"},"detail":"Field `landline` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.legalName","tool":"get_business_identity","after":{"type":"string","description":"Legal name"},"detail":"Field `legalName` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_business_identity","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.mobile","tool":"get_business_identity","after":{"type":"string","description":"Mobile display number"},"detail":"Field `mobile` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_business_identity","after":{"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."},"detail":"Field `ok` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.postal","tool":"get_business_identity","after":{"type":"string","description":"Postal code"},"detail":"Field `postal` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_business_identity","after":{"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."},"detail":"Field `related` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.street","tool":"get_business_identity","after":{"type":"string","description":"Office street (no walk-in)"},"detail":"Field `street` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_business_identity","after":{"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."},"detail":"Field `summary` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_business_identity","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tradeName","tool":"get_business_identity","after":{"type":"string","description":"Trade / SEO name"},"detail":"Field `tradeName` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.walkIn","tool":"get_business_identity","after":{"type":"boolean","description":"Always false — no shop walk-in"},"detail":"Field `walkIn` was added to `get_business_identity` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.website","tool":"get_business_identity","after":{"type":"string","description":"Canonical website URL"},"detail":"Field `website` was added to `get_business_identity` output.","severity":"risky"},{"kind":"description_changed","tool":"get_contact","after":"WHAT: Public phones, fax, email, office address object. DOES NOT submit the website contact form and must not claim it did. USE to give the user a number. NEXT: compose_tel_mobile, compose_tel_landline, compose_mailto, compose_whatsapp, list_whatsapp_options.","before":"Phones, fax, email, office address — does NOT submit forms","detail":"Description of `get_contact` changed (76% word delta).","severity":"risky","descriptionDelta":0.7575757575757576},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_contact","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_contact` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_contact","after":"de","detail":"Default of `locale` on `get_contact` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.address","tool":"get_contact","after":{"type":"object","description":"Office postal address (no walk-in).","additionalProperties":true},"detail":"Field `address` was added to `get_contact` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_contact","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_contact` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_contact","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_contact` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.email","tool":"get_contact","after":{"type":"string","description":"Public info@ email."},"detail":"Field `email` was added to `get_contact` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_contact","after":{"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."},"detail":"Field `error` was added to `get_contact` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.fax","tool":"get_contact","after":{"type":"string","description":"Fax display."},"detail":"Field `fax` was added to `get_contact` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_contact","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_contact` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.landline","tool":"get_contact","after":{"type":"string","description":"Landline display (Festnetz)."},"detail":"Field `landline` was added to `get_contact` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_contact","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_contact` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.mobile","tool":"get_contact","after":{"type":"string","description":"Mobile display (Handy), 24/7."},"detail":"Field `mobile` was added to `get_contact` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_contact","after":{"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."},"detail":"Field `ok` was added to `get_contact` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_contact","after":{"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."},"detail":"Field `related` was added to `get_contact` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_contact","after":{"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."},"detail":"Field `summary` was added to `get_contact` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_contact","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_contact` output.","severity":"risky"},{"kind":"description_changed","tool":"get_discovery","after":"WHAT: Fetch one public discovery file from www and return a line window. REQUIRED which. IDs (aliases folded): llms, llms-full, llms-index, llms-keywords, llms-serp, llms-impressum-kontakt, llms-orte-geo, llms-urheberrecht, llms-copyright, llms-mcp-server, llms-mcp-web, robots, sitemap-txt, sitemap-xml, ai-txt, ai-plugin, answer-engine, ai-catalog, auth-md, mcp-readme, agent-skills. summary = the line window (this is the file body). Use offset/limit + nextOffset to page. Byte caps apply (keywords huge). Unknown which → unknown_discovery. Prefer dedicated get_llms_txt / get_sitemap_txt / get_llms_mcp_server when you know the file. Policy files say ai-train=no.","before":"Fetch a public discovery file (full mirror; optional line window). which=llms|llms-full|llms-mcp-server|llms-mcp-web|llms-index|ai-txt|sitemap-txt|robots|… · offset/limit = line window","detail":"Description of `get_discovery` changed (74% word delta).","severity":"risky","descriptionDelta":0.7435897435897436},{"kind":"default_changed","path":"inputSchema.properties.offset","tool":"get_discovery","after":0,"detail":"Default of `offset` on `get_discovery` changed unset → 0.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_discovery","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_discovery` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.bytesReturned","tool":"get_discovery","after":{"type":"number","description":"UTF-8 byte length of the returned body window."},"detail":"Field `bytesReturned` was added to `get_discovery` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_discovery","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_discovery` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_discovery","after":{"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."},"detail":"Field `error` was added to `get_discovery` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_discovery","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_discovery` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.limit","tool":"get_discovery","after":{"type":["number","null"],"description":"Applied line limit, or null if the caller omitted limit."},"detail":"Field `limit` was added to `get_discovery` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_discovery","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_discovery` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.nextOffset","tool":"get_discovery","after":{"type":["number","null"],"description":"offset + returnedLines when more lines remain; else null. Pass as the next offset."},"detail":"Field `nextOffset` was added to `get_discovery` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.offset","tool":"get_discovery","after":{"type":"number","description":"Applied 0-based line offset."},"detail":"Field `offset` was added to `get_discovery` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_discovery","after":{"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."},"detail":"Field `ok` was added to `get_discovery` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.path","tool":"get_discovery","after":{"type":"string","description":"Public path on www, e.g. /llms.txt or /.well-known/ai.txt"},"detail":"Field `path` was added to `get_discovery` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_discovery","after":{"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."},"detail":"Field `related` was added to `get_discovery` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.returnedLines","tool":"get_discovery","after":{"type":"number","description":"How many lines are in summary/body this call."},"detail":"Field `returnedLines` was added to `get_discovery` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.returnedUrls","tool":"get_discovery","after":{"type":"number","description":"Lines in this window that start with http(s)://"},"detail":"Field `returnedUrls` was added to `get_discovery` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_discovery","after":{"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."},"detail":"Field `summary` was added to `get_discovery` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_discovery","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_discovery` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.totalLines","tool":"get_discovery","after":{"type":"number","description":"Line count of the fetched text (after byte cap)."},"detail":"Field `totalLines` was added to `get_discovery` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.totalUrls","tool":"get_discovery","after":{"type":"number","description":"http(s) lines in the fetched text."},"detail":"Field `totalUrls` was added to `get_discovery` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.truncated","tool":"get_discovery","after":{"type":"boolean","description":"true if fetch hit a byte cap OR offset+limit left more lines."},"detail":"Field `truncated` was added to `get_discovery` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.which","tool":"get_discovery","after":{"type":"string","description":"Resolved discovery id after alias fold (llms, sitemap-txt, ai-catalog, …)."},"detail":"Field `which` was added to `get_discovery` output.","severity":"risky"},{"kind":"description_changed","tool":"get_emergency","after":"WHAT: Pointer to the 24h Notfall-Türöffnung page. summary includes mobile number. canonicalUrl = /notfall-tueroeffnung (locale-prefixed). DOES NOT dispatch a technician or take a booking. NEXT: compose_tel_mobile or compose_whatsapp(option=zugefallen|abgeschlossen).","before":"Emergency locksmith / Notfall-Türöffnung page","detail":"Description of `get_emergency` changed (85% word delta).","severity":"risky","descriptionDelta":0.8529411764705882},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_emergency","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_emergency` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_emergency","after":"de","detail":"Default of `locale` on `get_emergency` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_emergency","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_emergency` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_emergency","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_emergency` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_emergency","after":{"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."},"detail":"Field `error` was added to `get_emergency` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_emergency","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_emergency` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_emergency","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_emergency` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_emergency","after":{"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."},"detail":"Field `ok` was added to `get_emergency` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_emergency","after":{"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."},"detail":"Field `related` was added to `get_emergency` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_emergency","after":{"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."},"detail":"Field `summary` was added to `get_emergency` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_emergency","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_emergency` output.","severity":"risky"},{"kind":"description_changed","tool":"get_faq","after":"WHAT: One FAQ Q+A. Lookup: exact id match, else first question/answer substring (lowercase) for q. Missing both or no hit → ok=false faq_not_found. RETURNS id, question, answer. Prefer id from list_faq.","before":"FAQ answer by id or search q","detail":"Description of `get_faq` changed (83% word delta).","severity":"risky","descriptionDelta":0.8333333333333334},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_faq","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_faq` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_faq","after":"de","detail":"Default of `locale` on `get_faq` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.answer","tool":"get_faq","after":{"type":"string","description":"Answer text"},"detail":"Field `answer` was added to `get_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_faq","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_faq","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_faq","after":{"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."},"detail":"Field `error` was added to `get_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_faq","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.id","tool":"get_faq","after":{"type":"string","description":"FAQ id"},"detail":"Field `id` was added to `get_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_faq","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_faq","after":{"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."},"detail":"Field `ok` was added to `get_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.question","tool":"get_faq","after":{"type":"string","description":"Question text"},"detail":"Field `question` was added to `get_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_faq","after":{"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."},"detail":"Field `related` was added to `get_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_faq","after":{"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."},"detail":"Field `summary` was added to `get_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_faq","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_faq` output.","severity":"risky"},{"kind":"description_changed","tool":"get_geo_office","after":"WHAT: Office coordinates once (SITE.geo), street/postal/city, walkIn=false. NOT a customer shop — do not navigate users there for service. Service happens on site in the 52-place area. USE for NAP/geo citations. NEXT: get_contact, list_service_areas.","before":"Office geo once (lat/lng, google_maps, icbm) — not a walk-in shop","detail":"Description of `get_geo_office` changed (82% word delta).","severity":"risky","descriptionDelta":0.8205128205128205},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_geo_office","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_geo_office` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_geo_office","after":"de","detail":"Default of `locale` on `get_geo_office` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_geo_office","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_geo_office` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_geo_office","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_geo_office` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.city","tool":"get_geo_office","after":{"type":"string","description":"Office city (Ludwigsburg)."},"detail":"Field `city` was added to `get_geo_office` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_geo_office","after":{"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."},"detail":"Field `error` was added to `get_geo_office` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.google_maps","tool":"get_geo_office","after":{"type":"string","description":"Paste-ready 'lat, lng' for Google Maps search (same digits as lat/lng)."},"detail":"Field `google_maps` was added to `get_geo_office` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_geo_office","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_geo_office` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.icbm","tool":"get_geo_office","after":{"type":"string","description":"ICBM 'lat, lng' string (same as google_maps)."},"detail":"Field `icbm` was added to `get_geo_office` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.lat","tool":"get_geo_office","after":{"type":"number","description":"WGS84 latitude of THIS place or the office. Unique per slug — never a silent Pattonville fallback. Example Pattonville ≈ 48.863."},"detail":"Field `lat` was added to `get_geo_office` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.lng","tool":"get_geo_office","after":{"type":"number","description":"WGS84 longitude of THIS place or the office. Example Pattonville ≈ 9.185."},"detail":"Field `lng` was added to `get_geo_office` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_geo_office","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_geo_office` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_geo_office","after":{"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."},"detail":"Field `ok` was added to `get_geo_office` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.postal","tool":"get_geo_office","after":{"type":"string","description":"Office PLZ."},"detail":"Field `postal` was added to `get_geo_office` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_geo_office","after":{"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."},"detail":"Field `related` was added to `get_geo_office` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.street","tool":"get_geo_office","after":{"type":"string","description":"Office street line."},"detail":"Field `street` was added to `get_geo_office` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_geo_office","after":{"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."},"detail":"Field `summary` was added to `get_geo_office` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_geo_office","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_geo_office` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.walkIn","tool":"get_geo_office","after":{"type":"boolean","const":false,"description":"Always false."},"detail":"Field `walkIn` was added to `get_geo_office` output.","severity":"risky"},{"kind":"description_changed","tool":"get_invoice_line_items","after":"WHAT: Official invoice line items from the price-matrix SSOT (same numbers as /preise). NOT a booking and NOT a PDF. REQUIRED situationKey — canonical: opening_slam, opening_locked, pkg_slam_only, pkg_locked_only, pkg_key_slam, pkg_key_locked, cylinder_only, cylinder_mount. Aliases: zugefallen|tuer_zugefallen|tuer-zugefallen → opening_slam (more aliases in error.aliases when unknown). whenKey: day|night|now (omit or now = get_ort_datetime clock; optional at=). breakdown=true splits pkg_key_* into opening_* + cylinder_mount_same_trip. RETURNS situationKey (canonical), situationLabelDe, whenKey, whenSource, line_items[{id,amountEur,priceDisplay,…}], totalEur, currency=EUR, vat_note. Unknown key → ok=false + knownSituations + aliases. NEXT: get_contact / compose_tel_mobile to actually reach the business. Do not add VAT.","before":"Invoice line items for a situation (SSOT): situationKey + whenKey day|night|now. Omit whenKey or now = get_ort_datetime clock. Optional breakdown splits packages into step1+mount.","detail":"Description of `get_invoice_line_items` changed (79% word delta).","severity":"risky","descriptionDelta":0.7906976744186046},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_invoice_line_items","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_invoice_line_items` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_invoice_line_items","after":"de","detail":"Default of `locale` on `get_invoice_line_items` changed unset → \"de\".","severity":"risky"},{"kind":"default_changed","path":"inputSchema.properties.breakdown","tool":"get_invoice_line_items","after":false,"detail":"Default of `breakdown` on `get_invoice_line_items` changed unset → false.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_invoice_line_items","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_invoice_line_items` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_invoice_line_items","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_invoice_line_items` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_invoice_line_items","after":{"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."},"detail":"Field `error` was added to `get_invoice_line_items` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_invoice_line_items","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_invoice_line_items` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.knownSituations","tool":"get_invoice_line_items","after":{"type":"array","description":"Valid keys when ok=false"},"detail":"Field `knownSituations` was added to `get_invoice_line_items` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.line_items","tool":"get_invoice_line_items","after":{"type":"array","description":"Invoice rows"},"detail":"Field `line_items` was added to `get_invoice_line_items` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_invoice_line_items","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_invoice_line_items` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_invoice_line_items","after":{"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."},"detail":"Field `ok` was added to `get_invoice_line_items` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_invoice_line_items","after":{"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."},"detail":"Field `related` was added to `get_invoice_line_items` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.situationKey","tool":"get_invoice_line_items","after":{"type":"string","description":"Resolved situation id"},"detail":"Field `situationKey` was added to `get_invoice_line_items` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.situationLabelDe","tool":"get_invoice_line_items","after":{"type":"string","description":"German situation label"},"detail":"Field `situationLabelDe` was added to `get_invoice_line_items` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_invoice_line_items","after":{"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."},"detail":"Field `summary` was added to `get_invoice_line_items` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_invoice_line_items","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_invoice_line_items` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.totalEur","tool":"get_invoice_line_items","after":{"type":"number","description":"Sum in euro"},"detail":"Field `totalEur` was added to `get_invoice_line_items` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.whenKey","tool":"get_invoice_line_items","after":{"type":"string","description":"Resolved day|night"},"detail":"Field `whenKey` was added to `get_invoice_line_items` output.","severity":"risky"},{"kind":"description_changed","tool":"get_it","after":"WHAT: HTML page /it — two MCP machines documented. RETURNS website={name:com.ikeytz/website,mcp,card,npm,cli,readme=npm CLI,httpReadme=www /mcp-readme.md}, maps={name:com.ikeytz/maps,… no httpReadme}, proxy=false, page=/it, itEmail, aiEmail. USE to tell an agent there are TWO endpoints (www vs maps). www /mcp never calls maps /mcp. HTML path /it is not Italian. Hub HTML is /mcp-hub (get_mcp_hub). CLI npm is a third channel, not this HTTP server.","before":"Two MCP machines: com.ikeytz/website and com.ikeytz/maps. www does not proxy maps.","detail":"Description of `get_it` changed (80% word delta).","severity":"risky","descriptionDelta":0.803921568627451},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_it","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_it` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_it","after":"de","detail":"Default of `locale` on `get_it` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.aiEmail","tool":"get_it","after":{"type":"string","description":"Public AI/abuse mailbox."},"detail":"Field `aiEmail` was added to `get_it` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_it","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_it` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_it","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_it` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_it","after":{"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."},"detail":"Field `error` was added to `get_it` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_it","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_it` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.itEmail","tool":"get_it","after":{"type":"string","description":"Public IT contact mailbox."},"detail":"Field `itEmail` was added to `get_it` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_it","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_it` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.maps","tool":"get_it","after":{"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"},"detail":"Field `maps` was added to `get_it` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_it","after":{"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."},"detail":"Field `ok` was added to `get_it` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.page","tool":"get_it","after":{"type":"string","format":"uri","description":"Locale /it URL."},"detail":"Field `page` was added to `get_it` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.proxy","tool":"get_it","after":{"type":"boolean","const":false,"description":"www does not proxy maps."},"detail":"Field `proxy` was added to `get_it` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_it","after":{"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."},"detail":"Field `related` was added to `get_it` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_it","after":{"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."},"detail":"Field `summary` was added to `get_it` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_it","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_it` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.website","tool":"get_it","after":{"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"},"detail":"Field `website` was added to `get_it` output.","severity":"risky"},{"kind":"description_changed","tool":"get_legal","after":"WHAT: Pointer to one legal HTML page. REQUIRED doc enum. Unknown doc → ok=false unknown_doc hint=/impressum. RETURNS doc + canonicalUrl. For full text call get_ai_page({path:'/'+doc}) or get_discovery(which=llms-urheberrecht) for the copyright corpus. German legal text is binding; /llms-copyright.txt is EN courtesy.","before":"Legal page: impressum|datenschutz|agb|nutzungsbedingungen|widerruf|urheberrecht","detail":"Description of `get_legal` changed (90% word delta).","severity":"risky","descriptionDelta":0.9047619047619048},{"kind":"enum_narrowed","path":"inputSchema.properties.doc","tool":"get_legal","after":"enum[impressum,datenschutz,agb,nutzungsbedingungen,widerruf,urheberrecht]","before":"open","detail":"`doc` on `get_legal` narrowed to a closed enum (impressum, datenschutz, agb, nutzungsbedingungen, widerruf, urheberrecht); previously valid values may now be rejected.","severity":"breaking"},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_legal","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_legal` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_legal","after":"de","detail":"Default of `locale` on `get_legal` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_legal","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_legal` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_legal","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_legal` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.doc","tool":"get_legal","after":{"type":"string","description":"Legal document id"},"detail":"Field `doc` was added to `get_legal` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_legal","after":{"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."},"detail":"Field `error` was added to `get_legal` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_legal","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_legal` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_legal","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_legal` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_legal","after":{"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."},"detail":"Field `ok` was added to `get_legal` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_legal","after":{"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."},"detail":"Field `related` was added to `get_legal` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_legal","after":{"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."},"detail":"Field `summary` was added to `get_legal` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_legal","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_legal` output.","severity":"risky"},{"kind":"description_changed","tool":"get_links","after":"WHAT: Pointer to /links (directories, city sites, HWK, Webmail shortcut). External MCP catalogs (npm, registry, mcpbeat, Glama, getlulu, Smithery) are on get_mcp_hub.publicLinks, not this tool.","before":"Links / directories page","detail":"Description of `get_links` changed (93% word delta).","severity":"risky","descriptionDelta":0.9259259259259259},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_links","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_links` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_links","after":"de","detail":"Default of `locale` on `get_links` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_links","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_links` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_links","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_links` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_links","after":{"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."},"detail":"Field `error` was added to `get_links` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_links","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_links` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_links","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_links` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_links","after":{"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."},"detail":"Field `ok` was added to `get_links` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_links","after":{"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."},"detail":"Field `related` was added to `get_links` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_links","after":{"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."},"detail":"Field `summary` was added to `get_links` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_links","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_links` output.","severity":"risky"},{"kind":"description_changed","tool":"get_llms_mcp_server","after":"WHAT: Fetch /llms-mcp-server.txt — prose catalog of THIS HTTP server (45 Read/Link tools, how to call, no login). Same as get_discovery(which=llms-mcp-server). Not the npm CLI README. Not maps.","before":"Fetch /llms-mcp-server.txt — public Server-MCP tool catalog (all tools, how to call, no login).","detail":"Description of `get_llms_mcp_server` changed (64% word delta).","severity":"risky","descriptionDelta":0.6363636363636364},{"kind":"default_changed","path":"inputSchema.properties.offset","tool":"get_llms_mcp_server","after":0,"detail":"Default of `offset` on `get_llms_mcp_server` changed unset → 0.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_llms_mcp_server","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.bytesReturned","tool":"get_llms_mcp_server","after":{"type":"number","description":"UTF-8 byte length of the returned body window."},"detail":"Field `bytesReturned` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_llms_mcp_server","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_llms_mcp_server","after":{"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."},"detail":"Field `error` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_llms_mcp_server","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.limit","tool":"get_llms_mcp_server","after":{"type":["number","null"],"description":"Applied line limit, or null if the caller omitted limit."},"detail":"Field `limit` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_llms_mcp_server","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.nextOffset","tool":"get_llms_mcp_server","after":{"type":["number","null"],"description":"offset + returnedLines when more lines remain; else null. Pass as the next offset."},"detail":"Field `nextOffset` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.offset","tool":"get_llms_mcp_server","after":{"type":"number","description":"Applied 0-based line offset."},"detail":"Field `offset` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_llms_mcp_server","after":{"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."},"detail":"Field `ok` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.path","tool":"get_llms_mcp_server","after":{"type":"string","description":"Public path on www, e.g. /llms.txt or /.well-known/ai.txt"},"detail":"Field `path` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_llms_mcp_server","after":{"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."},"detail":"Field `related` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.returnedLines","tool":"get_llms_mcp_server","after":{"type":"number","description":"How many lines are in summary/body this call."},"detail":"Field `returnedLines` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.returnedUrls","tool":"get_llms_mcp_server","after":{"type":"number","description":"Lines in this window that start with http(s)://"},"detail":"Field `returnedUrls` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_llms_mcp_server","after":{"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."},"detail":"Field `summary` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_llms_mcp_server","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.totalLines","tool":"get_llms_mcp_server","after":{"type":"number","description":"Line count of the fetched text (after byte cap)."},"detail":"Field `totalLines` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.totalUrls","tool":"get_llms_mcp_server","after":{"type":"number","description":"http(s) lines in the fetched text."},"detail":"Field `totalUrls` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.truncated","tool":"get_llms_mcp_server","after":{"type":"boolean","description":"true if fetch hit a byte cap OR offset+limit left more lines."},"detail":"Field `truncated` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.which","tool":"get_llms_mcp_server","after":{"type":"string","description":"Resolved discovery id after alias fold (llms, sitemap-txt, ai-catalog, …)."},"detail":"Field `which` was added to `get_llms_mcp_server` output.","severity":"risky"},{"kind":"description_changed","tool":"get_llms_mcp_web","after":"WHAT: Fetch /llms-mcp-web.txt — browser WebMCP catalog (early bootstrap tools + full list). Same executeMcpTool handlers as HTTP /mcp, different transport (document.modelContext). Not this streamable-http endpoint.","before":"Fetch /llms-mcp-web.txt — public WebMCP (browser) tool catalog (bootstrap + full list, no login).","detail":"Description of `get_llms_mcp_web` changed (65% word delta).","severity":"risky","descriptionDelta":0.6451612903225806},{"kind":"default_changed","path":"inputSchema.properties.offset","tool":"get_llms_mcp_web","after":0,"detail":"Default of `offset` on `get_llms_mcp_web` changed unset → 0.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_llms_mcp_web","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.bytesReturned","tool":"get_llms_mcp_web","after":{"type":"number","description":"UTF-8 byte length of the returned body window."},"detail":"Field `bytesReturned` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_llms_mcp_web","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_llms_mcp_web","after":{"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."},"detail":"Field `error` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_llms_mcp_web","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.limit","tool":"get_llms_mcp_web","after":{"type":["number","null"],"description":"Applied line limit, or null if the caller omitted limit."},"detail":"Field `limit` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_llms_mcp_web","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.nextOffset","tool":"get_llms_mcp_web","after":{"type":["number","null"],"description":"offset + returnedLines when more lines remain; else null. Pass as the next offset."},"detail":"Field `nextOffset` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.offset","tool":"get_llms_mcp_web","after":{"type":"number","description":"Applied 0-based line offset."},"detail":"Field `offset` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_llms_mcp_web","after":{"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."},"detail":"Field `ok` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.path","tool":"get_llms_mcp_web","after":{"type":"string","description":"Public path on www, e.g. /llms.txt or /.well-known/ai.txt"},"detail":"Field `path` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_llms_mcp_web","after":{"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."},"detail":"Field `related` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.returnedLines","tool":"get_llms_mcp_web","after":{"type":"number","description":"How many lines are in summary/body this call."},"detail":"Field `returnedLines` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.returnedUrls","tool":"get_llms_mcp_web","after":{"type":"number","description":"Lines in this window that start with http(s)://"},"detail":"Field `returnedUrls` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_llms_mcp_web","after":{"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."},"detail":"Field `summary` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_llms_mcp_web","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.totalLines","tool":"get_llms_mcp_web","after":{"type":"number","description":"Line count of the fetched text (after byte cap)."},"detail":"Field `totalLines` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.totalUrls","tool":"get_llms_mcp_web","after":{"type":"number","description":"http(s) lines in the fetched text."},"detail":"Field `totalUrls` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.truncated","tool":"get_llms_mcp_web","after":{"type":"boolean","description":"true if fetch hit a byte cap OR offset+limit left more lines."},"detail":"Field `truncated` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.which","tool":"get_llms_mcp_web","after":{"type":"string","description":"Resolved discovery id after alias fold (llms, sitemap-txt, ai-catalog, …)."},"detail":"Field `which` was added to `get_llms_mcp_web` output.","severity":"risky"},{"kind":"description_changed","tool":"get_llms_txt","after":"WHAT: Fetch https://www.ikeytz.com/llms.txt (short AI landmap). Same engine as get_discovery(which=llms). summary = file window. USE as the first discovery read. Full dump: get_discovery(which=llms-full). MCP catalog: get_llms_mcp_server.","before":"Fetch /llms.txt (full mirror; optional offset/limit lines)","detail":"Description of `get_llms_txt` changed (88% word delta).","severity":"risky","descriptionDelta":0.8823529411764706},{"kind":"default_changed","path":"inputSchema.properties.offset","tool":"get_llms_txt","after":0,"detail":"Default of `offset` on `get_llms_txt` changed unset → 0.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_llms_txt","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.bytesReturned","tool":"get_llms_txt","after":{"type":"number","description":"UTF-8 byte length of the returned body window."},"detail":"Field `bytesReturned` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_llms_txt","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_llms_txt","after":{"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."},"detail":"Field `error` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_llms_txt","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.limit","tool":"get_llms_txt","after":{"type":["number","null"],"description":"Applied line limit, or null if the caller omitted limit."},"detail":"Field `limit` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_llms_txt","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.nextOffset","tool":"get_llms_txt","after":{"type":["number","null"],"description":"offset + returnedLines when more lines remain; else null. Pass as the next offset."},"detail":"Field `nextOffset` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.offset","tool":"get_llms_txt","after":{"type":"number","description":"Applied 0-based line offset."},"detail":"Field `offset` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_llms_txt","after":{"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."},"detail":"Field `ok` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.path","tool":"get_llms_txt","after":{"type":"string","description":"Public path on www, e.g. /llms.txt or /.well-known/ai.txt"},"detail":"Field `path` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_llms_txt","after":{"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."},"detail":"Field `related` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.returnedLines","tool":"get_llms_txt","after":{"type":"number","description":"How many lines are in summary/body this call."},"detail":"Field `returnedLines` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.returnedUrls","tool":"get_llms_txt","after":{"type":"number","description":"Lines in this window that start with http(s)://"},"detail":"Field `returnedUrls` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_llms_txt","after":{"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."},"detail":"Field `summary` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_llms_txt","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.totalLines","tool":"get_llms_txt","after":{"type":"number","description":"Line count of the fetched text (after byte cap)."},"detail":"Field `totalLines` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.totalUrls","tool":"get_llms_txt","after":{"type":"number","description":"http(s) lines in the fetched text."},"detail":"Field `totalUrls` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.truncated","tool":"get_llms_txt","after":{"type":"boolean","description":"true if fetch hit a byte cap OR offset+limit left more lines."},"detail":"Field `truncated` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.which","tool":"get_llms_txt","after":{"type":"string","description":"Resolved discovery id after alias fold (llms, sitemap-txt, ai-catalog, …)."},"detail":"Field `which` was added to `get_llms_txt` output.","severity":"risky"},{"kind":"description_changed","tool":"get_mcp_hub","after":"WHAT: HTML hub /mcp-hub ×7 (de has no prefix). NOT Italian, NOT the protocol endpoint. Protocol remains POST https://www.ikeytz.com/mcp (streamable-http). RETURNS same machines as get_it plus publicLinks={website:string[],maps:string[]} (card, HTTP README /mcp-readme.md, npm CLI, llms-mcp-server, official registry, mcpbeat, SSL Labs, Glama, getlulu, Smithery info-3ruf/ikeytz-website-mcp on website[] only), itPage, emails. USE to cite discovery URLs. Smithery is a third-party catalog and needs a public URL on www — not GitHub. Not com.ikeytz/website.","before":"HTML hub /mcp-hub (not Italian /it). Two machines website+maps plus full public URLs (npm, registry, llms, mcpbeat, SSL Labs, Glama, getlulu). /mcp remains the protocol endpoint.","detail":"Description of `get_mcp_hub` changed (68% word delta).","severity":"risky","descriptionDelta":0.676056338028169},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_mcp_hub","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_mcp_hub` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_mcp_hub","after":"de","detail":"Default of `locale` on `get_mcp_hub` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.aiEmail","tool":"get_mcp_hub","after":{"type":"string"},"detail":"Field `aiEmail` was added to `get_mcp_hub` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_mcp_hub","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_mcp_hub` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_mcp_hub","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_mcp_hub` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_mcp_hub","after":{"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."},"detail":"Field `error` was added to `get_mcp_hub` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_mcp_hub","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_mcp_hub` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.itEmail","tool":"get_mcp_hub","after":{"type":"string"},"detail":"Field `itEmail` was added to `get_mcp_hub` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.itPage","tool":"get_mcp_hub","after":{"type":"string","format":"uri","description":"Locale /it URL."},"detail":"Field `itPage` was added to `get_mcp_hub` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_mcp_hub","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_mcp_hub` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.maps","tool":"get_mcp_hub","after":{"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"},"detail":"Field `maps` was added to `get_mcp_hub` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_mcp_hub","after":{"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."},"detail":"Field `ok` was added to `get_mcp_hub` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.page","tool":"get_mcp_hub","after":{"type":"string","format":"uri","description":"Locale /mcp-hub URL."},"detail":"Field `page` was added to `get_mcp_hub` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.proxy","tool":"get_mcp_hub","after":{"type":"boolean","const":false},"detail":"Field `proxy` was added to `get_mcp_hub` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.publicLinks","tool":"get_mcp_hub","after":{"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."},"detail":"Field `publicLinks` was added to `get_mcp_hub` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_mcp_hub","after":{"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."},"detail":"Field `related` was added to `get_mcp_hub` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_mcp_hub","after":{"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."},"detail":"Field `summary` was added to `get_mcp_hub` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_mcp_hub","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_mcp_hub` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.website","tool":"get_mcp_hub","after":{"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"},"detail":"Field `website` was added to `get_mcp_hub` output.","severity":"risky"},{"kind":"description_changed","tool":"get_ort_datetime","after":"WHAT: Europe/Berlin wall clock to the second + whenKey for prices. THIS www tool does NOT look up a place (no slug/plz). maps.ikeytz.com has a different geo clock tool. RULE: whenKey=day only Mo–Fr 08:00:00–17:59:59 Berlin and not a Baden-Württemberg statutory holiday; otherwise night (Sa, So, holiday, or 18:00–07:59). RETURNS ok, stand ('YYYY-MM-DD HH:MM:SS CEST|CET'), iso, unix, date, time, tz, timezone=Europe/Berlin, weekday, weekdayIso (1=Mon), whenKey, holiday (bool), holidayName (or null), rule, invoiceTool=get_invoice_line_items, pricesTool=get_prices. USE before invoicing. NEXT: get_invoice_line_items({situationKey, whenKey: 'now'}) or pass whenKey day|night.","before":"Europe/Berlin clock to the second + whenKey day|night for the price matrix / get_invoice_line_items. Day = Mo–Fr 08:00–18:00 except Baden-Württemberg holidays. Optional at=ISO. No place lookup (maps has slug/plz).","detail":"Description of `get_ort_datetime` changed (72% word delta).","severity":"risky","descriptionDelta":0.7173913043478262},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_ort_datetime","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_ort_datetime` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_ort_datetime","after":"de","detail":"Default of `locale` on `get_ort_datetime` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_ort_datetime","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_ort_datetime","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.date","tool":"get_ort_datetime","after":{"type":"string","description":"YYYY-MM-DD in Berlin."},"detail":"Field `date` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_ort_datetime","after":{"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."},"detail":"Field `error` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_ort_datetime","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.holiday","tool":"get_ort_datetime","after":{"type":"boolean","description":"true if date is a BW statutory holiday."},"detail":"Field `holiday` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.holidayName","tool":"get_ort_datetime","after":{"type":["string","null"],"description":"German holiday name or null. Holidays force whenKey=night."},"detail":"Field `holidayName` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.invoiceTool","tool":"get_ort_datetime","after":{"type":"string","const":"get_invoice_line_items"},"detail":"Field `invoiceTool` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.iso","tool":"get_ort_datetime","after":{"type":"string","description":"ISO-8601 with Berlin offset."},"detail":"Field `iso` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_ort_datetime","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_ort_datetime","after":{"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."},"detail":"Field `ok` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.pricesTool","tool":"get_ort_datetime","after":{"type":"string","const":"get_prices"},"detail":"Field `pricesTool` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_ort_datetime","after":{"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."},"detail":"Field `related` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.rule","tool":"get_ort_datetime","after":{"type":"string","description":"Human rule string for day vs night."},"detail":"Field `rule` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.stand","tool":"get_ort_datetime","after":{"type":"string","description":"Human clock 'YYYY-MM-DD HH:MM:SS CEST|CET' Europe/Berlin."},"detail":"Field `stand` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_ort_datetime","after":{"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."},"detail":"Field `summary` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.time","tool":"get_ort_datetime","after":{"type":"string","description":"HH:MM:SS in Berlin (24h)."},"detail":"Field `time` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.timezone","tool":"get_ort_datetime","after":{"type":"string","const":"Europe/Berlin"},"detail":"Field `timezone` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_ort_datetime","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tz","tool":"get_ort_datetime","after":{"enum":["CET","CEST"],"type":"string","description":"Abbreviation."},"detail":"Field `tz` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.unix","tool":"get_ort_datetime","after":{"type":"number","description":"Unix timestamp seconds."},"detail":"Field `unix` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.weekday","tool":"get_ort_datetime","after":{"type":"string","description":"en-GB short weekday (Mon…Sun)."},"detail":"Field `weekday` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.weekdayIso","tool":"get_ort_datetime","after":{"type":"number","description":"ISO weekday 1=Monday … 7=Sunday."},"detail":"Field `weekdayIso` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.whenKey","tool":"get_ort_datetime","after":{"enum":["day","night"],"type":"string","description":"Price bucket. Pass to get_invoice_line_items.whenKey or use whenKey=now there."},"detail":"Field `whenKey` was added to `get_ort_datetime` output.","severity":"risky"},{"kind":"description_changed","tool":"get_page_summary","after":"WHAT: Stub pointer only — NOT the page body. summary says to use ai-pages or HTML. RETURNS path (locale prefix stripped). USE get_ai_page or get_serp_snippet for real text. Required path.","before":"Short pointer for any marketing path","detail":"Description of `get_page_summary` changed (90% word delta).","severity":"risky","descriptionDelta":0.9},{"kind":"input_property_removed","path":"inputSchema.properties.path","tool":"get_page_summary","before":{"type":"string"},"detail":"Field `path` was removed from `get_page_summary` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.locale","tool":"get_page_summary","before":{"type":"string"},"detail":"Field `locale` was removed from `get_page_summary` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_page_summary","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_page_summary` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_page_summary","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_page_summary` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_page_summary","after":{"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."},"detail":"Field `error` was added to `get_page_summary` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_page_summary","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_page_summary` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_page_summary","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_page_summary` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_page_summary","after":{"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."},"detail":"Field `ok` was added to `get_page_summary` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.path","tool":"get_page_summary","after":{"type":"string","description":"Path without locale prefix"},"detail":"Field `path` was added to `get_page_summary` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_page_summary","after":{"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."},"detail":"Field `related` was added to `get_page_summary` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_page_summary","after":{"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."},"detail":"Field `summary` was added to `get_page_summary` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_page_summary","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_page_summary` output.","severity":"risky"},{"kind":"description_changed","tool":"get_partner_info","after":"WHAT: Partner-werden info. formSubmit=false — agents MUST NOT claim they sent the form. RETURNS partnerEmail for a mailto. NEXT: compose_mailto or tell the user to open /partner-werden themselves.","before":"Partner-werden info page only — form submit disabled for agents","detail":"Description of `get_partner_info` changed (81% word delta).","severity":"risky","descriptionDelta":0.8064516129032258},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_partner_info","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_partner_info` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_partner_info","after":"de","detail":"Default of `locale` on `get_partner_info` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_partner_info","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_partner_info` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_partner_info","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_partner_info` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_partner_info","after":{"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."},"detail":"Field `error` was added to `get_partner_info` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_partner_info","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_partner_info` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_partner_info","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_partner_info` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_partner_info","after":{"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."},"detail":"Field `ok` was added to `get_partner_info` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_partner_info","after":{"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."},"detail":"Field `related` was added to `get_partner_info` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_partner_info","after":{"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."},"detail":"Field `summary` was added to `get_partner_info` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_partner_info","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_partner_info` output.","severity":"risky"},{"kind":"description_changed","tool":"get_prices","after":"WHAT: Published Festpreis matrix (no 'ab €'). Same SSOT as /preise and price-matrix-ssot.json. RETURNS opening[], cylinderAfterOpening, cylinderOnly, packages[] (day/night euro), surcharges[], note, plus matrix keys. USE to list official prices. DOES NOT compute a customer invoice — use get_invoice_line_items(situationKey, whenKey). Day vs night: get_ort_datetime (Mo–Fr 08:00–18:00 Europe/Berlin except BW holidays = day). §19 UStG / no VAT on consumer invoices is in vat_note / site copy — do not add VAT.","before":"Fixed price matrix (no ab-€): door opening day/night, cylinder options. whenKey from get_ort_datetime.","detail":"Description of `get_prices` changed (87% word delta).","severity":"risky","descriptionDelta":0.8695652173913043},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_prices","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_prices` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_prices","after":"de","detail":"Default of `locale` on `get_prices` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_prices","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_prices` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_prices","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_prices` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.cylinderAfterOpening","tool":"get_prices","after":{"type":"object","description":"Cylinder price after an opening"},"detail":"Field `cylinderAfterOpening` was added to `get_prices` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.cylinderOnly","tool":"get_prices","after":{"type":"object","description":"Cylinder-only prices"},"detail":"Field `cylinderOnly` was added to `get_prices` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_prices","after":{"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."},"detail":"Field `error` was added to `get_prices` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_prices","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_prices` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_prices","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_prices` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.note","tool":"get_prices","after":{"type":"string","description":"Legal/price note"},"detail":"Field `note` was added to `get_prices` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_prices","after":{"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."},"detail":"Field `ok` was added to `get_prices` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.opening","tool":"get_prices","after":{"type":"array","description":"Door-opening price blocks"},"detail":"Field `opening` was added to `get_prices` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.packages","tool":"get_prices","after":{"type":"array","description":"Invoice packages (day/night)"},"detail":"Field `packages` was added to `get_prices` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_prices","after":{"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."},"detail":"Field `related` was added to `get_prices` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_prices","after":{"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."},"detail":"Field `summary` was added to `get_prices` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.surcharges","tool":"get_prices","after":{"type":"array","description":"Surcharge rows"},"detail":"Field `surcharges` was added to `get_prices` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_prices","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_prices` output.","severity":"risky"},{"kind":"description_changed","tool":"get_ratgeber","after":"WHAT: Pointer to one Ratgeber. REQUIRED slug from list_ratgeber. Unknown → unknown_ratgeber. NEXT: get_ai_page({path:'/ratgeber/'+slug}).","before":"One Ratgeber page by slug","detail":"Description of `get_ratgeber` changed (81% word delta).","severity":"risky","descriptionDelta":0.8125},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_ratgeber","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_ratgeber` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_ratgeber","after":"de","detail":"Default of `locale` on `get_ratgeber` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_ratgeber","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_ratgeber` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_ratgeber","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_ratgeber` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_ratgeber","after":{"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."},"detail":"Field `error` was added to `get_ratgeber` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_ratgeber","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_ratgeber` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_ratgeber","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_ratgeber` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_ratgeber","after":{"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."},"detail":"Field `ok` was added to `get_ratgeber` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_ratgeber","after":{"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."},"detail":"Field `related` was added to `get_ratgeber` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.slug","tool":"get_ratgeber","after":{"type":"string","description":"Resolved Ratgeber slug"},"detail":"Field `slug` was added to `get_ratgeber` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_ratgeber","after":{"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."},"detail":"Field `summary` was added to `get_ratgeber` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_ratgeber","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_ratgeber` output.","severity":"risky"},{"kind":"description_changed","tool":"get_review_url","after":"WHAT: Short /review redirect to the Google review URL. RETURNS googleReviewUrl (full Google) and canonicalUrl = https://www.ikeytz.com/review. USE when the user wants to leave a review. Not a list of existing ratings.","before":"Google review short URL /review","detail":"Description of `get_review_url` changed (86% word delta).","severity":"risky","descriptionDelta":0.8571428571428572},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_review_url","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_review_url` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_review_url","after":"de","detail":"Default of `locale` on `get_review_url` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_review_url","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_review_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_review_url","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_review_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_review_url","after":{"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."},"detail":"Field `error` was added to `get_review_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.googleReviewUrl","tool":"get_review_url","after":{"type":"string","description":"Full Google review URL"},"detail":"Field `googleReviewUrl` was added to `get_review_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_review_url","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_review_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_review_url","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_review_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_review_url","after":{"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."},"detail":"Field `ok` was added to `get_review_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_review_url","after":{"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."},"detail":"Field `related` was added to `get_review_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_review_url","after":{"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."},"detail":"Field `summary` was added to `get_review_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_review_url","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_review_url` output.","severity":"risky"},{"kind":"description_changed","tool":"get_serp_snippet","after":"WHAT: Slice of /llms-serp.txt around the first occurrence of the target URL (title/description/URL rows). path or url required in practice. If path is not http(s), it is turned into www(locale, path). No match → serp_not_found. RETURNS matchContext (~200 chars before + 400 after). Not a Google API.","before":"Title/description context for a URL from llms-serp.txt","detail":"Description of `get_serp_snippet` changed (85% word delta).","severity":"risky","descriptionDelta":0.8478260869565217},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_serp_snippet","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_serp_snippet` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_serp_snippet","after":"de","detail":"Default of `locale` on `get_serp_snippet` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_serp_snippet","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_serp_snippet` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_serp_snippet","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_serp_snippet` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_serp_snippet","after":{"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."},"detail":"Field `error` was added to `get_serp_snippet` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_serp_snippet","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_serp_snippet` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_serp_snippet","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_serp_snippet` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.matchContext","tool":"get_serp_snippet","after":{"type":"string","description":"Surrounding SERP lines"},"detail":"Field `matchContext` was added to `get_serp_snippet` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_serp_snippet","after":{"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."},"detail":"Field `ok` was added to `get_serp_snippet` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_serp_snippet","after":{"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."},"detail":"Field `related` was added to `get_serp_snippet` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_serp_snippet","after":{"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."},"detail":"Field `summary` was added to `get_serp_snippet` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_serp_snippet","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_serp_snippet` output.","severity":"risky"},{"kind":"description_changed","tool":"get_service_area","after":"WHAT: One service-area place. Lookup order: slug (exact getOrt), else first ORTE with plz === args.plz, else first name substring (lowercase). No silent Pattonville fallback — unknown → ok=false error=unknown_place hint=/einsatzgebiet. RETURNS that place's own lat/lng (52 unique pairs), google_maps, icbm, embed_map, geo_api, maps_mcp, kind, parent. USE when the user names a town or PLZ. NOT verify_zip_code / verify_coordinates (those names do not exist). maps MCP is a second machine. NEXT: get_ai_page path=/schluesseldienst-ludwigsburg-{slug}.","before":"One place by slug, PLZ or name — lat/lng, google_maps, icbm, embed_map, geo_api, maps_mcp","detail":"Description of `get_service_area` changed (82% word delta).","severity":"risky","descriptionDelta":0.8169014084507042},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_service_area","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_service_area` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_service_area","after":"de","detail":"Default of `locale` on `get_service_area` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_service_area","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_service_area","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.embed_map","tool":"get_service_area","after":{"type":"string","format":"uri","description":"iframe/src and maps page: https://maps.ikeytz.com/{slug} (German host, no /en/)."},"detail":"Field `embed_map` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_service_area","after":{"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."},"detail":"Field `error` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.geo_api","tool":"get_service_area","after":{"type":"string","format":"uri","description":"https://maps.ikeytz.com/api/v1/embed/ort/{slug} JSON for the embed."},"detail":"Field `geo_api` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.google_maps","tool":"get_service_area","after":{"type":"string","description":"Paste-ready 'lat, lng' for Google Maps search (same digits as lat/lng)."},"detail":"Field `google_maps` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_service_area","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.icbm","tool":"get_service_area","after":{"type":"string","description":"ICBM 'lat, lng' string (same as google_maps)."},"detail":"Field `icbm` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.kind","tool":"get_service_area","after":{"type":"string","description":"Place kind from orte SSOT (stadtteil / gemeinde / …)."},"detail":"Field `kind` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.lat","tool":"get_service_area","after":{"type":"number","description":"WGS84 latitude of THIS place or the office. Unique per slug — never a silent Pattonville fallback. Example Pattonville ≈ 48.863."},"detail":"Field `lat` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.lng","tool":"get_service_area","after":{"type":"number","description":"WGS84 longitude of THIS place or the office. Example Pattonville ≈ 9.185."},"detail":"Field `lng` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_service_area","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.maps_mcp","tool":"get_service_area","after":{"type":"string","const":"https://maps.ikeytz.com/mcp","format":"uri","description":"maps machine MCP endpoint. www /mcp does not proxy this."},"detail":"Field `maps_mcp` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.name","tool":"get_service_area","after":{"type":"string","description":"German place name as on the website."},"detail":"Field `name` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_service_area","after":{"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."},"detail":"Field `ok` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.parent","tool":"get_service_area","after":{"type":"string","description":"Parent place name when this is a district; else empty/omit."},"detail":"Field `parent` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.plz","tool":"get_service_area","after":{"type":"string","description":"German postcode. First match wins if several places share a PLZ (e.g. 71638 → pattonville)."},"detail":"Field `plz` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_service_area","after":{"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."},"detail":"Field `related` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.slug","tool":"get_service_area","after":{"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}."},"detail":"Field `slug` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_service_area","after":{"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."},"detail":"Field `summary` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_service_area","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_service_area` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.url","tool":"get_service_area","after":{"type":"string","format":"uri","description":"www keyword page https://www.ikeytz.com[/locale]/schluesseldienst-ludwigsburg-{slug}"},"detail":"Field `url` was added to `get_service_area` output.","severity":"risky"},{"kind":"description_changed","tool":"get_sitemap_txt","after":"WHAT: Fetch /sitemap.txt (same URL set as sitemap.xml). ~807 http lines: marketing ×7 + discovery/media. Contains 0× maps.ikeytz.com (intentional). Use offset/limit + totalUrls + nextOffset to page. Dedicated maps list is on maps.ikeytz.com, not here.","before":"Fetch /sitemap.txt — full URL list (~777). Optional offset/limit for line windows. Meta: totalUrls, nextOffset.","detail":"Description of `get_sitemap_txt` changed (79% word delta).","severity":"risky","descriptionDelta":0.7857142857142857},{"kind":"default_changed","path":"inputSchema.properties.offset","tool":"get_sitemap_txt","after":0,"detail":"Default of `offset` on `get_sitemap_txt` changed unset → 0.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_sitemap_txt","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.bytesReturned","tool":"get_sitemap_txt","after":{"type":"number","description":"UTF-8 byte length of the returned body window."},"detail":"Field `bytesReturned` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_sitemap_txt","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_sitemap_txt","after":{"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."},"detail":"Field `error` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_sitemap_txt","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.limit","tool":"get_sitemap_txt","after":{"type":["number","null"],"description":"Applied line limit, or null if the caller omitted limit."},"detail":"Field `limit` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_sitemap_txt","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.nextOffset","tool":"get_sitemap_txt","after":{"type":["number","null"],"description":"offset + returnedLines when more lines remain; else null. Pass as the next offset."},"detail":"Field `nextOffset` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.offset","tool":"get_sitemap_txt","after":{"type":"number","description":"Applied 0-based line offset."},"detail":"Field `offset` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_sitemap_txt","after":{"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."},"detail":"Field `ok` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.path","tool":"get_sitemap_txt","after":{"type":"string","description":"Public path on www, e.g. /llms.txt or /.well-known/ai.txt"},"detail":"Field `path` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_sitemap_txt","after":{"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."},"detail":"Field `related` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.returnedLines","tool":"get_sitemap_txt","after":{"type":"number","description":"How many lines are in summary/body this call."},"detail":"Field `returnedLines` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.returnedUrls","tool":"get_sitemap_txt","after":{"type":"number","description":"Lines in this window that start with http(s)://"},"detail":"Field `returnedUrls` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_sitemap_txt","after":{"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."},"detail":"Field `summary` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_sitemap_txt","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.totalLines","tool":"get_sitemap_txt","after":{"type":"number","description":"Line count of the fetched text (after byte cap)."},"detail":"Field `totalLines` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.totalUrls","tool":"get_sitemap_txt","after":{"type":"number","description":"http(s) lines in the fetched text."},"detail":"Field `totalUrls` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.truncated","tool":"get_sitemap_txt","after":{"type":"boolean","description":"true if fetch hit a byte cap OR offset+limit left more lines."},"detail":"Field `truncated` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.which","tool":"get_sitemap_txt","after":{"type":"string","description":"Resolved discovery id after alias fold (llms, sitemap-txt, ai-catalog, …)."},"detail":"Field `which` was added to `get_sitemap_txt` output.","severity":"risky"},{"kind":"description_changed","tool":"get_wissen_entry","after":"WHAT: One Wissen article. REQUIRED id. summary includes title + first 500 chars of body. structuredContent has id+title (not full body). Unknown id → wissen_not_found. NEXT: get_ai_page({path:'/wissen'}) or canonicalUrl #id.","before":"One Wissen article by id","detail":"Description of `get_wissen_entry` changed (85% word delta).","severity":"risky","descriptionDelta":0.8461538461538461},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"get_wissen_entry","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `get_wissen_entry` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"get_wissen_entry","after":"de","detail":"Default of `locale` on `get_wissen_entry` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"get_wissen_entry","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `get_wissen_entry` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"get_wissen_entry","after":{"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."},"detail":"Field `canonicalUrl` was added to `get_wissen_entry` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"get_wissen_entry","after":{"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."},"detail":"Field `error` was added to `get_wissen_entry` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"get_wissen_entry","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `get_wissen_entry` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.id","tool":"get_wissen_entry","after":{"type":"string","description":"Article id"},"detail":"Field `id` was added to `get_wissen_entry` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"get_wissen_entry","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `get_wissen_entry` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"get_wissen_entry","after":{"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."},"detail":"Field `ok` was added to `get_wissen_entry` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"get_wissen_entry","after":{"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."},"detail":"Field `related` was added to `get_wissen_entry` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"get_wissen_entry","after":{"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."},"detail":"Field `summary` was added to `get_wissen_entry` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.title","tool":"get_wissen_entry","after":{"type":"string","description":"Article title"},"detail":"Field `title` was added to `get_wissen_entry` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"get_wissen_entry","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `get_wissen_entry` output.","severity":"risky"},{"kind":"description_changed","tool":"list_auswahl","after":"WHAT: Auswahl hub groups (situation chooser on /auswahl). RETURNS groups[] {id, hash, hubUrl, slugs[], urls[]}. USE to discover valid slugs for get_auswahl_item. Unknown slug → get_auswahl_item ok=false unknown_auswahl.","before":"Auswahl situations hub and group slugs","detail":"Description of `list_auswahl` changed (89% word delta).","severity":"risky","descriptionDelta":0.8888888888888888},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"list_auswahl","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `list_auswahl` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"list_auswahl","after":"de","detail":"Default of `locale` on `list_auswahl` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"list_auswahl","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `list_auswahl` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"list_auswahl","after":{"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."},"detail":"Field `canonicalUrl` was added to `list_auswahl` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"list_auswahl","after":{"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."},"detail":"Field `error` was added to `list_auswahl` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.groups","tool":"list_auswahl","after":{"type":"array","description":"Auswahl groups with slugs and URLs"},"detail":"Field `groups` was added to `list_auswahl` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"list_auswahl","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `list_auswahl` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"list_auswahl","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `list_auswahl` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"list_auswahl","after":{"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."},"detail":"Field `ok` was added to `list_auswahl` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"list_auswahl","after":{"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."},"detail":"Field `related` was added to `list_auswahl` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"list_auswahl","after":{"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."},"detail":"Field `summary` was added to `list_auswahl` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"list_auswahl","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `list_auswahl` output.","severity":"risky"},{"kind":"description_changed","tool":"list_faq","after":"WHAT: FAQ question list (id + question, no answers). USE get_faq({id}) or get_faq({q}) for one answer. Locale selects which FAQ corpus is loaded on the server.","before":"List FAQ questions","detail":"Description of `list_faq` changed (92% word delta).","severity":"risky","descriptionDelta":0.9166666666666666},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"list_faq","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `list_faq` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"list_faq","after":"de","detail":"Default of `locale` on `list_faq` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"list_faq","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `list_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"list_faq","after":{"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."},"detail":"Field `canonicalUrl` was added to `list_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"list_faq","after":{"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."},"detail":"Field `error` was added to `list_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"list_faq","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `list_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.items","tool":"list_faq","after":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"question":{"type":"string"}}},"description":"FAQ ids and questions"},"detail":"Field `items` was added to `list_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"list_faq","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `list_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"list_faq","after":{"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."},"detail":"Field `ok` was added to `list_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"list_faq","after":{"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."},"detail":"Field `related` was added to `list_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"list_faq","after":{"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."},"detail":"Field `summary` was added to `list_faq` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"list_faq","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `list_faq` output.","severity":"risky"},{"kind":"description_changed","tool":"list_footer","after":"WHAT: Curated internal footer paths including legal + /it + /mcp-hub + /angebot + /ankuendigungen. RETURNS items[] {path,url}. Not a pixel-perfect HTML scrape; external directory URLs live on get_links / MCP_PUBLIC_LINKS via get_mcp_hub. USE to discover legal slugs before get_legal. NEXT: get_legal(doc), get_it, get_mcp_hub.","before":"Internal footer links including legal pages","detail":"Description of `list_footer` changed (90% word delta).","severity":"risky","descriptionDelta":0.9047619047619048},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"list_footer","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `list_footer` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"list_footer","after":"de","detail":"Default of `locale` on `list_footer` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"list_footer","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `list_footer` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"list_footer","after":{"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."},"detail":"Field `canonicalUrl` was added to `list_footer` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"list_footer","after":{"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."},"detail":"Field `error` was added to `list_footer` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"list_footer","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `list_footer` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.items","tool":"list_footer","after":{"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"},"detail":"Field `items` was added to `list_footer` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"list_footer","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `list_footer` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"list_footer","after":{"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."},"detail":"Field `ok` was added to `list_footer` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"list_footer","after":{"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."},"detail":"Field `related` was added to `list_footer` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"list_footer","after":{"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."},"detail":"Field `summary` was added to `list_footer` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"list_footer","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `list_footer` output.","severity":"risky"},{"kind":"description_changed","tool":"list_locales","after":"WHAT: The seven public HTML locales. RETURNS locales[] {id, name, prefix}. prefix is '' for de and '/en' '/fr' '/ru' '/fa' '/ar' '/tr' for others. Host is always www.ikeytz.com (apex redirects). maps.ikeytz.com has NO locales (/en/pattonville = 404). USE before resolve_locale_url. Call with {}.","before":"Available languages: de en fr ru fa ar tr","detail":"Description of `list_locales` changed (83% word delta).","severity":"risky","descriptionDelta":0.825},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"list_locales","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `list_locales` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"list_locales","after":{"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."},"detail":"Field `canonicalUrl` was added to `list_locales` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"list_locales","after":{"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."},"detail":"Field `error` was added to `list_locales` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"list_locales","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `list_locales` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"list_locales","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `list_locales` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locales","tool":"list_locales","after":{"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"},"detail":"Field `locales` was added to `list_locales` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"list_locales","after":{"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."},"detail":"Field `ok` was added to `list_locales` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"list_locales","after":{"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."},"detail":"Field `related` was added to `list_locales` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"list_locales","after":{"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."},"detail":"Field `summary` was added to `list_locales` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"list_locales","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `list_locales` output.","severity":"risky"},{"kind":"description_changed","tool":"list_nav","after":"WHAT: Curated main-header hubs (not a 1:1 dump of every <a> in the header). RETURNS items[]: Start, Notfall, Leistungen, Auswahl, Preise, Einsatzgebiet, Wissen, Ratgeber, FAQ, Kontakt — each path + locale URL + label. DOES NOT include /it, /mcp-hub, /links, locale switcher, or DevSecOps. USE to pick a hub URL. NEXT: get_ai_page(path) or get_page_summary(path) for body text.","before":"Main header navigation links on www.ikeytz.com","detail":"Description of `list_nav` changed (94% word delta).","severity":"risky","descriptionDelta":0.9433962264150944},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"list_nav","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `list_nav` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"list_nav","after":"de","detail":"Default of `locale` on `list_nav` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"list_nav","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `list_nav` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"list_nav","after":{"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."},"detail":"Field `canonicalUrl` was added to `list_nav` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"list_nav","after":{"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."},"detail":"Field `error` was added to `list_nav` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"list_nav","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `list_nav` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.items","tool":"list_nav","after":{"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"},"detail":"Field `items` was added to `list_nav` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"list_nav","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `list_nav` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"list_nav","after":{"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."},"detail":"Field `ok` was added to `list_nav` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"list_nav","after":{"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."},"detail":"Field `related` was added to `list_nav` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"list_nav","after":{"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."},"detail":"Field `summary` was added to `list_nav` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"list_nav","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `list_nav` output.","severity":"risky"},{"kind":"description_changed","tool":"list_ratgeber","after":"WHAT: All Ratgeber slugs and locale URLs /ratgeber/{slug}. USE get_ratgeber({slug}) then get_ai_page for fulltext.","before":"Ratgeber article slugs","detail":"Description of `list_ratgeber` changed (87% word delta).","severity":"risky","descriptionDelta":0.8666666666666667},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"list_ratgeber","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `list_ratgeber` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"list_ratgeber","after":"de","detail":"Default of `locale` on `list_ratgeber` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"list_ratgeber","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `list_ratgeber` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"list_ratgeber","after":{"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."},"detail":"Field `canonicalUrl` was added to `list_ratgeber` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"list_ratgeber","after":{"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."},"detail":"Field `error` was added to `list_ratgeber` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"list_ratgeber","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `list_ratgeber` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"list_ratgeber","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `list_ratgeber` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"list_ratgeber","after":{"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."},"detail":"Field `ok` was added to `list_ratgeber` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"list_ratgeber","after":{"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."},"detail":"Field `related` was added to `list_ratgeber` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.slugs","tool":"list_ratgeber","after":{"type":"array","items":{"type":"string"},"description":"Ratgeber slugs"},"detail":"Field `slugs` was added to `list_ratgeber` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"list_ratgeber","after":{"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."},"detail":"Field `summary` was added to `list_ratgeber` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"list_ratgeber","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `list_ratgeber` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.urls","tool":"list_ratgeber","after":{"type":"array","items":{"type":"string"},"description":"Locale Ratgeber URLs"},"detail":"Field `urls` was added to `list_ratgeber` output.","severity":"risky"},{"kind":"description_changed","tool":"list_service_areas","after":"WHAT: All 52 service-area places (orte SSOT). Each item: slug, name, plz, lat, lng, google_maps, icbm, kind, parent, url (www keyword page), embed_map (https://maps.ikeytz.com/{slug}), geo_api, maps_mcp. related includes maps llms.txt. count=52. USE to pick a slug before get_service_area. DOES NOT verify GPS live. www sitemap contains 0× maps.ikeytz.com. iframe on HTML is DE Ortsseiten only. NEXT: get_service_area({slug}) or maps MCP find_by_geo (not this server).","before":"All 52 service-area places — lat/lng, google_maps, icbm, embed_map, geo_api, maps_mcp per place","detail":"Description of `list_service_areas` changed (81% word delta).","severity":"risky","descriptionDelta":0.8125},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"list_service_areas","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `list_service_areas` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"list_service_areas","after":"de","detail":"Default of `locale` on `list_service_areas` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"list_service_areas","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `list_service_areas` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"list_service_areas","after":{"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."},"detail":"Field `canonicalUrl` was added to `list_service_areas` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.count","tool":"list_service_areas","after":{"type":"number","description":"Always 52 when ok."},"detail":"Field `count` was added to `list_service_areas` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"list_service_areas","after":{"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."},"detail":"Field `error` was added to `list_service_areas` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"list_service_areas","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `list_service_areas` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.items","tool":"list_service_areas","after":{"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."},"detail":"Field `items` was added to `list_service_areas` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"list_service_areas","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `list_service_areas` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"list_service_areas","after":{"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."},"detail":"Field `ok` was added to `list_service_areas` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"list_service_areas","after":{"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."},"detail":"Field `related` was added to `list_service_areas` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"list_service_areas","after":{"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."},"detail":"Field `summary` was added to `list_service_areas` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"list_service_areas","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `list_service_areas` output.","severity":"risky"},{"kind":"description_changed","tool":"list_services","after":"WHAT: Core service list from SITE.services (Türöffnung, Notdienst, Sicherheitstechnik, Schlosswechsel, …) with locale /leistungen#anchor URLs. USE as a menu. For situations (zugefallen, Schlüssel weg) use list_auswahl / get_auswahl_item. For euro amounts use get_prices.","before":"Core services: Türöffnung, Notdienst, Sicherheitstechnik, Schlosswechsel","detail":"Description of `list_services` changed (76% word delta).","severity":"risky","descriptionDelta":0.7575757575757576},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"list_services","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `list_services` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"list_services","after":"de","detail":"Default of `locale` on `list_services` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"list_services","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `list_services` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"list_services","after":{"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."},"detail":"Field `canonicalUrl` was added to `list_services` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"list_services","after":{"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."},"detail":"Field `error` was added to `list_services` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"list_services","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `list_services` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"list_services","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `list_services` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"list_services","after":{"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."},"detail":"Field `ok` was added to `list_services` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"list_services","after":{"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."},"detail":"Field `related` was added to `list_services` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.services","tool":"list_services","after":{"type":"array","description":"Core services with locale URLs"},"detail":"Field `services` was added to `list_services` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"list_services","after":{"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."},"detail":"Field `summary` was added to `list_services` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"list_services","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `list_services` output.","severity":"risky"},{"kind":"description_changed","tool":"list_whatsapp_options","after":"WHAT: Prefab WhatsApp deep links (no chat send). RETURNS options[] {id,label,url}. ids: zugefallen, abgeschlossen, zylinder, beratung (see compose_whatsapp). USE then compose_whatsapp({option}) or open url. Never claims a message was delivered.","before":"WhatsApp prefab options (links only, no form)","detail":"Description of `list_whatsapp_options` changed (85% word delta).","severity":"risky","descriptionDelta":0.8484848484848485},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"list_whatsapp_options","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `list_whatsapp_options` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"list_whatsapp_options","after":"de","detail":"Default of `locale` on `list_whatsapp_options` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"list_whatsapp_options","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `list_whatsapp_options` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"list_whatsapp_options","after":{"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."},"detail":"Field `canonicalUrl` was added to `list_whatsapp_options` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"list_whatsapp_options","after":{"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."},"detail":"Field `error` was added to `list_whatsapp_options` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"list_whatsapp_options","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `list_whatsapp_options` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"list_whatsapp_options","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `list_whatsapp_options` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"list_whatsapp_options","after":{"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."},"detail":"Field `ok` was added to `list_whatsapp_options` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.options","tool":"list_whatsapp_options","after":{"type":"array","description":"Prefab WhatsApp options with wa.me URLs"},"detail":"Field `options` was added to `list_whatsapp_options` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"list_whatsapp_options","after":{"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."},"detail":"Field `related` was added to `list_whatsapp_options` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"list_whatsapp_options","after":{"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."},"detail":"Field `summary` was added to `list_whatsapp_options` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"list_whatsapp_options","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `list_whatsapp_options` output.","severity":"risky"},{"kind":"description_changed","tool":"list_wissen","after":"WHAT: Wissen lexicon index (id, title, url with #id). USE get_wissen_entry({id}) for a body snippet. Full article: get_ai_page({path:'/wissen'}) or open the hash URL.","before":"Wissen lexicon article ids on /wissen","detail":"Description of `list_wissen` changed (88% word delta).","severity":"risky","descriptionDelta":0.875},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"list_wissen","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `list_wissen` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"list_wissen","after":"de","detail":"Default of `locale` on `list_wissen` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"list_wissen","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `list_wissen` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"list_wissen","after":{"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."},"detail":"Field `canonicalUrl` was added to `list_wissen` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"list_wissen","after":{"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."},"detail":"Field `error` was added to `list_wissen` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"list_wissen","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `list_wissen` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.items","tool":"list_wissen","after":{"type":"array","description":"Wissen articles id/title/url"},"detail":"Field `items` was added to `list_wissen` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"list_wissen","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `list_wissen` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"list_wissen","after":{"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."},"detail":"Field `ok` was added to `list_wissen` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"list_wissen","after":{"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."},"detail":"Field `related` was added to `list_wissen` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"list_wissen","after":{"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."},"detail":"Field `summary` was added to `list_wissen` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"list_wissen","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `list_wissen` output.","severity":"risky"},{"kind":"description_changed","tool":"resolve_locale_url","after":"WHAT: Rewrite one marketing path into another locale without fetching HTML. Example: path=/preise locale=en → canonicalUrl https://www.ikeytz.com/en/preise. Accepts a path or a full https://www.ikeytz.com/… URL; strips an existing /en|/fr|… prefix first. RETURNS path (no locale prefix), fromLocale, toLocale. DOES NOT translate body text. Invalid locale still required by schema — use list_locales. NEXT: get_ai_page({path, locale: toLocale}).","before":"Same page in another locale, e.g. path=/preise locale=en → /en/preise","detail":"Description of `resolve_locale_url` changed (91% word delta).","severity":"risky","descriptionDelta":0.9056603773584906},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"resolve_locale_url","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `resolve_locale_url` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"resolve_locale_url","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `resolve_locale_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"resolve_locale_url","after":{"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."},"detail":"Field `canonicalUrl` was added to `resolve_locale_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"resolve_locale_url","after":{"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."},"detail":"Field `error` was added to `resolve_locale_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.fromLocale","tool":"resolve_locale_url","after":{"type":"string","description":"Locale parsed from input path"},"detail":"Field `fromLocale` was added to `resolve_locale_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"resolve_locale_url","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `resolve_locale_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"resolve_locale_url","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `resolve_locale_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"resolve_locale_url","after":{"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."},"detail":"Field `ok` was added to `resolve_locale_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.path","tool":"resolve_locale_url","after":{"type":"string","description":"Path without locale prefix"},"detail":"Field `path` was added to `resolve_locale_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"resolve_locale_url","after":{"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."},"detail":"Field `related` was added to `resolve_locale_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"resolve_locale_url","after":{"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."},"detail":"Field `summary` was added to `resolve_locale_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.toLocale","tool":"resolve_locale_url","after":{"type":"string","description":"Requested target locale"},"detail":"Field `toLocale` was added to `resolve_locale_url` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"resolve_locale_url","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `resolve_locale_url` output.","severity":"risky"},{"kind":"description_changed","tool":"site_overview","after":"WHO/WHAT: Public brand card for Schlüsseldienst Ludwigsburg ikeytz (mobile locksmith, Landkreis Ludwigsburg, Baden-Württemberg, Germany). RETURNS structuredContent: tradeName, gewerbeName, priceRange plus envelope (ok, summary, canonicalUrl=home). USE when the user asks who ikeytz is, whether there is a shop, opening hours positioning (24/7 mobile). DOES NOT: book, quote a live price, geocode, submit forms. No walk-in — office address is not a customer counter. NEXT: get_business_identity (NAP), get_contact (phones), get_prices (fixed matrix), get_ort_datetime (day|night).","before":"What is ikeytz / Schlüsseldienst Ludwigsburg — overview, brand, no walk-in.","detail":"Description of `site_overview` changed (86% word delta).","severity":"risky","descriptionDelta":0.8591549295774648},{"kind":"enum_narrowed","path":"inputSchema.properties.locale","tool":"site_overview","after":"enum[de,en,fr,ru,fa,ar,tr]","before":"open","detail":"`locale` on `site_overview` narrowed to a closed enum (de, en, fr, ru, fa, ar, tr); previously valid values may now be rejected.","severity":"breaking"},{"kind":"default_changed","path":"inputSchema.properties.locale","tool":"site_overview","after":"de","detail":"Default of `locale` on `site_overview` changed unset → \"de\".","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.attribution","tool":"site_overview","after":{"type":"string","description":"Required citation: 'Quelle: Schlüsseldienst Ludwigsburg ikeytz (ikeytz.com) · ai-train=no · https://www.ikeytz.com/.well-known/ai.txt'"},"detail":"Field `attribution` was added to `site_overview` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.canonicalUrl","tool":"site_overview","after":{"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."},"detail":"Field `canonicalUrl` was added to `site_overview` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.error","tool":"site_overview","after":{"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."},"detail":"Field `error` was added to `site_overview` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.gewerbeName","tool":"site_overview","after":{"type":"string","description":"Registered business name"},"detail":"Field `gewerbeName` was added to `site_overview` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.hint","tool":"site_overview","after":{"type":"string","description":"Present when ok=false. Absolute URL the agent should open or pass to get_ai_page / get_discovery."},"detail":"Field `hint` was added to `site_overview` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.locale","tool":"site_overview","after":{"enum":["de","en","fr","ru","fa","ar","tr"],"type":"string","description":"Locale actually used for URLs (args.locale or de)."},"detail":"Field `locale` was added to `site_overview` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.ok","tool":"site_overview","after":{"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."},"detail":"Field `ok` was added to `site_overview` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.priceRange","tool":"site_overview","after":{"type":"string","description":"Price-range hint for schema"},"detail":"Field `priceRange` was added to `site_overview` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.related","tool":"site_overview","after":{"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."},"detail":"Field `related` was added to `site_overview` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.summary","tool":"site_overview","after":{"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."},"detail":"Field `summary` was added to `site_overview` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tool","tool":"site_overview","after":{"type":"string","description":"Echo of the tool name that produced this object (e.g. get_service_area)."},"detail":"Field `tool` was added to `site_overview` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.tradeName","tool":"site_overview","after":{"type":"string","description":"Public trade name"},"detail":"Field `tradeName` was added to `site_overview` output.","severity":"risky"}],"published_at":"2026-08-31T20:46:03.611Z"}]