VeryChic Hotel Deals
Unofficial read-only MCP server for VeryChic hotel offers
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"verychic-mcp": {
"command": "uvx",
"args": [
"verychic-mcp"
]
}
}
}실행 가능한 패키지
0.4.0stdio원격 엔드포인트
https://verychic-mcp.fly.dev/mcpstreamable-http할 수 있는 일
도구 목록
도구 (2)
🟢verychic_search_offers(destination, country, max_price, min_discount, min_stars, ...)
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.
입력 스키마
{
"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"
}출력 스키마
{
"type": "object",
"properties": {
"result": {
"items": {
"$ref": "#/$defs/OfferOut"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"$defs": {
"OfferOut": {
"properties": {
"source": {
"title": "Source",
"type": "string"
},
"external_id": {
"title": "External Id",
"type": "integer"
},
"name": {
"title": "Name",
"type": "string"
},
"destination": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Destination"
},
"country": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Country"
},
"price": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Price"
},
"currency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency"
},
"short_desc": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Short Desc"
},
"discount": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Discount"
},
"url_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Url Name"
},
"sales_mode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sales Mode"
},
"offer_end_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Offer End Date"
},
"latitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Latitude"
},
"longitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Longitude"
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Image"
},
"advantages": {
"items": {
"type": "string"
},
"title": "Advantages",
"type": "array"
},
"themes": {
"items": {
"type": "string"
},
"title": "Themes",
"type": "array"
},
"stars": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Stars"
},
"price_label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Price Label"
},
"price_with_flights": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Price With Flights"
},
"flights_included": {
"title": "Flights Included",
"type": "boolean"
},
"rating": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Rating"
},
"opinion_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Opinion Count"
},
"rating_location": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Rating Location"
},
"rating_public_area": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Rating Public Area"
},
"rating_room": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Rating Room"
},
"rating_service": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Rating Service"
},
"rating_food": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Rating Food"
},
"distance_km": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Distance Km"
},
"offer_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Offer Url"
}
},
"required": [
"source",
"external_id",
"name",
"destination",
"country",
"price",
"currency",
"short_desc",
"discount",
"url_name",
"sales_mode",
"offer_end_date",
"latitude",
"longitude",
"image",
"advantages",
"themes",
"stars",
"price_label",
"price_with_flights",
"flights_included",
"rating",
"opinion_count",
"rating_location",
"rating_public_area",
"rating_room",
"rating_service",
"rating_food",
"distance_km",
"offer_url"
],
"title": "OfferOut",
"type": "object"
}
},
"title": "verychic_search_offersOutput"
}🟢verychic_offer_details(source, external_id, months)
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.
입력 스키마
{
"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"
}출력 스키마
{
"type": "object",
"properties": {
"offer": {
"$ref": "#/$defs/OfferOut"
},
"advantages": {
"items": {
"type": "string"
},
"title": "Advantages",
"type": "array"
},
"included_added_values": {
"items": {
"type": "string"
},
"title": "Included Added Values",
"type": "array"
},
"non_included_added_values": {
"items": {
"type": "string"
},
"title": "Non Included Added Values",
"type": "array"
},
"gallery": {
"items": {
"type": "string"
},
"title": "Gallery",
"type": "array"
},
"availabilities": {
"items": {
"$ref": "#/$defs/AvailabilityOut"
},
"title": "Availabilities",
"type": "array"
},
"availabilities_by_month": {
"items": {
"$ref": "#/$defs/MonthPriceOut"
},
"title": "Availabilities By Month",
"type": "array"
},
"availabilities_supported": {
"title": "Availabilities Supported",
"type": "boolean"
},
"cheapest_price": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Cheapest Price"
}
},
"required": [
"offer",
"advantages",
"included_added_values",
"non_included_added_values",
"gallery",
"availabilities",
"availabilities_by_month",
"availabilities_supported",
"cheapest_price"
],
"$defs": {
"AvailabilityOut": {
"properties": {
"date": {
"title": "Date",
"type": "string"
},
"price": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Price"
},
"currency": {
"title": "Currency",
"type": "string"
},
"nights": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Nights"
},
"days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Days"
},
"departure_city_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Departure City Code"
}
},
"required": [
"date",
"price",
"currency",
"nights",
"days",
"departure_city_code"
],
"title": "AvailabilityOut",
"type": "object"
},
"MonthPriceOut": {
"properties": {
"month": {
"title": "Month",
"type": "string"
},
"min_price": {
"title": "Min Price",
"type": "integer"
},
"currency": {
"title": "Currency",
"type": "string"
},
"dates_available": {
"title": "Dates Available",
"type": "integer"
}
},
"required": [
"month",
"min_price",
"currency",
"dates_available"
],
"title": "MonthPriceOut",
"type": "object"
},
"OfferOut": {
"properties": {
"source": {
"title": "Source",
"type": "string"
},
"external_id": {
"title": "External Id",
"type": "integer"
},
"name": {
"title": "Name",
"type": "string"
},
"destination": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Destination"
},
"country": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Country"
},
"price": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Price"
},
"currency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency"
},
"short_desc": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Short Desc"
},
"discount": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Discount"
},
"url_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Url Name"
},
"sales_mode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sales Mode"
},
"offer_end_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Offer End Date"
},
"latitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Latitude"
},
"longitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Longitude"
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Image"
},
"advantages": {
"items": {
"type": "string"
},
"title": "Advantages",
"type": "array"
},
"themes": {
"items": {
"type": "string"
},
"title": "Themes",
"type": "array"
},
"stars": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Stars"
},
"price_label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Price Label"
},
"price_with_flights": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Price With Flights"
},
"flights_included": {
"title": "Flights Included",
"type": "boolean"
},
"rating": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Rating"
},
"opinion_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Opinion Count"
},
"rating_location": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Rating Location"
},
"rating_public_area": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Rating Public Area"
},
"rating_room": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Rating Room"
},
"rating_service": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Rating Service"
},
"rating_food": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Rating Food"
},
"distance_km": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Distance Km"
},
"offer_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Offer Url"
}
},
"required": [
"source",
"external_id",
"name",
"destination",
"country",
"price",
"currency",
"short_desc",
"discount",
"url_name",
"sales_mode",
"offer_end_date",
"latitude",
"longitude",
"image",
"advantages",
"themes",
"stars",
"price_label",
"price_with_flights",
"flights_included",
"rating",
"opinion_count",
"rating_location",
"rating_public_area",
"rating_room",
"rating_service",
"rating_food",
"distance_km",
"offer_url"
],
"title": "OfferOut",
"type": "object"
}
},
"title": "OfferDetailsOut"
}커뮤니티
증거