Hotels ranked by real comfort, not commission: search 30,000+ hotels by quiet, beds, WiFi and more
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.
Compare 2-4 hotels side by side: Comfort Score breakdown, price, strengths, caveats, the filters where they differ most, and a verdict (best comfort, cheapest, best value).
2-4 hotel ids from search_hotels.
Compare 2-4 hotels side by side: Comfort Score breakdown, price, strengths, caveats, the filters where they differ most, and a verdict (best comfort, cheapest, best value).
| Argument | Type | Description |
|---|---|---|
| hotel_ids* | array | 2-4 hotel ids from search_hotels. |
{
"type": "object",
"required": [
"hotel_ids"
],
"properties": {
"hotel_ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 4,
"minItems": 2,
"description": "2-4 hotel ids from search_hotels."
}
}
}Hotels in the same city with the comfort profile closest to a given hotel (similar scores across the comfort filters). Use cheaper_only for 'like this one but cheaper'.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many to return (default 5). |
| hotel_id* | string | Hotel id to find alternatives for. |
| max_price | number | Maximum price per night in USD. |
| cheaper_only | boolean | Only hotels priced below this one. |
{
"type": "object",
"required": [
"hotel_id"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "How many to return (default 5)."
},
"hotel_id": {
"type": "string",
"description": "Hotel id to find alternatives for."
},
"max_price": {
"type": "number",
"minimum": 0,
"description": "Maximum price per night in USD."
},
"cheaper_only": {
"type": "boolean",
"description": "Only hotels priced below this one."
}
}
}Snapshot of a destination: hotel counts, average Comfort Score, median price, where its hotels beat and trail the average hotel, the best neighbourhoods, and which travel styles it suits. Use it when the user is choosing a destination or an area; for a request for hotels (e.g. 'quiet hotels in Bangkok'), call search_hotels directly.
| Argument | Type | Description |
|---|---|---|
| location* | string | City name or slug. |
{
"type": "object",
"required": [
"location"
],
"properties": {
"location": {
"type": "string",
"description": "City name or slug."
}
}
}All comfort filters (ids, names, descriptions, categories) usable in search_hotels, plus the travel styles (personas).
No arguments.
{
"type": "object",
"properties": {}
}Full details for one hotel: Comfort Score breakdown, every filter score with its explanation, caveats, price and links.
| Argument | Type | Description |
|---|---|---|
| hotel_id* | string | Hotel id (numeric string) from search_hotels. |
{
"type": "object",
"required": [
"hotel_id"
],
"properties": {
"hotel_id": {
"type": "string",
"description": "Hotel id (numeric string) from search_hotels."
}
}
}Destinations covered, with hotel counts. Optionally only those in one country.
| Argument | Type | Description |
|---|---|---|
| country | string | Country name to filter by, e.g. 'Spain'. |
{
"type": "object",
"properties": {
"country": {
"type": "string",
"description": "Country name to filter by, e.g. 'Spain'."
}
}
}Rank hotels in a city by the OKstays Comfort Score (AI scores on the comfort filters; cleanliness, beds, shower, bugs and safety count 40%). Only hotels that pass all five must-haves are returned. Optionally rank for a travel style (persona) and/or require specific strengths. Returns up to 10 hotels with strengths, caveats, price and links.
| Argument | Type | Description |
|---|---|---|
| tags | array | Filter ids the hotel must score 8+ on, e.g. ['soundproofing', 'reliable_wifi']. See get_filters. |
| persona | string | Travel style to rank for: digital-nomad, deep-sleep, avoid-crowds, romantic, family, business, solo-safe, luxury, budget-comfort. |
| sort_by | string | best = Comfort Score (default); value = Comfort Score per $100; nearest needs near_lat/near_lng. |
| district | string | Neighbourhood to restrict to, e.g. 'Gothic Quarter'. get_city_overview lists the districts. |
| location* | string | City name or slug, e.g. 'Barcelona' or 'new-york'. Use list_cities for coverage. |
| near_lat | number | Latitude of a landmark or address the user names (not the user's own location); with near_lng restricts results to hotels within radius_km and reports distance_km. |
| near_lng |
| number |
| Longitude of the point of interest. |
| max_price | number | Maximum indicative price per night in USD. |
| min_score | number | Minimum Comfort Score (0-10). |
| radius_km | number | Search radius around near_lat/near_lng in km (default 3). |
{
"type": "object",
"required": [
"location"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter ids the hotel must score 8+ on, e.g. ['soundproofing', 'reliable_wifi']. See get_filters."
},
"persona": {
"type": "string",
"description": "Travel style to rank for: digital-nomad, deep-sleep, avoid-crowds, romantic, family, business, solo-safe, luxury, budget-comfort."
},
"sort_by": {
"enum": [
"best",
"cheapest",
"priciest",
"value",
"nearest"
],
"type": "string",
"description": "best = Comfort Score (default); value = Comfort Score per $100; nearest needs near_lat/near_lng."
},
"district": {
"type": "string",
"description": "Neighbourhood to restrict to, e.g. 'Gothic Quarter'. get_city_overview lists the districts."
},
"location": {
"type": "string",
"description": "City name or slug, e.g. 'Barcelona' or 'new-york'. Use list_cities for coverage."
},
"near_lat": {
"type": "number",
"description": "Latitude of a landmark or address the user names (not the user's own location); with near_lng restricts results to hotels within radius_km and reports distance_km."
},
"near_lng": {
"type": "number",
"description": "Longitude of the point of interest."
},
"max_price": {
"type": "number",
"minimum": 0,
"description": "Maximum indicative price per night in USD."
},
"min_score": {
"type": "number",
"maximum": 10,
"minimum": 0,
"description": "Minimum Comfort Score (0-10)."
},
"radius_km": {
"type": "number",
"minimum": 0.1,
"description": "Search radius around near_lat/near_lng in km (default 3)."
}
}
}