Compare hotel prices, room options and booking providers with live HotelUse searches.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Get undated facts for one identified or named hotel: address, photos, descriptions, star classification, sourced guest ratings, consecutive positive review count, facilities, pet/parking policies and timezone. Optional fee amounts may be absent in the catalog. Accepts the exact HotelUse hotel_id from a previous result, or hotel_name and destination. A unique, confident match is required. A full hotel name may be used without a destination; add the destination when ambiguous. No stay dates, availability, live prices or room-level offers are included. Supply exactly one hotel_id or hotel_name. Omit unknown optional values; do not send null. Resolve a hotel follow-up by name or position against the most recent relevant ordered search list. Copy its hotel_id exactly; if unavailable, use hotel_name and destination. Ask only if the hotel is ambiguous. For room options or current room prices call get_room_rates directly, passing search_quote_session_id from that search to preserve its stay and preferences. The first get_room_rates response includes all returned room groups and every provider minimum in room_groups. For all room options and prices, use that complete list after one call; do not paginate raw supplier offers or re-query the same stay. The raw_offer_page count describes supplier rate plans, not additional room types. Users can expand room cards locally without another price query. For undated amenities, policies or other hotel facts call get_hotel directly. Do not repeat a destination search before either hotel-specific tool. Existing returned prices may be explained without refreshing when no new search or current quote is requested.
Traveler BCP 47 language, such as en-GB, independent of the destination.
Exact HotelUse hotel_id from a previous result.
Hotel name when no exact hotel_id is available. A unique, confident match is required. A full hotel name may be used without a destination; add the destination when ambiguous.
City or region to disambiguate the hotel name.
Optional traveler locale from client context, such as en-GB. Independent of the hotel destination.
Optional traveler country from client context, used for default currency and residency. Independent of the hotel destination.
Get undated facts for one identified or named hotel: address, photos, descriptions, star classification, sourced guest ratings, consecutive positive review count, facilities, pet/parking policies and timezone. Optional fee amounts may be absent in the catalog. Accepts the exact HotelUse hotel_id from a previous result, or hotel_name and destination. A unique, confident match is required. A full hotel name may be used without a destination; add the destination when ambiguous. No stay dates, availability, live prices or room-level offers are included. Supply exactly one hotel_id or hotel_name. Omit unknown optional values; do not send null. Resolve a hotel follow-up by name or position against the most recent relevant ordered search list. Copy its hotel_id exactly; if unavailable, use hotel_name and destination. Ask only if the hotel is ambiguous. For room options or current room prices call get_room_rates directly, passing search_quote_session_id from that search to preserve its stay and preferences. The first get_room_rates response includes all returned room groups and every provider minimum in room_groups. For all room options and prices, use that complete list after one call; do not paginate raw supplier offers or re-query the same stay. The raw_offer_page count describes supplier rate plans, not additional room types. Users can expand room cards locally without another price query. For undated amenities, policies or other hotel facts call get_hotel directly. Do not repeat a destination search before either hotel-specific tool. Existing returned prices may be explained without refreshing when no new search or current quote is requested.
| Argument | Type | Description |
|---|---|---|
| locale | string | Traveler BCP 47 language, such as en-GB, independent of the destination. |
| region | string | |
| country | string | |
| hotel_id | string | Exact HotelUse hotel_id from a previous result. |
| hotel_name | string | Hotel name when no exact hotel_id is available. A unique, confident match is required. A full hotel name may be used without a destination; add the destination when ambiguous. |
| destination | string | City or region to disambiguate the hotel name. |
| user_locale | string | Optional traveler locale from client context, such as en-GB. Independent of the hotel destination. |
| user_location_country | string | Optional traveler country from client context, used for default currency and residency. Independent of the hotel destination. |
{
"type": "object",
"properties": {
"locale": {
"type": "string",
"description": "Traveler BCP 47 language, such as en-GB, independent of the destination."
},
"region": {
"type": "string"
},
"country": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"hotel_id": {
"type": "string",
"pattern": "^hu_[a-f0-9]{24}$",
"description": "Exact HotelUse hotel_id from a previous result."
},
"hotel_name": {
"type": "string",
"maxLength": 100,
"minLength": 2,
"description": "Hotel name when no exact hotel_id is available. A unique, confident match is required. A full hotel name may be used without a destination; add the destination when ambiguous."
},
"destination": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "City or region to disambiguate the hotel name."
},
"user_locale": {
"type": "string",
"maxLength": 35,
"minLength": 2,
"description": "Optional traveler locale from client context, such as en-GB. Independent of the hotel destination."
},
"user_location_country": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Optional traveler country from client context, used for default currency and residency. Independent of the hotel destination."
}
},
"additionalProperties": false
}Get one identified or named hotel’s room options and provider prices for explicit hotel-local dates (including today), or date_intent: tonight, and occupancy. Tonight is resolved server-side in the hotel time zone. Accepts the exact HotelUse hotel_id from search_hotels, or hotel_name and destination when the ID is unavailable; destination is optional but helps disambiguation. A unique hotel match is required. Returns server-grouped room types, rate terms and full-stay provider prices in a separate Room options view. Provider price links open external booking pages; no reservation is made. Providing search_quote_session_id inherits omitted dates, occupancy, currency, language, residency and rate filters from that exact search. Explicit itinerary changes create a new quote; the search device is preserved. Supply exactly one hotel_id or hotel_name. Supply check_in/check_out, date_intent, or an existing search_quote_session_id for room quotes. All returned room groups are included in the first response; no room pagination is needed. Omit unknown optional values; do not send null. Resolve a hotel follow-up by name or position against the most recent relevant ordered search list. Copy its hotel_id exactly; if unavailable, use hotel_name and destination. Ask only if the hotel is ambiguous. For room options or current room prices call get_room_rates directly, passing search_quote_session_id from that search to preserve its stay and preferences. The first get_room_rates response includes all returned room groups and every provider minimum in room_groups. For all room options and prices, use that complete list after one call; do not paginate raw supplier offers or re-query the same stay. The raw_offer_page count describes supplier rate plans, not additional room types. Users can expand room cards locally without another price query. For undated amenities, policies or other hotel facts call get_hotel directly. Do not repeat a destination search before either hotel-specific tool. Existing returned prices may be explained without refreshing when no new search or current quote is requested.
| Argument | Type | Description |
|---|---|---|
| rooms |
Search a destination or latitude/longitude (with country) for explicit hotel-local dates (including today), or date_intent: tonight. Tonight is resolved server-side in the destination time zone, never UTC. Returns hotel summaries and the lowest eligible full-stay total from Expedia, Booking, Agoda and Brek, with direct provider booking links. Search starts at a 20 km core radius, expanding to 40 km then 60 km while fewer than 50 matching static candidates exist, within the same tool call and deadline. Explicit max_distance_km disables expansion. Providers are queried once after the final candidate scope is chosen. Default order is nearest 5 km distance bands first, then greatest Brek price advantage over the cheapest other provider in each band. The advantage uses comparable full-stay totals in the same currency; missing comparisons go last within their band. Preserve the returned hotel order unless the user requests another sort. Supports star ranges or exact stars, guest-review minimum and review count, facilities, property types, distance and full-stay price budgets. Hotel and rate filters can be combined; budgets cover all nights and requested rooms, including mandatory taxes and fees. Guest scores and hotel star classifications have separate filters. no_matching_offer means prices/terms failed the requested filters, not sold out. Room types and room-level rate plans are not included. No HotelUse account or API credits required. Device detection is automatic with a desktop fallback. For a fresh search supply destination or latitude/longitude with country, and either check_in/check_out or date_intent. Search pagination accepts only quote_session_id and cursor. Omit unknown optional values; do not send null. On follow-ups that change destination, dates, guests, hotel/rate filters or sort, call search_hotels again once with the updated criteria and preserve unchanged itinerary/preferences from the latest relevant search. Do not filter or reorder an earlier result page and present it as a new destination search: that page may omit matching hotels. For nearest, closest, or distance order use sort: distance_asc. The geographic_scope.radius_km value is the search radius, never any hotel’s distance. Per-hotel distance_meters is measured from the destination center. For cheapest hotels use sort: stay_total_asc. For "4-star only" use hotel_filters.star_ratings: [4]; for "4- and 5-star only" use [4,5], not star_rating_min: 4 (which includes 4.5). Never broaden explicit criteria silently. Omit providers unless the user requests specific providers; the server handles occupancy support. A successful partial response is the result of this search: show the returned prices and do not automatically repeat the search to fill missing provider quotes. An explicit user refresh calls the tool again. Pagination with quote_session_id/cursor is only for unchanged criteria.
| array |
| device | string | Optional traveler device. Omission uses trusted client hints, then desktop. Room follow-ups inherit the effective search device. Mobile app rates require an approved native-app integration. |
| locale | string | Traveler BCP 47 language, such as en-GB, independent of the destination. |
| region | string |
| country | string |
| check_in | string | Hotel-local calendar date; today is allowed in the destination time zone, even after UTC midnight. |
| currency | string | Requested display currency. Omission defaults to client visitor country, then locale, then USD. |
| hotel_id | string | Exact HotelUse hotel_id from a previous result. |
| check_out | string |
| providers | array |
| hotel_name | string | Hotel name when no exact hotel_id is available. A unique, confident match is required. A full hotel name may be used without a destination; add the destination when ambiguous. |
| date_intent | string | A one-night stay resolved server-side in the destination or hotel time zone. Mutually exclusive with check_in/check_out. |
| destination | string | City or region to disambiguate the hotel name. |
| user_locale | string | Optional traveler locale from client context, such as en-GB. Independent of the hotel destination. |
| rate_filters | object |
| residency_country | string |
| user_location_country | string | Optional traveler country from client context, used for default currency and residency. Independent of the hotel destination. |
| search_quote_session_id | string | A search result’s search_session_id. Inherits omitted stay dates, rooms, currency, language, residency and rate_filters from that search. Its device is preserved even if current client metadata changes. |
{
"type": "object",
"properties": {
"rooms": {
"type": "array",
"items": {
"type": "object",
"required": [
"adults",
"children_ages"
],
"properties": {
"adults": {
"type": "integer",
"maximum": 8,
"minimum": 1
},
"children_ages": {
"type": "array",
"items": {
"type": "integer",
"maximum": 17,
"minimum": 0
}
}
},
"additionalProperties": false
},
"maxItems": 3,
"minItems": 1
},
"device": {
"enum": [
"desktop",
"mobile_web",
"mobile_app"
],
"type": "string",
"description": "Optional traveler device. Omission uses trusted client hints, then desktop. Room follow-ups inherit the effective search device. Mobile app rates require an approved native-app integration."
},
"locale": {
"type": "string",
"description": "Traveler BCP 47 language, such as en-GB, independent of the destination."
},
"region": {
"type": "string"
},
"country": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"check_in": {
"type": "string",
"format": "date",
"description": "Hotel-local calendar date; today is allowed in the destination time zone, even after UTC midnight."
},
"currency": {
"type": "string",
"description": "Requested display currency. Omission defaults to client visitor country, then locale, then USD."
},
"hotel_id": {
"type": "string",
"pattern": "^hu_[a-f0-9]{24}$",
"description": "Exact HotelUse hotel_id from a previous result."
},
"check_out": {
"type": "string",
"format": "date"
},
"providers": {
"type": "array",
"items": {
"enum": [
"expedia",
"booking",
"agoda",
"brek"
]
},
"minItems": 1,
"uniqueItems": true
},
"hotel_name": {
"type": "string",
"maxLength": 100,
"minLength": 2,
"description": "Hotel name when no exact hotel_id is available. A unique, confident match is required. A full hotel name may be used without a destination; add the destination when ambiguous."
},
"date_intent": {
"enum": [
"tonight"
],
"type": "string",
"description": "A one-night stay resolved server-side in the destination or hotel time zone. Mutually exclusive with check_in/check_out."
},
"destination": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "City or region to disambiguate the hotel name."
},
"user_locale": {
"type": "string",
"maxLength": 35,
"minLength": 2,
"description": "Optional traveler locale from client context, such as en-GB. Independent of the hotel destination."
},
"rate_filters": {
"type": "object",
"required": [],
"properties": {
"stay_total_max": {
"type": "number",
"maximum": 100000000,
"minimum": 0,
"description": "Maximum full-stay amount in context.currency for all requested rooms, including mandatory taxes and fees. Applies to each returned offer before minima."
},
"stay_total_min": {
"type": "number",
"maximum": 100000000,
"minimum": 0,
"description": "Minimum full-stay amount in context.currency for all requested rooms, including mandatory taxes and fees. Not a nightly price."
},
"refundable_only": {
"type": "boolean",
"description": "Require known refundable terms; unknown terms do not qualify."
},
"breakfast_included": {
"type": "boolean"
}
},
"additionalProperties": false
},
"residency_country": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"user_location_country": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Optional traveler country from client context, used for default currency and residency. Independent of the hotel destination."
},
"search_quote_session_id": {
"type": "string",
"pattern": "^qs_[a-f0-9-]{36}$",
"description": "A search result’s search_session_id. Inherits omitted stay dates, rooms, currency, language, residency and rate_filters from that search. Its device is preserved even if current client metadata changes."
}
},
"additionalProperties": false
}| Argument | Type | Description |
|---|---|---|
| sort | string | For nearest, closest, or sorting by distance use distance_asc (exact straight-line distance ascending). Default: nearest 5 km distance bands first (0–5, 5–10, 10–15, 15–20 km), then greatest Brek price advantage over the cheapest other provider within each band (other provider total minus Brek total, in context.currency). Only comparable full-stay totals including mandatory taxes and fees qualify. Missing comparisons are last within their band; ties use lowest total, distance and hotel ID. Unpriced hotels are last. distance_price_asc retains lowest-price ordering within the same bands. stay_total_asc sorts all matched hotels by total without distance bands. distance_asc uses straight-line distance; stay_total_desc uses descending whole-stay price; review_score_desc uses the displayed normalized guest score, then review count. Unpriced hotels remain last in every order. Sorting happens before pagination. |
| rooms | array | |
| cursor | string | Copy the returned next_cursor exactly. Do not calculate an offset or mix new filters with a quote page. |
| device | string | Optional traveler device. Omission uses trusted client hints, then desktop. Room follow-ups inherit the effective search device. Mobile app rates require an approved native-app integration. |
| locale | string | Traveler BCP 47 language, such as en-GB, independent of the destination. |
| region | string | |
| country | string | |
| check_in | string | Hotel-local calendar date; today is allowed in the destination time zone, even after UTC midnight. |
| currency | string | Requested display currency. Omission defaults to client visitor country, then locale, then USD. |
| latitude | number | Search center latitude. Supply together with longitude. Explicit coordinates take precedence over city/region. |
| check_out | string | |
| longitude | number | Search center longitude. Supply together with latitude. |
| page_size | integer | |
| providers | array | |
| date_intent | string | A one-night stay resolved server-side in the destination or hotel time zone. Mutually exclusive with check_in/check_out. |
| destination | string | |
| user_locale | string | Optional traveler locale from client context, such as en-GB. Independent of the hotel destination. |
| rate_filters | object | |
| hotel_filters | object | |
| quote_session_id | string | Copy the exact quote_session_id from the result being paged. |
| residency_country | string | |
| user_location_country | string | Optional traveler country from client context, used for default currency and residency. Independent of the hotel destination. |
{
"type": "object",
"properties": {
"sort": {
"enum": [
"distance_brek_savings_desc",
"distance_price_asc",
"stay_total_asc",
"stay_total_desc",
"distance_asc",
"review_score_desc"
],
"type": "string",
"default": "distance_brek_savings_desc",
"description": "For nearest, closest, or sorting by distance use distance_asc (exact straight-line distance ascending). Default: nearest 5 km distance bands first (0–5, 5–10, 10–15, 15–20 km), then greatest Brek price advantage over the cheapest other provider within each band (other provider total minus Brek total, in context.currency). Only comparable full-stay totals including mandatory taxes and fees qualify. Missing comparisons are last within their band; ties use lowest total, distance and hotel ID. Unpriced hotels are last. distance_price_asc retains lowest-price ordering within the same bands. stay_total_asc sorts all matched hotels by total without distance bands. distance_asc uses straight-line distance; stay_total_desc uses descending whole-stay price; review_score_desc uses the displayed normalized guest score, then review count. Unpriced hotels remain last in every order. Sorting happens before pagination."
},
"rooms": {
"type": "array",
"items": {
"type": "object",
"required": [
"adults",
"children_ages"
],
"properties": {
"adults": {
"type": "integer",
"maximum": 8,
"minimum": 1
},
"children_ages": {
"type": "array",
"items": {
"type": "integer",
"maximum": 17,
"minimum": 0
}
}
},
"additionalProperties": false
},
"maxItems": 3,
"minItems": 1
},
"cursor": {
"type": "string",
"description": "Copy the returned next_cursor exactly. Do not calculate an offset or mix new filters with a quote page."
},
"device": {
"enum": [
"desktop",
"mobile_web",
"mobile_app"
],
"type": "string",
"description": "Optional traveler device. Omission uses trusted client hints, then desktop. Room follow-ups inherit the effective search device. Mobile app rates require an approved native-app integration."
},
"locale": {
"type": "string",
"description": "Traveler BCP 47 language, such as en-GB, independent of the destination."
},
"region": {
"type": "string"
},
"country": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"check_in": {
"type": "string",
"format": "date",
"description": "Hotel-local calendar date; today is allowed in the destination time zone, even after UTC midnight."
},
"currency": {
"type": "string",
"description": "Requested display currency. Omission defaults to client visitor country, then locale, then USD."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Search center latitude. Supply together with longitude. Explicit coordinates take precedence over city/region."
},
"check_out": {
"type": "string",
"format": "date"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Search center longitude. Supply together with latitude."
},
"page_size": {
"type": "integer",
"maximum": 50,
"minimum": 1
},
"providers": {
"type": "array",
"items": {
"enum": [
"expedia",
"booking",
"agoda",
"brek"
]
},
"minItems": 1,
"uniqueItems": true
},
"date_intent": {
"enum": [
"tonight"
],
"type": "string",
"description": "A one-night stay resolved server-side in the destination or hotel time zone. Mutually exclusive with check_in/check_out."
},
"destination": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"user_locale": {
"type": "string",
"maxLength": 35,
"minLength": 2,
"description": "Optional traveler locale from client context, such as en-GB. Independent of the hotel destination."
},
"rate_filters": {
"type": "object",
"required": [],
"properties": {
"stay_total_max": {
"type": "number",
"maximum": 100000000,
"minimum": 0,
"description": "Maximum full-stay amount in context.currency for all requested rooms, including mandatory taxes and fees. Applies to each returned offer before minima."
},
"stay_total_min": {
"type": "number",
"maximum": 100000000,
"minimum": 0,
"description": "Minimum full-stay amount in context.currency for all requested rooms, including mandatory taxes and fees. Not a nightly price."
},
"refundable_only": {
"type": "boolean",
"description": "Require known refundable terms; unknown terms do not qualify."
},
"breakfast_included": {
"type": "boolean"
}
},
"additionalProperties": false
},
"hotel_filters": {
"type": "object",
"required": [],
"properties": {
"amenities": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"description": "All requested amenities must match. Broad wifi, parking, pool and fitness include feed variants. pet_friendly / pet-friendly accepts pet-allowed themes; free-wifi means wifi::free."
},
"star_ratings": {
"type": "array",
"items": {
"type": "integer",
"maximum": 5,
"minimum": 1
},
"maxItems": 5,
"minItems": 1,
"description": "Accepted exact star classifications; intersects with any min/max range.",
"uniqueItems": true
},
"name_contains": {
"type": "string"
},
"property_type": {
"type": "string"
},
"property_types": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 12,
"minItems": 1,
"description": "Accept any of these source property types. Use instead of property_type.",
"uniqueItems": true
},
"max_distance_km": {
"type": "number",
"maximum": 20,
"description": "Maximum straight-line distance from the resolved destination center, up to 20 km. Requires a city/destination or latitude/longitude.",
"exclusiveMinimum": 0
},
"star_rating_max": {
"type": "number",
"maximum": 5,
"minimum": 0
},
"star_rating_min": {
"type": "number",
"maximum": 5,
"minimum": 0,
"description": "Minimum hotel star classification, distinct from guest reviews."
},
"review_count_min": {
"type": "integer",
"minimum": 0,
"description": "Minimum review count from that same review_summary provider. Counts are not added across providers."
},
"review_score_min": {
"type": "number",
"maximum": 10,
"minimum": 0,
"description": "Minimum guest score normalized to 10, using the displayed review_summary provider. Unknown scores/scales do not qualify."
}
},
"additionalProperties": false
},
"quote_session_id": {
"type": "string",
"description": "Copy the exact quote_session_id from the result being paged."
},
"residency_country": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"user_location_country": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Optional traveler country from client context, used for default currency and residency. Independent of the hotel destination."
}
},
"additionalProperties": false
}