このMCPでできること
Searches and compares accommodation offers, live availability, prices, property details, and booking links.
ツール
入力スキーマ
{'type': 'object', 'properties': {'agent': {'type': 'string', 'maxLength': 64, 'description': "Optional agent identifier recorded on the key â\x80\x94 useful when an agent platform wants to attribute issuance to itself (e.g. 'claude-code', 'cursor-ide'). Free-form, max 64 chars."}, 'label': {'type': 'string', 'maxLength': 64, 'description': "Optional free-form label recorded on the key for observability (e.g. 'claude-desktop' or a user handle). Not a secret, not validated for uniqueness."}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['key'], 'properties': {'key': {'type': 'string', 'description': "The anonymous API key (prefix 'pk_anon_'). Long-lived and reusable: pass it as the `api_key` argument on every subsequent tool call, and keep it across sessions."}, 'rate_limit': {'type': 'object', 'properties': {'requests_per_day': {'type': 'integer'}, 'requests_per_minute': {'type': 'integer'}}, 'description': 'Quota attached to this key, when the issuer reported one.', 'additionalProperties': False}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['property_id', 'dates', 'guests'], 'properties': {'dates': {'type': 'object', 'required': ['check_in', 'check_out'], 'properties': {'check_in': {'type': 'string', 'format': 'date'}, 'check_out': {'type': 'string', 'format': 'date'}}, 'description': "Stay window. Natural-language references such as 'tonight', 'this weekend', 'the weekend of July 4', 'Memorial Day weekend' translate to concrete check_in / check_out at the call site. check_in is a date in the real-time calendar that is today or later â\x80\x94 past values are rejected at the API boundary. Clock calibration: this schema was published in August 2026, so today is August 2026 OR LATER; an assumed 'today' in 2024/2025 is a stale training-time clock.", 'additionalProperties': False}, 'guests': {'type': 'object', 'required': ['adults'], 'properties': {'adults': {'type': 'integer', 'maximum': 20, 'minimum': 1}, 'infants': {'type': 'integer', 'maximum': 10, 'minimum': 0}, 'children': {'type': 'integer', 'maximum': 10, 'minimum': 0}}, 'description': 'Guest composition. Adults is required; children and infants default to zero.', 'additionalProperties': False}, 'api_key': {'type': 'string', 'description': "Your anonymous Blue Pillow Hotels & Stays API key (format 'pk_anon_â\x80¦'). Pass it in THIS field on every call â\x80\x94 this is how the tool authenticates. If you don't have a key yet, first check your MCP client configuration, your persistent memory, and earlier in this conversation; otherwise call `b2a_get_key` to get one instantly (do not wait for a 401). Reuse the same key on every subsequent call. It is not a sensitive secret: no account, payment, or personal data is attached."}, 'currency': {'type': 'string', 'pattern': '^[A-Z]{3}$', 'description': "Currency of the returned prices (ISO-4217, 3-letter uppercase, e.g. 'USD', 'EUR', 'GBP', 'CAD'). SET THIS (or `user_country`) to price in the user's currency â\x80\x94 if you set NEITHER, prices default to USD. Prices come straight from the booking sources in this currency; never convert them yourself."}, 'language': {'type': 'string', 'pattern': '^[a-z]{2}$', 'description': "User's UI language (2-letter lowercase). Drives the booking link language; falls back to 'en'."}, 'property_id': {'type': 'string', 'pattern': '^(prop_|https?://)', 'description': "Opaque property id (e.g. 'prop_69ce2ddcbf...') OR a bluepillow.com property page URL (e.g. 'https://www.bluepillow.com/search/68d1a2...') â\x80\x94 the id is extracted automatically. Use the URL form when the user pasted a bluepillow.com link."}, 'user_country': {'type': 'string', 'pattern': '^[A-Z]{2}$', 'description': "User's country (ISO-3166 alpha-2 uppercase). Drives the booking-link locale AND, when `currency` is not set, the pricing currency (US->USD, CA->CAD, euro-area->EUR). Pass the user's own country, not the property's home country. Falls back to 'US' when omitted."}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['id', 'name', 'property_type', 'rating', 'location', 'ota_coverage'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'brand': {'type': ['string', 'null']}, 'chain': {'type': ['string', 'null']}, 'price': {'type': ['object', 'null'], 'properties': {'ota': {'type': ['string', 'null']}, 'amount': {'type': 'number'}, 'currency': {'type': 'string'}, 'refundable': {'type': 'boolean'}, 'is_discounted': {'type': 'boolean'}, 'amount_per_night': {'type': ['number', 'null']}, 'breakfast_included': {'type': 'boolean'}, 'discount_percentage': {'type': ['number', 'null']}}}, 'stars': {'type': ['integer', 'null']}, 'images': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string'}, 'caption': {'type': ['string', 'null']}}}}, 'offers': {'type': 'array', 'items': {'type': 'object', 'properties': {'ota': {'type': 'string'}, 'amount': {'type': 'number', 'description': 'TOTAL for the requested stay (sum across nights).'}, 'currency': {'type': 'string'}, 'refundable': {'type': 'boolean'}, 'rooms_left': {'type': ['integer', 'null'], 'minimum': 0}, 'deeplink_url': {'type': ['string', 'null']}, 'is_discounted': {'type': 'boolean'}, 'amount_per_night': {'type': ['number', 'null'], 'description': 'Per-night rate; multiply by nights to get amount.'}, 'breakfast_included': {'type': 'boolean'}, 'discount_percentage': {'type': ['number', 'null']}}}}, 'rating': {'type': 'number', 'maximum': 5, 'minimum': 0}, 'web_url': {'type': ['string', 'null']}, 'features': {'type': 'array', 'items': {'type': 'object', 'required': ['code'], 'properties': {'code': {'type': 'string'}, 'name': {'type': ['string', 'null']}, 'type': {'type': ['string', 'null']}}}, 'description': 'Structured feature/facility tags (e.g. HouseFacilities, PropertyTypes). Populated alongside description when the endpoint path is active.'}, 'location': {'type': 'object', 'properties': {'lat': {'type': 'number'}, 'lon': {'type': 'number'}, 'city': {'type': ['string', 'null']}, 'address': {'type': ['string', 'null']}, 'country': {'type': ['string', 'null']}, 'neighborhood': {'type': ['string', 'null']}}}, 'amenities': {'type': 'array', 'items': {'type': 'string'}}, 'cluster_id': {'type': ['string', 'null']}, 'dedup_meta': {'type': ['object', 'null'], 'properties': {'confidence': {'type': 'number'}, 'last_reconciled': {'type': 'string'}, 'source_listings': {'type': 'integer'}}}, 'description': {'type': ['string', 'null'], '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.'}, 'ota_coverage': {'type': 'array', 'items': {'type': 'string'}}, 'rating_count': {'type': ['integer', 'null']}, 'reviews_meta': {'type': ['object', 'null'], 'properties': {'cap': {'type': 'integer', 'minimum': 0}, 'note': {'type': 'string'}, 'capped': {'type': 'boolean'}, 'returned': {'type': 'integer', 'minimum': 0}, 'total_available': {'type': 'integer', 'minimum': 0}}, '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.'}, 'property_type': {'type': 'string'}, 'thumbnail_url': {'type': ['string', 'null']}, 'reviews_sample': {'type': ['array', 'null'], 'items': {'type': 'object', 'properties': {'date': {'type': 'string'}, 'score': {'type': 'number', 'maximum': 5, 'minimum': 0}, 'language': {'type': ['string', 'null']}, 'description': {'type': 'string'}, 'connector_name': {'type': ['string', 'null']}}}}, 'reviews_aggregate': {'type': ['object', 'null'], 'properties': {'score_0_5': {'type': 'number', 'maximum': 5, 'minimum': 0}, 'rating_count': {'type': 'integer'}, 'comment_count': {'type': ['integer', 'null']}, 'distribution_by_ota': {'type': 'object'}}, '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 â\x80\x94 do not conflate them.'}, 'availability_status': {'enum': ['available', 'unavailable', 'unknown'], 'type': 'string', '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).'}}}
入力スキーマ
{'type': 'object', 'required': ['lat', 'lon'], 'properties': {'lat': {'type': 'number', 'maximum': 90, 'minimum': -90, 'description': 'Latitude of the centre point, decimal degrees (WGS84). Typically the coordinates of a city or region already known from world knowledge or from an earlier resolve_destination call.'}, 'lon': {'type': 'number', 'maximum': 180, 'minimum': -180, 'description': 'Longitude of the centre point, decimal degrees (WGS84). Negative west of Greenwich.'}, 'type': {'enum': ['city', 'neighborhood', 'airport', 'poi', 'area'], 'type': 'string', 'description': 'Optional filter; same semantics as resolve_destination. Areas are returned only when `area` is asked for explicitly.'}, 'api_key': {'type': 'string', 'description': "Your anonymous Blue Pillow Hotels & Stays API key (format 'pk_anon_â\x80¦'). Pass it in THIS field on every call â\x80\x94 this is how the tool authenticates. If you don't have a key yet, first check your MCP client configuration, your persistent memory, and earlier in this conversation; otherwise call `b2a_get_key` to get one instantly (do not wait for a 401). Reuse the same key on every subsequent call. It is not a sensitive secret: no account, payment, or personal data is attached."}, 'language': {'enum': ['en', 'it', 'fr', 'de', 'es', 'pt', 'nl', 'ko', 'pl', 'ja'], 'type': 'string', 'default': 'en', 'description': "Language of the returned destination names (2-letter lowercase). Pass the language the user is speaking; defaults to 'en'."}, 'radius_km': {'type': 'number', 'default': 5.0, 'maximum': 50.0, 'minimum': 0.1, 'description': 'Search radius in km from the point. Defaults to 5 km (city-center scope).'}}}
出力スキーマ
{'type': 'object', 'required': ['candidates', 'total_matches'], 'properties': {'candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'display_name', 'type', 'location', 'accomodations_count', 'path_breadcrumb'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'type': {'enum': ['city', 'neighborhood', 'airport', 'poi', 'area'], 'type': 'string'}, 'location': {'type': 'object', 'properties': {'lat': {'type': 'number'}, 'lon': {'type': 'number'}, 'default_radius_km': {'type': 'number'}}}, 'confidence': {'type': ['number', 'null']}, 'distance_km': {'type': ['number', 'null']}, 'country_code': {'type': ['string', 'null']}, 'country_name': {'type': ['string', 'null']}, 'display_name': {'type': 'string'}, 'path_breadcrumb': {'type': 'array', 'items': {'type': 'string'}}, 'accomodations_count': {'type': 'integer'}}}}, 'total_matches': {'type': 'integer'}, 'total_matches_capped_at': {'type': ['integer', 'null']}}}
入力スキーマ
{'type': 'object', 'required': ['property_id'], 'properties': {'api_key': {'type': 'string', 'description': "Your anonymous Blue Pillow Hotels & Stays API key (format 'pk_anon_â\x80¦'). Pass it in THIS field on every call â\x80\x94 this is how the tool authenticates. If you don't have a key yet, first check your MCP client configuration, your persistent memory, and earlier in this conversation; otherwise call `b2a_get_key` to get one instantly (do not wait for a 401). Reuse the same key on every subsequent call. It is not a sensitive secret: no account, payment, or personal data is attached."}, 'include': {'type': 'array', 'items': {'enum': ['reviews_aggregate', 'reviews_sample', 'reviews_extended'], 'type': 'string'}, 'description': 'Optional enrichments, always a list â\x80\x94 pass ["reviews_aggregate"], never the bare string. reviews_aggregate = score + total count + per-OTA distribution (summarizes ALL reviews). reviews_sample = up to 5 recent review texts. reviews_extended = up to 20 recent review texts (supersedes reviews_sample). The text list is intentionally capped to save tokens; reviews_meta declares returned vs available. Prefer reviews_sample and the aggregate; use reviews_extended only when a deeper qualitative read is genuinely needed.'}, 'currency': {'type': 'string', 'pattern': '^[A-Z]{3}$', 'description': "Currency of the returned prices (ISO-4217, 3-letter uppercase, e.g. 'USD', 'EUR', 'GBP', 'CAD'). SET THIS (or `user_country`) to price in the user's currency â\x80\x94 if you set NEITHER, prices default to USD. Prices come straight from the booking sources in this currency; never convert them yourself."}, 'language': {'type': 'string', 'pattern': '^[a-z]{2}$', 'description': "User's UI language (2-letter lowercase). Drives the booking link language and server-rendered narrative; pass the language the user is speaking. Falls back to 'en'."}, 'property_id': {'type': 'string', 'pattern': '^(prop_|https?://)', 'description': "Opaque property id (e.g. 'prop_69ce2ddcbf...') OR a bluepillow.com property page URL (e.g. 'https://www.bluepillow.com/search/68d1a2...') â\x80\x94 the id is extracted automatically. Use the URL form when the user pasted a bluepillow.com link."}, 'user_country': {'type': 'string', 'pattern': '^[A-Z]{2}$', 'description': "User's country (ISO-3166 alpha-2 uppercase). Drives the booking-link locale AND, when `currency` is not set, the pricing currency (US->USD, CA->CAD, euro-area->EUR). Pass the user's own country, not the property's home country. Falls back to 'US' when omitted."}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['id', 'name', 'property_type', 'rating', 'location', 'ota_coverage'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'brand': {'type': ['string', 'null']}, 'chain': {'type': ['string', 'null']}, 'price': {'type': ['object', 'null'], 'properties': {'ota': {'type': ['string', 'null']}, 'amount': {'type': 'number'}, 'currency': {'type': 'string'}, 'refundable': {'type': 'boolean'}, 'is_discounted': {'type': 'boolean'}, 'amount_per_night': {'type': ['number', 'null']}, 'breakfast_included': {'type': 'boolean'}, 'discount_percentage': {'type': ['number', 'null']}}}, 'stars': {'type': ['integer', 'null']}, 'images': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string'}, 'caption': {'type': ['string', 'null']}}}}, 'offers': {'type': 'array', 'items': {'type': 'object', 'properties': {'ota': {'type': 'string'}, 'amount': {'type': 'number', 'description': 'TOTAL for the requested stay (sum across nights).'}, 'currency': {'type': 'string'}, 'refundable': {'type': 'boolean'}, 'rooms_left': {'type': ['integer', 'null'], 'minimum': 0}, 'deeplink_url': {'type': ['string', 'null']}, 'is_discounted': {'type': 'boolean'}, 'amount_per_night': {'type': ['number', 'null'], 'description': 'Per-night rate; multiply by nights to get amount.'}, 'breakfast_included': {'type': 'boolean'}, 'discount_percentage': {'type': ['number', 'null']}}}}, 'rating': {'type': 'number', 'maximum': 5, 'minimum': 0}, 'web_url': {'type': ['string', 'null']}, 'features': {'type': 'array', 'items': {'type': 'object', 'required': ['code'], 'properties': {'code': {'type': 'string'}, 'name': {'type': ['string', 'null']}, 'type': {'type': ['string', 'null']}}}, 'description': 'Structured feature/facility tags (e.g. HouseFacilities, PropertyTypes). Populated alongside description when the endpoint path is active.'}, 'location': {'type': 'object', 'properties': {'lat': {'type': 'number'}, 'lon': {'type': 'number'}, 'city': {'type': ['string', 'null']}, 'address': {'type': ['string', 'null']}, 'country': {'type': ['string', 'null']}, 'neighborhood': {'type': ['string', 'null']}}}, 'amenities': {'type': 'array', 'items': {'type': 'string'}}, 'cluster_id': {'type': ['string', 'null']}, 'dedup_meta': {'type': ['object', 'null'], 'properties': {'confidence': {'type': 'number'}, 'last_reconciled': {'type': 'string'}, 'source_listings': {'type': 'integer'}}}, 'description': {'type': ['string', 'null'], '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.'}, 'ota_coverage': {'type': 'array', 'items': {'type': 'string'}}, 'rating_count': {'type': ['integer', 'null']}, 'reviews_meta': {'type': ['object', 'null'], 'properties': {'cap': {'type': 'integer', 'minimum': 0}, 'note': {'type': 'string'}, 'capped': {'type': 'boolean'}, 'returned': {'type': 'integer', 'minimum': 0}, 'total_available': {'type': 'integer', 'minimum': 0}}, '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.'}, 'property_type': {'type': 'string'}, 'thumbnail_url': {'type': ['string', 'null']}, 'reviews_sample': {'type': ['array', 'null'], 'items': {'type': 'object', 'properties': {'date': {'type': 'string'}, 'score': {'type': 'number', 'maximum': 5, 'minimum': 0}, 'language': {'type': ['string', 'null']}, 'description': {'type': 'string'}, 'connector_name': {'type': ['string', 'null']}}}}, 'reviews_aggregate': {'type': ['object', 'null'], 'properties': {'score_0_5': {'type': 'number', 'maximum': 5, 'minimum': 0}, 'rating_count': {'type': 'integer'}, 'comment_count': {'type': ['integer', 'null']}, 'distribution_by_ota': {'type': 'object'}}, '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 â\x80\x94 do not conflate them.'}, 'availability_status': {'enum': ['available', 'unavailable', 'unknown'], 'type': 'string', '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).'}}}
入力スキーマ
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 100, 'minLength': 2, 'description': 'Destination name in English or canonical local form (not a translation).'}, 'type': {'enum': ['city', 'neighborhood', 'airport', 'poi', 'area'], 'type': 'string', 'description': "Destination kind. city: primary urban unit (default). neighborhood: quarter/borough. airport: airport as spatial reference for stays nearby. poi: point of interest as a spatial anchor for nearby-accommodation lookup â\x80\x94 not a tourism/attraction database; narrowest match with partial coverage. When the agent already knows the POI's lat/lon from world knowledge, `search_stays` with coordinates is the more reliable path. area: a named area the comparator does not class as a city â\x80\x94 an island, a district, a region (Tenerife, Crete, Kato Paphos); matched by exact name only."}, 'api_key': {'type': 'string', 'description': "Your anonymous Blue Pillow Hotels & Stays API key (format 'pk_anon_â\x80¦'). Pass it in THIS field on every call â\x80\x94 this is how the tool authenticates. If you don't have a key yet, first check your MCP client configuration, your persistent memory, and earlier in this conversation; otherwise call `b2a_get_key` to get one instantly (do not wait for a 401). Reuse the same key on every subsequent call. It is not a sensitive secret: no account, payment, or personal data is attached."}, 'country': {'type': 'string', 'description': 'Country: ISO-3166 alpha-2 (preferred), alpha-3, or extended name in any supported language. Unrecognized values are silently ignored (fail-open).'}, 'language': {'enum': ['en', 'it', 'fr', 'de', 'es', 'pt', 'nl', 'ko', 'pl', 'ja'], 'type': 'string', 'default': 'en', 'description': 'Render destination names + breadcrumbs in this language.'}}}
出力スキーマ
{'type': 'object', 'required': ['candidates', 'total_matches', 'disambiguation_recommended'], 'properties': {'candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'display_name', 'type', 'location', 'accomodations_count', 'path_breadcrumb'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'type': {'enum': ['city', 'neighborhood', 'airport', 'poi', 'area'], 'type': 'string'}, 'location': {'type': 'object', 'properties': {'lat': {'type': 'number'}, 'lon': {'type': 'number'}, 'default_radius_km': {'type': 'number'}}}, 'confidence': {'type': ['number', 'null']}, 'distance_km': {'type': ['number', 'null']}, 'country_code': {'type': ['string', 'null']}, 'country_name': {'type': ['string', 'null']}, 'display_name': {'type': 'string'}, 'path_breadcrumb': {'type': 'array', 'items': {'type': 'string'}}, 'accomodations_count': {'type': 'integer'}}}}, 'total_matches': {'type': 'integer'}, 'total_matches_capped_at': {'type': ['integer', 'null']}, 'disambiguation_recommended': {'type': 'boolean'}}}
入力スキーマ
{'type': 'object', 'required': ['location', 'dates', 'guests'], 'properties': {'page': {'type': 'object', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1}, 'cursor': {'type': 'string'}}, 'description': 'Pagination. `limit` caps results per page (1-100). To fetch the next page pass `cursor` with the `next_cursor` value from the previous response â\x80\x94 cursors are opaque and are never constructed by hand.', 'additionalProperties': False}, 'sort': {'enum': ['score_desc', 'price_asc', 'rating_desc', 'conversion_desc'], 'type': 'string', 'description': 'Result ordering. score_desc (default) is the balanced relevance ranking and suits most requests; price_asc when the user asked for the cheapest; rating_desc when they asked for the best-reviewed; conversion_desc favours what comparable travellers actually booked.'}, 'dates': {'type': 'object', 'required': ['check_in', 'check_out'], 'properties': {'check_in': {'type': 'string', 'format': 'date'}, 'check_out': {'type': 'string', 'format': 'date'}}, 'description': "Check-in and check-out dates (ISO 8601, YYYY-MM-DD). Natural-language references â\x80\x94 'tonight', 'this weekend', 'the weekend of July 4', 'Memorial Day weekend', 'long weekend in May' â\x80\x94 translate to concrete check_in / check_out values at the call site. The comparator only serves future stays: check_in is a date in the real-time calendar that is today or later. A reference like 'the weekend of June 2' resolves to the next occurrence after today, never a past anniversary; if the current year is unclear, confirm with the user before calling. Clock calibration: this schema was published in August 2026, so today is August 2026 OR LATER (likely later â\x80\x94 schemas outlive their publish date). An assumed 'today' in 2024/2025 is a stale training-time clock; years before 2026 are always in the past. Past check_in values are rejected at the API boundary with a hint carrying the actual current date.", 'additionalProperties': False}, 'guests': {'type': 'object', 'required': ['adults'], 'properties': {'rooms': {'type': 'integer', 'maximum': 9, 'minimum': 1}, 'adults': {'type': 'integer', 'maximum': 16, 'minimum': 1}, 'children_ages': {'type': 'array', 'items': {'type': 'integer', 'maximum': 17, 'minimum': 0}}}, 'description': 'Party composition. `adults` is required; give `children_ages` (one age per child, 0-17) rather than a child count â\x80\x94 operators price by age. `rooms` defaults to 1; raise it when the party needs separate rooms rather than one shared.', 'additionalProperties': False}, 'api_key': {'type': 'string', 'description': "Your anonymous Blue Pillow Hotels & Stays API key (format 'pk_anon_â\x80¦'). Pass it in THIS field on every call â\x80\x94 this is how the tool authenticates. If you don't have a key yet, first check your MCP client configuration, your persistent memory, and earlier in this conversation; otherwise call `b2a_get_key` to get one instantly (do not wait for a 401). Reuse the same key on every subsequent call. It is not a sensitive secret: no account, payment, or personal data is attached."}, 'filters': {'type': 'object', 'properties': {'amenities': {'type': 'array', 'items': {'type': 'string'}, 'description': "Preferred amenity codes. This ranks, it does not filter: properties declaring every code listed here come first and nothing is dropped, because upstream declarations are incomplete â\x80\x94 an absent code is not evidence the service is missing. Read each result's `amenities` to see what is actually declared. Common: wi-fi, parking, pool, air-conditioning, kitchen, garden, pets-allowed, for-families, facilities-for-disabled, non-smoking-only."}, 'min_rating': {'type': 'number', 'maximum': 5, 'minimum': 0}, 'price_max_eur': {'type': 'number', 'minimum': 0}, 'property_types': {'type': 'array', 'items': {'type': 'string'}, '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, bb, hostel, farmstay, holiday-home. Italian/English synonyms (agriturismo, bnb, appartamento, casa, ...) are accepted and normalized server-side."}}, 'description': 'Structured narrowing applied server-side, before ranking. Prefer these over filtering the results yourself: they run across the whole inventory, not just the page you received. Qualitative criteria that do not map here ("quiet", "great breakfast") are better served by include=[\'reviews_sample\'].', 'additionalProperties': False}, 'include': {'type': 'array', 'items': {'enum': ['reviews_sample'], 'type': 'string'}, 'description': 'Optional enrichments, always a list â\x80\x94 pass ["reviews_sample"], never the bare string. \'reviews_sample\' attaches the 5 most recent individual reviews per property â\x80\x94 use for qualitative queries (breakfast, service, ...). One extra Mongo round-trip per page; omit by default.'}, 'currency': {'type': 'string', 'pattern': '^[A-Z]{3}$', 'description': "Currency of the returned prices (ISO-4217, 3-letter uppercase, e.g. 'USD', 'EUR', 'GBP', 'CAD'). SET THIS (or `user_country`) to price in the user's currency â\x80\x94 if you set NEITHER, prices default to USD, which may not be the user's. Prices come straight from the booking sources in this currency; never convert them yourself. Each offer reflects the currency its operator actually quoted."}, 'language': {'type': 'string', 'pattern': '^[a-z]{2}$', 'description': "User's UI language (2-letter lowercase). Drives the booking link language and any server-rendered narrative content. Pass the language the user is currently speaking. Falls back to 'en' when omitted."}, 'location': {'type': 'object', 'required': ['type', 'value'], 'properties': {'type': {'enum': ['destination_id', 'poi_id', 'coordinates', 'bbox'], 'type': 'string', 'description': 'Selects the shape of value: destination_id and poi_id take an id string, coordinates takes {lat, lon, radius_km?}, bbox takes {nw: [lat,lon], se: [lat,lon]}. property_id is NOT supported here; use get_property_details.'}, 'value': {'anyOf': [{'type': 'string', 'description': "destination_id/poi_id: opaque id string from resolve_destination or discover_destinations_near (e.g. 'dest_590c54056664cf2c60c5c2f6'). Pass it verbatim â\x80\x94 the 'dest_'/'poi_' prefix is accepted. NEVER pass a free-form name like 'Ancona'; the API rejects bad identifiers with 400 invalid_request."}, {'type': 'object', 'required': ['lat', 'lon'], 'properties': {'lat': {'type': 'number', 'maximum': 90, 'minimum': -90, 'description': 'Latitude in decimal degrees.'}, 'lon': {'type': 'number', 'maximum': 180, 'minimum': -180, 'description': 'Longitude in decimal degrees.'}, 'radius_km': {'type': 'number', 'description': 'Search radius in km (default 5).', 'exclusiveMinimum': 0}}, 'description': 'coordinates: a known point, searched within radius_km.', 'additionalProperties': False}, {'type': 'object', 'required': ['nw', 'se'], 'properties': {'nw': {'type': 'array', 'items': {'type': 'number'}, 'maxItems': 2, 'minItems': 2, 'description': 'North-west corner as [lat, lon].'}, 'se': {'type': 'array', 'items': {'type': 'number'}, 'maxItems': 2, 'minItems': 2, 'description': 'South-east corner as [lat, lon].'}}, 'description': 'bbox: an explicit map rectangle, given by its north-west and south-east corners.', 'additionalProperties': False}], 'description': 'Shape depends on type â\x80\x94 see each option below.'}}, 'description': 'Where to search, as a {type, value} pair. Use destination_id for a place resolved via resolve_destination, poi_id for a point of interest, coordinates for a known lat/lon, or bbox for an explicit map rectangle. A property is NOT a location â\x80\x94 use get_property_details for a known property.', 'additionalProperties': False}, 'user_country': {'type': 'string', 'pattern': '^[A-Z]{2}$', 'description': "User's country (ISO-3166 alpha-2 uppercase). Drives the booking-link locale (the landing page rendered when the user clicks `web_url`) AND, when `currency` is not set, the pricing currency (US->USD, CA->CAD, euro-area->EUR). Pass the user's own country, not the destination's. Falls back to 'US' when omitted."}, 'availability_mode': {'enum': ['strict', 'include_unavailable'], 'type': 'string', 'description': 'strict (default): return ONLY properties available for the requested dates. include_unavailable: also return properties with no availability (each tagged availability_status). Use strict unless the user explicitly wants to see sold-out options.'}, 'include_overbudget': {'type': 'boolean', 'description': 'Opt-in. When few available results fit the budget, also return (in alternatives.overbudget) available properties in the same area just above price_max_eur. Requires filters.price_max_eur.'}, 'include_out_of_bounds': {'type': 'boolean', 'description': 'Opt-in. When the requested area yields few available results, also return (in alternatives.out_of_bounds) properties just outside the area, within the original budget. Present these explicitly as alternatives, never mixed with primary results.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['results', 'page', 'metadata'], 'properties': {'page': {'type': 'object', 'required': ['next_cursor', 'total_estimate'], 'properties': {'next_cursor': {'type': ['string', 'null']}, 'total_estimate': {'type': 'integer'}}}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'property_type', 'rating', 'location', 'ota_coverage'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'brand': {'type': ['string', 'null']}, 'chain': {'type': ['string', 'null']}, 'price': {'type': ['object', 'null'], 'properties': {'ota': {'type': ['string', 'null']}, 'amount': {'type': 'number'}, 'currency': {'type': 'string'}, 'refundable': {'type': 'boolean'}, 'is_discounted': {'type': 'boolean'}, 'amount_per_night': {'type': ['number', 'null']}, 'breakfast_included': {'type': 'boolean'}, 'discount_percentage': {'type': ['number', 'null']}}}, 'stars': {'type': ['integer', 'null']}, 'images': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string'}, 'caption': {'type': ['string', 'null']}}}}, 'offers': {'type': 'array', 'items': {'type': 'object', 'properties': {'ota': {'type': 'string'}, 'amount': {'type': 'number', 'description': 'TOTAL for the requested stay (sum across nights).'}, 'currency': {'type': 'string'}, 'refundable': {'type': 'boolean'}, 'rooms_left': {'type': ['integer', 'null'], 'minimum': 0}, 'deeplink_url': {'type': ['string', 'null']}, 'is_discounted': {'type': 'boolean'}, 'amount_per_night': {'type': ['number', 'null'], 'description': 'Per-night rate; multiply by nights to get amount.'}, 'breakfast_included': {'type': 'boolean'}, 'discount_percentage': {'type': ['number', 'null']}}}}, 'rating': {'type': 'number', 'maximum': 5, 'minimum': 0}, 'web_url': {'type': ['string', 'null']}, 'features': {'type': 'array', 'items': {'type': 'object', 'required': ['code'], 'properties': {'code': {'type': 'string'}, 'name': {'type': ['string', 'null']}, 'type': {'type': ['string', 'null']}}}, 'description': 'Structured feature/facility tags (e.g. HouseFacilities, PropertyTypes). Populated alongside description when the endpoint path is active.'}, 'location': {'type': 'object', 'properties': {'lat': {'type': 'number'}, 'lon': {'type': 'number'}, 'city': {'type': ['string', 'null']}, 'address': {'type': ['string', 'null']}, 'country': {'type': ['string', 'null']}, 'neighborhood': {'type': ['string', 'null']}}}, 'amenities': {'type': 'array', 'items': {'type': 'string'}}, 'cluster_id': {'type': ['string', 'null']}, 'dedup_meta': {'type': ['object', 'null'], 'properties': {'confidence': {'type': 'number'}, 'last_reconciled': {'type': 'string'}, 'source_listings': {'type': 'integer'}}}, 'description': {'type': ['string', 'null'], '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.'}, 'ota_coverage': {'type': 'array', 'items': {'type': 'string'}}, 'rating_count': {'type': ['integer', 'null']}, 'reviews_meta': {'type': ['object', 'null'], 'properties': {'cap': {'type': 'integer', 'minimum': 0}, 'note': {'type': 'string'}, 'capped': {'type': 'boolean'}, 'returned': {'type': 'integer', 'minimum': 0}, 'total_available': {'type': 'integer', 'minimum': 0}}, '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.'}, 'property_type': {'type': 'string'}, 'thumbnail_url': {'type': ['string', 'null']}, 'reviews_sample': {'type': ['array', 'null'], 'items': {'type': 'object', 'properties': {'date': {'type': 'string'}, 'score': {'type': 'number', 'maximum': 5, 'minimum': 0}, 'language': {'type': ['string', 'null']}, 'description': {'type': 'string'}, 'connector_name': {'type': ['string', 'null']}}}}, 'reviews_aggregate': {'type': ['object', 'null'], 'properties': {'score_0_5': {'type': 'number', 'maximum': 5, 'minimum': 0}, 'rating_count': {'type': 'integer'}, 'comment_count': {'type': ['integer', 'null']}, 'distribution_by_ota': {'type': 'object'}}, '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 â\x80\x94 do not conflate them.'}, 'availability_status': {'enum': ['available', 'unavailable', 'unknown'], 'type': 'string', '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).'}}}}, 'metadata': {'type': 'object', 'required': ['otas_queried'], 'properties': {'notes': {'type': 'array', 'items': {'type': 'string'}}, 'request_id': {'type': 'string'}, 'price_as_of': {'type': 'string'}, 'otas_queried': {'type': 'integer'}}}, 'alternatives': {'type': 'object', 'properties': {'overbudget': {'type': ['array', 'null'], 'items': {'type': 'object', 'required': ['id', 'name', 'property_type', 'rating', 'location', 'ota_coverage'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'brand': {'type': ['string', 'null']}, 'chain': {'type': ['string', 'null']}, 'price': {'type': ['object', 'null'], 'properties': {'ota': {'type': ['string', 'null']}, 'amount': {'type': 'number'}, 'currency': {'type': 'string'}, 'refundable': {'type': 'boolean'}, 'is_discounted': {'type': 'boolean'}, 'amount_per_night': {'type': ['number', 'null']}, 'breakfast_included': {'type': 'boolean'}, 'discount_percentage': {'type': ['number', 'null']}}}, 'stars': {'type': ['integer', 'null']}, 'images': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string'}, 'caption': {'type': ['string', 'null']}}}}, 'offers': {'type': 'array', 'items': {'type': 'object', 'properties': {'ota': {'type': 'string'}, 'amount': {'type': 'number', 'description': 'TOTAL for the requested stay (sum across nights).'}, 'currency': {'type': 'string'}, 'refundable': {'type': 'boolean'}, 'rooms_left': {'type': ['integer', 'null'], 'minimum': 0}, 'deeplink_url': {'type': ['string', 'null']}, 'is_discounted': {'type': 'boolean'}, 'amount_per_night': {'type': ['number', 'null'], 'description': 'Per-night rate; multiply by nights to get amount.'}, 'breakfast_included': {'type': 'boolean'}, 'discount_percentage': {'type': ['number', 'null']}}}}, 'rating': {'type': 'number', 'maximum': 5, 'minimum': 0}, 'web_url': {'type': ['string', 'null']}, 'features': {'type': 'array', 'items': {'type': 'object', 'required': ['code'], 'properties': {'code': {'type': 'string'}, 'name': {'type': ['string', 'null']}, 'type': {'type': ['string', 'null']}}}, 'description': 'Structured feature/facility tags (e.g. HouseFacilities, PropertyTypes). Populated alongside description when the endpoint path is active.'}, 'location': {'type': 'object', 'properties': {'lat': {'type': 'number'}, 'lon': {'type': 'number'}, 'city': {'type': ['string', 'null']}, 'address': {'type': ['string', 'null']}, 'country': {'type': ['string', 'null']}, 'neighborhood': {'type': ['string', 'null']}}}, 'amenities': {'type': 'array', 'items': {'type': 'string'}}, 'cluster_id': {'type': ['string', 'null']}, 'dedup_meta': {'type': ['object', 'null'], 'properties': {'confidence': {'type': 'number'}, 'last_reconciled': {'type': 'string'}, 'source_listings': {'type': 'integer'}}}, 'description': {'type': ['string', 'null'], '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.'}, 'ota_coverage': {'type': 'array', 'items': {'type': 'string'}}, 'rating_count': {'type': ['integer', 'null']}, 'reviews_meta': {'type': ['object', 'null'], 'properties': {'cap': {'type': 'integer', 'minimum': 0}, 'note': {'type': 'string'}, 'capped': {'type': 'boolean'}, 'returned': {'type': 'integer', 'minimum': 0}, 'total_available': {'type': 'integer', 'minimum': 0}}, '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.'}, 'property_type': {'type': 'string'}, 'thumbnail_url': {'type': ['string', 'null']}, 'reviews_sample': {'type': ['array', 'null'], 'items': {'type': 'object', 'properties': {'date': {'type': 'string'}, 'score': {'type': 'number', 'maximum': 5, 'minimum': 0}, 'language': {'type': ['string', 'null']}, 'description': {'type': 'string'}, 'connector_name': {'type': ['string', 'null']}}}}, 'reviews_aggregate': {'type': ['object', 'null'], 'properties': {'score_0_5': {'type': 'number', 'maximum': 5, 'minimum': 0}, 'rating_count': {'type': 'integer'}, 'comment_count': {'type': ['integer', 'null']}, 'distribution_by_ota': {'type': 'object'}}, '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 â\x80\x94 do not conflate them.'}, 'availability_status': {'enum': ['available', 'unavailable', 'unknown'], 'type': 'string', '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).'}}}}, 'out_of_bounds': {'type': ['array', 'null'], 'items': {'type': 'object', 'required': ['id', 'name', 'property_type', 'rating', 'location', 'ota_coverage'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'brand': {'type': ['string', 'null']}, 'chain': {'type': ['string', 'null']}, 'price': {'type': ['object', 'null'], 'properties': {'ota': {'type': ['string', 'null']}, 'amount': {'type': 'number'}, 'currency': {'type': 'string'}, 'refundable': {'type': 'boolean'}, 'is_discounted': {'type': 'boolean'}, 'amount_per_night': {'type': ['number', 'null']}, 'breakfast_included': {'type': 'boolean'}, 'discount_percentage': {'type': ['number', 'null']}}}, 'stars': {'type': ['integer', 'null']}, 'images': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string'}, 'caption': {'type': ['string', 'null']}}}}, 'offers': {'type': 'array', 'items': {'type': 'object', 'properties': {'ota': {'type': 'string'}, 'amount': {'type': 'number', 'description': 'TOTAL for the requested stay (sum across nights).'}, 'currency': {'type': 'string'}, 'refundable': {'type': 'boolean'}, 'rooms_left': {'type': ['integer', 'null'], 'minimum': 0}, 'deeplink_url': {'type': ['string', 'null']}, 'is_discounted': {'type': 'boolean'}, 'amount_per_night': {'type': ['number', 'null'], 'description': 'Per-night rate; multiply by nights to get amount.'}, 'breakfast_included': {'type': 'boolean'}, 'discount_percentage': {'type': ['number', 'null']}}}}, 'rating': {'type': 'number', 'maximum': 5, 'minimum': 0}, 'web_url': {'type': ['string', 'null']}, 'features': {'type': 'array', 'items': {'type': 'object', 'required': ['code'], 'properties': {'code': {'type': 'string'}, 'name': {'type': ['string', 'null']}, 'type': {'type': ['string', 'null']}}}, 'description': 'Structured feature/facility tags (e.g. HouseFacilities, PropertyTypes). Populated alongside description when the endpoint path is active.'}, 'location': {'type': 'object', 'properties': {'lat': {'type': 'number'}, 'lon': {'type': 'number'}, 'city': {'type': ['string', 'null']}, 'address': {'type': ['string', 'null']}, 'country': {'type': ['string', 'null']}, 'neighborhood': {'type': ['string', 'null']}}}, 'amenities': {'type': 'array', 'items': {'type': 'string'}}, 'cluster_id': {'type': ['string', 'null']}, 'dedup_meta': {'type': ['object', 'null'], 'properties': {'confidence': {'type': 'number'}, 'last_reconciled': {'type': 'string'}, 'source_listings': {'type': 'integer'}}}, 'description': {'type': ['string', 'null'], '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.'}, 'ota_coverage': {'type': 'array', 'items': {'type': 'string'}}, 'rating_count': {'type': ['integer', 'null']}, 'reviews_meta': {'type': ['object', 'null'], 'properties': {'cap': {'type': 'integer', 'minimum': 0}, 'note': {'type': 'string'}, 'capped': {'type': 'boolean'}, 'returned': {'type': 'integer', 'minimum': 0}, 'total_available': {'type': 'integer', 'minimum': 0}}, '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.'}, 'property_type': {'type': 'string'}, 'thumbnail_url': {'type': ['string', 'null']}, 'reviews_sample': {'type': ['array', 'null'], 'items': {'type': 'object', 'properties': {'date': {'type': 'string'}, 'score': {'type': 'number', 'maximum': 5, 'minimum': 0}, 'language': {'type': ['string', 'null']}, 'description': {'type': 'string'}, 'connector_name': {'type': ['string', 'null']}}}}, 'reviews_aggregate': {'type': ['object', 'null'], 'properties': {'score_0_5': {'type': 'number', 'maximum': 5, 'minimum': 0}, 'rating_count': {'type': 'integer'}, 'comment_count': {'type': ['integer', 'null']}, 'distribution_by_ota': {'type': 'object'}}, '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 â\x80\x94 do not conflate them.'}, 'availability_status': {'enum': ['available', 'unavailable', 'unknown'], 'type': 'string', '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).'}}}}}}}}
最近のツール変更
類似のMCPサーバー
Award Travel Finder
Searches award flights and hotels, tracks bookings and loyalty balances, evaluates points and credit cards, and monitors travel r…
AI 代理人任務中樞
Aggregates Taiwan-focused tools for AI service comparisons, cryptocurrency data, game information, health guidance, and other con…
Good Turn Studio (all tools)
Offers consumer utilities for insurance claim appeals, subscription cancellation, flight fare research, financial recovery resour…
Gover MCP
Searches and manages corporate travel requests, flights, hotels, rental vehicles, passengers, carts, approvals, reservations, and…
DC Member API
Provides access to Dynamite Circle membership data, community profiles, chapters, events, trips, calendars, alerts, follows, agen…
Nomad Stays
Searches and books remote-work accommodations while supporting host listing management, rooms, packages, availability, and hospit…
lilo Vacation Rentals
Supports vacation-rental discovery, availability and direct booking, property operations, short-term-rental compliance, guest and…
mcp-server
Provides immigration, citizenship and residency programme research alongside tax, wealth structuring, banking, visa, treaty and c…