MCP-Server

mcp-server

travel.kismet/mcp-server
Reisen & Hospitality Öffentlich und erreichbar MCP 2026-07-28

Was dieses MCP kann

Searches vacation rentals with availability and pricing, provides property details and reviews, and supports shortlists and booking links.

build_bookable_carousel
Build Bookable Carousel
Present a curated set of specific properties as an interactive visual carousel. Pass `propertySlugs` in your chosen order, plus the collection_id(s) those properties belong to in `collections` — you get each candidate's collectionSlug from search_bookables. The picks MAY span multiple managers: pass ALL their collection_ids and the carousel renders them together with manager filter cards. Never fall back to a plain text list for a cross-manager set — this tool handles it. Call AFTER search_bookables.
Idempotent
Eingabeschema
{'type': 'object', 'required': ['propertySlugs'], 'properties': {'guests': {'type': 'number', 'description': 'Number of guests'}, 'checkIn': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Check-in date for live pricing'}, 'context': {'type': 'string', 'description': 'Optional: the guest\'s needs/criteria behind these picks (e.g., "Best options for a family of 6 with dogs in Vermont"). Used by the backend as a search/personalization hint — recorded on the guest\'s journey so the property manager sees what the guest is looking for. Not displayed to the guest.'}, 'checkOut': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Check-out date for live pricing'}, 'collections': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Collection slug(s) — each a `collection_id` from list_collections. For search_bookables and discover_collections: OMIT to span the whole network, pass one to scope to a single manager, or several to compare across managers. For build_bookable_carousel: pass the collection_id(s) your chosen properties belong to — one, or several when the picks span managers. Every other tool operates on a single collection — pass exactly ONE.'}, 'propertySlugs': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 10, 'minItems': 1, 'description': 'Ordered array of property slugs to present. The carousel preserves this order. Max 10.'}, 'semanticFilters': {'type': 'object', 'properties': {'required': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 10, 'description': 'Natural-language must-haves. Every returned property must have listing, policy, amenity, or review evidence for each criterion; never infer a match from missing data.'}, 'requested': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 10, 'description': 'Natural-language preferences used as soft ranking signals. A property may still be returned when one or more requested preferences are not evidenced.'}}, 'description': 'Reserved optional evidence-backed semantic criteria that complement the explicit location, date, capacity, pet, property-type, and budget filters. Put true must-haves in `required`; put preferences that should improve ranking without excluding otherwise valid stays in `requested`. Until server instructions announce that semantic matching is enabled, omit this field.', 'additionalProperties': False}}}
Ausgabeschema
{'type': 'object', 'required': ['success', 'type', 'collection', 'propertyPicks'], 'properties': {'type': {'type': 'string', 'description': 'Widget type discriminator (discoverVrm).'}, 'dates': {'type': 'object', 'properties': {'checkIn': {'type': 'string'}, 'checkOut': {'type': 'string'}}}, 'guests': {'type': 'number', 'description': 'Echo of the applied party size (widget header seed).'}, 'reviews': {'type': ['object', 'null'], 'properties': {'count': {'type': 'number'}, 'averageRating': {'type': ['number', 'null']}}}, 'success': {'type': 'boolean'}, 'collection': {'type': 'object', 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}}}, 'llmContext': {'type': 'string', 'description': 'Echo of the input `context` (search/personalization hint). Carried in widget state for refresh continuity; not rendered to the guest.'}, 'collections': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'logoUrl': {'type': ['string', 'null']}, 'website': {'type': ['string', 'null']}, 'location': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'reviewCount': {'type': ['number', 'null']}, 'averageRating': {'type': ['number', 'null']}, 'propertyCount': {'type': ['number', 'null']}}}, 'description': 'Manager branding and aggregate context for collection filter cards.'}, 'propertyPicks': {'type': 'object', 'required': ['items', 'totalMatching'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'webUrl': {'type': ['string', 'null']}, 'pricing': {'type': 'object', 'properties': {'total': {'type': 'number'}, 'nights': {'type': 'number'}, 'currency': {'type': 'string'}, 'available': {'type': 'boolean'}, 'avgNightly': {'type': 'number'}, 'taxFeeNotes': {'type': ['string', 'null']}, 'feeBreakdown': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string'}, 'isTax': {'type': 'boolean'}, 'amount': {'type': 'number'}}}}, 'totalIncludesEstimatedTax': {'type': 'boolean'}}}, 'tagline': {'type': ['string', 'null']}, 'bedrooms': {'type': ['number', 'null']}, 'distance': {'type': 'object', 'properties': {'unit': {'type': 'string'}, 'value': {'type': 'number'}}}, 'latitude': {'type': ['number', 'null']}, 'location': {'type': ['string', 'null']}, 'bathrooms': {'type': ['number', 'null']}, 'longitude': {'type': ['number', 'null']}, 'maxGuests': {'type': ['number', 'null']}, 'bookingUrl': {'type': ['string', 'null']}, 'cardImages': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'highlights': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'quoteToken': {'type': ['string', 'null']}, 'anchorPrice': {'type': 'object', 'properties': {'label': {'type': 'string'}, 'amount': {'type': 'number'}, 'currency': {'type': 'string'}}}, 'petsAllowed': {'type': ['boolean', 'null']}, 'heroImageUrl': {'type': ['string', 'null']}, 'propertyType': {'type': ['string', 'null']}, 'memberPricing': {'type': 'object', 'required': ['currency'], 'properties': {'total': {'type': 'number'}, 'nightly': {'type': 'number'}, 'currency': {'type': 'string'}}, 'description': 'Optional authenticated-member pricing. Omitted for anonymous guests and whenever the manager does not offer a member rate.'}, 'collectionSlug': {'type': ['string', 'null']}}}}, 'totalMatching': {'type': 'number'}}}, 'bookingBaseUrl': {'type': 'string', 'description': 'Base URL for booking redirects.'}, 'multiCollection': {'type': 'boolean', 'description': 'True when the carousel contains properties from multiple managers.'}, 'semanticFiltering': {'type': 'object', 'required': ['required', 'requested', 'description'], 'properties': {'required': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Hard semantic criteria that were applied to the result set.'}, 'requested': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Soft semantic preferences that were used to rank the result set.'}, 'description': {'type': 'string', 'description': 'Concise evidence-grounded explanation of how required and requested criteria affected filtering and ranking, including any evidence limitations.'}}, 'description': 'Optional semantic-filtering summary. Omitted until semantic matching is enabled and the criteria have actually been evaluated.'}, 'suggestedFollowUps': {'type': 'array', 'items': {'type': 'string'}}, 'appliedSearchParams': {'type': 'object', 'description': 'Optional echo of the structured and semantic search criteria used to produce these picks, for widget refresh continuity.'}}}
discover_collections
Discover Collections
Visually discover bookable-stay managers (collections) and their properties as an interactive carousel. OMIT `collections` to discover across the whole network (the widget shows manager filter cards plus an interleaved property carousel), pass one to feature a single manager, or several to compare. Each property card opens full details. Use this for browsing/visual presentation; use search_bookables when the guest has specific filters and you want ranked text candidates.
Idempotent
Eingabeschema
{'type': 'object', 'properties': {'neLat': {'type': 'number', 'description': 'BOUNDS MODE: Northeast corner latitude. Required with swLat.'}, 'neLng': {'type': 'number', 'description': 'BOUNDS MODE: Northeast corner longitude. Required with swLat.'}, 'swLat': {'type': 'number', 'description': 'BOUNDS MODE: Southwest corner latitude. Use bounding box for geographic regions like coastlines, mountain ranges, lake shores, or any area that is not a single point. Example: Oregon coast → swLat=42.0, swLng=-124.8, neLat=46.3, neLng=-123.5.'}, 'swLng': {'type': 'number', 'description': 'BOUNDS MODE: Southwest corner longitude. Required with swLat.'}, 'guests': {'type': 'number', 'description': 'Number of guests'}, 'offset': {'type': 'number', 'description': 'Skip this many results (for pagination / load-more). Default 0.'}, 'region': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by state or region name (e.g., ["Vermont"], ["Vermont", "New Hampshire"]). Case-insensitive. Use this instead of bounding box when a guest asks for a specific state.'}, 'sleeps': {'type': 'number', 'description': 'Minimum sleeping capacity required (filters properties that sleep at least this many)'}, 'checkIn': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Check-in date (YYYY-MM-DD)'}, 'country': {'type': 'string', 'description': 'Filter by ISO 3166-1 alpha-2 country code (e.g., "US"). Rarely needed since collections are typically in one country.'}, 'feature': {'type': 'string', 'description': 'Soft ranking signal — boost properties with a guest-confirmed feature. Does NOT hard-filter. Example values: "mountain_views", "spotless_clean", "amazing_host", "cozy", "beachfront", "stocked_kitchen", "quiet_peaceful".'}, 'nearLat': {'type': 'number', 'description': 'POINT MODE: Latitude to search near (e.g. 35.789). Use for specific places like a town, address, or landmark. Resolve place names to coordinates before calling. For broad areas (coastlines, mountain ranges), use bounding box (swLat/neLat) instead.'}, 'nearLng': {'type': 'number', 'description': 'POINT MODE: Longitude to search near (e.g. -83.534). Required when nearLat is provided.'}, 'persona': {'type': 'string', 'description': 'Soft ranking signal — boost properties popular with a guest persona. Does NOT hard-filter. Example values: "hiking", "young_family", "romantic", "pet_owners", "fishing", "honeymoon", "luxury", "foodie".'}, 'bedrooms': {'type': 'number', 'description': 'Minimum bedrooms needed'}, 'checkOut': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Check-out date (YYYY-MM-DD)'}, 'locality': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by city or town name (e.g., ["Stowe"], ["Seaside", "Cannon Beach"]). Case-insensitive. Use instead of geo when a guest asks for a specific town.'}, 'nearUnit': {'enum': ['miles', 'kilometers'], 'type': 'string', 'description': 'Unit for nearRadius and distance values. Default "miles".'}, 'nearRadius': {'type': 'number', 'description': 'POINT MODE: Max distance from the nearLat/nearLng point in nearUnit. Default 25 miles. Use 50+ for broad areas.'}, 'collections': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Collection slug(s) — each a `collection_id` from list_collections. For search_bookables and discover_collections: OMIT to span the whole network, pass one to scope to a single manager, or several to compare across managers. For build_bookable_carousel: pass the collection_id(s) your chosen properties belong to — one, or several when the picks span managers. Every other tool operates on a single collection — pass exactly ONE.'}, 'preferences': {'type': 'string', 'description': 'Free text preferences (e.g., "hot tub, mountain view")'}, 'petsRequired': {'type': 'boolean', 'description': 'Whether guest needs pet-friendly property'}, 'maxProperties': {'type': 'number', 'description': 'Max property picks to return. Default 5.'}, 'propertySlugs': {'type': 'array', 'items': {'type': 'string'}, 'description': 'REPRICE / REHYDRATE mode (the carousel widget\'s date-change refresh). When set, return EXACTLY these properties re-priced for the dates, in this order — dropping any now unavailable for the dates and backfilling with the next-best similar available properties so the set keeps its size ("same or slightly expanded"). Lets a curated/merged carousel re-price across new dates without re-searching. Overrides offset/limit pagination.'}, 'propertyTypes': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Property type(s). The coarse family (house vs apartment) is the only hard filter; a specific subtype (e.g. "cabin", "a-frame") returns its whole family with that subtype boosted — cross-manager interleaving may still rank other family members above it; never zero results.'}, 'semanticFilters': {'type': 'object', 'properties': {'required': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 10, 'description': 'Natural-language must-haves. Every returned property must have listing, policy, amenity, or review evidence for each criterion; never infer a match from missing data.'}, 'requested': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 10, 'description': 'Natural-language preferences used as soft ranking signals. A property may still be returned when one or more requested preferences are not evidenced.'}}, 'description': 'Reserved optional evidence-backed semantic criteria that complement the explicit location, date, capacity, pet, property-type, and budget filters. Put true must-haves in `required`; put preferences that should improve ranking without excluding otherwise valid stays in `requested`. Until server instructions announce that semantic matching is enabled, omit this field.', 'additionalProperties': False}, 'budgetMaxPerNight': {'type': 'number', 'description': 'Max nightly budget in major currency units'}}}
Ausgabeschema
{'type': 'object', 'required': ['success', 'type', 'collection', 'propertyPicks', 'suggestedFollowUps'], 'properties': {'type': {'type': 'string', 'description': 'Widget type discriminator (discoverVrm).'}, 'dates': {'type': 'object', 'properties': {'checkIn': {'type': 'string'}, 'checkOut': {'type': 'string'}}}, 'guests': {'type': 'number', 'description': 'Echo of the applied party size (widget header seed).'}, 'reviews': {'type': ['object', 'null'], 'properties': {'count': {'type': 'number'}, 'averageRating': {'type': ['number', 'null']}}}, 'success': {'type': 'boolean'}, 'collection': {'type': 'object', 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}}}, 'collections': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'logoUrl': {'type': ['string', 'null']}, 'website': {'type': ['string', 'null']}, 'location': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'reviewCount': {'type': ['number', 'null']}, 'averageRating': {'type': ['number', 'null']}, 'propertyCount': {'type': ['number', 'null']}}}, 'description': 'Manager branding and aggregate context for collection filter cards.'}, 'propertyPicks': {'type': 'object', 'required': ['items', 'totalMatching'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'webUrl': {'type': ['string', 'null']}, 'pricing': {'type': 'object', 'properties': {'total': {'type': 'number'}, 'nights': {'type': 'number'}, 'currency': {'type': 'string'}, 'available': {'type': 'boolean'}, 'avgNightly': {'type': 'number'}, 'taxFeeNotes': {'type': ['string', 'null']}, 'feeBreakdown': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string'}, 'isTax': {'type': 'boolean'}, 'amount': {'type': 'number'}}}}, 'totalIncludesEstimatedTax': {'type': 'boolean'}}}, 'tagline': {'type': ['string', 'null']}, 'bedrooms': {'type': ['number', 'null']}, 'distance': {'type': 'object', 'properties': {'unit': {'type': 'string'}, 'value': {'type': 'number'}}}, 'latitude': {'type': ['number', 'null']}, 'location': {'type': ['string', 'null']}, 'bathrooms': {'type': ['number', 'null']}, 'longitude': {'type': ['number', 'null']}, 'maxGuests': {'type': ['number', 'null']}, 'bookingUrl': {'type': ['string', 'null']}, 'cardImages': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'highlights': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'quoteToken': {'type': ['string', 'null']}, 'anchorPrice': {'type': 'object', 'properties': {'label': {'type': 'string'}, 'amount': {'type': 'number'}, 'currency': {'type': 'string'}}}, 'petsAllowed': {'type': ['boolean', 'null']}, 'heroImageUrl': {'type': ['string', 'null']}, 'propertyType': {'type': ['string', 'null']}, 'memberPricing': {'type': 'object', 'required': ['currency'], 'properties': {'total': {'type': 'number'}, 'nightly': {'type': 'number'}, 'currency': {'type': 'string'}}, 'description': 'Optional authenticated-member pricing. Omitted for anonymous guests and whenever the manager does not offer a member rate.'}, 'collectionSlug': {'type': ['string', 'null']}}}}, 'totalMatching': {'type': 'number'}}}, 'bookingBaseUrl': {'type': 'string'}, 'multiCollection': {'type': 'boolean', 'description': 'True when the carousel contains properties from multiple managers.'}, 'semanticFiltering': {'type': 'object', 'required': ['required', 'requested', 'description'], 'properties': {'required': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Hard semantic criteria that were applied to the result set.'}, 'requested': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Soft semantic preferences that were used to rank the result set.'}, 'description': {'type': 'string', 'description': 'Concise evidence-grounded explanation of how required and requested criteria affected filtering and ranking, including any evidence limitations.'}}, 'description': 'Optional semantic-filtering summary. Omitted until semantic matching is enabled and the criteria have actually been evaluated.'}, 'suggestedFollowUps': {'type': 'array', 'items': {'type': 'string'}}, 'appliedSearchParams': {'type': 'object', 'description': 'Echo of the search filters that were applied for widget round-trips.'}}}
get_bookable_detail
View Property Details
Returns full details for a specific vacation rental property: description, bedrooms, bathrooms, kitchen, outdoor spaces, features, policies, and recent reviews. Use when a guest wants to know more about a specific property.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['propertySlug'], 'properties': {'checkIn': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Check-in date for pricing'}, 'checkOut': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Check-out date for pricing'}, 'collections': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Collection slug(s) — each a `collection_id` from list_collections. For search_bookables and discover_collections: OMIT to span the whole network, pass one to scope to a single manager, or several to compare across managers. For build_bookable_carousel: pass the collection_id(s) your chosen properties belong to — one, or several when the picks span managers. Every other tool operates on a single collection — pass exactly ONE.'}, 'propertySlug': {'type': 'string', 'description': 'Slug of the vacation rental property'}}}
Ausgabeschema
{'type': 'object', 'required': ['type', 'property'], 'properties': {'type': {'type': 'string', 'description': 'Always "vrDetail".'}, 'reviews': {'type': 'object', 'properties': {'count': {'type': 'number'}, 'recent': {'type': 'array', 'items': {'type': 'object', 'properties': {'date': {'type': ['string', 'null']}, 'text': {'type': ['string', 'null']}, 'rating': {'type': ['number', 'null']}, 'channel': {'type': ['string', 'null']}, 'reviewer': {'type': ['string', 'null']}}}}, 'averageRating': {'type': ['number', 'null']}}}, 'property': {'type': 'object', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'pricing': {'type': 'object', 'properties': {'total': {'type': 'number'}, 'nights': {'type': 'number'}, 'currency': {'type': 'string'}, 'available': {'type': 'boolean'}, 'avgNightly': {'type': 'number'}}}, 'tagline': {'type': ['string', 'null']}, 'bedrooms': {'type': ['number', 'null']}, 'location': {'type': 'string'}, 'policies': {'type': 'object', 'properties': {'minimumAge': {'type': ['number', 'null']}, 'quietHours': {'type': ['object', 'null'], 'properties': {'end': {'type': 'string'}, 'start': {'type': 'string'}}}, 'maximumStay': {'type': ['number', 'null']}, 'minimumStay': {'type': ['number', 'null']}, 'petsAllowed': {'type': ['boolean', 'null']}, 'smokingAllowed': {'type': ['boolean', 'null']}, 'additionalRules': {'type': ['string', 'null']}, 'petPolicyDetail': {'type': ['string', 'null']}, 'earlyCheckInTime': {'type': ['string', 'null']}, 'lateCheckOutTime': {'type': ['string', 'null']}, 'suitableForEvents': {'type': ['boolean', 'null']}, 'suitableForInfants': {'type': ['boolean', 'null']}, 'suitableForChildren': {'type': ['boolean', 'null']}}}, 'bathrooms': {'type': ['number', 'null']}, 'maxGuests': {'type': ['number', 'null']}, 'description': {'type': ['string', 'null']}, 'topFeatures': {'type': 'array', 'items': {'type': 'string'}}, 'topPersonas': {'type': 'array', 'items': {'type': 'string'}}, 'propertyType': {'type': ['string', 'null']}, 'shortSummary': {'type': ['string', 'null']}, 'memberPricing': {'type': 'object', 'required': ['currency'], 'properties': {'total': {'type': 'number'}, 'nightly': {'type': 'number'}, 'currency': {'type': 'string'}}, 'description': 'Optional authenticated-member pricing. Omitted for anonymous guests and whenever the manager does not offer a member rate.'}}}, 'detailUrl': {'type': 'string'}, 'membership': {'type': 'object', 'required': ['available', 'url'], 'properties': {'url': {'type': 'string', 'description': 'Manager-owned membership page URL, capable of carrying kid_sid.'}, 'perks': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Manager-authored membership benefit lines.'}, 'available': {'type': 'boolean'}, 'programName': {'type': 'string'}, 'memberRatesEnabled': {'type': 'boolean'}}, 'description': 'Optional collection membership metadata. Anonymous responses may expose availability, but member pricing is populated only for authenticated guests.'}, 'similarAvailable': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'bedrooms': {'type': ['number', 'null']}, 'currency': {'type': 'string'}, 'location': {'type': ['string', 'null']}, 'avgNightly': {'type': ['number', 'null']}, 'petsAllowed': {'type': ['boolean', 'null']}, 'propertyType': {'type': ['string', 'null']}, 'thumbnailUrl': {'type': ['string', 'null']}, 'distanceMiles': {'type': ['number', 'null']}, 'collectionSlug': {'type': ['string', 'null']}}}, 'description': 'Nearest collection siblings that ARE available for the requested dates.'}, 'alternateDateWindows': {'type': 'array', 'items': {'type': 'object', 'properties': {'total': {'type': ['number', 'null']}, 'nights': {'type': 'number'}, 'checkIn': {'type': 'string'}, 'checkOut': {'type': 'string'}, 'currency': {'type': 'string'}, 'avgNightly': {'type': ['number', 'null']}}}, 'description': 'Nearest bookable windows for THIS property when the requested dates are unavailable.'}}}
get_bookable_reviews
View Property Reviews
Get guest reviews for a specific vacation rental property or for the entire collection. Returns a summary and individual review texts that can be used to answer questions about guest experiences.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'properties': {'sort': {'enum': ['newest', 'oldest', 'highest', 'lowest'], 'type': 'string', 'description': 'How to sort reviews (default newest).'}, 'limit': {'type': 'number', 'description': 'Number of reviews to return (default 5, max 20).'}, 'offset': {'type': 'number', 'description': 'Number of reviews to skip for pagination (default 0).'}, 'season': {'enum': ['winter', 'spring', 'summer', 'fall'], 'type': 'string', 'description': 'Filter to reviews from a specific season.'}, 'persona': {'type': 'string', 'description': 'Filter to reviews from a guest persona type (e.g. "family", "couples", "solo").'}, 'collections': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Collection slug(s) — each a `collection_id` from list_collections. For search_bookables and discover_collections: OMIT to span the whole network, pass one to scope to a single manager, or several to compare across managers. For build_bookable_carousel: pass the collection_id(s) your chosen properties belong to — one, or several when the picks span managers. Every other tool operates on a single collection — pass exactly ONE.'}, 'propertySlug': {'type': 'string', 'description': 'Slug of the specific property to get reviews for. If omitted, returns collection-level reviews.'}}}
Ausgabeschema
{'type': 'object', 'required': ['success', 'type', 'scope', 'summary', 'reviews', 'pagination'], 'properties': {'type': {'type': 'string', 'description': 'Always "vrReviews".'}, 'scope': {'enum': ['property', 'collection'], 'type': 'string'}, 'reviews': {'type': 'array', 'items': {'type': 'object', 'properties': {'date': {'type': ['string', 'null']}, 'text': {'type': ['string', 'null']}, 'rating': {'type': ['number', 'null']}, 'channel': {'type': ['string', 'null']}, 'propertyName': {'type': 'string'}, 'propertySlug': {'type': 'string'}, 'reviewerName': {'type': 'string'}}}}, 'success': {'type': 'boolean'}, 'summary': {'type': 'object', 'properties': {'total': {'type': 'number'}, 'byCategory': {'type': 'object'}, 'averageRating': {'type': ['number', 'null']}}}, 'scopeSlug': {'type': 'string'}, 'collection': {'type': 'object', 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}}}, 'pagination': {'type': 'object', 'required': ['total', 'limit', 'offset', 'hasMore'], 'properties': {'limit': {'type': 'number'}, 'total': {'type': 'number'}, 'offset': {'type': 'number'}, 'hasMore': {'type': 'boolean'}}}}}
get_booking_link
Get Booking Link
Returns a booking link for a specific vacation rental property. Use when a guest is ready to book. When dates are provided they are validated against the property's booking rules (availability, minimum/maximum stay, arrival/departure restrictions); if the stay is not bookable, the result carries datesRejected with the reason and up to three alternate date windows — offer those to the guest instead.
Idempotent
Eingabeschema
{'type': 'object', 'required': ['propertySlug'], 'properties': {'guests': {'type': 'number', 'description': 'Number of guests'}, 'checkIn': {'type': 'string', 'description': 'Check-in date (YYYY-MM-DD)'}, 'checkOut': {'type': 'string', 'description': 'Check-out date (YYYY-MM-DD)'}, 'collections': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Collection slug(s) — each a `collection_id` from list_collections. For search_bookables and discover_collections: OMIT to span the whole network, pass one to scope to a single manager, or several to compare across managers. For build_bookable_carousel: pass the collection_id(s) your chosen properties belong to — one, or several when the picks span managers. Every other tool operates on a single collection — pass exactly ONE.'}, 'propertySlug': {'type': 'string', 'description': 'Slug of the vacation rental'}}}
Ausgabeschema
{'type': 'object', 'required': ['type', 'propertySlug', 'bookingUrl'], 'properties': {'type': {'type': 'string', 'description': 'Always "bookingLinkVrm".'}, 'bookingUrl': {'type': 'string', 'description': 'URL the guest can follow to book.'}, 'propertySlug': {'type': 'string'}, 'datesRejected': {'type': 'boolean', 'description': "True when the requested dates violate the property's booking rules; bookingUrl is then the undated property page."}, 'rejectionReason': {'type': 'string', 'description': 'Why the requested stay is not bookable (only when datesRejected).'}, 'alternateDateWindows': {'type': 'array', 'items': {'type': 'object', 'required': ['checkIn', 'checkOut'], 'properties': {'checkIn': {'type': 'string'}, 'checkOut': {'type': 'string'}}}, 'description': 'Up to three nearest bookable windows of the same length (only when datesRejected).'}}}
get_collection_content
View Collection Info
Returns collection-level content for a VRM. Sections: "about" (collection info), "reviews" (guest reviews with ratings). Use for guest questions about the company, area, or review quality.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['section'], 'properties': {'limit': {'type': 'number', 'description': 'Max items for reviews. Default 10.'}, 'offset': {'type': 'number', 'description': 'Pagination offset'}, 'section': {'enum': ['about', 'reviews'], 'type': 'string', 'description': 'Content section'}, 'collections': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Collection slug(s) — each a `collection_id` from list_collections. For search_bookables and discover_collections: OMIT to span the whole network, pass one to scope to a single manager, or several to compare across managers. For build_bookable_carousel: pass the collection_id(s) your chosen properties belong to — one, or several when the picks span managers. Every other tool operates on a single collection — pass exactly ONE.'}}}
Ausgabeschema
{'type': 'object', 'required': ['type', 'section'], 'properties': {'data': {'type': 'object', 'properties': {'url': {'type': ['string', 'null']}, 'name': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}}, 'description': 'Collection metadata for the "about" section.'}, 'type': {'type': 'string', 'description': 'Always "vrmContent".'}, 'limit': {'type': 'number'}, 'total': {'type': 'number'}, 'offset': {'type': 'number'}, 'reviews': {'type': 'array', 'items': {'type': 'object', 'properties': {'date': {'type': ['string', 'null']}, 'text': {'type': ['string', 'null']}, 'rating': {'type': ['number', 'null']}, 'channel': {'type': ['string', 'null']}, 'property': {'type': ['string', 'null']}, 'reviewer': {'type': ['string', 'null']}, 'propertySlug': {'type': ['string', 'null']}}}}, 'section': {'enum': ['about', 'reviews'], 'type': 'string'}, 'summary': {'type': 'object', 'properties': {'total': {'type': 'number'}, 'averageRating': {'type': ['number', 'null']}}, 'description': 'Review aggregates for the "reviews" section.'}, 'membership': {'type': 'object', 'required': ['available', 'url'], 'properties': {'url': {'type': 'string', 'description': 'Manager-owned membership page URL, capable of carrying kid_sid.'}, 'perks': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Manager-authored membership benefit lines.'}, 'available': {'type': 'boolean'}, 'programName': {'type': 'string'}, 'memberRatesEnabled': {'type': 'boolean'}}, 'description': 'Optional collection membership metadata. Anonymous responses may expose availability, but member pricing is populated only for authenticated guests.'}}}
get_guest_profile
Get Kismet Guest Profile
Get the signed-in user / guest Kismet account profile, identity, preferences, and account-level signals. Returns the currently authenticated user's (the logged-in guest's) Kismet profile: identity (first name), contact-channel status (whether an email / phone is on file and verified — never the raw values), account-level signals (linked property managers and collections the user has transacted with, plus membership status — which collections the user is an Insider member of), per-collection stay history (past and upcoming bookings with property names and dates), and a cross-collection activity summary (booking counts, last active, last booked across the Kismet network). Use this whenever the user wants to see their account, profile, or saved preferences, or whenever you need to personalize search results and recommendations for the signed-in user — common queries: "what does my profile look like", "who am I logged in as", "show my Kismet account", "check my preferences", "am I signed in", "personalize this for me". Returns an explicit anonymous state when no user is signed in. Anonymous browsing, search, and shortlisting are fully supported, so sign-in is not required for those flows. When `auth_state` is "anonymous", personal-account data (profile and identity, past stays and bookings, Insider memberships) is unavailable until the user signs in; the separate `sign_in` tool initiates the OAuth flow when the user wants to access it. This tool only READS the current auth state and never signs the user in.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'required': ['auth_state', 'identity', 'account_status', 'activity_summary'], 'properties': {'identity': {'type': 'object', 'properties': {'timezone': {'type': ['string', 'null']}, 'first_name': {'type': ['string', 'null']}, 'email_on_file': {'type': 'boolean'}, 'phone_on_file': {'type': 'boolean'}, 'email_verified': {'type': ['boolean', 'null']}, 'phone_verified': {'type': ['boolean', 'null']}, 'preferred_language': {'type': ['string', 'null']}}}, 'auth_state': {'enum': ['authenticated', 'anonymous'], 'type': 'string', 'description': "When 'anonymous', identity flags are false/null. If the user is asking about THEIR personal data, offer to call sign_in."}, 'collections': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'stays': {'type': 'array', 'items': {'type': 'object', 'properties': {'nights': {'type': 'number'}, 'status': {'type': 'string'}, 'check_in': {'type': 'string'}, 'upcoming': {'type': 'boolean', 'description': 'True if check_out is in the future (an upcoming trip, not a past stay). Canceled bookings are excluded entirely.'}, 'check_out': {'type': 'string'}, 'property_name': {'type': 'string'}, 'property_slug': {'type': 'string'}}}}, 'bookings': {'type': 'number'}, 'last_check_out': {'type': ['string', 'null']}}}, 'description': "Per-collection itemized stay history. Each entry's `stays` array lists the guest's bookings at that collection (property name + slug, check-in/out, nights, status). Use to answer 'my past stays with <collection>'. Empty when anonymous."}, 'memberships': {'type': 'array', 'items': {'type': 'object', 'properties': {'tier': {'type': ['string', 'null']}, 'status': {'type': 'string', 'description': 'ACTIVE | CANCELED'}, 'member_since': {'type': ['string', 'null']}, 'collection_name': {'type': 'string'}, 'collection_slug': {'type': 'string'}}}, 'description': "The guest's Insider memberships — the collections they belong to (with status, tier, and member-since). Empty when anonymous or not a member of any. Use it to tell the guest which collections they're an Insider member of."}, 'preferences': {'type': 'object', 'properties': {'currency': {'type': ['string', 'null']}, 'accessibility_needs': {'type': 'array', 'items': {'type': 'string'}}, 'saved_search_filters': {}, 'group_profile_default': {}}}, 'communication': {'type': 'object', 'properties': {'marketing_opt_in': {'type': 'boolean'}, 'transactional_opt_in': {'type': 'boolean'}, 'reply_channel_preferred': {'type': ['string', 'null']}, 'reply_channels_available': {'type': 'array', 'items': {'type': 'string'}}}}, 'account_status': {'type': 'object', 'properties': {'kismet_tier': {'type': ['string', 'null']}, 'member_since': {'type': ['string', 'null']}, 'identity_source': {'type': ['string', 'null']}, 'payment_provider': {'type': ['string', 'null']}, 'identity_provider': {'type': ['string', 'null']}, 'linked_collections': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Manager / collection slugs the guest has transacted with.'}, 'has_payment_on_file': {'type': 'boolean'}}}, 'shortlist_count': {'type': ['number', 'null']}, 'activity_summary': {'type': 'object', 'properties': {'last_active_at': {'type': ['string', 'null']}, 'last_booked_at': {'type': ['string', 'null']}, 'total_collections_booked': {'type': 'number'}, 'total_bookings_across_collections': {'type': 'number'}}}, 'assistant_guidance': {'type': 'string', 'description': "Behavioral hints for the assistant (greeting, anonymous don't-prompt-sign-in rules, how to read collections[]). Not guest PII."}}}
get_shortlist
View Shortlist
Show the guest's saved/shortlisted vacation rental properties for this collection. Call this when the user wants to see their saved properties or review their shortlist.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'properties': {'limit': {'type': 'number', 'description': 'Maximum number of saved properties to return (default 20).'}, 'collections': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Collection slug(s) — each a `collection_id` from list_collections. For search_bookables and discover_collections: OMIT to span the whole network, pass one to scope to a single manager, or several to compare across managers. For build_bookable_carousel: pass the collection_id(s) your chosen properties belong to — one, or several when the picks span managers. Every other tool operates on a single collection — pass exactly ONE.'}}}
Ausgabeschema
{'type': 'object', 'required': ['success', 'type', 'items', 'isEmpty'], 'properties': {'type': {'type': 'string', 'description': 'Always "shortlistVrm".'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'checkIn': {'type': ['string', 'null']}, 'pricing': {'type': ['object', 'null'], 'properties': {'total': {'type': ['number', 'null']}, 'nights': {'type': ['number', 'null']}, 'currency': {'type': 'string'}, 'avgNightly': {'type': ['number', 'null']}}}, 'savedAt': {'type': 'string', 'description': 'ISO 8601 timestamp.'}, 'bedrooms': {'type': ['number', 'null']}, 'checkOut': {'type': ['string', 'null']}, 'bathrooms': {'type': ['number', 'null']}, 'maxGuests': {'type': ['number', 'null']}, 'bookingUrl': {'type': 'string'}, 'quoteToken': {'type': ['string', 'null']}, 'memberPricing': {'type': 'object', 'required': ['currency'], 'properties': {'total': {'type': 'number'}, 'nightly': {'type': 'number'}, 'currency': {'type': 'string'}}, 'description': 'Optional authenticated-member pricing. Omitted for anonymous guests and whenever the manager does not offer a member rate.'}}}}, 'isEmpty': {'type': 'boolean'}, 'success': {'type': 'boolean'}, 'collection': {'type': 'object', 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}}}, 'totalSaved': {'type': 'number'}, 'emptyMessage': {'type': 'string'}}}
list_collections
List Vacation-Rental Collections
Search the Kismet network for vacation-rental collections (property managers). Returns ranked collections with their slug (`collection_id`), regions, property count, and supported tools. Use this when the guest asks which managers operate in a place or wants to choose a manager. It is not required before network-wide search: search_bookables and discover_collections span every collection when `collections` is omitted. Searchable via free-text `query` plus optional `region`/`category` filters — not a full dump.
Nur Lesen
Eingabeschema
{'type': 'object', 'properties': {'limit': {'type': 'number', 'description': 'Max results (default 20).'}, 'query': {'type': 'string', 'description': 'Free-text search across name, region, and description.'}, 'region': {'type': 'string', 'description': 'Filter by region, state, or country (e.g. "Oregon").'}, 'category': {'type': 'string', 'description': 'Filter by category, e.g. "vacation_rental".'}}}
Ausgabeschema
{'type': 'object', 'required': ['success', 'collections'], 'properties': {'total': {'type': 'number'}, 'success': {'type': 'boolean'}, 'collections': {'type': 'array', 'items': {'type': 'object', 'required': ['collection_id', 'name'], 'properties': {'name': {'type': 'string'}, 'region': {'type': ['string', 'null']}, 'country': {'type': ['string', 'null']}, 'regions': {'type': 'array', 'items': {'type': 'string'}}, 'category': {'type': ['string', 'null']}, 'logo_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'website_url': {'type': ['string', 'null']}, 'collection_id': {'type': 'string', 'description': 'Stable slug — pass this in the `collections` array of property tools.'}, 'property_count': {'type': ['number', 'null']}, 'tool_capabilities': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Manager-side tool names this collection exposes.'}}}, 'description': 'Ranked collections matching the query / filters.'}}}
search_bookables
Search Vacation Rentals
Primary search tool — use this whenever the guest specifies ANY filter: location, dates, budget, bedrooms, pets, or persona. Returns a ranked list of candidate properties as plain text with each property's slug, name, location, dated or anchor pricing, top personas/features, and tagline — formatted so the LLM can read and reason over them directly. After picking your top candidates from the returned list, pass their slugs to build_bookable_carousel to render them visually for the guest. Supports up to 5 date windows in a single call (e.g. compare March 15-18 vs March 22-25) and all location modes (region, point+radius, bounding box).
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'properties': {'sort': {'enum': ['relevance', 'price_asc', 'price_desc', 'beds_desc', 'name_asc'], 'type': 'string', 'description': 'Sort order. Default "relevance".'}, 'neLat': {'type': 'number', 'description': 'BOUNDS MODE: Northeast latitude'}, 'neLng': {'type': 'number', 'description': 'BOUNDS MODE: Northeast longitude'}, 'swLat': {'type': 'number', 'description': 'BOUNDS MODE: Southwest latitude'}, 'swLng': {'type': 'number', 'description': 'BOUNDS MODE: Southwest longitude'}, 'guests': {'type': 'number', 'description': 'Number of guests'}, 'offset': {'type': 'number', 'description': 'Pagination offset. Default 0.'}, 'region': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by state/region (e.g., ["Vermont"]). Case-insensitive.'}, 'sleeps': {'type': 'number', 'description': 'Minimum sleeping capacity'}, 'country': {'type': 'string', 'description': 'Filter by ISO alpha-2 country code (e.g., "US")'}, 'feature': {'type': 'string', 'description': 'Soft ranking signal — boost properties with a guest-confirmed feature (e.g., "mountain_views", "spotless_clean", "hot_tub", "cozy", "beachfront"). Does NOT hard-filter.'}, 'nearLat': {'type': 'number', 'description': 'POINT MODE: Latitude to search near'}, 'nearLng': {'type': 'number', 'description': 'POINT MODE: Longitude'}, 'persona': {'type': 'string', 'description': 'Soft ranking signal — boost properties popular with a guest persona (e.g., "hiking", "romantic", "young_family", "pet_owners", "fishing", "luxury"). Does NOT hard-filter.'}, 'bedrooms': {'type': 'number', 'description': 'Minimum bedrooms needed'}, 'locality': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by city/town name (e.g., ["Stowe"], ["Seaside", "Cannon Beach"]). Case-insensitive.'}, 'nearUnit': {'enum': ['miles', 'kilometers'], 'type': 'string', 'description': 'Default "miles".'}, 'nearRadius': {'type': 'number', 'description': 'POINT MODE: Max distance. Default 25.'}, 'collections': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Collection slug(s) — each a `collection_id` from list_collections. For search_bookables and discover_collections: OMIT to span the whole network, pass one to scope to a single manager, or several to compare across managers. For build_bookable_carousel: pass the collection_id(s) your chosen properties belong to — one, or several when the picks span managers. Every other tool operates on a single collection — pass exactly ONE.'}, 'dateWindows': {'type': 'array', 'items': {'type': 'object', 'required': ['checkIn', 'checkOut'], 'properties': {'checkIn': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, 'checkOut': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}}}, 'maxItems': 5, 'description': 'Up to 5 date windows to check availability and pricing across. Each window returns per-property availability. Omit for browse mode — browse results carry the nightly anchor "from" price only, never a dated total.'}, 'petsRequired': {'type': 'boolean', 'description': 'Pet-friendly only'}, 'maxProperties': {'type': 'number', 'description': 'Max results. Default 20.'}, 'propertyTypes': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Property type(s). The coarse family (house vs apartment) is the only hard filter; a specific subtype (e.g. "cabin", "a-frame") returns its whole family with that subtype boosted — cross-manager interleaving may still rank other family members above it; never zero results.'}, 'semanticFilters': {'type': 'object', 'properties': {'required': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 10, 'description': 'Natural-language must-haves. Every returned property must have listing, policy, amenity, or review evidence for each criterion; never infer a match from missing data.'}, 'requested': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 10, 'description': 'Natural-language preferences used as soft ranking signals. A property may still be returned when one or more requested preferences are not evidenced.'}}, 'description': 'Reserved optional evidence-backed semantic criteria that complement the explicit location, date, capacity, pet, property-type, and budget filters. Put true must-haves in `required`; put preferences that should improve ranking without excluding otherwise valid stays in `requested`. Until server instructions announce that semantic matching is enabled, omit this field.', 'additionalProperties': False}, 'budgetMaxPerNight': {'type': 'number', 'description': 'Max nightly budget in major currency units'}}}
Ausgabeschema
{'type': 'object', 'required': ['type', 'totalMatching', 'properties'], 'properties': {'type': {'type': 'string', 'description': 'Always "searchProperties".'}, 'collection': {'type': 'object', 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}}}, 'properties': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name', 'dateWindows'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tagline': {'type': ['string', 'null']}, 'bedrooms': {'type': ['number', 'null']}, 'distance': {'type': 'object', 'properties': {'unit': {'type': 'string'}, 'value': {'type': 'number'}}}, 'location': {'type': 'object', 'properties': {'region': {'type': ['string', 'null']}, 'latitude': {'type': ['number', 'null']}, 'locality': {'type': ['string', 'null']}, 'longitude': {'type': ['number', 'null']}}}, 'bathrooms': {'type': ['number', 'null']}, 'maxGuests': {'type': ['number', 'null']}, 'highlights': {'type': ['array', 'null'], 'items': {'type': 'string'}}, 'anchorPrice': {'type': 'object', 'properties': {'label': {'type': 'string'}, 'amount': {'type': 'number'}, 'currency': {'type': 'string'}}}, 'dateWindows': {'type': 'array', 'items': {'type': 'object', 'required': ['checkIn', 'checkOut', 'available', 'nights'], 'properties': {'total': {'type': ['number', 'null']}, 'nights': {'type': 'number'}, 'checkIn': {'type': 'string'}, 'checkOut': {'type': 'string'}, 'currency': {'type': ['string', 'null']}, 'available': {'type': 'boolean'}, 'avgNightly': {'type': ['number', 'null']}, 'memberPricing': {'type': 'object', 'required': ['currency'], 'properties': {'total': {'type': 'number'}, 'nightly': {'type': 'number'}, 'currency': {'type': 'string'}}, 'description': 'Optional authenticated-member pricing. Omitted for anonymous guests and whenever the manager does not offer a member rate.'}}}}, 'petsAllowed': {'type': ['boolean', 'null']}, 'topFeatures': {'type': 'array', 'items': {'type': 'object', 'properties': {'slug': {'type': 'string'}, 'count': {'type': 'number'}}}}, 'topPersonas': {'type': 'array', 'items': {'type': 'object', 'properties': {'slug': {'type': 'string'}, 'count': {'type': 'number'}}}}, 'featureMatch': {'type': 'object', 'properties': {'feature': {'type': 'string'}, 'avgRating': {'type': 'number'}, 'reviewCount': {'type': 'number'}}}, 'personaMatch': {'type': 'object', 'properties': {'persona': {'type': 'string'}, 'avgRating': {'type': 'number'}, 'reviewCount': {'type': 'number'}}}, 'propertyType': {'type': ['string', 'null']}, 'shortSummary': {'type': ['string', 'null']}, 'collectionSlug': {'type': ['string', 'null'], 'description': 'Parent collection slug. Present on federated results; pass it in `collections` when rendering selected properties.'}}}}, 'totalMatching': {'type': 'number'}, 'semanticFiltering': {'type': 'object', 'required': ['required', 'requested', 'description'], 'properties': {'required': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Hard semantic criteria that were applied to the result set.'}, 'requested': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Soft semantic preferences that were used to rank the result set.'}, 'description': {'type': 'string', 'description': 'Concise evidence-grounded explanation of how required and requested criteria affected filtering and ranking, including any evidence limitations.'}}, 'description': 'Optional semantic-filtering summary. Omitted until semantic matching is enabled and the criteria have actually been evaluated.'}, 'suggestedFollowUps': {'type': 'array', 'items': {'type': 'string'}}}}
shortlist_bookable
Save Property
Save or remove a vacation rental property from the guest's shortlist. Reversible. Anonymous guests are tracked via the MCP session ID; signed-in guests via their guest ID — the tool reads the current identity from session context, so no auth fields need to be passed.
Idempotent
Eingabeschema
{'type': 'object', 'required': ['propertySlug'], 'properties': {'action': {'enum': ['save', 'remove'], 'type': 'string', 'description': "Whether to save or remove the property from the shortlist. Optional — defaults to 'save'; pass 'remove' to take a property off the shortlist."}, 'checkIn': {'type': 'string', 'description': 'Check-in date (ISO 8601).'}, 'checkOut': {'type': 'string', 'description': 'Check-out date (ISO 8601).'}, 'quoteToken': {'type': 'string', 'description': 'Quote token for the selected rate.'}, 'collections': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Collection slug(s) — each a `collection_id` from list_collections. For search_bookables and discover_collections: OMIT to span the whole network, pass one to scope to a single manager, or several to compare across managers. For build_bookable_carousel: pass the collection_id(s) your chosen properties belong to — one, or several when the picks span managers. Every other tool operates on a single collection — pass exactly ONE.'}, 'propertyName': {'type': 'string', 'description': 'Display name of the property. Strongly recommended (you have it from search_bookables); if omitted, a readable name is derived from the slug.'}, 'propertySlug': {'type': 'string', 'description': 'Slug of the property being shortlisted (required).'}, 'collectionSlug': {'type': 'string', 'description': 'Optional. The parent collection slug. If omitted it is derived from the globally-unique propertySlug, so you can save with propertySlug alone.'}, 'pricingSnapshot': {'type': 'object', 'properties': {'memberPricing': {'type': 'object', 'required': ['currency'], 'properties': {'total': {'type': 'number'}, 'nightly': {'type': 'number'}, 'currency': {'type': 'string'}}, 'description': 'Optional authenticated-member pricing. Omitted for anonymous guests and whenever the manager does not offer a member rate.'}}, 'description': 'Pricing snapshot at the time of shortlisting.'}}}
Ausgabeschema
{'type': 'object', 'required': ['persisted'], 'properties': {'action': {'enum': ['save', 'remove'], 'type': 'string'}, 'reason': {'type': 'string'}, 'checkIn': {'type': 'string'}, 'message': {'type': 'string'}, 'checkOut': {'type': 'string'}, 'optionId': {'type': 'string'}, 'anonymous': {'type': 'boolean'}, 'persisted': {'type': 'boolean'}, 'propertyName': {'type': 'string'}, 'propertySlug': {'type': 'string'}}, 'description': 'JSON-encoded shortlist persistence result returned in content[0].text. Fields below describe the parsed shape.'}
sign_in
Sign in to Kismet
Trigger the Kismet OAuth sign-in flow for the current guest. Call this whenever the user explicitly asks to sign in, log in, authenticate, or connect their Kismet account — common queries: "sign me in", "log me in", "log me into Kismet", "sign me into Kismet", "connect my Kismet account", "authenticate me", "I want to log in". The host will open its OAuth WebView and run the standard PKCE handshake; after successful authentication this tool returns a privacy-minimized confirmation snapshot (first name and verified-email flag only) and every subsequent tool call (get_guest_profile, get_shortlist, shortlist_bookable, etc.) will see the authenticated guest. Do NOT call this tool unless the user explicitly asked to sign in — anonymous browsing, search, and shortlisting all work fully without sign-in. After a successful sign-in, call get_guest_profile to surface the guest's full Kismet profile to the conversation.
Idempotent
Eingabeschema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'required': ['auth_state'], 'properties': {'success': {'type': 'boolean'}, 'identity': {'type': 'object', 'properties': {'first_name': {'type': ['string', 'null']}, 'email_verified': {'type': ['boolean', 'null']}}}, 'auth_state': {'enum': ['authenticated', 'anonymous'], 'type': 'string', 'description': "'authenticated' on a successful sign-in (bearer attached, session.oauth populated). 'anonymous' only on the defense-in-depth path where session.oauth somehow isn't set after the gate — surface that to the user honestly, do not pretend to be signed in."}}}
sign_in_agent
Sign In Agent By Inbox
Sign this agent back in through its own verified email inbox, with no bearer and no action from the person. Two steps with the same call: without `code`, Kismet mails a six-digit code to the inbox; with `code`, Kismet returns the agent bearer (access and refresh token) that acts for the linked person. Only a verified inbox on an agent the person already linked works; anything else is told to link first.
Eingabeschema
{'type': 'object', 'required': ['email'], 'properties': {'code': {'type': 'string', 'description': 'The six-digit code from the mail Kismet sent; omit on the first call.'}, 'email': {'type': 'string', 'description': "The agent's own verified inbox address."}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'required': ['status'], 'properties': {'scope': {'type': 'string'}, 'status': {'enum': ['code_sent', 'signed_in'], 'type': 'string'}, 'agent_id': {'type': 'string'}, 'expires_in': {'type': 'number'}, 'token_type': {'type': 'string'}, 'access_token': {'type': 'string'}, 'email_masked': {'type': 'string'}, 'refresh_token': {'type': 'string'}, 'expires_in_minutes': {'type': 'number'}}}
use_guest_token
Load Kismet guest context from a token
Load READ-ONLY context from a Kismet guest token — e.g. a "continue in your AI assistant" link a property manager handed the guest. Returns the manager and the draft/considered itinerary the token carries (plus any current offer, when one applies), so you can have an informed conversation. This is CONTEXT ONLY: it grants NO account access and is never required for browsing. To actually claim an offer, save itinerary changes, message the manager, or book, the guest must sign in — call `sign_in` (the standard OAuth flow). Call this when the user pastes or references a Kismet guest/booking token or a kismet.travel/continue?kgt=… handoff link — pass it straight to this tool rather than browsing the URL; the token is extracted from the link. An unrecognized or expired token returns a clean invalid state (never an error) — then offer to sign them in.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['token'], 'properties': {'token': {'type': 'string', 'description': 'The Kismet guest token, OR the "continue in your AI assistant" handoff link that carries it (e.g. https://kismet.travel/continue?kgt=…). Pass the pasted link verbatim — the token is extracted from it; do not fetch the URL.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'required': ['token_status', 'requires_sign_in_for'], 'properties': {'offer': {'type': ['object', 'null']}, 'source': {'type': 'string'}, 'manager': {'type': ['object', 'null']}, 'itinerary': {'type': ['object', 'null']}, 'token_status': {'enum': ['loaded', 'expired', 'invalid'], 'type': 'string'}, 'requires_sign_in_for': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Actions that require a real OAuth sign_in — this tool grants none of them.'}}}
verify_agent_inbox
Verify Agent Inbox
Record and verify the email inbox that belongs to THIS agent (not to the person it acts for), so the agent can later sign back in on its own with sign_in_agent. Two steps with the same call: without `code`, Kismet mails a six-digit code to the address; with `code`, the inbox is marked verified. Requires the agent bearer from the device flow or a connector sign-in. An agent address is never used to create a guest account.
Idempotent
Eingabeschema
{'type': 'object', 'required': ['email'], 'properties': {'code': {'type': 'string', 'description': 'The six-digit code from the mail Kismet sent; omit on the first call.'}, 'email': {'type': 'string', 'description': "The agent's own inbox address."}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'required': ['status', 'email_masked'], 'properties': {'status': {'enum': ['code_sent', 'verified'], 'type': 'string'}, 'email_masked': {'type': 'string'}, 'expires_in_minutes': {'type': 'number'}}}
Hinzugefügt
sign_in_agent
29. September 2026 02:59
Hinzugefügt
verify_agent_inbox
29. September 2026 02:59
Hinzugefügt
shortlist_bookable
17. September 2026 12:55
Hinzugefügt
get_bookable_detail
17. September 2026 12:55
Hinzugefügt
build_bookable_carousel
17. September 2026 12:55
Hinzugefügt
get_booking_link
17. September 2026 12:55
Hinzugefügt
discover_collections
17. September 2026 12:55
Hinzugefügt
get_shortlist
17. September 2026 12:55
Hinzugefügt
search_bookables
17. September 2026 12:55
Hinzugefügt
get_bookable_reviews
17. September 2026 12:55
Hinzugefügt
get_collection_content
17. September 2026 12:55
Hinzugefügt
use_guest_token
17. September 2026 12:55
Hinzugefügt
sign_in
17. September 2026 12:55
Hinzugefügt
get_guest_profile
17. September 2026 12:55
Hinzugefügt
list_collections
17. September 2026 12:55