{"serverId":"mcp-registry/io.github.waysway-app/waysway","tools":[{"name":"check_stay_price","fixed":{"name":"check_stay_price","description":"\n    Check live stay price for a previously recommended hotel.\n\n    REQUIREMENT:\n    - update_stay_dates must already have been called\n    ","inputSchema":{"type":"object","title":"check_stay_priceArguments","required":["session_id"],"properties":{"session_id":{"type":"string","title":"Session Id"},"hotel_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hotel Index","default":null},"hotel_code_or_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hotel Code Or Name","default":null}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":155,"tokensAfter":155},{"name":"get_booking_offers","fixed":{"name":"get_booking_offers","description":"\n    Get available hotel offers for the current session dates.\n\n    REQUIREMENT:\n    - update_stay_dates should already be set\n    - hotel should come from previous search results\n    ","inputSchema":{"type":"object","title":"get_booking_offersArguments","required":["session_id"],"properties":{"limit":{"type":"integer","title":"Limit","default":3},"session_id":{"type":"string","title":"Session Id"},"hotel_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hotel Index","default":null},"hotel_code_or_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hotel Code Or Name","default":null},"preferred_room_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preferred Room Name","default":null}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":216,"tokensAfter":216},{"name":"get_hotel_details","fixed":{"name":"get_hotel_details","description":"\n    Get detailed information for a hotel.\n\n    Use this after search_hotels when the user asks for more details\n    about a recommended option.\n    ","inputSchema":{"type":"object","title":"get_hotel_detailsArguments","required":["session_id","hotel_code_or_name"],"properties":{"session_id":{"type":"string","title":"Session Id"},"hotel_code_or_name":{"type":"string","title":"Hotel Code Or Name"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":125,"tokensAfter":125},{"name":"get_session_state","fixed":{"name":"get_session_state","description":"\n    Get a compact summary of the current session state.\n    ","inputSchema":{"type":"object","title":"get_session_stateArguments","required":["session_id"],"properties":{"session_id":{"type":"string","title":"Session Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":75,"tokensAfter":75},{"name":"get_user_profile_schema","fixed":{"name":"get_user_profile_schema","description":"\n    Return the strict standard schema for user_profile.\n\n    IMPORTANT:\n    - Only these standard UserProfile fields are allowed.\n    - No alias mapping is supported.\n    - city is NOT a profile field.\n    - checkin_date / checkout_date are NOT profile fields.\n    - Numeric budget constraints usually belong to search_hotels price_min/price_max.\n\n    Use this tool when the external model is unsure what fields are allowed.\n    ","inputSchema":{"type":"object","title":"get_user_profile_schemaArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":162,"tokensAfter":162},{"name":"health_check","fixed":{"name":"health_check","description":"\n    Health check for the MCP server.\n    ","inputSchema":{"type":"object","title":"health_checkArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":46,"tokensAfter":46},{"name":"list_sessions","fixed":{"name":"list_sessions","description":"\n    List all in-memory session summaries.\n    Useful for debugging only.\n    ","inputSchema":{"type":"object","title":"list_sessionsArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":57,"tokensAfter":57},{"name":"search_activities_in_city","fixed":{"name":"search_activities_in_city","description":"\n    Search activities in a city.\n\n    If city is omitted, use session.city from prior hotel search.\n    ","inputSchema":{"type":"object","title":"search_activities_in_cityArguments","required":["session_id"],"properties":{"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City","default":null},"limit":{"type":"integer","title":"Limit","default":3},"session_id":{"type":"string","title":"Session Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":131,"tokensAfter":131},{"name":"search_flight_content","fixed":{"name":"search_flight_content","description":"\n    Search airline-related content.\n    ","inputSchema":{"type":"object","title":"search_flight_contentArguments","required":["session_id"],"properties":{"limit":{"type":"integer","title":"Limit","default":3},"session_id":{"type":"string","title":"Session Id"},"airline_tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Airline Tag","default":null}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":114,"tokensAfter":114},{"name":"search_homestays_in_city","fixed":{"name":"search_homestays_in_city","description":"\n    Search homestays in a city.\n\n    If city is omitted, use session.city from prior hotel search.\n    ","inputSchema":{"type":"object","title":"search_homestays_in_cityArguments","required":["session_id"],"properties":{"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City","default":null},"limit":{"type":"integer","title":"Limit","default":3},"session_id":{"type":"string","title":"Session Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":130,"tokensAfter":130},{"name":"search_hotels","fixed":{"name":"search_hotels","description":"\n    Search and recommend hotels.\n\n    USE THIS TOOL FOR:\n    - city-based hotel search\n    - main search intent\n    - direct numeric search constraints such as price_min / price_max\n    - explicit room or amenity filters\n\n    IMPORTANT:\n    - city MUST be passed here, not inside user_profile\n    - user_profile is for stable preferences, not for search location\n    - if dates are known, call update_stay_dates first\n    - if profile preferences are known, call update_user_profile_from_model first","inputSchema":{"type":"object","title":"search_hotelsArguments","required":["session_id","city","main_interest"],"properties":{"city":{"type":"string","title":"City"},"limit":{"type":"integer","title":"Limit","default":3},"suitable":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Suitable","default":null},"amenities":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Amenities","default":null},"price_max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Max","default":null},"price_min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Min","default":null},"room_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Room Type","default":null},"rating_min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating Min","default":null},"session_id":{"type":"string","title":"Session Id"},"surroundings":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Surroundings","default":null},"main_interest":{"type":"string","title":"Main Interest"},"user_specific":{"type":"string","title":"User Specific","default":""},"non_refundable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Non Refundable","default":null},"hotel_class_stars":{"anyOf":[{"enum":[3,4,5],"type":"integer"},{"type":"null"}],"title":"Hotel Class Stars","default":null},"exclude_hotel_codes":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Exclude Hotel Codes","default":null},"required_name_terms":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Required Name Terms","default":null}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":610,"tokensAfter":610},{"name":"search_restaurants_near_hotel","fixed":{"name":"search_restaurants_near_hotel","description":"\n    Search restaurants near a hotel.\n    ","inputSchema":{"type":"object","title":"search_restaurants_near_hotelArguments","required":["session_id"],"properties":{"hotel_lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hotel Lat","default":null},"hotel_lon":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hotel Lon","default":null},"session_id":{"type":"string","title":"Session Id"},"hotel_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hotel Index","default":null},"hotel_code_or_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hotel Code Or Name","default":null}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":187,"tokensAfter":187},{"name":"start_session","fixed":{"name":"start_session","description":"\n    Create or replace a session.\n\n    PURPOSE:\n    - Initialize conversation state\n    - Optionally store stable user profile fields\n\n    DO:\n    - pass stable or semi-stable profile information in user_profile\n    - pass preferred_language if known\n    - call this before other hotel-related tools\n\n    DO NOT:\n    - do NOT put city inside user_profile\n    - do NOT put checkin_date or checkout_date inside user_profile\n    - do NOT put search filters inside user_profile\n\n    CORRECT WORKFLOW:\n   ","inputSchema":{"type":"object","title":"start_sessionArguments","required":["session_id"],"properties":{"user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Id","default":null},"metadata":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Metadata","default":null},"session_id":{"type":"string","title":"Session Id"},"user_profile":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"User Profile","default":null},"preferred_language":{"type":"string","title":"Preferred Language","default":"en"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":316,"tokensAfter":316},{"name":"update_stay_dates","fixed":{"name":"update_stay_dates","description":"\n    Update session stay dates.\n\n    USE THIS TOOL FOR:\n    - check-in date\n    - check-out date\n    - nights-based date calculation\n\n    DO NOT:\n    - do NOT put dates inside user_profile\n    - do NOT try to pass dates through start_session user_profile\n    ","inputSchema":{"type":"object","title":"update_stay_datesArguments","required":["session_id","checkin_str"],"properties":{"nights":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Nights","default":null},"session_id":{"type":"string","title":"Session Id"},"checkin_str":{"type":"string","title":"Checkin Str"},"checkout_str":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checkout Str","default":null}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":204,"tokensAfter":204},{"name":"update_user_profile","fixed":{"name":"update_user_profile","description":"\n    Update session.user_profile using standard UserProfile fields only.\n\n    USE THIS WHEN:\n    - the caller already has structured profile fields\n\n    DO NOT PUT HERE:\n    - city\n    - checkin_date\n    - checkout_date\n    - raw numeric search constraints that belong in search_hotels\n\n    Preferred profile fields include:\n    - price_range\n    - budget_flexibility\n    - relationships\n    - travel_purpose\n    - hotel_style\n    - facilities_like\n    - surroundings_like\n    ","inputSchema":{"type":"object","title":"update_user_profileArguments","required":["session_id","user_profile"],"properties":{"merge":{"type":"boolean","title":"Merge","default":true},"session_id":{"type":"string","title":"Session Id"},"user_profile":{"type":"object","title":"User Profile","additionalProperties":true}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":241,"tokensAfter":241},{"name":"update_user_profile_from_model","fixed":{"name":"update_user_profile_from_model","description":"\n    Preferred path for profile extraction.\n\n    The external model should:\n    - read the user's natural language message\n    - decide which STANDARD UserProfile fields are supported by evidence\n    - send ONLY those fields here\n\n    HARD RULES:\n    - only standard UserProfile fields are allowed\n    - do NOT invent new fields\n    - do NOT put city here\n    - do NOT put checkin_date or checkout_date here\n    - omit uncertain fields instead of guessing\n    - numeric budget constraints usually bel","inputSchema":{"type":"object","title":"update_user_profile_from_modelArguments","required":["session_id","extracted_user_profile"],"properties":{"merge":{"type":"boolean","title":"Merge","default":true},"session_id":{"type":"string","title":"Session Id"},"extracted_user_profile":{"type":"object","title":"Extracted User Profile","additionalProperties":true}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":260,"tokensAfter":260}],"toolsChanged":16,"tokensSaved":0,"todo":[{"tool":"check_stay_price","params":["session_id","hotel_index","hotel_code_or_name"]},{"tool":"clear_session","params":["session_id"]},{"tool":"extract_user_profile_from_text","params":["text"]},{"tool":"get_booking_offers","params":["limit","session_id","hotel_index","hotel_code_or_name","preferred_room_name"]},{"tool":"get_hotel_details","params":["session_id","hotel_code_or_name"]},{"tool":"get_session_state","params":["session_id"]},{"tool":"ingest_user_message","params":["merge","message","session_id","use_fallback_extraction"]},{"tool":"normalize_stay_dates","params":["nights","checkin_str","checkout_str","user_profile"]},{"tool":"search_activities_in_city","params":["city","limit","session_id"]},{"tool":"search_flight_content","params":["limit","session_id","airline_tag"]},{"tool":"search_homestays_in_city","params":["city","limit","session_id"]},{"tool":"search_hotels","params":["city","limit","suitable","amenities","price_max","price_min","room_type","rating_min","session_id","surroundings","main_interest","user_specific","non_refundable","hotel_class_stars","exclude_hotel_codes","required_name_terms"]},{"tool":"search_restaurants_near_hotel","params":["hotel_lat","hotel_lon","session_id","hotel_index","hotel_code_or_name"]},{"tool":"start_session","params":["user_id","metadata","session_id","user_profile","preferred_language"]},{"tool":"update_stay_dates","params":["nights","session_id","checkin_str","checkout_str"]},{"tool":"update_user_profile","params":["merge","session_id","user_profile"]},{"tool":"update_user_profile_from_model","params":["merge","session_id","extracted_user_profile"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}