Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "check_property_availability", "get_property_details" and "search_stays"
⟨87 unchanged words⟩ at what price" with live, date-specific data. Follow-up questions about a property from an earlier `search_stays` result — is it still available, what does it cost for other dates or guests — use that result's `id` as `property_id`. Required input: `property_id` (the `id` from a ⟨457 unchanged words⟩
StaticDetailsrecordand guest reviews foraone specific property —identified by its id. Returns the complete amenity list, photoshotel,booking sourcesB&B,dedupmetadatahostel,detailed locationapartment,and the headline rating (`rating` + `rating_count`) by default. Review DATA beyond the headlinevilla —the ratings breakdown and the actual reviewidentifiedtextsby—its
Multi-operator accommodation comparator for a geographic areaagainst theanduser'sa stayparameters —: dates (required),guestguestscount,and optional filters.Returns a ranked list ofpropertiestogether— hotels, B&Bs, apartments, villas, hostels and more — with thebookingsourcessites that offer each one and,their live availability and per-operator price
Changed the definition of "check_property_availability", "discover_destinations_near", "get_anonymous_key" and 3 more
{"additionalProperties":false,"properties":{"api_key":{"description":"Your anonymous Blue Pillow HotelsAnonymous&keyStaysforAPIthiskeyserver (format 'pk_anon_…'). Pass it in THIS field on every call — this is how the tool authenticates. If you don't have a key yet,first check your MCP client configuration, youraspersistentreturnedmemory,
Added "get_anonymous_key"; removed "b2a_get_key"; changed the definition of "check_property_availability", "discover_destinations_near", "get_property_details" and 2 more
⟨48 unchanged words⟩ , and earlier in this conversation; otherwise call`b2a_get_key``get_anonymous_key` to get one instantly (do not wait ⟨337 unchanged words⟩
⟨6 unchanged words⟩ :"array"},"availability_status":{"description":"Per the dates passed in the request:available = live bookable quotes in offers for the requested dates (price is the curated best); unavailable =BP reportedno rooms reported for these dates (offers=[], price=null); unknown = availability not established, either because the call carried
Changed the definition of "b2a_get_key", "check_property_availability", "discover_destinations_near" and 3 more
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":truefalse,"readOnlyHint":false,"title":"Get an ⟨9 unchanged words⟩
{"destructiveHint":false,"openWorldHint":true,"readOnlyHint":true,"title":" ⟨9 unchanged words⟩
Changed the definition of "discover_destinations_near" and "resolve_destination"
⟨207 unchanged words⟩ "description":"Optional filter; same semantics as resolve_destination. Areas are returned only when `area` is asked for explicitly.","enum":["city","neighborhood","airport","poi","area"],"type":"string"}},"required" ⟨4 unchanged words⟩
⟨53 unchanged words⟩ ["city","neighborhood","airport","poi","area"],"type":"string"}},"required": ⟨23 unchanged words⟩
Changed the definition of "search_stays"
⟨494 unchanged words⟩ :"number"},"property_types":{"description":"Preferred property types. Like `amenities`, this steers rather than excludes: the types listed here come first and a minority of other types can still appear in the page. Read each result's `property_type` when the distinction matters to the user. Canonical tokens: hotel, apartment, house, villa, ⟨658 unchanged words⟩
Certificate changed, valid to 2027-03-21
Certificate recorded, valid to 2026-11-29
Authorization not required
First tool surface recorded: 6 tools (server version 1.27.1)
Showing the latest 10 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
{"properties":{"api_key":{"description":"Your anonymous Blue Pillow HotelsAnonymous&keyStaysforAPIthiskeyserver (format 'pk_anon_…'). Pass it in THIS field on every call — this is how the tool authenticates. If you don't have a key yet,first check your MCP client configuration, youraspersistentreturnedmemory,byand`get_anonymous_key`.earlierRequiredinby thisconversation; otherwise call `get_anonymous_key` to get one instantly (do not wait for a 401). Reusetool; the same keyonworkseveryforsubsequentevery call.It is not a sensitive secret: no account, payment, or personal data is attached.","type":"string"},"language":{ ⟨147 unchanged words⟩
ObtainIssues apermanentfree anonymousAPIkey for Blue Pillow Hotels &Stays. No signupStays,no login required. The key is not a sensitive secret — it carrieswith no account,payment,orpersonal data. It keeps the service responsive when many agents use it at once (rate limits apply per key) and lets us count usage and booking-link referrals per key, as described in the privacy policy (https://b2a.bluepillow.com/legal/privacy). You can safely keep it in your MCPsign-up.clientTheconfiguration,otherintoolsyourofpersistent memory,thisorserverintake thecurrent conversation context. Pass itkey inthetheir `api_key`field of every subsequent call and the rest of the tools become available. CALL THIS FIRST when you haveargument.noA key:every other tool needsdoesone.notBefore callingexpire,check whether you ALREADYsohavetheasame key(MCP client configuration, persistent memory, or earlier in this conversation) and reusecanitbeinsteadusedof issuing a new one — do not waitforanother tool to fail with a 401. The key never expires — keep the one you receive and reuse it forever. If you ever lose it, youlatercancalls;callcalling this tool againto issueissues a newone (a generous per-IP daily issuance limit applies purelyone.asKeysancarryanti-abuse guardrail; normal use never reaches it). Clients that can persist configuration usually store the key inper-keytheir connectorratesettings,limitssoandtheletsameBluekeyPillowservescounteveryusageconversation.andClientsbooking-linkwhose memory does not retain an opaque token end up issuing one keyreferrals perconversation;that works and is not an errorkey,but a storedaskeydescribedgives moreinconsistenttherate-limitprivacyheadroom.policy (https://b2a.bluepillow.com/legal/privacy). Optional ``label`` and ``agent`` (max 64 chars ⟨11 unchanged words⟩ requested it (e.g. 'claude-desktop', 'chatgpt', 'cursor-ide').;Dothey should notputcontain personal datain them. Theyand donot affectrate limits or capabilities.Integrators who need higherlimits, or who hit a problem worthreporting,limits can write to info@bluepillow.com.
⟨3 unchanged words⟩ :{"key":{"description":"The anonymousAPIkey (prefix 'pk_anon_'). Long-lived and reusable: pass,itused as the `api_key` argumenton every subsequent tool call, and keepofittheacrossothersessions.tools.","type":"string"},"rate_limit":{ ⟨26 unchanged words⟩
{"additionalProperties":false,"properties":{"api_key":{"description":"Your anonymous Blue Pillow HotelsAnonymous&keyStaysforAPIthiskeyserver (format 'pk_anon_…'). Pass it in THIS field on every call — this is how the tool authenticates. If you don't have a key yet,first check your MCP client configuration, youraspersistentreturnedmemory,byand`get_anonymous_key`.earlierRequiredinby thisconversation; otherwise call `get_anonymous_key` to get one instantly (do not wait for a 401). Reusetool; the same keyonworkseveryforsubsequentevery call.It is not a sensitive secret: no account, payment, or personal data is attached.","type":"string"},"currency":{ ⟨232 unchanged words⟩
{"properties":{"api_key":{"description":"Your anonymous Blue Pillow HotelsAnonymous&keyStaysforAPIthiskeyserver (format 'pk_anon_…'). Pass it in THIS field on every call — this is how the tool authenticates. If you don't have a key yet,first check your MCP client configuration, youraspersistentreturnedmemory,byand`get_anonymous_key`.earlierRequiredinby thisconversation; otherwise call `get_anonymous_key` to get one instantly (do not wait for a 401). Reusetool; the same keyonworkseveryforsubsequentevery call.It is not a sensitive secret: no account, payment, or personal data is attached.","type":"string"},"country":{ ⟨168 unchanged words⟩
{"additionalProperties":false,"properties":{"api_key":{"description":"Your anonymous Blue Pillow HotelsAnonymous&keyStaysforAPIthiskeyserver (format 'pk_anon_…'). Pass it in THIS field on every call — this is how the tool authenticates. If you don't have a key yet,first check your MCP client configuration, youraspersistentreturnedmemory,byand`get_anonymous_key`.earlierRequiredinby thisconversation; otherwise call `get_anonymous_key` to get one instantly (do not wait for a 401). Reusetool; the same keyonworkseveryforsubsequentevery call.It is not a sensitive secret: no account, payment, or personal data is attached.","type":"string"},"availability_mode":{ ⟨1108 unchanged words⟩
⟨46 unchanged words⟩ , and earlier in this conversation; otherwise call`b2a_get_key``get_anonymous_key` to get one instantly (do not wait ⟨176 unchanged words⟩
⟨58 unchanged words⟩ whenever the user's question is about guest experience.CarriesIt takes nopricedatesunlessandcalledcarrieswithnodatesprice:aa price only exists for a concrete staywindow.window, which is what `check_property_availability` quotes. Useful when the user wants to inspect or ⟨357 unchanged words⟩ do NOT need to try to fetch everything.Note: review texts are returned only when called WITHOUT dates (the dated availability path does not carry them).`user_country`, `currency`, and `language` carry the **user's** locale, not the property's.When this call carries dates (live prices), prices come back in `currency` if set, else derived from `user_country`, else **USD** — so pass `user_country` and/or `currency` whenever youTheyknowlocalize theuser'slocation/currency; don't rely on`web_url`thebookingUSDlink;default.this`user_country`tooland `language` also localize the `web_url`returnsbookingnolink.prices. Language defaultis "en"; country default is "US" ⟨14 unchanged words⟩ `reviews_aggregate.score_0_5`, and each per-OTA score under `distribution_by_ota`.Without dates this tool returnsInnothepriceresponse(`price` is null, `offers`is empty)and`availability_status` is `unknown`,(because no dateswere considered).are considered. The live quote, when needed, comes from`check_property_availability`. `web_url` is a ready-to-open booking link for ⟨21 unchanged words⟩
⟨48 unchanged words⟩ , and earlier in this conversation; otherwise call`b2a_get_key``get_anonymous_key` to get one instantly (do not wait ⟨27 unchanged words⟩ :"string"},"currency":{"description":"Currency of theUser'sreturnedpreferredpricescurrency (ISO-4217, 3-letter uppercase, e.g. 'USD', 'EUR', 'GBP', 'CAD'). SET THIS (or `user_country`) to,pricecarriedininto theuser's currency —`web_url`ifbookingyoulink.setThisNEITHER,tool
⟨6 unchanged words⟩ :"array"},"availability_status":{"description":"Per the dates passed in the request:available = live bookable quotes in offers for the requested dates (price is the curated best); unavailable =BP reportedno rooms reported for these dates (offers=[], price=null); unknown = availability not established, either because the call carried no datesconsideredor(nobecausepricetheexistsoperatorswithoutreturnedanothingdatedconclusivequery(offers=[], price=null).","enum":["available","unavailable" ⟨29 unchanged words⟩ ,"description":{"description":"Free-text property descriptionfrom the canonical source. Only populated,
⟨46 unchanged words⟩ , and earlier in this conversation; otherwise call`b2a_get_key``get_anonymous_key` to get one instantly (do not wait ⟨197 unchanged words⟩
⟨27 unchanged words⟩ booking sources that offer each one and,whenfordatesthearerequestedpasseddates (required), their liveavailabilityavailability and per-operatorprice for the requested window.price. Natural-language date references — "tonight", "this ⟨177 unchanged words⟩ the user can compare spatial alternatives at aglance. The map widget reads these fields directly from this responseglance,—with no separatelookup needed for visualization.lookup. - `thumbnail_url` carries the property's first photo URL ⟨6 unchanged words⟩ is on file); useful for embedding inlineor showing on the mapnextalongsidetotheeachpin.result. - `images` on search results is capped to ⟨123 unchanged words⟩ for the requested dates**, populated only whendates were passed andthecomparator confirmedavailability. `offers[0]` is the curated best; ⟨12 unchanged words⟩ and `deeplink_url`. `price` mirrors `offers[0]`. -With no dates (orWhenwhenavailabilitynothingwasisnotavailable)confirmed, `price` is null and `offers` is empty — ⟨11 unchanged words⟩ figure. - `availability_status` per result encodes the livestatestate. With the default `availability_mode=strict` only `available` results are returned; `include_unavailable` also returns the other two states: - `available` — bookable rooms confirmed at ⟨40 unchanged words⟩ those dates. `offers` is empty and `price` isnull (no price for these dates).null. Useful to decide whether to suggest alternate dates ⟨7 unchanged words⟩ offer it as a backup. - `unknown` —no usable answer for those dates: eithertherequest carried no dates, or theoperators returned nothing conclusive for thosethem.dates. `offers` is empty and `price` is null.This is the most frequent of the three states, and itIt is NOT evidencethat theproperty is full — it means the availability was notestablished. Say "I could not confirm availability", ⟨58 unchanged words⟩ numbers without a unit get misread. - Whendates are present and`available` properties are in theresults, the rate can be quoted and `rooms_left` ⟨15 unchanged words⟩ on Booking" reads well). - Whendates are present and ALLnoresultsresultareis`unavailable``available`,that's the signal tosay so explicitly to the user andoffer to widen thedates, location, or filters. - `offers[]` ⟨119 unchanged words⟩ compare `offers[]` for the per-operator spread. Whennodates were passed (oravailabilitynothingwasisnotavailable)confirmed `offers` is an emptylist and `price`is null — there is no price to ⟨92 unchanged words⟩ Prices in `offers`/`price` reflect the requested dates andguests;guests.with no dates there is no price.For a final bookable confirmation, the corresponding `deeplink_url` ⟨196 unchanged words⟩ or when the per-OTA review breakdown (`distribution_by_ota`) is needed, call `get_property_details` to get the fuller `reviews_aggregate`. On the search path, `reviews_aggregate` carries the top-line `score_0_5`, `rating_count` (reviews backing the score) and `comment_count` (readable review TEXTS available) when the comparator
⟨48 unchanged words⟩ , and earlier in this conversation; otherwise call`b2a_get_key``get_anonymous_key` to get one instantly (do not wait ⟨1137 unchanged words⟩
before
{"properties":{"alternatives":{"properties":{"out_of_bounds":{"items":{"properties":{"amenities":{"items":{"type":"string"},"type":"array"},"availability_status":{"description":"Per the dates passed in the request: available = live bookable quotes in offers (price is the curated best); unavailable = BP reported no rooms for these dates (offers=[], price=null); unknown = no dates considered (no price exists without a dated query).","enum":["available","unavailable","unknown"],"type":"string"},"brand":{"type":["string","null"]},"chain":{"type":["string","null"]},"cluster_id":{"type":["string","null"]},"dedup_meta":{"properties":{"confidence":{"type":"number"},"last_reconciled":{"type":"string"},"source_listings":{"type":"integer"}},"type":["object","null"]},"description":{"description":"Free-text property description from the canonical source. Only populated when the endpoint path is active (use_bp_single_property_endpoint=True) and dates are present.","type":["string","null"]},"features":{"description":"Structured feature/facility tags (e.g. HouseFacilities, PropertyTypes). Populated alongside description when the endpoint path is active.","items":{"properties":{"code":{"type":"string"},"name":{"type":["string","null"]},"type":{"type":["string","null"]}},"required":["code"],"type":"object"},"type":"array"},"id":{"type":"string"},"images":{"items":{"properties":{"caption":{"type":["string","null"]},"url":{"type":"string"}},"type":"object"},"type":"array"},"location":{"properties":{"address":{"type":["string","null"]},"city":{"type":["string","null"]},"country":{"type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"},"neighborhood":{"type":["string","null"]}},"type":"object"},"name":{"type":"string"},"offers":{"items":{"properties":{"amount":{"description":"TOTAL for the requested stay (sum across nights).","type":"number"},"amount_per_night":{"description":"Per-night rate; multiply by nights to get amount.","type":["number","null"]},"breakfast_included":{"type":"boolean"},"currency":{"type":"string"},"deeplink_url":{"type":["string","null"]},"discount_percentage":{"type":["number","null"]},"is_discounted":{"type":"boolean"},"ota":{"type":"string"},"refundable":{"type":"boolean"},"rooms_left":{"minimum":0,"type":["integer","null"]}},"type":"object"},"type":"array"},"ota_coverage":{"items":{"type":"string"},"type":"array"},"price":{"properties":{"amount":{"type":"number"},"amount_per_night":{"type":["number","null"]},"breakfast_included":{"type":"boolean"},"currency":{"type":"string"},"discount_percentage":{"type":["number","null"]},"is_discounted":{"type":"boolean"},"ota":{"type":["string","null"]},"refundable":{"type":"boolean"}},"type":["object","null"]},"property_type":{"type":"string"},"rating":{"maximum":5,"minimum":0,"type":"number"},"rating_count":{"type":["integer","null"]},"reviews_aggregate":{"description":"rating_count = reviews backing the score (OTA aggregate, e.g. 156). comment_count = readable review TEXTS available (e.g. 53), fetchable via reviews_sample/reviews_extended. They differ: most guests rate, fewer write text — do not conflate them.","properties":{"comment_count":{"type":["integer","null"]},"distribution_by_ota":{"type":"object"},"rating_count":{"type":"integer"},"score_0_5":{"maximum":5,"minimum":0,"type":"number"}},"type":["object","null"]},"reviews_meta":{"description":"Provenance for reviews_sample on property detail: how many review texts were returned vs available, and that the cap is deliberate (token efficiency). null on search or when reviews were not requested.","properties":{"cap":{"minimum":0,"type":"integer"},"capped":{"type":"boolean"},"note":{"type":"string"},"returned":{"minimum":0,"type":"integer"},"total_available":{"minimum":0,"type":"integer"}},"type":["object","null"]},"reviews_sample":{"items":{"properties":{"connector_name":{"type":["string","null"]},"date":{"type":"string"},"description":{"type":"string"},"language":{"type":["string","null"]},"score":{"maximum":5,"minimum":0,"type":"number"}},"type":"object"},"type":["array","null"]},"stars":{"type":["integer","null"]},"thumbnail_url":{"type":["string","null"]},"web_url":{"type":["string","null"]}},"required":["id","name","property_type","rating","location","ota_coverage"],"type":"object"},"type":["array","null"]},"overbudget":{"items":{"properties":{"amenities":{"items":{"type":"string"},"type":"array"},"availability_status":{"description":"Per the dates passed in the request: available = live bookable quotes in offers (price is the curated best); unavailable = BP reported no rooms for these dates (offers=[], price=null); unknown = no dates considered (no price exists without a dated query).","enum":["available","unavailable","unknown"],"type":"string"},"brand":{"type":["string","null"]},"chain":{"type":["string","null"]},"cluster_id":{"type":["string","null"]},"dedup_meta":{"properties":{"confidence":{"type":"number"},"last_reconciled":{"type":"string"},"source_listings":{"type":"integer"}},"type":["object","null"]},"description":{"description":"Free-text property description from the canonical source. Only populated when the endpoint path is active (use_bp_single_property_endpoint=True) and dates are present.","type":["string","null"]},"features":{"description":"Structured feature/facility tags (e.g. HouseFacilities, PropertyTypes). Populated alongside description when the endpoint path is active.","items":{"properties":{"code":{"type":"string"},"name":{"type":["string","null"]},"type":{"type":["string","null"]}},"required":["code"],"type":"object"},"type":"array"},"id":{"type":"string"},"images":{"items":{"properties":{"caption":{"type":["string","null"]},"url":{"type":"string"}},"type":"object"},"type":"array"},"location":{"properties":{"address":{"type":["string","null"]},"city":{"type":["string","null"]},"country":{"type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"},"neighborhood":{"type":["string","null"]}},"type":"object"},"name":{"type":"string"},"offers":{"items":{"properties":{"amount":{"description":"TOTAL for the requested stay (sum across nights).","type":"number"},"amount_per_night":{"description":"Per-night rate; multiply by nights to get amount.","type":["number","null"]},"breakfast_included":{"type":"boolean"},"currency":{"type":"string"},"deeplink_url":{"type":["string","null"]},"discount_percentage":{"type":["number","null"]},"is_discounted":{"type":"boolean"},"ota":{"type":"string"},"refundable":{"type":"boolean"},"rooms_left":{"minimum":0,"type":["integer","null"]}},"type":"object"},"type":"array"},"ota_coverage":{"items":{"type":"string"},"type":"array"},"price":{"properties":{"amount":{"type":"number"},"amount_per_night":{"type":["number","null"]},"breakfast_included":{"type":"boolean"},"currency":{"type":"string"},"discount_percentage":{"type":["number","null"]},"is_discounted":{"type":"boolean"},"ota":{"type":["string","null"]},"refundable":{"type":"boolean"}},"type":["object","null"]},"property_type":{"type":"string"},"rating":{"maximum":5,"minimum":0,"type":"number"},"rating_count":{"type":["integer","null"]},"reviews_aggregate":{"description":"rating_count = reviews backing the score (OTA aggregate, e.g. 156). comment_count = readable review TEXTS available (e.g. 53), fetchable via reviews_sample/reviews_extended. They differ: most guests rate, fewer write text — do not conflate them.","properties":{"comment_count":{"type":["integer","null"]},"distribution_by_ota":{"type":"object"},"rating_count":{"type":"integer"},"score_0_5":{"maximum":5,"minimum":0,"type":"number"}},"type":["object","null"]},"reviews_meta":{"description":"Provenance for reviews_sample on property detail: how many review texts were returned vs available, and that the cap is deliberate (token efficiency). null on search or when reviews were not requested.","properties":{"cap":{"minimum":0,"type":"integer"},"capped":{"type":"boolean"},"note":{"type":"string"},"returned":{"minimum":0,"type":"integer"},"total_available":{"minimum":0,"type":"integer"}},"type":["object","null"]},"reviews_sample":{"items":{"properties":{"connector_name":{"type":["string","null"]},"date":{"type":"string"},"description":{"type":"string"},"language":{"type":["string","null"]},"score":{"maximum":5,"minimum":0,"type":"number"}},"type":"object"},"type":["array","null"]},"stars":{"type":["integer","null"]},"thumbnail_url":{"type":["string","null"]},"web_url":{"type":["string","null"]}},"required":["id","name","property_type","rating","location","ota_coverage"],"type":"object"},"type":["array","null"]}},"type":"object"},"metadata":{"properties":{"notes":{"items":{"type":"string"},"type":"array"},"otas_queried":{"type":"integer"},"price_as_of":{"type":"string"},"request_id":{"type":"string"}},"required":["otas_queried"],"type":"object"},"page":{"properties":{"next_cursor":{"type":["string","null"]},"total_estimate":{"type":"integer"}},"required":["next_cursor","total_estimate"],"type":"object"},"results":{"items":{"properties":{"amenities":{"items":{"type":"string"},"type":"array"},"availability_status":{"description":"Per the dates passed in the request: available = live bookable quotes in offers (price is the curated best); unavailable = BP reported no rooms for these dates (offers=[], price=null); unknown = no dates considered (no price exists without a dated query).","enum":["available","unavailable","unknown"],"type":"string"},"brand":{"type":["string","null"]},"chain":{"type":["string","null"]},"cluster_id":{"type":["string","null"]},"dedup_meta":{"properties":{"confidence":{"type":"number"},"last_reconciled":{"type":"string"},"source_listings":{"type":"integer"}},"type":["object","null"]},"description":{"description":"Free-text property description from the canonical source. Only populated when the endpoint path is active (use_bp_single_property_endpoint=True) and dates are present.","type":["string","null"]},"features":{"description":"Structured feature/facility tags (e.g. HouseFacilities, PropertyTypes). Populated alongside description when the endpoint path is active.","items":{"properties":{"code":{"type":"string"},"name":{"type":["string","null"]},"type":{"type":["string","null"]}},"required":["code"],"type":"object"},"type":"array"},"id":{"type":"string"},"images":{"items":{"properties":{"caption":{"type":["string","null"]},"url":{"type":"string"}},"type":"object"},"type":"array"},"location":{"properties":{"address":{"type":["string","null"]},"city":{"type":["string","null"]},"country":{"type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"},"neighborhood":{"type":["string","null"]}},"type":"object"},"name":{"type":"string"},"offers":{"items":{"properties":{"amount":{"description":"TOTAL for the requested stay (sum across nights).","type":"number"},"amount_per_night":{"description":"Per-night rate; multiply by nights to get amount.","type":["number","null"]},"breakfast_included":{"type":"boolean"},"currency":{"type":"string"},"deeplink_url":{"type":["string","null"]},"discount_percentage":{"type":["number","null"]},"is_discounted":{"type":"boolean"},"ota":{"type":"string"},"refundable":{"type":"boolean"},"rooms_left":{"minimum":0,"type":["integer","null"]}},"type":"object"},"type":"array"},"ota_coverage":{"items":{"type":"string"},"type":"array"},"price":{"properties":{"amount":{"type":"number"},"amount_per_night":{"type":["number","null"]},"breakfast_included":{"type":"boolean"},"currency":{"type":"string"},"discount_percentage":{"type":["number","null"]},"is_discounted":{"type":"boolean"},"ota":{"type":["string","null"]},"refundable":{"type":"boolean"}},"type":["object","null"]},"property_type":{"type":"string"},"rating":{"maximum":5,"minimum":0,"type":"number"},"rating_count":{"type":["integer","null"]},"reviews_aggregate":{"description":"rating_count = reviews backing the score (OTA aggregate, e.g. 156). comment_count = readable review TEXTS available (e.g. 53), fetchable via reviews_sample/reviews_extended. They differ: most guests rate, fewer write text — do not conflate them.","properties":{"comment_count":{"type":["integer","null"]},"distribution_by_ota":{"type":"object"},"rating_count":{"type":"integer"},"score_0_5":{"maximum":5,"minimum":0,"type":"number"}},"type":["object","null"]},"reviews_meta":{"description":"Provenance for reviews_sample on property detail: how many review texts were returned vs available, and that the cap is deliberate (token efficiency). null on search or when reviews were not requested.","properties":{"cap":{"minimum":0,"type":"integer"},"capped":{"type":"boolean"},"note":{"type":"string"},"returned":{"minimum":0,"type":"integer"},"total_available":{"minimum":0,"type":"integer"}},"type":["object","null"]},"reviews_sample":{"items":{"properties":{"connector_name":{"type":["string","null"]},"date":{"type":"string"},"description":{"type":"string"},"language":{"type":["string","null"]},"score":{"maximum":5,"minimum":0,"type":"number"}},"type":"object"},"type":["array","null"]},"stars":{"type":["integer","null"]},"thumbnail_url":{"type":["string","null"]},"web_url":{"type":["string","null"]}},"required":["id","name","property_type","rating","location","ota_coverage"],"type":"object"},"type":"array"}},"required":["results","page","metadata"],"type":"object"}Get an anonymous API key for Blue Pillow Hotels & Stays — Obtain a permanent anonymous API key for Blue Pillow Hotels & Stays. No signup, no login required. The key is not a sensitive secret — it carries no account, payment, or personal data. It keeps the service responsive when many agents use it at once (rate limits apply per key) and lets us count usage and booking-link referrals per key, as described in the privacy policy (https://b2a.bluepillow.com/legal/privacy). You can safely keep it in your MCP client configuration, in your persistent memory, or in the current conversation context. Pass it in the `api_key` field of every subsequent call and…
Get an anonymous API key for Blue Pillow Hotels & Stays — Obtain a permanent anonymous API key for Blue Pillow Hotels & Stays. No signup, no login required. The key is not a sensitive secret — it carries no account, payment, or personal data. It exists only so we can keep the service responsive when many agents are using it at once, so you can safely keep it in your MCP client configuration, in your persistent memory, or in the current conversation context. Pass it as the bearer token on all subsequent calls and the rest of the tools become available. CALL THIS FIRST when you have no key: every other tool needs one. Before calling, check whether yo…
{"destructiveHint":false,"openWorldHint":true,"readOnlyHint":true,"title":" ⟨5 unchanged words⟩
{"destructiveHint":false,"openWorldHint":true,"readOnlyHint":true,"title":" ⟨9 unchanged words⟩
{"destructiveHint":false,"openWorldHint":true,"readOnlyHint":true,"title":" ⟨5 unchanged words⟩
{"destructiveHint":false,"openWorldHint":true,"readOnlyHint":true,"title":" ⟨7 unchanged words⟩
⟨54 unchanged words⟩ resolver step. Accepts cities, neighborhoods, airports,andpoints of interest, and named areas such as islands or districts ('Tenerife', 'Crete', 'Trastevere'), written locally or in English. Names are matched ⟨102 unchanged words⟩ coordinates to `search_stays` is the more reliable path. An `area` candidate can be large: its `location.default_radius_km` says how far a search on its id reaches (an island's may include its neighbours); when the user wants one part of it, coordinates of that part are the tighter search.
⟨209 unchanged words⟩ `search_stays` with coordinates is the more reliable path. area: a named area the comparator does not class as a city — an island, a district, a region (Tenerife, Crete, Kato Paphos); matched by exact name only.","enum":["city","neighborhood","airport","poi","area"],"type":"string"}},"required" ⟨3 unchanged words⟩
⟨53 unchanged words⟩ ["city","neighborhood","airport","poi","area"],"type":"string"}},"required": ⟨27 unchanged words⟩
after
{"properties":{"alternatives":{"properties":{"out_of_bounds":{"items":{"properties":{"amenities":{"items":{"type":"string"},"type":"array"},"availability_status":{"description":"available = live bookable quotes in offers for the requested dates (price is the curated best); unavailable = no rooms reported for these dates (offers=[], price=null); unknown = availability not established, either because the call carried no dates or because the operators returned nothing conclusive (offers=[], price=null).","enum":["available","unavailable","unknown"],"type":"string"},"brand":{"type":["string","null"]},"chain":{"type":["string","null"]},"cluster_id":{"type":["string","null"]},"dedup_meta":{"properties":{"confidence":{"type":"number"},"last_reconciled":{"type":"string"},"source_listings":{"type":"integer"}},"type":["object","null"]},"description":{"description":"Free-text property description, when the source provides one. Usually null on search results.","type":["string","null"]},"features":{"description":"Structured feature/facility tags (e.g. HouseFacilities, PropertyTypes). Populated alongside description when available.","items":{"properties":{"code":{"type":"string"},"name":{"type":["string","null"]},"type":{"type":["string","null"]}},"required":["code"],"type":"object"},"type":"array"},"id":{"type":"string"},"images":{"items":{"properties":{"caption":{"type":["string","null"]},"url":{"type":"string"}},"type":"object"},"type":"array"},"location":{"properties":{"address":{"type":["string","null"]},"city":{"type":["string","null"]},"country":{"type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"},"neighborhood":{"type":["string","null"]}},"type":"object"},"name":{"type":"string"},"offers":{"items":{"properties":{"amount":{"description":"TOTAL for the requested stay (sum across nights).","type":"number"},"amount_per_night":{"description":"Per-night rate; multiply by nights to get amount.","type":["number","null"]},"breakfast_included":{"type":"boolean"},"currency":{"type":"string"},"deeplink_url":{"type":["string","null"]},"discount_percentage":{"type":["number","null"]},"is_discounted":{"type":"boolean"},"ota":{"type":"string"},"refundable":{"type":"boolean"},"rooms_left":{"minimum":0,"type":["integer","null"]}},"type":"object"},"type":"array"},"ota_coverage":{"items":{"type":"string"},"type":"array"},"price":{"properties":{"amount":{"type":"number"},"amount_per_night":{"type":["number","null"]},"breakfast_included":{"type":"boolean"},"currency":{"type":"string"},"discount_percentage":{"type":["number","null"]},"is_discounted":{"type":"boolean"},"ota":{"type":["string","null"]},"refundable":{"type":"boolean"}},"type":["object","null"]},"property_type":{"type":"string"},"rating":{"maximum":5,"minimum":0,"type":"number"},"rating_count":{"type":["integer","null"]},"reviews_aggregate":{"description":"rating_count = reviews backing the score (OTA aggregate, e.g. 156). comment_count = readable review TEXTS available (e.g. 53), fetchable via reviews_sample/reviews_extended. They differ: most guests rate, fewer write text — do not conflate them.","properties":{"comment_count":{"type":["integer","null"]},"distribution_by_ota":{"type":"object"},"rating_count":{"type":"integer"},"score_0_5":{"maximum":5,"minimum":0,"type":"number"}},"type":["object","null"]},"reviews_meta":{"description":"Provenance for reviews_sample on property detail: how many review texts were returned vs available, and that the cap is deliberate (token efficiency). null on search or when reviews were not requested.","properties":{"cap":{"minimum":0,"type":"integer"},"capped":{"type":"boolean"},"note":{"type":"string"},"returned":{"minimum":0,"type":"integer"},"total_available":{"minimum":0,"type":"integer"}},"type":["object","null"]},"reviews_sample":{"items":{"properties":{"connector_name":{"type":["string","null"]},"date":{"type":"string"},"description":{"type":"string"},"language":{"type":["string","null"]},"score":{"maximum":5,"minimum":0,"type":"number"}},"type":"object"},"type":["array","null"]},"stars":{"type":["integer","null"]},"thumbnail_url":{"type":["string","null"]},"web_url":{"type":["string","null"]}},"required":["id","name","property_type","rating","location","ota_coverage"],"type":"object"},"type":["array","null"]},"overbudget":{"items":{"properties":{"amenities":{"items":{"type":"string"},"type":"array"},"availability_status":{"description":"available = live bookable quotes in offers for the requested dates (price is the curated best); unavailable = no rooms reported for these dates (offers=[], price=null); unknown = availability not established, either because the call carried no dates or because the operators returned nothing conclusive (offers=[], price=null).","enum":["available","unavailable","unknown"],"type":"string"},"brand":{"type":["string","null"]},"chain":{"type":["string","null"]},"cluster_id":{"type":["string","null"]},"dedup_meta":{"properties":{"confidence":{"type":"number"},"last_reconciled":{"type":"string"},"source_listings":{"type":"integer"}},"type":["object","null"]},"description":{"description":"Free-text property description, when the source provides one. Usually null on search results.","type":["string","null"]},"features":{"description":"Structured feature/facility tags (e.g. HouseFacilities, PropertyTypes). Populated alongside description when available.","items":{"properties":{"code":{"type":"string"},"name":{"type":["string","null"]},"type":{"type":["string","null"]}},"required":["code"],"type":"object"},"type":"array"},"id":{"type":"string"},"images":{"items":{"properties":{"caption":{"type":["string","null"]},"url":{"type":"string"}},"type":"object"},"type":"array"},"location":{"properties":{"address":{"type":["string","null"]},"city":{"type":["string","null"]},"country":{"type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"},"neighborhood":{"type":["string","null"]}},"type":"object"},"name":{"type":"string"},"offers":{"items":{"properties":{"amount":{"description":"TOTAL for the requested stay (sum across nights).","type":"number"},"amount_per_night":{"description":"Per-night rate; multiply by nights to get amount.","type":["number","null"]},"breakfast_included":{"type":"boolean"},"currency":{"type":"string"},"deeplink_url":{"type":["string","null"]},"discount_percentage":{"type":["number","null"]},"is_discounted":{"type":"boolean"},"ota":{"type":"string"},"refundable":{"type":"boolean"},"rooms_left":{"minimum":0,"type":["integer","null"]}},"type":"object"},"type":"array"},"ota_coverage":{"items":{"type":"string"},"type":"array"},"price":{"properties":{"amount":{"type":"number"},"amount_per_night":{"type":["number","null"]},"breakfast_included":{"type":"boolean"},"currency":{"type":"string"},"discount_percentage":{"type":["number","null"]},"is_discounted":{"type":"boolean"},"ota":{"type":["string","null"]},"refundable":{"type":"boolean"}},"type":["object","null"]},"property_type":{"type":"string"},"rating":{"maximum":5,"minimum":0,"type":"number"},"rating_count":{"type":["integer","null"]},"reviews_aggregate":{"description":"rating_count = reviews backing the score (OTA aggregate, e.g. 156). comment_count = readable review TEXTS available (e.g. 53), fetchable via reviews_sample/reviews_extended. They differ: most guests rate, fewer write text — do not conflate them.","properties":{"comment_count":{"type":["integer","null"]},"distribution_by_ota":{"type":"object"},"rating_count":{"type":"integer"},"score_0_5":{"maximum":5,"minimum":0,"type":"number"}},"type":["object","null"]},"reviews_meta":{"description":"Provenance for reviews_sample on property detail: how many review texts were returned vs available, and that the cap is deliberate (token efficiency). null on search or when reviews were not requested.","properties":{"cap":{"minimum":0,"type":"integer"},"capped":{"type":"boolean"},"note":{"type":"string"},"returned":{"minimum":0,"type":"integer"},"total_available":{"minimum":0,"type":"integer"}},"type":["object","null"]},"reviews_sample":{"items":{"properties":{"connector_name":{"type":["string","null"]},"date":{"type":"string"},"description":{"type":"string"},"language":{"type":["string","null"]},"score":{"maximum":5,"minimum":0,"type":"number"}},"type":"object"},"type":["array","null"]},"stars":{"type":["integer","null"]},"thumbnail_url":{"type":["string","null"]},"web_url":{"type":["string","null"]}},"required":["id","name","property_type","rating","location","ota_coverage"],"type":"object"},"type":["array","null"]}},"type":"object"},"metadata":{"properties":{"notes":{"items":{"type":"string"},"type":"array"},"otas_queried":{"type":"integer"},"price_as_of":{"type":"string"},"request_id":{"type":"string"}},"required":["otas_queried"],"type":"object"},"page":{"properties":{"next_cursor":{"type":["string","null"]},"total_estimate":{"type":"integer"}},"required":["next_cursor","total_estimate"],"type":"object"},"results":{"items":{"properties":{"amenities":{"items":{"type":"string"},"type":"array"},"availability_status":{"description":"available = live bookable quotes in offers for the requested dates (price is the curated best); unavailable = no rooms reported for these dates (offers=[], price=null); unknown = availability not established, either because the call carried no dates or because the operators returned nothing conclusive (offers=[], price=null).","enum":["available","unavailable","unknown"],"type":"string"},"brand":{"type":["string","null"]},"chain":{"type":["string","null"]},"cluster_id":{"type":["string","null"]},"dedup_meta":{"properties":{"confidence":{"type":"number"},"last_reconciled":{"type":"string"},"source_listings":{"type":"integer"}},"type":["object","null"]},"description":{"description":"Free-text property description, when the source provides one. Usually null on search results.","type":["string","null"]},"features":{"description":"Structured feature/facility tags (e.g. HouseFacilities, PropertyTypes). Populated alongside description when available.","items":{"properties":{"code":{"type":"string"},"name":{"type":["string","null"]},"type":{"type":["string","null"]}},"required":["code"],"type":"object"},"type":"array"},"id":{"type":"string"},"images":{"items":{"properties":{"caption":{"type":["string","null"]},"url":{"type":"string"}},"type":"object"},"type":"array"},"location":{"properties":{"address":{"type":["string","null"]},"city":{"type":["string","null"]},"country":{"type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"},"neighborhood":{"type":["string","null"]}},"type":"object"},"name":{"type":"string"},"offers":{"items":{"properties":{"amount":{"description":"TOTAL for the requested stay (sum across nights).","type":"number"},"amount_per_night":{"description":"Per-night rate; multiply by nights to get amount.","type":["number","null"]},"breakfast_included":{"type":"boolean"},"currency":{"type":"string"},"deeplink_url":{"type":["string","null"]},"discount_percentage":{"type":["number","null"]},"is_discounted":{"type":"boolean"},"ota":{"type":"string"},"refundable":{"type":"boolean"},"rooms_left":{"minimum":0,"type":["integer","null"]}},"type":"object"},"type":"array"},"ota_coverage":{"items":{"type":"string"},"type":"array"},"price":{"properties":{"amount":{"type":"number"},"amount_per_night":{"type":["number","null"]},"breakfast_included":{"type":"boolean"},"currency":{"type":"string"},"discount_percentage":{"type":["number","null"]},"is_discounted":{"type":"boolean"},"ota":{"type":["string","null"]},"refundable":{"type":"boolean"}},"type":["object","null"]},"property_type":{"type":"string"},"rating":{"maximum":5,"minimum":0,"type":"number"},"rating_count":{"type":["integer","null"]},"reviews_aggregate":{"description":"rating_count = reviews backing the score (OTA aggregate, e.g. 156). comment_count = readable review TEXTS available (e.g. 53), fetchable via reviews_sample/reviews_extended. They differ: most guests rate, fewer write text — do not conflate them.","properties":{"comment_count":{"type":["integer","null"]},"distribution_by_ota":{"type":"object"},"rating_count":{"type":"integer"},"score_0_5":{"maximum":5,"minimum":0,"type":"number"}},"type":["object","null"]},"reviews_meta":{"description":"Provenance for reviews_sample on property detail: how many review texts were returned vs available, and that the cap is deliberate (token efficiency). null on search or when reviews were not requested.","properties":{"cap":{"minimum":0,"type":"integer"},"capped":{"type":"boolean"},"note":{"type":"string"},"returned":{"minimum":0,"type":"integer"},"total_available":{"minimum":0,"type":"integer"}},"type":["object","null"]},"reviews_sample":{"items":{"properties":{"connector_name":{"type":["string","null"]},"date":{"type":"string"},"description":{"type":"string"},"language":{"type":["string","null"]},"score":{"maximum":5,"minimum":0,"type":"number"}},"type":"object"},"type":["array","null"]},"stars":{"type":["integer","null"]},"thumbnail_url":{"type":["string","null"]},"web_url":{"type":["string","null"]}},"required":["id","name","property_type","rating","location","ota_coverage"],"type":"object"},"type":"array"}},"required":["results","page","metadata"],"type":"object"}