# VeryChic Hotel Deals

> Unofficial read-only MCP server for VeryChic hotel offers

- name: io.github.jordantete/verychic-mcp
- version: 0.4.0
- connection class: R0 (autonomous)
- trust: 97/100
- quality: 94/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.jordantete%2Fverychic-mcp
- tools: https://api.protogrid.dev/v1/servers/io.github.jordantete%2Fverychic-mcp/tools

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

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "verychic-mcp": {
      "type": "http",
      "url": "https://verychic-mcp.fly.dev/mcp"
    }
  }
}
```


## Trust

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

## Quality 94/100 (strong)

### 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: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 2 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 2 of 2 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 2,376 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: 100 (weight 15)

- pass `deps.known_vulns`: no known advisory in 39 resolved packages
- pass `deps.mcp_sdk_version`: mcp 2.2.0, no known advisory
- pass `deps.resolvable`: verychic-mcp@0.4.0 resolved: 39 packages

- tools: 2, about 2,376 tokens to load them all
- tool set hash: 941088854e2c1ef1f3f9f6a05194b3eb
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.jordantete/verychic-mcp.svg)](https://protogrid.dev/servers/io.github.jordantete/verychic-mcp)
- 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._

## Dependencies

- pypi verychic-mcp@0.4.0: resolved, 38 dependencies, MCP SDK mcp 2.2.0

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0.

## Remotes

- https://verychic-mcp.fly.dev/mcp (streamable-http, auth none, reachable true, uptime30d 0.9915254)

## Packages

- pypi verychic-mcp@0.4.0

## Tools (2)

- `verychic_offer_details`: Get full details plus per-date availability and prices for one specific VeryChic offer.

        When to use: after `verychic_search_offers` returned an offer you want to inspect —
        pass that offer's `source` and `external_id` here. You must obtain those two
        identifiers from a search result first; this tool does not search.

        Behaviour: read-only and anonymous; rate-limited to about 1 request per second;
        prices in EUR, text in French. Availability is looked up for roughly the next 5
        months unless `months` names the window to query. For tour-operator packages
        (`source` = 'ORCHESTRA_TO') VeryChic exposes no date-availability endpoint:
        `availabilities` is then empty and `availabilities_supported` is false —
        meaning "not supported", NOT "sold out".

        Returns an object with: `offer` (same fields as a search result, plus `offer_url`),
        `advantages`, `included_added_values`, `non_included_added_values`, `gallery`
        (image URLs), `availabilities` (one entry per check-in date with `date`, `price`,
        `currency`, `nights`, `days`, `departure_city_code`), `availabilities_by_month`
        (one row per month with stock — `month` as 'MM/YYYY', `min_price`, `currency` and
        `dates_available` — in chronological order), `availabilities_supported` (bool), and
        `cheapest_price` (lowest available price, or null when none).

        To answer "which month is cheapest", read `availabilities_by_month` rather than
        scanning `availabilities`: it carries the same answer in a fraction of the size,
        and it stays small when `months` asks for a wide window.
        
- `verychic_search_offers`: Search and filter the current VeryChic offers by destination, country, price,
        discount, stars, flights, theme, or proximity — with optional sorting.

        When to use: when you already know roughly what the user wants — a place, a country,
        a budget, a minimum discount or star rating, flights vs hotel-only, a theme (e.g.
        pool, spa, romantic, last_minute), or hotels near a point (near_lat/near_lng, with an
        optional radius_km). To inspect one specific offer in depth use
        `verychic_offer_details`. All filters are optional and combine with AND; call it with
        no filter to browse the full current catalogue in catalogue order.

        Behaviour: read-only and anonymous; rate-limited to about 1 request per second.
        Filtering is done client-side over the live catalogue: `destination` is a
        substring (matched on destination or name), `country` is an exact match — both
        ignore case and accents, so 'grece' matches the catalogue's 'Grèce' —
        `max_price`/`min_discount`/`min_stars` are numeric bounds,
        `flights_included` toggles flight-bearing vs hotel-only, and `theme` matches a curated
        label decoded from the catalogue's thematics tags. Use `sort_by` to order results
        (`discount`, `price`, `rating`, `stars`, or `distance`). Prices are in EUR and text is
        in French; there is no pagination. Returns the first `limit` matches after filtering
        and sorting. "Current" means live offers at call time; the catalogue changes over time.

        Returns a list of offer objects (same `source` + `external_id` pair for use with
        `verychic_offer_details`). Each offer also carries `discount` (percent off, may be
        null), `stars` (1-5, may be null), `price_label` (human-readable price unit, e.g.
        "à partir de par pers. pour 3 nuits" vs "par chambre" — read this before comparing
        prices), `price_with_flights` (EUR, null when not applicable), `flights_included`
        (bool), `rating` (overall guest grade out of 10), `opinion_count` (how many
        reviews that grade rests on — check it before trusting a rating), the per-topic
        grades `rating_location`, `rating_room`, `rating_service`, `rating_food` and
        `rating_public_area` (out of 10, null when unrated), and `themes` (curated theme
        labels decoded from the catalogue's thematics tags, e.g. ["pool", "luxury"]).
        The catalogue carries no reviews, so every grade is null and `opinion_count` is 0
        here; call `verychic_offer_details` on an offer to get its real review data.
        An empty list means no offer matched the filters.

        Proximity search: pass `near_lat` and `near_lng` (decimal degrees, together) to
        compute each offer's `distance_km` from that point; add `radius_km` to keep only
        offers within that distance, and/or `sort_by="distance"` for nearest-first.
        `distance_km` is null when no center is given.
        
