# Premium cruise fares

> Search premium cruise fares by line, ship, nights, date, and rate.

- name: cruises.luxuryforless/premium-cruise-fares
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 79/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/cruises.luxuryforless%2Fpremium-cruise-fares
- tools: https://api.protogrid.dev/v1/servers/cruises.luxuryforless%2Fpremium-cruise-fares/tools

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

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "premium-cruise-fares": {
      "type": "http",
      "url": "https://luxuryforless.cruises/mcp"
    }
  }
}
```


## Trust

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

## Quality 79/100 (new)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### 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: 71 (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
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: search_rates (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); describe_rates (readOnlyHint, destructiveHint, idempotentHint, openWorldHint)
- pass `tools.token_cost`: about 672 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: 2, about 672 tokens to load them all
- tool set hash: 78f92fda16b8a94ec42179df1db1b827
- badge: [![protogrid quality](https://protogrid.dev/badge/cruises.luxuryforless/premium-cruise-fares.svg)](https://protogrid.dev/servers/cruises.luxuryforless/premium-cruise-fares)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://luxuryforless.cruises/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (2)

- `describe_rates`: Describe the latest published crawl: crawl date, row count, and the real line, source, ship, and rate values. Call this before search_rates when an exact line, source, or ship name is unknown. Prices are not converted between currencies.
- `search_rates`: Search the latest published cruise fares. This is the full crawl, including Contitrans and Crusit. Empty line, source, ship, or rate means all of that dimension. Values within one of those filters are OR; filters combine with AND. title, line, source, ship, rate, and sort ignore case. title is a substring. line, source, and ship must otherwise match describe_rates. nights, price, and ppd are inclusive min-max strings such as "8-14". departs is inclusive YYYY-MM-DD..YYYY-MM-DD. sort is field:asc or field:desc, comma-separated. Sort fields are title, cruiseline (line), source_label (source), ship, date, number_of_days (nights), lowest_price (price), price_per_day (ppd), and comment (rate). The default sort is Ultra, then All included, then Economy, then cheapest per night. Each row's price stays in its own currency.
