[{"slug":"ZV-2026-0200","server_name":"mcp.stayker.com","severity":"breaking","title":"mcp.stayker.com: Field cancellation_token was removed from cancel_booking input; consumers still sending it may be rejected or silently ignored.","summary":"[risky] Description of cancel_booking changed (79% word delta). [breaking] Field cancellation_token was removed from cancel_booking input; consumers still sending it may be rejected or silently ignored. [breaking] Field cancellation_token_expires_at was removed from cancel_booking output; consumers reading it will break. [risky] Field cancellation_url was added to cancel_booking output. [breaking] Field cancellation_token was renamed to cancellation_url_expires_at on cancel_booking. [breaking] Enum value CONFIRMATION_REQUIRED removed from status on cancel_booking. [breaking] Enum value cancelled removed from status on cancel_booking. [risky] Enum value ACTION_REQUIRED added to status on cancel_booking. [risky] Enum value already_cancelled added to status on cancel_booking. [safe] Description of search_hotels changed (17% word delta).","changes":[{"kind":"description_changed","tool":"cancel_booking","after":"Create a secure cancellation handoff for a hotel reservation. After verifying the guest, this tool returns the hotel cancellation policy on file and a first-party 1Stay cancellation URL. It never cancels the reservation in conversation.\n\nThe guest must open the secure page, review the policy, and explicitly confirm there. 1Stay does not estimate a refund, credit, penalty, or amount the hotel may charge. Until that page reports success, the reservation is NOT cancelled. A successful cancellation is confirmed on the page and by email to the address on file.","before":"Cancel a hotel reservation. This is a two-step, server-confirmed action.\n\nThe first call uses the guest first name, last name, and hotel confirmation number without a cancellation_token. It returns the cancellation terms (penalty, refundable amount, free-cancellation deadline, and a warning if the rate is non-refundable) plus a single-use cancellation_token. Nothing is cancelled.\n\nThe second call uses the same details and the cancellation_token to execute the cancellation. The token is single-use and expires in about 10 minutes. The second call requires the guest's explicit confirmation of the disclosed terms. Non-refundable rates forfeit the full amount. Cancellation confirmation is emailed to the address on file.","detail":"Description of `cancel_booking` changed (79% word delta).","severity":"risky","descriptionDelta":0.79},{"kind":"input_property_removed","path":"inputSchema.properties.cancellation_token","tool":"cancel_booking","before":{"type":"string","description":"Absent for the cancellation-terms preview; present for execution. Single-use and expires in approximately 10 minutes."},"detail":"Field `cancellation_token` was removed from `cancel_booking` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"output_property_removed","path":"outputSchema.properties.cancellation_token_expires_at","tool":"cancel_booking","before":{"type":"string"},"detail":"Field `cancellation_token_expires_at` was removed from `cancel_booking` output; consumers reading it will break.","severity":"breaking"},{"kind":"output_property_added","path":"outputSchema.properties.cancellation_url","tool":"cancel_booking","after":{"type":"string","format":"uri"},"detail":"Field `cancellation_url` was added to `cancel_booking` output.","severity":"risky"},{"kind":"output_property_renamed","path":"outputSchema.properties.cancellation_token","tool":"cancel_booking","after":"cancellation_url_expires_at","before":"cancellation_token","detail":"Field `cancellation_token` was renamed to `cancellation_url_expires_at` on `cancel_booking`.","severity":"breaking"},{"kind":"enum_value_removed","path":"outputSchema.properties.status","tool":"cancel_booking","before":"CONFIRMATION_REQUIRED","detail":"Enum value `CONFIRMATION_REQUIRED` removed from `status` on `cancel_booking`.","severity":"breaking"},{"kind":"enum_value_removed","path":"outputSchema.properties.status","tool":"cancel_booking","before":"cancelled","detail":"Enum value `cancelled` removed from `status` on `cancel_booking`.","severity":"breaking"},{"kind":"enum_value_added","path":"outputSchema.properties.status","tool":"cancel_booking","after":"ACTION_REQUIRED","detail":"Enum value `ACTION_REQUIRED` added to `status` on `cancel_booking`.","severity":"risky"},{"kind":"enum_value_added","path":"outputSchema.properties.status","tool":"cancel_booking","after":"already_cancelled","detail":"Enum value `already_cancelled` added to `status` on `cancel_booking`.","severity":"risky"},{"kind":"description_changed","tool":"search_hotels","after":"Search hotels by location and dates for exactly one room, with check-in up to 340 days from today. Returns available properties with nightly rates across major brands, boutique, and independent hotels.\n\nThe first 1Stay release supports one room per search and reservation. Guest pays the hotel directly. Hotel's own confirmation number. Loyalty points apply.","before":"Search hotels by location and dates for exactly one room. Returns available properties with nightly rates across major brands, boutique, and independent hotels.\n\nThe first 1Stay release supports one room per search and reservation. Guest pays the hotel directly. Hotel's own confirmation number. Loyalty points apply.","detail":"Description of `search_hotels` changed (17% word delta).","severity":"safe","descriptionDelta":0.17021276595744683}],"published_at":"2026-08-19T15:47:37.245Z"},{"slug":"ZV-2026-0153","server_name":"mcp.stayker.com","severity":"breaking","title":"mcp.stayker.com: Field booking_id was renamed to confirmation_number on book_hotel.","summary":"[safe] Description of book_hotel changed (18% word delta). [breaking] Field booking_id was renamed to confirmation_number on book_hotel. [risky] Description of get_booking changed (25% word delta). [breaking] Field booking_id was removed from get_booking input; consumers still sending it may be rejected or silently ignored. [breaking] New required field confirmation_number on get_booking; requests without it will fail. [safe] Description of get_hotel_details changed (3% word delta). [breaking] Type of rooms on get_hotel_details changed integer → number. [risky] Field confirmation_number_status was added to lookup_booking output. [breaking] Type of confirmation_number on lookup_booking changed string → string|null. [risky] Description of resend_confirmation changed (58% word delta). [risky] Optional field email was added to resend_confirmation; may shift model behaviour. [risky] Optional field first_name was added to resend_confirmation; may shift model behaviour. [risky] Optional field last_name was added to resend_confirmation; may shift model behaviour. [safe] Field confirmation_number on resend_confirmation is no longer required. [risky] Description of search_hotels changed (37% word delta). [breaking] Type of rooms on search_hotels changed integer → number.","changes":[{"kind":"description_changed","tool":"book_hotel","after":"Book exactly one hotel room. The first 1Stay release does not support multi-room searches or reservations. Returns a secure checkout URL. This tool accepts no guest identity or payment fields. Name, email, phone, and payment details are collected on the secure checkout page.\n\nGuest pays the hotel directly. Their credit card statement shows the hotel name, not 1Stay. Hotel's own confirmation number. Loyalty points apply automatically. The displayed total includes taxes and any applicable, itemized 1Stay Booking Fee.\n\nRequires a rate_code from get_hotel_details, valid approximately 15 minutes. Expired codes are rejected.","before":"Book one hotel room. Each reservation covers one room; multiple rooms require separate reservations. Returns a secure checkout URL. This tool accepts no guest identity or payment fields. Name, email, phone, and payment details are collected on the secure checkout page.\n\nGuest pays the hotel directly. Their credit card statement shows the hotel name, not 1Stay. Hotel's own confirmation number. Loyalty points apply automatically. The displayed total includes taxes and any applicable, itemized 1Stay Booking Fee.\n\nRequires a rate_code from get_hotel_details, valid approximately 15 minutes. Expired codes are rejected.","detail":"Description of `book_hotel` changed (18% word delta).","severity":"safe","descriptionDelta":0.17500000000000004},{"kind":"output_property_renamed","path":"outputSchema.properties.booking_id","tool":"book_hotel","after":"confirmation_number","before":"booking_id","detail":"Field `booking_id` was renamed to `confirmation_number` on `book_hotel`.","severity":"breaking"},{"kind":"description_changed","tool":"get_booking","after":"Look up a reservation exclusively by the hotel confirmation number shown in the guest's confirmation email. Internal Stayker booking IDs are never accepted or disclosed by MCP. Returns full booking details including hotel, dates, guest info, rate, and status.\n\nAnonymous access requires a verification_token issued by lookup_booking and scoped to a single booking. Without a valid token, no booking data is returned. Developers authenticated with their own API key do not need a token; their access is scoped to their own bookings.","before":"Look up a reservation by booking ID (stk_bk_xxxx) or hotel confirmation number. Returns full booking details including hotel, dates, guest info, rate, and status.\n\nAnonymous access requires a verification_token issued by lookup_booking and scoped to a single booking. Without a valid token, no booking data is returned. Developers authenticated with their own API key do not need a token; their access is scoped to their own bookings.","detail":"Description of `get_booking` changed (25% word delta).","severity":"risky","descriptionDelta":0.25396825396825395},{"kind":"input_property_removed","path":"inputSchema.properties.booking_id","tool":"get_booking","before":{"type":"string","description":"Booking ID (e.g. stk_bk_xxxx) or confirmation number"},"detail":"Field `booking_id` was removed from `get_booking` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.properties.confirmation_number","tool":"get_booking","after":{"type":"string","description":"Hotel confirmation number shown in the guest's confirmation email"},"detail":"New required field `confirmation_number` on `get_booking`; requests without it will fail.","severity":"breaking"},{"kind":"description_changed","tool":"get_hotel_details","after":"Get rates and room details for exactly one room at a specific hotel. Returns room types, live rates, amenities, cancellation policies, and rate_codes required by book_hotel.\n\nGuest pays the hotel directly. Displayed totals include taxes and any applicable, itemized 1Stay Booking Fee. Loyalty points eligible.\n\nRoom type notes: \"Run of house\" means the hotel assigns the room at check-in. \"Suite\" at select-service brands usually means a larger room with a sofa, not a separate bedroom. Non-refundable rates are cheaper but cannot be changed or canceled.","before":"Get rates and room details for a specific hotel. Returns room types, live rates, amenities, cancellation policies, and rate_codes required by book_hotel.\n\nGuest pays the hotel directly. Displayed totals include taxes and any applicable, itemized 1Stay Booking Fee. Loyalty points eligible.\n\nRoom type notes: \"Run of house\" means the hotel assigns the room at check-in. \"Suite\" at select-service brands usually means a larger room with a sofa, not a separate bedroom. Non-refundable rates are cheaper but cannot be changed or canceled.","detail":"Description of `get_hotel_details` changed (3% word delta).","severity":"safe","descriptionDelta":0.02898550724637683},{"kind":"input_type_changed","path":"inputSchema.properties.rooms","tool":"get_hotel_details","after":"number","before":"integer","detail":"Type of `rooms` on `get_hotel_details` changed integer → number.","severity":"breaking"},{"kind":"output_property_added","path":"outputSchema.properties.confirmation_number_status","tool":"lookup_booking","after":{"enum":["available","pending"],"type":"string"},"detail":"Field `confirmation_number_status` was added to `lookup_booking` output.","severity":"risky"},{"kind":"output_type_changed","path":"outputSchema.properties.confirmation_number","tool":"lookup_booking","after":"string|null","before":"string","detail":"Type of `confirmation_number` on `lookup_booking` changed string → string|null.","severity":"breaking"},{"kind":"description_changed","tool":"resend_confirmation","after":"Resend a hotel reservation confirmation email. Use either the confirmation number from a successful lookup_booking call, or the guest's full name and email address when they do not know their confirmation number, card last four, or check-in date. The email contains the hotel confirmation number the guest can then use with lookup_booking or cancel_booking. Recovery requests never reveal whether a reservation matched. The confirmation is sent only to the email address already on the booking record; there is no recipient override. Email changes are handled at https://stayker.com/service.","before":"Resend a hotel reservation confirmation email. Requires the confirmation number from a successful lookup_booking call. The confirmation is sent to the email address on the booking record. Email changes are not supported through this tool; they are handled at https://stayker.com/service.","detail":"Description of `resend_confirmation` changed (58% word delta).","severity":"risky","descriptionDelta":0.5797101449275363},{"kind":"input_property_added","path":"inputSchema.properties.email","tool":"resend_confirmation","after":{"type":"string","format":"email","description":"Guest email address. Used only to find a match; confirmation is sent only to the email address already on file."},"detail":"Optional field `email` was added to `resend_confirmation`; may shift model behaviour.","severity":"risky"},{"kind":"input_property_added","path":"inputSchema.properties.first_name","tool":"resend_confirmation","after":{"type":"string","description":"Guest first name. Required with last_name and email when the confirmation number is unavailable."},"detail":"Optional field `first_name` was added to `resend_confirmation`; may shift model behaviour.","severity":"risky"},{"kind":"input_property_added","path":"inputSchema.properties.last_name","tool":"resend_confirmation","after":{"type":"string","description":"Guest last name. Required with first_name and email when the confirmation number is unavailable."},"detail":"Optional field `last_name` was added to `resend_confirmation`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_removed","path":"inputSchema.required.confirmation_number","tool":"resend_confirmation","detail":"Field `confirmation_number` on `resend_confirmation` is no longer required.","severity":"safe"},{"kind":"description_changed","tool":"search_hotels","after":"Search hotels by location and dates for exactly one room. Returns available properties with nightly rates across major brands, boutique, and independent hotels.\n\nThe first 1Stay release supports one room per search and reservation. Guest pays the hotel directly. Hotel's own confirmation number. Loyalty points apply.","before":"Search hotels by location and dates, including availability searches for up to 5 rooms. Returns available properties with nightly rates across major brands, boutique, and independent hotels.\n\nEach reservation covers one room; multiple rooms require separate reservations. Guest pays the hotel directly. Hotel's own confirmation number. Loyalty points apply.","detail":"Description of `search_hotels` changed (37% word delta).","severity":"risky","descriptionDelta":0.3653846153846154},{"kind":"input_type_changed","path":"inputSchema.properties.rooms","tool":"search_hotels","after":"number","before":"integer","detail":"Type of `rooms` on `search_hotels` changed integer → number.","severity":"breaking"}],"published_at":"2026-08-18T11:18:30.787Z"},{"slug":"ZV-2026-0061","server_name":"mcp.stayker.com","severity":"breaking","title":"mcp.stayker.com: Field booking_id was removed from get_booking output; consumers reading it will break.","summary":"[breaking] Field booking_id was removed from get_booking output; consumers reading it will break. [risky] Field availability_status was added to get_hotel_details output. [risky] Field message was added to get_hotel_details output. [risky] Field next_step was added to get_hotel_details output.","changes":[{"kind":"output_property_removed","path":"outputSchema.properties.booking_id","tool":"get_booking","before":{"type":"string"},"detail":"Field `booking_id` was removed from `get_booking` output; consumers reading it will break.","severity":"breaking"},{"kind":"output_property_added","path":"outputSchema.properties.availability_status","tool":"get_hotel_details","after":{"enum":["available","unavailable"],"type":"string"},"detail":"Field `availability_status` was added to `get_hotel_details` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.message","tool":"get_hotel_details","after":{"type":"string"},"detail":"Field `message` was added to `get_hotel_details` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.next_step","tool":"get_hotel_details","after":{"type":"string"},"detail":"Field `next_step` was added to `get_hotel_details` output.","severity":"risky"}],"published_at":"2026-08-16T19:00:50.500Z"}]