# RoomExpert

> Hotel verdicts on eight axes, with every quote cited to its outlet and url.

- name: com.roomexpert/hotels
- version: 0.2.0
- connection class: R0 (autonomous)
- trust: 79/100 flags: no-repository
- quality: 89/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.roomexpert%2Fhotels
- tools: https://api.protogrid.dev/v1/servers/com.roomexpert%2Fhotels/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "hotels": {
      "type": "http",
      "url": "https://mcp.roomexpert.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 98
- freshness: 100
- provenance: 45
- drivers: +dns-namespace +reachable +uptime-95% +updated-6d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 89/100 (new)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 5 of 5 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 1,320 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`: tool history recorded for 5 of the 7 days needed

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 5, about 1,320 tokens to load them all
- tool set hash: 9dc339b6e1f332ee9c9ca283cd7d7acf
- tools last changed: 2026-10-16T00:14:58.505Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.roomexpert/hotels.svg)](https://protogrid.dev/servers/com.roomexpert/hotels)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-16 `find_award_stays` changed (title, description, annotations) **meaning changed**
  - before: Hotels a given points balance can actually reach, ranked by how good the redemption is AGAINST THAT PROGRAM'S OWN NORM rather than a flat cents-per-point scale. Use it when a traveler says what they are holding - "I have 300k Hyatt points". The balance comes from them; this server stores nothing about anyone.
  - after: Lists hotels a given points balance can reach for one night, ranked by how good the redemption is against that program's own norm rather than a flat cents-per-point scale. Fits a traveler who says what they hold, e.g. "I have 300k Hyatt points". The balance is supplied by the caller and is not stored. Only published chart or sampled award prices count; nothing is estimated. Returns a Markdown table of up to `limit` hotels (name, destination, points, value grade, score), or a sentence saying nothing priced fits the budget.
- 2026-10-16 `get_rates` changed (title, description, annotations) **meaning changed**
  - before: Live rooms and prices for one hotel and a stay window, with a booking link for each. THE EXPENSIVE ONE: it calls a metered supplier, so use it when a traveler has settled on a hotel and wants to book, never to browse or to compare several. Decide with get_evidence first; this closes the decision rather than informing it. Booking links are time-limited and go stale in minutes - surface them promptly or re-call. A LINK IS NOT A BOOKING: it opens a checkout the traveler completes themselves, with their own details and their own card. This tool cannot reserve a room and neither can you. Never say a stay is booked, held or confirmed.
  - after: Returns live rooms and prices for one hotel and a stay window, with a booking link for each. It queries a metered rate supplier and is limited to 12 calls a minute per client, so it fits a traveler who has chosen a hotel rather than browsing several. Booking links are time-limited and expire within minutes. A link opens a checkout the traveler completes with their own details and card; this tool does not reserve, hold or confirm a room. Returns a Markdown table (room, nightly, total, refundability, link). Hotels the supplier does not carry, sold-out dates and bad dates each return a plain sentence saying which; an over-limit call says how many seconds to wait.
- 2026-10-16 `get_evidence` changed (title, description, annotations) **meaning changed**
  - before: The cited quotes behind a hotel's scores. Each one carries the outlet that published it, what kind of document it was, and its url. This is what RoomExpert has that a rate API does not: use it whenever a traveler asks what a hotel is actually LIKE - whether it is quiet, whether the beds are good, whether service holds up.
  - after: Returns the cited quotes behind a hotel's scores. Each one carries the outlet that published it, what kind of document it was, and its url. Answers what a hotel is actually like: whether it is quiet, whether the beds are good, whether service holds up. Returns a Markdown list of up to `limit` quotes (default 12, max 40), spread across the axes unless narrowed to one, each with its outlet, document kind and url. Some hosts are returned as "a guest review" with no name or link. An unknown slug returns near matches; no evidence on an axis is stated as such.
- 2026-10-16 `get_hotel` changed (title, description, annotations)
  - before: The RoomExpert verdict for one hotel: overall score, the eight axis scores and what each is based on, how deep the coverage is, the loyalty program, and the award price where a real one exists. Use this to answer "is this hotel any good" or "what is it strong at". For the quotes behind the scores, call get_evidence.
  - after: Returns the RoomExpert verdict for one hotel: overall score, the eight axis scores and what each is based on, how deep the coverage is, the loyalty program, and the award price where a real one exists. Answers "is this hotel any good" and "what is it strong at". Returns Markdown: a score table with one row per axis ("no evidence" where an axis has none), the award line, and the hotel page url. An unknown slug returns up to five near matches. The quotes behind the scores come from get_evidence.
- 2026-10-16 `search_hotels` changed (title, description, annotations) **meaning changed**
  - before: Find hotels by name, destination or brand, each with its RoomExpert score, slug and page. Call this first whenever you do not already have a slug: every other tool takes one. Can rank by a single axis - "quietest rooms in Tokyo" is destination "tokyo", sort_by_axis "noise". Reads our own database; not metered.
  - after: Finds hotels by name, destination or brand and returns each one's RoomExpert score, slug and page url. The other tools take that slug, so this is the lookup when the slug is not already known. Can rank by a single axis: "quietest rooms in Tokyo" is destination "tokyo", sort_by_axis "noise". Returns a Markdown table of up to `limit` hotels (name, destination, score, axis score when sorting, loyalty program). An unknown destination returns suggested names; no match says the hotel is not covered.

Full history: https://api.protogrid.dev/v1/servers/com.roomexpert%2Fhotels/changes

## Remotes

- https://mcp.roomexpert.com/mcp (streamable-http, auth none, reachable true, uptime30d 0.95454544)

## Packages

_none_

## Tools (5)

- `find_award_stays`: Lists hotels a given points balance can reach for one night, ranked by how good the redemption is against that program's own norm rather than a flat cents-per-point scale. Fits a traveler who says what they hold, e.g. "I have 300k Hyatt points". The balance is supplied by the caller and is not stored. Only published chart or sampled award prices count; nothing is estimated. Returns a Markdown table of up to `limit` hotels (name, destination, points, value grade, score), or a sentence saying nothing priced fits the budget.
- `get_evidence`: Returns the cited quotes behind a hotel's scores. Each one carries the outlet that published it, what kind of document it was, and its url. Answers what a hotel is actually like: whether it is quiet, whether the beds are good, whether service holds up. Returns a Markdown list of up to `limit` quotes (default 12, max 40), spread across the axes unless narrowed to one, each with its outlet, document kind and url. Some hosts are returned as "a guest review" with no name or link. An unknown slug returns near matches; no evidence on an axis is stated as such.
- `get_hotel`: Returns the RoomExpert verdict for one hotel: overall score, the eight axis scores and what each is based on, how deep the coverage is, the loyalty program, and the award price where a real one exists. Answers "is this hotel any good" and "what is it strong at". Returns Markdown: a score table with one row per axis ("no evidence" where an axis has none), the award line, and the hotel page url. An unknown slug returns up to five near matches. The quotes behind the scores come from get_evidence.
- `get_rates`: Returns live rooms and prices for one hotel and a stay window, with a booking link for each. It queries a metered rate supplier and is limited to 12 calls a minute per client, so it fits a traveler who has chosen a hotel rather than browsing several. Booking links are time-limited and expire within minutes. A link opens a checkout the traveler completes with their own details and card; this tool does not reserve, hold or confirm a room. Returns a Markdown table (room, nightly, total, refundability, link). Hotels the supplier does not carry, sold-out dates and bad dates each return a plain sentence saying which; an over-limit call says how many seconds to wait.
- `search_hotels`: Finds hotels by name, destination or brand and returns each one's RoomExpert score, slug and page url. The other tools take that slug, so this is the lookup when the slug is not already known. Can rank by a single axis: "quietest rooms in Tokyo" is destination "tokyo", sort_by_axis "noise". Returns a Markdown table of up to `limit` hotels (name, destination, score, axis score when sorting, loyalty program). An unknown destination returns suggested names; no match says the hotel is not covered.
