CielStay
Server Details
AI search of 70,000+ independent rentals, with every booking channel and the host's direct link.
- Status
- Healthy
- Uptime
- 100.0% over 25 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 6 tools
find_direct_booking (single-property lookup) vs search_vacation_rentals (ranked search) is clearly separated by answerType and behavior, and get_property (multi-unit) vs get_listing_details (single listing) is distinct. The only mild overlap is that find_direct_booking, get_listing_details, and get_property all surface booking links, but the descriptions frame each around a different input and scope.
All six tools follow a consistent snake_case verb_noun pattern: find_direct_booking, get_listing_details, get_property, health_check, refine_search, search_vacation_rentals. No mixing of conventions or verb styles.
Six tools is well-scoped for a vacation-rental discovery server, covering search, refinement, single-listing detail, multi-unit property, direct-booking lookup, and health. Each tool has a distinct role with no filler.
The surface covers the discovery lifecycle well: search, refine, property/listing detail, direct-booking lookup, and health. Since CielStay explicitly does not handle bookings or payments, no create/update tools are expected; minor gaps like batch lookup or saved-search persistence are workaroundable.
Available Tools
6 toolsfind_direct_bookingFind where a property can be bookedRead-onlyIdempotentInspect
Look up one named property and every way it can be booked, including the host's or manager's own site. Takes propertyName plus city (most reliable), or a listing URL from a booking platform, which is matched on its listing id. The response has answerType "lookup": a lookup about one property, not a ranked search. confidence describes the match: exact-ota-id, CielStay holds that exact listing; exact-title, the name matched but it is not confirmed to be the same property; discovered-match, CielStay does not hold it, but after reading the pasted link (title and location only) it found a booking-site page that agrees on name and place, which is likely but not certain; none, CielStay has no record, which does not show that no direct option exists. Every booking URL in the response is one CielStay holds or found; none is constructed. For a pasted link CielStay does not hold, the lookup reads that one page and searches live (up to about 20 seconds); otaListing shows what was read. When the answer is none, alternatives lists different, direct-bookable homes near place (matchType "alternative"), and possibleMatches lists the closest unconfirmed candidates by name and meaning (matchType "possible", no booking link, matchScore 0-1 is closeness, not proof). Readable version: https://www.cielstay.com/lookup?q=.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | The city, to disambiguate a property name. Names repeat across towns. | |
| place | No | The town or area the traveller says the property is in. Only used to list direct-bookable alternatives near it when we do not hold the property; it never changes whether it matched. | |
| otaUrl | No | The Airbnb or Vrbo URL the traveller is looking at. Paste it exactly as they gave it — tracking parameters and locale prefixes are fine. This is the most reliable input. | |
| propertyName | No | The property name, if you have no URL. Exact spelling as shown on the OTA listing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | No | |
| answerType | No | |
| confidence | No | exact-ota-id, exact-title, discovered-match or none |
get_listing_detailsGet listing detailsRead-onlyIdempotentInspect
Full details for one CielStay listing: description, photos, amenities, house rules, location, and every booking link CielStay holds, including the host's own booking site. With checkIn and checkOut, the response also carries liveQuote where the host's booking engine supports it: the total on the host's own site for those dates (room, fees and taxes), read live. Each live quote is a real request to the host's booking engine. Accepts the listing id, the slug from a listing URL, or a short code (the "1zwf" in cielstay.com/l/1zwf).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The listing ID from a previous search result (result.id). | |
| guests | No | Number of guests, for the live quote. Defaults to 2. | |
| checkIn | No | Arrival date, YYYY-MM-DD. With checkOut, returns the live total from the host's own booking site. | |
| checkOut | No | Departure date, YYYY-MM-DD. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| found | No | |
| price | No | |
| title | No | |
| images | No | |
| bookUrl | No | |
| message | No | |
| amenities | No | |
| liveQuote | No | The total on the host's own site for the dates asked, read live; null when it couldn't be read |
| priceNote | No | |
| cielstayUrl | No | |
| description | No | |
| bookingOptions | No |
get_propertyGet a multi-unit propertyRead-onlyIdempotentInspect
Every unit at one multi-unit property: a hotel, glamping site or building whose units share a booking site and a location. Search results carry readyToBook.property.id when a home is one of several such units. Returns the property (name only where the operator's own unit titles share it), and each unit with its label, bedrooms, guests, CielStay page and readyToBook. With checkIn and checkOut, each unit's readyToBook also carries availability and the total on the host's site for those dates (up to 30 units).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The property id (readyToBook.property.id from a search result). | |
| guests | No | Number of guests. Defaults to 2. | |
| checkIn | No | Arrival date, YYYY-MM-DD. | |
| checkOut | No | Departure date, YYYY-MM-DD. |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | No | |
| units | No | |
| message | No | |
| property | No |
health_checkHealth checkRead-onlyIdempotentInspect
Check that the CielStay MCP server is reachable and the API is healthy.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No |
refine_searchRefine a searchRead-onlyIdempotentInspect
Refine a previous CielStay search in natural language, such as "more rustic", "closer to the park", "better views" or "bigger place". Takes the original query plus the refinement; no session or token is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The original search query you want to refine, exactly as you sent it before. | |
| persona | No | Carry the same persona through from the original search, if you sent one. | |
| refinement | Yes | Natural language refinement instruction. Examples: "more rustic and less modern", "closer to the water", "something with better views", "bigger — needs 3+ bedrooms". | |
| previousIntent | No | The `currentIntent` object from the previous response, if you still have it. Preserves location and dates across the refinement. Optional — omit it and the refinement still works. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | |
| hasMore | No | |
| results | Yes | |
| totalFound | No | |
| currentIntent | No | Pass to refine_search as previousIntent to keep place and dates |
search_vacation_rentalsSearch vacation rentalsRead-onlyIdempotentInspect
Search about 70,000 vacation rentals and longer-stay homes from independent hosts and property managers in 70+ countries and territories. Each result lists the ways it can be booked that CielStay holds: the host's own booking site or engine (directUrl / referenceUrl), bookUrl (the same booking page opened through CielStay, which lets CielStay count the referral) and a CielStay listing page (cielstayUrl). CielStay does not take bookings or payments. Results are ranked by fit to the request, with a photo, a price (the average per night of a 3-night stay including the host's fees, before taxes; or per month for monthly homes), match score and match reason. Suited to finding a place to stay, or to checking whether a home seen on another site can be booked with its host.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to return (1–20). Default 5. | |
| query | Yes | Natural language search query: location, dates, group, and what the stay is for. Examples: "cozy cabin near Zion National Park for a couple", "pet-friendly beachfront with a hot tub in Hawaii", "modern loft in Austin walkable to nightlife for 4 adults". Put WHO the guest is in the separate `persona` argument rather than here. | |
| guests | No | Number of guests. Defaults to 2 if omitted. | |
| intent | No | OPTIONAL FAST PATH. If you have already parsed the traveller's request, send it here and CielStay skips its own parse — measured 2.3s to 0.06s with identical results. Shape: {"vibePrefs":["quiet","rustic"],"aestheticPrefs":["historic","cabin"],"activities":["hiking"],"filters":{"guests":4,"checkIn":"2026-11-13","checkOut":"2026-11-16"}}. Trusted, not re-validated. You can also pass back the `currentIntent` from a previous response. | |
| source | No | Limit results to homes from one booking source we hold: a booking-engine or host-site name ("guesty", "hospitable", "escapia", a host brand such as "haven") or its domain; a comma list for several. The list with live counts is at https://www.cielstay.com/api/v1/sources. Booking platforms such as Airbnb or Vrbo are not sources here, because CielStay lists hosts' own sites. The same filter can be written in the query itself as source:<name> or site:<domain>. | |
| checkin | No | Check-in date in YYYY-MM-DD format. Omit if flexible or unknown. | |
| persona | No | Who the guest is, in a few sentences of plain prose — what they like, what the trip is for, and what they want to avoid. CielStay embeds this and ranks on it, so it changes which homes come back rather than filtering them. Example: "Travelling with a dog and two teenagers. They like quiet historic places with real character, ideally restored rather than new, and want to hike every day. They avoid resorts, condo complexes and anywhere with nightlife." Must be MORE THAN 100 CHARACTERS — anything shorter is too thin to embed and is ignored, so keywords like "likes cabins" have no effect. Never stored. | |
| checkout | No | Check-out date in YYYY-MM-DD format. Omit if flexible or unknown. | |
| minBedrooms | No | Minimum number of bedrooms required. | |
| maxPricePerNight | No | Maximum nightly price in USD. | |
| mustHaveAmenities | No | Amenities the listing must have, in plain English. Filterable: hot tub, pool, kitchen, washer/dryer, air conditioning, parking, workspace, waterfront, EV charger, pet friendly. Anything else is reported in _amenityWarning as not filterable rather than silently dropped. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | |
| hasMore | No | |
| results | Yes | |
| totalFound | No | |
| currentIntent | No | Pass to refine_search as previousIntent to keep place and dates |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- Changed
get_listing_details6 fields changed- added
Output schema / properties / amenities / anyOfAdded value: +[ + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "additionalProperties": true, + "properties": {}, + "type": "object" + } + ] + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Output schema / properties / bookingOptions / itemsAdded value: +{ + "$ref": "#/properties/amenities/anyOf/0/items/anyOf/1" +} - added
Output schema / properties / bookingOptions / typeAdded value: +"array" - added
Output schema / properties / images / itemsAdded value: +{ + "$ref": "#/properties/amenities/anyOf/0/items/anyOf/1" +} - added
Output schema / properties / images / typeAdded value: +"array" - added
Output schema / properties / liveQuote / anyOfAdded value: +[ + { + "$ref": "#/properties/amenities/anyOf/0/items/anyOf/1" + }, + { + "type": "null" + } +]
- Changed
get_property4 fields changed- added
Output schema / properties / property / additionalPropertiesAdded value: +true - added
Output schema / properties / property / propertiesAdded value: +{} - added
Output schema / properties / property / typeAdded value: +"object" - added
Output schema / properties / units / itemsAdded value: +{ + "$ref": "#/properties/property" +}
- Changed
refine_search5 fields changed- added
Input schema / properties / previousIntent / additionalPropertiesAdded value: +true - added
Input schema / properties / previousIntent / propertiesAdded value: +{ + "activities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "aestheticPrefs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "filters": { + "additionalProperties": true, + "properties": { + "checkIn": { + "type": "string" + }, + "checkOut": { + "type": "string" + }, + "guests": { + "type": "number" + } + }, + "type": "object" + }, + "vibePrefs": { + "items": { + "type": "string" + }, + "type": "array" + } +} - added
Input schema / properties / previousIntent / typeAdded value: +"object" - added
Output schema / properties / currentIntent / anyOfAdded value: +[ + { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / results / items / properties / readyToBook / $refAdded value: +"#/properties/currentIntent/anyOf/0"
- Changed
search_vacation_rentals5 fields changed- added
Input schema / properties / intent / additionalPropertiesAdded value: +true - added
Input schema / properties / intent / propertiesAdded value: +{ + "activities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "aestheticPrefs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "filters": { + "additionalProperties": true, + "properties": { + "checkIn": { + "type": "string" + }, + "checkOut": { + "type": "string" + }, + "guests": { + "type": "number" + } + }, + "type": "object" + }, + "vibePrefs": { + "items": { + "type": "string" + }, + "type": "array" + } +} - added
Input schema / properties / intent / typeAdded value: +"object" - added
Output schema / properties / currentIntent / anyOfAdded value: +[ + { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / results / items / properties / readyToBook / $refAdded value: +"#/properties/currentIntent/anyOf/0"
6 tool updates
- Changed
find_direct_booking1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "answerType": { + "type": "string" + }, + "confidence": { + "description": "exact-ota-id, exact-title, discovered-match or none", + "type": "string" + }, + "found": { + "type": "boolean" + } + }, + "type": "object" +}
- Changed
get_listing_details1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "amenities": {}, + "bookUrl": { + "type": "string" + }, + "bookingOptions": {}, + "cielstayUrl": { + "type": "string" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "found": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "images": {}, + "liveQuote": { + "description": "The total on the host's own site for the dates asked, read live; null when it couldn't be read" + }, + "message": { + "type": "string" + }, + "price": { + "additionalProperties": true, + "properties": { + "amountUsd": { + "type": "number" + }, + "basis": { + "description": "What the figure is: e.g. avg_night_incl_fees, avg_nightly_rate_excl_fees, host_set, monthly_rent", + "type": "string" + }, + "label": { + "description": "The qualifier to show next to the price", + "type": "string" + }, + "per": { + "description": "\"night\" or \"month\"", + "type": "string" + } + }, + "required": [ + "amountUsd", + "per", + "basis", + "label" + ], + "type": "object" + }, + "priceNote": { + "type": "string" + }, + "title": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +}
- Changed
get_property1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "found": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "property": {}, + "units": { + "type": "array" + } + }, + "type": "object" +}
- Changed
health_check1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "status": { + "type": "string" + } + }, + "type": "object" +}
- Changed
refine_search1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "currentIntent": { + "description": "Pass to refine_search as previousIntent to keep place and dates" + }, + "hasMore": { + "type": [ + "boolean", + "null" + ] + }, + "notice": { + "type": [ + "string", + "null" + ] + }, + "results": { + "items": { + "additionalProperties": true, + "properties": { + "bedrooms": { + "type": [ + "number", + "null" + ] + }, + "bookUrl": { + "description": "The host's booking page, opened through CielStay so the referral is counted", + "type": "string" + }, + "cielstayUrl": { + "type": "string" + }, + "directUrl": { + "type": "string" + }, + "id": { + "type": "string" + }, + "location": { + "type": [ + "string", + "null" + ] + }, + "maxGuests": { + "type": [ + "number", + "null" + ] + }, + "price": { + "additionalProperties": true, + "properties": { + "amountUsd": { + "type": "number" + }, + "basis": { + "description": "What the figure is: e.g. avg_night_incl_fees, avg_nightly_rate_excl_fees, host_set, monthly_rent", + "type": "string" + }, + "label": { + "description": "The qualifier to show next to the price", + "type": "string" + }, + "per": { + "description": "\"night\" or \"month\"", + "type": "string" + } + }, + "required": [ + "amountUsd", + "per", + "basis", + "label" + ], + "type": "object" + }, + "priceNote": { + "type": "string" + }, + "readyToBook": { + "description": "Where to book; with dates, availability and the total on the host's site where it can be read" + }, + "referenceUrl": { + "type": "string" + }, + "title": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "totalFound": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "results" + ], + "type": "object" +}
- Changed
search_vacation_rentals1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "currentIntent": { + "description": "Pass to refine_search as previousIntent to keep place and dates" + }, + "hasMore": { + "type": [ + "boolean", + "null" + ] + }, + "notice": { + "type": [ + "string", + "null" + ] + }, + "results": { + "items": { + "additionalProperties": true, + "properties": { + "bedrooms": { + "type": [ + "number", + "null" + ] + }, + "bookUrl": { + "description": "The host's booking page, opened through CielStay so the referral is counted", + "type": "string" + }, + "cielstayUrl": { + "type": "string" + }, + "directUrl": { + "type": "string" + }, + "id": { + "type": "string" + }, + "location": { + "type": [ + "string", + "null" + ] + }, + "maxGuests": { + "type": [ + "number", + "null" + ] + }, + "price": { + "additionalProperties": true, + "properties": { + "amountUsd": { + "type": "number" + }, + "basis": { + "description": "What the figure is: e.g. avg_night_incl_fees, avg_nightly_rate_excl_fees, host_set, monthly_rent", + "type": "string" + }, + "label": { + "description": "The qualifier to show next to the price", + "type": "string" + }, + "per": { + "description": "\"night\" or \"month\"", + "type": "string" + } + }, + "required": [ + "amountUsd", + "per", + "basis", + "label" + ], + "type": "object" + }, + "priceNote": { + "type": "string" + }, + "readyToBook": { + "description": "Where to book; with dates, availability and the total on the host's site where it can be read" + }, + "referenceUrl": { + "type": "string" + }, + "title": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "totalFound": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "results" + ], + "type": "object" +}
1 tool update
- Changed
search_vacation_rentals1 field changed- changed
Input schema / properties / source / descriptionPrevious value: -"Limit results to homes from one booking source we hold: a booking-engine or host-site name (\"guesty\", \"hospitable\", \"escapia\", a host brand such as \"haven\") or its domain; a comma list for several. The list with live counts is at https://www.cielstay.com/api/v1/sources. Booking platforms such as Airbnb or Vrbo are not sources here, because CielStay lists hosts' own sites."New value: +"Limit results to homes from one booking source we hold: a booking-engine or host-site name (\"guesty\", \"hospitable\", \"escapia\", a host brand such as \"haven\") or its domain; a comma list for several. The list with live counts is at https://www.cielstay.com/api/v1/sources. Booking platforms such as Airbnb or Vrbo are not sources here, because CielStay lists hosts' own sites. The same filter can be written in the query itself as source:<name> or site:<domain>."
1 tool update
- Changed
search_vacation_rentals2 fields changed- changed
Input schema / properties / mustHaveAmenities / descriptionPrevious value: -"Amenities the listing must have. Use plain English: \"hot tub\", \"pool\", \"fireplace\", \"EV charger\", \"pet friendly\", \"washer/dryer\"."New value: +"Amenities the listing must have, in plain English. Filterable: hot tub, pool, kitchen, washer/dryer, air conditioning, parking, workspace, waterfront, EV charger, pet friendly. Anything else is reported in _amenityWarning as not filterable rather than silently dropped." - added
Input schema / properties / sourceAdded value: +{ + "description": "Limit results to homes from one booking source we hold: a booking-engine or host-site name (\"guesty\", \"hospitable\", \"escapia\", a host brand such as \"haven\") or its domain; a comma list for several. The list with live counts is at https://www.cielstay.com/api/v1/sources. Booking platforms such as Airbnb or Vrbo are not sources here, because CielStay lists hosts' own sites.", + "type": "string" +}
1 tool update
- Added
get_property
1 tool update
- Changed
get_listing_details3 fields changed- added
Input schema / properties / checkInAdded value: +{ + "description": "Arrival date, YYYY-MM-DD. With checkOut, returns the live total from the host's own booking site.", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - added
Input schema / properties / checkOutAdded value: +{ + "description": "Departure date, YYYY-MM-DD.", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - added
Input schema / properties / guestsAdded value: +{ + "description": "Number of guests, for the live quote. Defaults to 2.", + "maximum": 50, + "minimum": 1, + "type": "integer" +}
1 tool update
- Changed
find_direct_booking1 field changed- added
Input schema / properties / placeAdded value: +{ + "description": "The town or area the traveller says the property is in. Only used to list direct-bookable alternatives near it when we do not hold the property; it never changes whether it matched.", + "type": "string" +}
1 tool update
- Added
find_direct_booking
4 tool updates
- First observed
get_listing_details - First observed
health_check - First observed
refine_search - First observed
search_vacation_rentals
Related MCP Connectors
Vacation rental discovery, direct booking, and property protection for AI agents.
Search and book verified independent vacation rentals directly from hosts, with no guest fees.
Search and request stays at independent hotels, B&Bs, guesthouses and vacation rentals, direct.
Search hotels & rentals: live prices & reviews across Booking.com, Airbnb, Vrbo & Google Hotels.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables AI assistants to search and compare vacation rentals across Jabama, Jajiga and Otaghak at once, normalizing prices, Jalali/Gregorian dates, amenities, ratings, calendars and full guest reviews into one schema. It runs read-only and locally, providing merged results with direct booking links while withholding host and reviewer identities.616 npm1MIT
- AlicenseCqualityDmaintenanceThe only MCP server with AI guest risk scoring and extortion detection. Search properties, book instantly, protect hosts. 41 tools across 5 layers. Instant API key, 10 free credits.6MIT
- AlicenseAqualityAmaintenanceVacation rental software. A signed stay offer on the host's own domain. Agents discover a host domain, verify an Ed25519-signed offer (VRP), and send the guest to that domain to book and pay the host. Do not compare hosts or prices. HemmaBo + VRP, 6 runtime tools: 2 HemmaBo tools, 2 host onboarding tools, and 2 VRP verification tools. Not an OTA. Not a marketplace.76280 npm4Apache 2.0
- AlicenseBqualityBmaintenanceEnables Airbnb searches with location, date, guest, price, and property type filters, and retrieval of detailed listing information such as amenities, house rules, and direct booking links.21,179 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.