Search 650,000 hotels, get each hotel's direct price with full offer lists, match rooms, book.
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.
Full profile of one hotel by its hotel_id from search_hotels: description, amenities, images, rooms, guest reviews and guest insights. A price is included only when both check_in and check_out are given, as the all-inclusive total for that stay. parley_url is the hotel's page on Parley with the stay's dates, where the user can view live prices and book. Everything needed to describe the hotel is here; no web search needed. Works without an API key. With an API key, prefer get_hotel.
The hotel's id (a UUID), as returned in hotel_id by search_hotels.
Number of rooms (0 = 1). Prices are only quoted for one room.
Number of adult guests (0 = default of 2).
Check-in date, YYYY-MM-DD (today or later). Prices need check_in and check_out.
ISO 4217 currency code for prices, e.g. 'EUR', 'USD', 'GBP'.
Check-out date, YYYY-MM-DD, after check_in.
Full profile of one hotel by its hotel_id from search_hotels: description, amenities, images, rooms, guest reviews and guest insights. A price is included only when both check_in and check_out are given, as the all-inclusive total for that stay. parley_url is the hotel's page on Parley with the stay's dates, where the user can view live prices and book. Everything needed to describe the hotel is here; no web search needed. Works without an API key. With an API key, prefer get_hotel.
| Argument | Type | Description |
|---|---|---|
| rooms | integer | Number of rooms (0 = 1). Prices are only quoted for one room. |
| guests | integer | Number of adult guests (0 = default of 2). |
| check_in | string | Check-in date, YYYY-MM-DD (today or later). Prices need check_in and check_out. |
| currency | string | ISO 4217 currency code for prices, e.g. 'EUR', 'USD', 'GBP'. |
| hotel_id* | string | The hotel's id (a UUID), as returned in hotel_id by search_hotels. |
| check_out | string | Check-out date, YYYY-MM-DD, after check_in. |
{
"type": "object",
"title": "get_hotel_detailsArguments",
"required": [
"hotel_id"
],
"properties": {
"rooms": {
"type": "integer",
"title": "Rooms",
"default": 0,
"minimum": 0,
"description": "Number of rooms (0 = 1). Prices are only quoted for one room."
},
"guests": {
"type": "integer",
"title": "Guests",
"default": 0,
"minimum": 0,
"description": "Number of adult guests (0 = default of 2)."
},
"check_in": {
"type": "string",
"title": "Check In",
"default": "",
"pattern": "^(\\d{4}-\\d{2}-\\d{2})?$",
"examples": [
"2026-11-01"
],
"description": "Check-in date, YYYY-MM-DD (today or later). Prices need check_in and check_out."
},
"currency": {
"type": "string",
"title": "Currency",
"default": "EUR",
"pattern": "^[A-Za-z]{3}$",
"examples": [
"EUR",
"USD"
],
"description": "ISO 4217 currency code for prices, e.g. 'EUR', 'USD', 'GBP'."
},
"hotel_id": {
"type": "string",
"title": "Hotel Id",
"format": "uuid",
"examples": [
"11111111-1111-4111-a111-111111111111"
],
"description": "The hotel's id (a UUID), as returned in hotel_id by search_hotels."
},
"check_out": {
"type": "string",
"title": "Check Out",
"default": "",
"pattern": "^(\\d{4}-\\d{2}-\\d{2})?$",
"examples": [
"2026-11-03"
],
"description": "Check-out date, YYYY-MM-DD, after check_in."
}
}
}Search the VistaLink hotel catalogue (650,000 hotels) in one city, a neighbourhood or landmark within it (area, e.g. city='Milan', area='Brera'), or around a point. Needs city, latitude+longitude, or hotel_name; describe the stay in vibe. Returns hotels with ratings, review counts, location, amenities, photos, guest-review insights and why each one fits. A price appears only when both check_in and check_out are given (the all-inclusive total for that stay). Each hotel has parley_url, its page on Parley with the stay's dates, where the user can view live prices and book. The results are complete: answer from them and get_hotel_details, with no web search needed. Call once per request. Works without an API key (at most 20 results). With an API key, prefer search_hotels_v2.
| Argument | Type | Description |
|---|---|---|
| area | string | Neighbourhood or landmark within city to search around, e.g. 'Brera' or 'Colosseum' (with city='Milan' / 'Rome'). Results are limited to hotels near it. |
| city | string | City to search in, e.g. 'Lisbon'. A search needs city, latitude+longitude, or hotel_name. |
| vibe | string | What the traveller is looking for, as free text or comma-separated tags, e.g. 'boutique design hotel' or 'romantic,quiet'. |
| limit | integer | Maximum number of results, 1-20 without an API key (1-50 with one). Larger values are reduced to the maximum. |
| rooms | integer | Number of rooms (0 = 1). Prices are only quoted for one room. |
| guests | integer | Number of adult guests (0 = default of 2). |
| country | string | ISO 3166-1 alpha-2 country code of the city, e.g. 'PT'. Use it for city names that exist in several countries (Paris FR vs Paris US). |
| check_in | string | Check-in date, YYYY-MM-DD (today or later). Prices need check_in and check_out. |
| currency | string | ISO 4217 currency code for prices, e.g. 'EUR', 'USD', 'GBP'. |
| latitude | number | Search centre latitude in decimal degrees, used with longitude (0 = not set). |
| amenities | string | Comma-separated amenities the hotel must have, e.g. 'wifi,pool'. |
| check_out | string | Check-out date, YYYY-MM-DD, after check_in. |
| longitude | number | Search centre longitude in decimal degrees, used with latitude (0 = not set). |
| budget_max | number | Maximum price per night, in currency (0 = no maximum). |
| budget_min | number | Minimum price per night, in currency (0 = no minimum). |
| hotel_name | string | Hotel name or part of it, e.g. 'Four Seasons'. |
| include_rates | boolean | Fetch live rates for check_in/check_out (adds about 30-45s). Needs an API key and both dates; ignored otherwise. |
| radius_meters | integer | Radius around latitude/longitude in metres (0 = default). |
{
"type": "object",
"title": "search_hotelsArguments",
"properties": {
"area": {
"type": "string",
"title": "Area",
"default": "",
"examples": [
"Brera",
"Le Marais"
],
"description": "Neighbourhood or landmark within city to search around, e.g. 'Brera' or 'Colosseum' (with city='Milan' / 'Rome'). Results are limited to hotels near it."
},
"city": {
"type": "string",
"title": "City",
"default": "",
"examples": [
"Lisbon",
"Paris"
],
"description": "City to search in, e.g. 'Lisbon'. A search needs city, latitude+longitude, or hotel_name."
},
"vibe": {
"type": "string",
"title": "Vibe",
"default": "",
"examples": [
"boutique design hotel",
"romantic,quiet"
],
"description": "What the traveller is looking for, as free text or comma-separated tags, e.g. 'boutique design hotel' or 'romantic,quiet'."
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 20,
"maximum": 50,
"minimum": 1,
"examples": [
5
],
"description": "Maximum number of results, 1-20 without an API key (1-50 with one). Larger values are reduced to the maximum."
},
"rooms": {
"type": "integer",
"title": "Rooms",
"default": 0,
"minimum": 0,
"description": "Number of rooms (0 = 1). Prices are only quoted for one room."
},
"guests": {
"type": "integer",
"title": "Guests",
"default": 0,
"minimum": 0,
"description": "Number of adult guests (0 = default of 2)."
},
"country": {
"type": "string",
"title": "Country",
"default": "",
"pattern": "^([A-Za-z]{2})?$",
"examples": [
"PT",
"FR"
],
"description": "ISO 3166-1 alpha-2 country code of the city, e.g. 'PT'. Use it for city names that exist in several countries (Paris FR vs Paris US)."
},
"check_in": {
"type": "string",
"title": "Check In",
"default": "",
"pattern": "^(\\d{4}-\\d{2}-\\d{2})?$",
"examples": [
"2026-11-01"
],
"description": "Check-in date, YYYY-MM-DD (today or later). Prices need check_in and check_out."
},
"currency": {
"type": "string",
"title": "Currency",
"default": "EUR",
"pattern": "^[A-Za-z]{3}$",
"examples": [
"EUR",
"USD"
],
"description": "ISO 4217 currency code for prices, e.g. 'EUR', 'USD', 'GBP'."
},
"latitude": {
"type": "number",
"title": "Latitude",
"default": 0,
"maximum": 90,
"minimum": -90,
"description": "Search centre latitude in decimal degrees, used with longitude (0 = not set)."
},
"amenities": {
"type": "string",
"title": "Amenities",
"default": "",
"examples": [
"wifi,pool"
],
"description": "Comma-separated amenities the hotel must have, e.g. 'wifi,pool'."
},
"check_out": {
"type": "string",
"title": "Check Out",
"default": "",
"pattern": "^(\\d{4}-\\d{2}-\\d{2})?$",
"examples": [
"2026-11-03"
],
"description": "Check-out date, YYYY-MM-DD, after check_in."
},
"longitude": {
"type": "number",
"title": "Longitude",
"default": 0,
"maximum": 180,
"minimum": -180,
"description": "Search centre longitude in decimal degrees, used with latitude (0 = not set)."
},
"budget_max": {
"type": "number",
"title": "Budget Max",
"default": 0,
"minimum": 0,
"description": "Maximum price per night, in currency (0 = no maximum)."
},
"budget_min": {
"type": "number",
"title": "Budget Min",
"default": 0,
"minimum": 0,
"description": "Minimum price per night, in currency (0 = no minimum)."
},
"hotel_name": {
"type": "string",
"title": "Hotel Name",
"default": "",
"examples": [
"Four Seasons"
],
"description": "Hotel name or part of it, e.g. 'Four Seasons'."
},
"include_rates": {
"type": "boolean",
"title": "Include Rates",
"default": false,
"description": "Fetch live rates for check_in/check_out (adds about 30-45s). Needs an API key and both dates; ignored otherwise."
},
"radius_meters": {
"type": "integer",
"title": "Radius Meters",
"default": 0,
"minimum": 0,
"description": "Radius around latitude/longitude in metres (0 = default)."
}
}
}