{"name":"io.github.jordantete/verychic-mcp","slug":"jordantete-verychic-mcp","title":"VeryChic Hotel Deals","description":"Unofficial read-only MCP server for VeryChic hotel offers","url":"https://mcp.market/server/jordantete-verychic-mcp","rating":null,"grade":"A","score":91,"certified":false,"status":"active","category":"maps","tags":["maps"],"presence":{"score":40,"stars":1,"forks":0,"downloads_week":664,"last_push_at":"2026-09-22T07:26:34.000Z","license":"MIT"},"uptime":{"percent":100,"checks":15,"ok":15,"last_checked_at":"2026-09-23T02:41:22.084Z","last_ok_at":"2026-09-23T02:41:22.084Z","latency_ms":95},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/jordantete/verychic-mcp","website":"https://github.com/jordantete/verychic-mcp","version":"0.4.0","remotes":[{"type":"streamable-http","url":"https://verychic-mcp.fly.dev/mcp"}],"packages":[{"registryType":"pypi","registryBaseUrl":"https://pypi.org","identifier":"verychic-mcp","version":"0.4.0","runtimeHint":"uvx","transport":{"type":"stdio"}}],"tools":[{"name":"verychic_offer_details","description":"Get full details plus per-date availability and prices for one specific VeryChic offer.\n\n        When to use: after `verychic_search_offers` returned an offer you want to inspect —\n        pass that offer's `source` and `external_id` here. You must obtain those two\n        identifiers from a search result first; this tool does not search.\n\n        Behaviour: read-only and anonymous; rate-limited to about 1 request per second;\n        prices in EUR, text in French. Availability is looked up for roughly the next 5\n        months unless `months` names the window to query. For tour-operator packages\n        (`source` = 'ORCHESTRA_TO') VeryChic exposes no date-availability endpoint:\n        `availabilities` is then empty and `availabilities_supported` is false —\n        meaning \"not supported\", NOT \"sold out\".\n\n        Returns an object with: `offer` (same fields as a search result, plus `offer_url`),\n        `advantages`, `included_added_values`, `non_included_added_values`, `gallery`\n        (image URLs), `availabilities` (one entry per check-in date with `date`, `price`,\n        `currency`, `nights`, `days`, `departure_city_code`), `availabilities_by_month`\n        (one row per month with stock — `month` as 'MM/YYYY', `min_price`, `currency` and\n        `dates_available` — in chronological order), `availabilities_supported` (bool), and\n        `cheapest_price` (lowest available price, or null when none).\n\n        To answer \"which month is cheapest\", read `availabilities_by_month` rather than\n        scanning `availabilities`: it carries the same answer in a fraction of the size,\n        and it stays small when `months` asks for a wide window.\n        ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"source":{"description":"The offer's source type, copied verbatim from the `source` field of a `verychic_search_offers` result. One of 'ORCHESTRA' (a single hotel) or 'ORCHESTRA_TO' (a tour-operator package). Packages have no per-date availability.","title":"Source","type":"string"},"external_id":{"description":"The offer's numeric `external_id`, copied from a `verychic_search_offers` result. Identifies the offer together with `source`.","title":"External Id","type":"integer"},"months":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Months to look up check-in availability for, each written 'MM/YYYY' (e.g. ['01/2027', '02/2027']). Use it to look further ahead than the default window, or to target a season. Omit for roughly the next 5 months. Has no effect on tour-operator packages, which expose no date availability.","title":"Months"}},"required":["source","external_id"],"title":"verychic_offer_detailsArguments"}},{"name":"verychic_search_offers","description":"Search and filter the current VeryChic offers by destination, country, price,\n        discount, stars, flights, theme, or proximity — with optional sorting.\n\n        When to use: when you already know roughly what the user wants — a place, a country,\n        a budget, a minimum discount or star rating, flights vs hotel-only, a theme (e.g.\n        pool, spa, romantic, last_minute), or hotels near a point (near_lat/near_lng, with an\n        optional radius_km). To inspect one specific offer in depth use\n        `verychic_offer_details`. All filters are optional and combine with AND; call it with\n        no filter to browse the full current catalogue in catalogue order.\n\n        Behaviour: read-only and anonymous; rate-limited to about 1 request per second.\n        Filtering is done client-side over the live catalogue: `destination` is a\n        substring (matched on destination or name), `country` is an exact match — both\n        ignore case and accents, so 'grece' matches the catalogue's 'Grèce' —\n        `max_price`/`min_discount`/`min_stars` are numeric bounds,\n        `flights_included` toggles flight-bearing vs hotel-only, and `theme` matches a curated\n        label decoded from the catalogue's thematics tags. Use `sort_by` to order results\n        (`discount`, `price`, `rating`, `stars`, or `distance`). Prices are in EUR and text is\n        in French; there is no pagination. Returns the first `limit` matches after filtering\n        and sorting. \"Current\" means live offers at call time; the catalogue changes over time.\n\n        Returns a list of offer objects (same `source` + `external_id` pair for use with\n        `verychic_offer_details`). Each offer also carries `discount` (percent off, may be\n        null), `stars` (1-5, may be null), `price_label` (human-readable price unit, e.g.\n        \"à partir de par pers. pour 3 nuits\" vs \"par chambre\" — read this before comparing\n        prices), `price_with_flights` (EUR, null when not applicable), `flights_included`\n        (bool), `rating` (overall guest grade out of 10), `opinion_count` (how many\n        reviews that grade rests on — check it before trusting a rating), the per-topic\n        grades `rating_location`, `rating_room`, `rating_service`, `rating_food` and\n        `rating_public_area` (out of 10, null when unrated), and `themes` (curated theme\n        labels decoded from the catalogue's thematics tags, e.g. [\"pool\", \"luxury\"]).\n        The catalogue carries no reviews, so every grade is null and `opinion_count` is 0\n        here; call `verychic_offer_details` on an offer to get its real review data.\n        An empty list means no offer matched the filters.\n\n        Proximity search: pass `near_lat` and `near_lng` (decimal degrees, together) to\n        compute each offer's `distance_km` from that point; add `radius_km` to keep only\n        offers within that distance, and/or `sort_by=\"distance\"` for nearest-first.\n        `distance_km` is null when no center is given.\n        ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"destination":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Substring matched against each offer's destination AND name, ignoring case and accents (e.g. 'paris', 'maldives', 'crete' finds 'Crète'). Omit to not filter by destination.","title":"Destination"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Exact country name as spelled in the (French) catalogue, matched ignoring case and accents, e.g. 'France', 'Italie', 'Grece' (finds 'Grèce'). Omit to not filter by country.","title":"Country"},"max_price":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Inclusive upper bound on the offer price, in EUR. Offers with no price are excluded when this is set. Omit for no price cap.","title":"Max Price"},"min_discount":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Keep only offers whose discount percentage is at least this value (e.g. 40 for '40% off or more'). Offers with no discount are excluded. Omit for no discount filter.","title":"Min Discount"},"min_stars":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Keep only offers with at least this hotel star rating (1-5), parsed from the offer name. Offers with no detectable rating are excluded. Omit to not filter by stars.","title":"Min Stars"},"flights_included":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Filter on whether flights are part of the offer: true keeps flight-bearing offers, false keeps hotel-only offers. Omit to not filter.","title":"Flights Included"},"theme":{"anyOf":[{"enum":["adults_only","city_break","cruise","island","last_minute","luxury","mountain","nature","pool","romantic","rooftop","spa","sun","villa"],"type":"string"},{"type":"null"}],"default":null,"description":"Keep only offers matching this curated theme, decoded from the catalogue's thematics tags. One of: adults_only, city_break, cruise, island, last_minute, luxury, mountain, nature, pool, romantic, rooftop, spa, sun, villa. Omit to not filter by theme.","title":"Theme"},"near_lat":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Latitude of a search center for proximity search, in decimal degrees. Must be given together with near_lng. Omit for no geo search.","title":"Near Lat"},"near_lng":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Longitude of a search center for proximity search, in decimal degrees. Must be given together with near_lat. Omit for no geo search.","title":"Near Lng"},"radius_km":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Keep only offers within this many kilometers of the near_lat/near_lng center. Requires near_lat and near_lng. Omit for no radius.","title":"Radius Km"},"sort_by":{"anyOf":[{"enum":["discount","price","rating","stars","distance"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort the results: 'discount' (biggest discount first), 'price' (cheapest first), 'rating' (best-rated first), 'stars' (most stars first), 'distance' (nearest first, requires near_lat/near_lng). Offers missing the sort value are placed last. Omit to keep catalogue order.","title":"Sort By"},"limit":{"default":20,"description":"Maximum number of matching offers to return (default 20), applied after filtering and sorting. No pagination.","title":"Limit","type":"integer"}},"title":"verychic_search_offersArguments"}}],"scan":{"score":91,"grade":"A","scanned_at":"2026-09-22T11:50:20.865Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-22T11:50:20.810Z","components":{"code":{"score":25,"max":25,"notes":["19 source files scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 492ms"]},"poisoning":{"score":13,"max":15,"notes":["2 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"poison.long-description","severity":"low","component":"poisoning","title":"Unusually long tool description (over 2,000 characters)","evidence":"tool 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. …"}],"inputs":{"probes":[{"url":"https://verychic-mcp.fly.dev/mcp","reachable":true,"authRequired":false,"latencyMs":492,"serverInfo":{"name":"verychic","version":"0.4.0"}}],"packages":[{"registryType":"pypi","identifier":"verychic-mcp","version":"0.4.0","found":true,"weeklyDownloads":664,"license":"MIT","dependencyCount":5,"publishedAt":"2026-09-21T08:49:51.348584Z","repositoryUrl":"https://github.com/jordantete/verychic-mcp"}],"repo":{"found":true,"owner":"jordantete","repo":"verychic-mcp","archived":false,"pushedAt":"2026-09-22T07:26:34Z","stars":1,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/2340374?v=4","ownerCreatedAt":"2012-09-13T15:38:44Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/2340374?v=4&s=128","source":"github"},"presence":{"stars":1,"forks":0,"downloadsWeek":664,"license":"MIT","lastPushAt":"2026-09-22T07:26:34.000Z","score":40}}}},"grade_history":[],"reviews":[]}