MCPサーバー

tickadoo-mcp

io.github.tickadoo/tickadoo-mcp

このMCPでできること

Searches, compares, and checks availability for bookable theatre shows, attractions, tours, and other experiences across supported cities.

check_availability
Use this when the user has picked a specific experience and asks about exactly one date: whether it is available that day, what it costs for a party, or a booking link for that date. For browsing a date range or listing upcoming times and live slot prices, use get_availability.
読み取り専用
入力スキーマ
{'type': 'object', 'required': ['slug', 'date'], 'properties': {'date': {'type': 'string', 'format': 'date', 'description': 'Date to check in YYYY-MM-DD format.'}, 'slug': {'type': 'string', 'description': 'Product slug or legacy booking path, e.g. "london-dungeon-tickets" or "/london/london-dungeon-tickets".'}, 'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}, 'party_size': {'type': 'integer', 'default': 2, 'maximum': 50, 'minimum': 1, 'description': 'Number of guests or tickets to price. Default 2.'}}}
出力スキーマ
{'type': 'object', 'properties': {'date': {'type': 'string'}, 'slug': {'type': 'string'}, 'slots': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'title': {'type': ['string', 'null']}, 'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'available': {'type': 'boolean'}, 'error_type': {'type': 'string'}, 'schema_version': {'type': 'string'}, 'total_for_party': {'type': 'object', 'additionalProperties': True}}, 'additionalProperties': True}
compare_experiences
Use this when the user wants a side-by-side comparison of 2-5 specific products. Pass the slug for each. Returns a comparison table plus per-axis winners (value, rating, popularity, family-fit).
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'required': ['slugs'], 'properties': {'slugs': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 5, 'minItems': 2, 'description': 'Product slugs from earlier search or recommend results.'}, 'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}}}
出力スキーマ
{'type': 'object', 'properties': {'text': {'type': 'string'}, 'detail': {'type': 'object', 'additionalProperties': True}, 'winner': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'comparison': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'error_type': {'type': 'string'}, 'differences': {'type': 'array', 'items': {'type': 'string'}}, 'schema_version': {'type': 'string'}}, 'additionalProperties': True}
find_nearby_experiences
Use this when the client already holds exact latitude and longitude coordinates and wants experiences near that point. When only a place name, landmark, or neighbourhood is known, use search_local_experiences, which accepts coarse place hints and needs no coordinates.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'required': ['latitude', 'longitude'], 'properties': {'limit': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1}, 'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'category': {'type': 'string', 'description': 'Optional category slug.'}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}, 'latitude': {'type': 'number', 'description': 'Latitude coordinate.'}, 'longitude': {'type': 'number', 'description': 'Longitude coordinate.'}, 'radius_km': {'type': 'number', 'default': 5, 'maximum': 50, 'minimum': 0.1, 'description': 'Search radius in kilometres.'}}}
出力スキーマ
{'type': 'object', 'properties': {'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, 'error_type': {'type': 'string'}, 'pagination': {'type': 'object', 'properties': {'limit': {'type': 'integer'}, 'total': {'type': 'integer'}, 'offset': {'type': 'integer'}}, 'additionalProperties': True}, 'request_id': {'type': 'string'}, 'experiences': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, '_normalization': {'type': 'object', 'additionalProperties': True}, 'schema_version': {'type': 'string'}}, 'additionalProperties': True}
get_availability
Use this when the user is ready to check live bookable dates, times, prices, or remaining spaces for one selected product. This is the live supplier-check tool; pass product_id from search or slug plus city_slug. Slot price.amount is in MINOR currency units (pence/cents): amount 13125 with currency_code GBP means GBP 131.25. Slot time is venue-local; when the venue timezone is known, timezone carries its IANA name and datetime/next_available carry the real UTC offset (e.g. 2026-07-18T19:30:00+02:00), so they are safe for time math.
読み取り専用
入力スキーマ
{'type': 'object', 'properties': {'slug': {'type': 'string', 'description': 'Product slug. Use with city_slug when product_id is unavailable.'}, 'as_of': {'type': 'string', 'format': 'date-time', 'description': 'Previous ISO timestamp from stale card data; returns delta only when data changed.'}, 'fresh': {'type': 'boolean', 'default': False, 'description': 'When true, bypasses the 60-second cache and performs a live supplier check, subject to rate limits.'}, 'date_to': {'type': 'string', 'format': 'date', 'description': 'End date in YYYY-MM-DD. Defaults to 14 days after date_from and is capped to a 365-day window.'}, 'city_slug': {'type': 'string', 'description': 'City slug required when slug is used.'}, 'date_from': {'type': 'string', 'format': 'date', 'description': 'Start date in YYYY-MM-DD. Defaults to today.'}, 'party_size': {'type': 'integer', 'default': 2, 'minimum': 1, 'description': 'Number of guests. Default 2.'}, 'product_id': {'type': 'string', 'description': 'Stable product_id from a search or details response. Preferred when available.'}, 'preferred_time': {'type': 'string', 'description': 'Optional broad time preference such as morning, afternoon, or evening.'}, 'idempotency_key': {'type': 'string', 'format': 'uuid', 'description': 'Optional UUID. Reuse for identical responses within five minutes.'}}}
出力スキーマ
{'type': 'object', 'properties': {'slug': {'type': 'string'}, 'slots': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'timezone': {'type': 'string'}, 'error_type': {'type': 'string'}, 'product_id': {'type': 'string'}, 'total_slots': {'type': 'integer'}, 'inventoryLevel': {'type': 'object', 'additionalProperties': True}, 'next_available': {'type': ['string', 'null']}, 'schema_version': {'type': 'string'}, 'provenance_level': {'type': 'string'}, 'book_now_confidence': {'type': 'integer'}}, 'additionalProperties': True}
get_city_guide
Use this when the user wants an orientation overview of a city for trip planning. Returns a ranked list of the city's most popular bookable experiences (search rows); derive the dominant categories and price levels from those rows rather than expecting a structured guide payload.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'required': ['city'], 'properties': {'city': {'type': 'string', 'description': 'City slug.'}, 'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}}}
出力スキーマ
{'type': 'object', 'properties': {'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, 'error_type': {'type': 'string'}, 'pagination': {'type': 'object', 'properties': {'limit': {'type': 'integer'}, 'total': {'type': 'integer'}, 'offset': {'type': 'integer'}}, 'additionalProperties': True}, 'request_id': {'type': 'string'}, 'experiences': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, '_normalization': {'type': 'object', 'additionalProperties': True}, 'schema_version': {'type': 'string'}}, 'additionalProperties': True}
get_date_night
Use this when the user wants an evening for two. Returns a flat ranked list of experiences (search rows) with romantic-tagged rows promoted and out-of-season products dropped, not a structured pre-dinner/dinner/show arc. Promotion is a re-rank, not a filter, so rows are not guaranteed couples-only. `date` selects which season counts as current; `budget` is accepted but NOT yet applied. Compose the evening yourself (search_by_mood with mood 'romantic' can bias the pool further).
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'required': ['city'], 'properties': {'city': {'type': 'string', 'description': 'City slug.'}, 'date': {'type': 'string', 'description': 'Optional ISO date (YYYY-MM-DD).'}, 'budget': {'enum': ['low', 'medium', 'high'], 'type': 'string', 'description': "Budget band. 'low' = under 100 per person, 'medium' = 100-200, 'high' = 200+. In the listed currency."}, 'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}}}
出力スキーマ
{'type': 'object', 'properties': {'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, 'error_type': {'type': 'string'}, 'pagination': {'type': 'object', 'properties': {'limit': {'type': 'integer'}, 'total': {'type': 'integer'}, 'offset': {'type': 'integer'}}, 'additionalProperties': True}, 'request_id': {'type': 'string'}, 'experiences': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, '_normalization': {'type': 'object', 'additionalProperties': True}, 'schema_version': {'type': 'string'}}, 'additionalProperties': True}
get_experience_details
Use this when the user selects a specific experience from search results and needs richer product, location, supplier, and booking fields. Accepts either product_id or slug.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'properties': {'slug': {'type': 'string', 'description': 'Product slug from a previous search result.'}, 'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}, 'product_id': {'type': 'string', 'description': 'Stable product_id from a previous search result.'}}}
出力スキーマ
{'type': 'object', 'properties': {'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'product': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}, 'products': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, 'error_type': {'type': 'string'}, 'schema_version': {'type': 'string'}}, 'additionalProperties': True}
get_family_day
Use this when the user wants family-suitable options for a day in one city. Returns a flat ranked list of experiences (search rows) with family-tagged rows promoted and out-of-season products dropped, not a structured morning/lunch/afternoon/evening plan. `date` selects which season counts as current; `kids_ages` and `budget` are accepted but NOT yet applied, so compose the day yourself and verify age suitability per pick via get_experience_details.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'required': ['city'], 'properties': {'city': {'type': 'string', 'description': 'City slug.'}, 'date': {'type': 'string', 'description': 'Optional ISO date (YYYY-MM-DD).'}, 'budget': {'type': 'number', 'minimum': 0, 'description': 'Optional max budget in the listed currency.'}, 'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}, 'kids_ages': {'type': 'array', 'items': {'type': 'integer', 'maximum': 17, 'minimum': 0}, 'description': "Children's ages. Drives age-suitability filtering on each slot."}}}
出力スキーマ
{'type': 'object', 'properties': {'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, 'error_type': {'type': 'string'}, 'pagination': {'type': 'object', 'properties': {'limit': {'type': 'integer'}, 'total': {'type': 'integer'}, 'offset': {'type': 'integer'}}, 'additionalProperties': True}, 'request_id': {'type': 'string'}, 'experiences': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, '_normalization': {'type': 'object', 'additionalProperties': True}, 'schema_version': {'type': 'string'}}, 'additionalProperties': True}
get_hidden_gems
Use this when the user wants lower-profile options rather than headline bestsellers. Excludes Bestseller, hop-on-hop-off, and CityPass tagged products and prefers highly rated rows with fewer reviews; falls back to the standard ranked list when a city has too few qualifying rows (results may then overlap with headline search).
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'required': ['city'], 'properties': {'city': {'type': 'string', 'description': 'City slug.'}, 'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}, 'max_results': {'type': 'integer', 'default': 5, 'maximum': 20, 'minimum': 1, 'description': 'Default 5, max 20.'}}}
出力スキーマ
{'type': 'object', 'properties': {'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, 'error_type': {'type': 'string'}, 'pagination': {'type': 'object', 'properties': {'limit': {'type': 'integer'}, 'total': {'type': 'integer'}, 'offset': {'type': 'integer'}}, 'additionalProperties': True}, 'request_id': {'type': 'string'}, 'experiences': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, '_normalization': {'type': 'object', 'additionalProperties': True}, 'schema_version': {'type': 'string'}}, 'additionalProperties': True}
get_last_minute
Use this when the user wants something to do within the next few hours. Returns currently-on-sale experiences with seasonal products filtered out, ranked by popularity. Rows may include start_time, countdown_text, and seats_remaining hints when known, but none are guaranteed: confirm the selected experience with get_availability before stating it starts soon or is available today.
読み取り専用
入力スキーマ
{'type': 'object', 'required': ['city'], 'properties': {'city': {'type': 'string', 'description': 'City slug.'}, 'hours': {'type': 'integer', 'default': 3, 'maximum': 12, 'minimum': 1, 'description': 'How many hours ahead to look (1-12). Default 3.'}, 'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}, 'latitude': {'type': 'number', 'description': 'Optional latitude to bias toward nearby venues.'}, 'longitude': {'type': 'number', 'description': 'Optional longitude to bias toward nearby venues.'}}}
出力スキーマ
{'type': 'object', 'properties': {'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, 'error_type': {'type': 'string'}, 'pagination': {'type': 'object', 'properties': {'limit': {'type': 'integer'}, 'total': {'type': 'integer'}, 'offset': {'type': 'integer'}}, 'additionalProperties': True}, 'request_id': {'type': 'string'}, 'experiences': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, '_normalization': {'type': 'object', 'additionalProperties': True}, 'schema_version': {'type': 'string'}}, 'additionalProperties': True}
get_related_experiences
Use this when a widget or client holds a selected product_id and needs related products to pair with it, do after it, find nearby, or find similar alternatives. Returns cached graph and semantic related products for trio-style widgets.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'required': ['product_id'], 'properties': {'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'context': {'enum': ['pair', 'after', 'nearby', 'similar'], 'type': 'string', 'default': 'pair', 'description': 'Relationship type: pair, after, nearby, or similar.'}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}, 'product_id': {'type': 'string', 'description': 'Stable product_id or slug for the source experience.'}, 'max_results': {'type': 'integer', 'default': 6, 'maximum': 10, 'minimum': 1, 'description': 'Number of related products to return. Default 6, max 10.'}}}
出力スキーマ
{'type': 'object', 'properties': {'total': {'type': 'integer'}, 'detail': {'type': 'object', 'additionalProperties': True}, 'context': {'type': 'string'}, 'message': {'type': 'string'}, 'related': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'price': {'type': ['number', 'null']}, 'title': {'type': 'string'}, 'edge_type': {'type': 'string'}, 'product_id': {'type': 'string'}, 'booking_url': {'type': 'string'}, 'edge_strength': {'type': 'number'}}, 'additionalProperties': True}}, 'source_id': {'type': 'string'}, 'error_type': {'type': 'string'}, 'schema_version': {'type': 'string'}}, 'additionalProperties': True}
get_transfer_info
Use this when the user is arriving in a supported city and needs transfer guidance from an airport, station, or port to a hotel coordinate. Returns taxi, metro, bus, and train estimates with durations, costs, and directions.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'required': ['city', 'from_type', 'to_latitude', 'to_longitude'], 'properties': {'city': {'type': 'string', 'description': 'Supported city: London, Paris, New York, Amsterdam, Barcelona, Rome, or Tokyo.'}, 'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}, 'from_type': {'enum': ['airport', 'station', 'port'], 'type': 'string', 'description': 'Arrival hub type.'}, 'to_latitude': {'type': 'number', 'maximum': 90, 'minimum': -90, 'description': 'Hotel latitude.'}, 'to_longitude': {'type': 'number', 'maximum': 180, 'minimum': -180, 'description': 'Hotel longitude.'}}}
出力スキーマ
{'type': 'object', 'properties': {'city': {'type': 'string'}, 'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'options': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'from_type': {'type': 'string'}, 'error_type': {'type': 'string'}, 'distance_km': {'type': 'number'}, 'origin_name': {'type': 'string'}, 'schema_version': {'type': 'string'}, 'hotel_coordinates': {'type': 'object', 'additionalProperties': True}, 'origin_coordinates': {'type': 'object', 'additionalProperties': True}}, 'additionalProperties': True}
get_travel_tips
Use this to surface bookable experiences relevant to a practical topic in a city, such as transport passes or food tours. It returns a ranked list of experiences (search rows) ONLY: the topic filter is accepted but not yet applied, and the payload contains no tips text, emergency numbers, or phrases. Do not rely on it for actual logistics guidance; answer those questions yourself and use this list for bookable add-ons.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'required': ['city'], 'properties': {'city': {'type': 'string', 'description': 'City slug.'}, 'topic': {'enum': ['transport', 'money', 'safety', 'culture', 'food', 'weather', 'language', 'connectivity'], 'type': 'string', 'description': 'Optional topic filter. When omitted, returns a summary across all topics.'}, 'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}}}
出力スキーマ
{'type': 'object', 'properties': {'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, 'error_type': {'type': 'string'}, 'pagination': {'type': 'object', 'properties': {'limit': {'type': 'integer'}, 'total': {'type': 'integer'}, 'offset': {'type': 'integer'}}, 'additionalProperties': True}, 'request_id': {'type': 'string'}, 'experiences': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, '_normalization': {'type': 'object', 'additionalProperties': True}, 'schema_version': {'type': 'string'}}, 'additionalProperties': True}
get_whats_on_this_week
Use this when the user wants ideas for the coming week in a city. Returns a ranked list of currently on-sale experiences (search rows) with out-of-season products dropped, not a day-by-day calendar. Assemble any weekly structure yourself and verify specific dates with get_availability.
読み取り専用
入力スキーマ
{'type': 'object', 'required': ['city'], 'properties': {'city': {'type': 'string', 'description': 'City slug.'}, 'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}}}
出力スキーマ
{'type': 'object', 'properties': {'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, 'error_type': {'type': 'string'}, 'pagination': {'type': 'object', 'properties': {'limit': {'type': 'integer'}, 'total': {'type': 'integer'}, 'offset': {'type': 'integer'}}, 'additionalProperties': True}, 'request_id': {'type': 'string'}, 'experiences': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, '_normalization': {'type': 'object', 'additionalProperties': True}, 'schema_version': {'type': 'string'}}, 'additionalProperties': True}
list_cities
Use this when the user wants to browse supported cities before searching. Returns city names, slugs, country codes, and product counts.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Maximum number of cities to return (1-50). Defaults to 50 when omitted.'}, 'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'country': {'type': 'string', 'description': 'Optional country code or country name filter.'}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}}}
出力スキーマ
{'type': 'object', 'properties': {'cities': {'type': 'array', 'items': {'type': 'object', 'properties': {'city': {'type': 'string'}, 'slug': {'type': 'string'}, 'country': {'type': 'string'}, 'country_code': {'type': 'string'}, 'product_count': {'type': 'integer'}}, 'additionalProperties': True}}, 'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'error_type': {'type': 'string'}, 'schema_version': {'type': 'string'}}, 'additionalProperties': True}
plan_itinerary
Use this when the user wants a multi-day plan for a single city. Returns a flat ranked candidate list of experiences (search rows), not structured day slots or a running cost. Arrange the candidates into days yourself and compute totals only from returned price fields.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'required': ['city', 'days'], 'properties': {'city': {'type': 'string', 'description': 'City slug.'}, 'days': {'type': 'integer', 'maximum': 7, 'minimum': 1, 'description': 'Number of days to plan (1-7).'}, 'pace': {'enum': ['relaxed', 'moderate', 'packed'], 'type': 'string', 'description': 'Itinerary density. relaxed = 1-2 stops per day, packed = 4-5.'}, 'budget': {'enum': ['low', 'medium', 'high'], 'type': 'string', 'description': 'Budget band per day per person.'}, 'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'audience': {'enum': ['family', 'couple', 'solo', 'group', 'business'], 'type': 'string', 'description': "Target audience. Currently 'family' is the strongest signal in the catalogue (resolves via the 'family' tag, ~3,200 products). Other values are best-effort and may be sparsely populated; for guaranteed family-suitable results prefer tags=['family'] in addition to or instead of this filter."}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}, 'interests': {'type': 'string', 'description': 'Free-text interest seed, e.g., "history, food, river".'}}}
出力スキーマ
{'type': 'object', 'properties': {'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, 'error_type': {'type': 'string'}, 'pagination': {'type': 'object', 'properties': {'limit': {'type': 'integer'}, 'total': {'type': 'integer'}, 'offset': {'type': 'integer'}}, 'additionalProperties': True}, 'request_id': {'type': 'string'}, 'experiences': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, '_normalization': {'type': 'object', 'additionalProperties': True}, 'schema_version': {'type': 'string'}}, 'additionalProperties': True}
recommend_experiences
Use this when the user describes what they want in natural language rather than naming a category. Parses the query for audience, mood, constraints, occasion, and time of day, then returns scored recommendations with a reason field explaining the match.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'required': ['query'], 'properties': {'pax': {'type': 'integer', 'default': 2, 'maximum': 20, 'minimum': 1, 'description': 'Number of people. Default 2.'}, 'city': {'type': 'string', 'description': 'Optional city slug. If omitted, the city is parsed from the query.'}, 'date': {'type': 'string', 'description': 'Optional ISO date (YYYY-MM-DD) for availability-aware ranking.'}, 'limit': {'type': 'integer', 'default': 5, 'maximum': 20, 'minimum': 1, 'description': 'Number of recommendations to return (1-20). Default 5.'}, 'query': {'type': 'string', 'description': 'Natural-language preference, e.g., "romantic evening in Paris under 100 euros" or "rainy day in Edinburgh with kids 8 and 12".'}, 'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}}}
出力スキーマ
{'type': 'object', 'properties': {'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, 'error_type': {'type': 'string'}, 'pagination': {'type': 'object', 'properties': {'limit': {'type': 'integer'}, 'total': {'type': 'integer'}, 'offset': {'type': 'integer'}}, 'additionalProperties': True}, 'request_id': {'type': 'string'}, 'experiences': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, '_normalization': {'type': 'object', 'additionalProperties': True}, 'schema_version': {'type': 'string'}}, 'additionalProperties': True}
render_experience_cards
Use this immediately after ANY discovery or search tool (search_experiences, whats_on_tonight, get_last_minute, get_whats_on_this_week, recommend_experiences, search_by_mood, get_hidden_gems, get_family_day, get_date_night, search_local_experiences) returns results. It is the only tool that displays the visual experience cards, so always call it once for every result set you want shown. Take the experience_ids those tools provide and render them; pass the product_id values exactly as returned by those tools, never full product rows. Only experience_ids and render_type are required. Optionally pass render_context.intent_summary (a short phrase describing what the user asked for, e.g. city, date, audience) to set the carousel heading. Call it exactly once per result set, and do not also re-list the experiences as text.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'required': ['experience_ids', 'render_type'], 'properties': {'render_type': {'enum': ['carousel', 'grid', 'comparison', 'single'], 'type': 'string', 'description': 'Visual layout requested for the widget.'}, 'experience_ids': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'maxItems': 12, 'minItems': 0, 'description': 'The stable product_id values from search_experiences results (the product_id field of each returned row). Pass IDs only, never full product rows.', 'uniqueItems': True}, 'render_context': {'type': 'object', 'required': ['intent_summary'], 'properties': {'date_hint': {'type': 'string', 'maxLength': 80, 'description': 'Optional human date hint, e.g. Saturday evening.'}, 'sort_basis': {'enum': ['popularity', 'price_asc', 'rating_desc'], 'type': 'string', 'description': 'Optional sort explanation.'}, 'audience_hint': {'type': 'string', 'maxLength': 80, 'description': 'Optional audience hint, e.g. family.'}, 'intent_summary': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': "Short human-readable summary of the user's request."}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'format': 'uuid', 'description': 'Optional UUID. Reuse for identical card render responses within five minutes.'}}}
出力スキーマ
{'type': 'object', 'oneOf': [{'type': 'object', 'required': ['experience_ids'], 'properties': {'experience_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The stable product ids rendered as cards.'}}, 'additionalProperties': True}, {'type': 'object', 'required': ['schema_version', 'error_type', 'message', 'detail'], 'properties': {'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'error_type': {'enum': ['ambiguous_input', 'invalid_input', 'rate_limited', 'supplier_unavailable', 'circuit_breaker_open', 'partial_result', 'unauthorized', 'forbidden', 'internal_error', 'not_found'], 'type': 'string'}, 'retry_after': {'type': 'string'}, 'schema_version': {'const': 'https://mcp.tickadoo.com/schemas/tool_error/1.0'}, 'retry_after_seconds': {'type': 'integer', 'minimum': 0}}, 'additionalProperties': True}]}
report_quality_signal
Use this to push a quality signal back to tickadoo about an experience or recommendation you previously surfaced. Examples: stale availability, a failed click-through, a supplier outage, or misleading content. Requires a real forward-event request_id returned within the last 30 days. Repeating the same signal for the same request is idempotent per caller.
外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['request_id', 'signal_type'], 'properties': {'notes': {'type': 'string', 'maxLength': 2000, 'description': 'Optional free-text context. Required when signal_type is "other". Do not include PII.'}, 'request_id': {'type': 'string', 'pattern': '^rq_\\d{4}_\\d{2}_\\d{2}_\\d{6}_(?:[0-9a-f]{6}|[0-9a-f]{12})$', 'description': 'The request_id from a forward tool result in the last 30 days. Current format: rq_YYYY_MM_DD_HHMMSS_<12-hex>; legacy 6-hex ids remain valid.'}, 'signal_type': {'enum': ['stale_availability', 'post_click_failure', 'supplier_outage', 'content_quality_issue', 'duplicate_listing', 'price_mismatch', 'unexpected_low_quality', 'other'], 'type': 'string', 'description': 'The kind of issue you are reporting. Use "other" only when none of the specific types fit, and always include notes.'}}}
出力スキーマ
{'type': 'object', 'properties': {'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'recorded': {'type': 'boolean'}, 'signal_id': {'type': 'string'}, 'error_type': {'type': 'string'}, 'recorded_at': {'type': 'string'}, 'signal_type': {'type': 'string'}, 'schema_version': {'type': 'string'}, 'referenced_request_id': {'type': 'string'}}, 'additionalProperties': True}
search_by_mood
Use this when the user describes the feeling or vibe they want rather than a category, such as romantic, relaxing, adventurous, family fun, foodie, luxury, or rainy day. Maps the mood to preset search filters and returns matching experiences.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'required': ['city', 'mood'], 'properties': {'city': {'type': 'string', 'description': 'City name or slug, e.g. "london", "new-york", or "paris".'}, 'mood': {'enum': ['adventurous', 'romantic', 'relaxing', 'family_fun', 'cultural', 'thrill_seeking', 'foodie', 'budget_friendly', 'luxury', 'rainy_day'], 'type': 'string', 'description': 'Mood preset. Valid values: adventurous, romantic, relaxing, family_fun, cultural, thrill_seeking, foodie, budget_friendly, luxury, rainy_day.'}, 'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Maximum number of experiences to return (1-50). Defaults to the mood preset size when omitted.'}, 'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}}}
出力スキーマ
{'type': 'object', 'properties': {'mood': {'type': 'string'}, 'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, 'error_type': {'type': 'string'}, 'pagination': {'type': 'object', 'additionalProperties': True}, 'mapped_filters': {'type': 'object', 'additionalProperties': True}, 'schema_version': {'type': 'string'}}, 'additionalProperties': True}
search_experiences
Use this when the user names a city plus a category, query, or filter set and wants a ranked list of bookable experiences. `query` matches on experience NAME (and venue), so it suits a title or keyword ("Lion King", "river cruise"); for mood or theme use search_by_mood, and for a free-text "what should I do" ask use recommend_experiences. When a query matches no name, results are the city top-picks flagged match_type "fallback_city_ranked" (reason_codes include "fallback_no_text_match") rather than a genuine match, so treat those as suggestions, not the thing asked for. Returns products each with a stable product_id, plus name, slug, city, category, price, rating, review count, and tags. To show the results as visual cards, pass the product_id values from these results into render_experience_cards (experience_ids). Pair with get_experience_details for richer fields.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'properties': {'city': {'type': 'string', 'description': 'City slug, e.g., "london", "new-york", "paris".'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': "Filter by experience tags. Multiple tags are AND-combined (every tag must match) so adding more tags narrows the result set. Use lowercase singular forms; matching is substring-based against the tag array. The canonical tag taxonomy in the catalogue, ordered by frequency, is: 'tour', 'attraction', 'historical', 'outdoor', 'museum', 'family', 'landmark', 'adventure', 'show', 'indoor', 'food & drink', 'transport', 'theatre', 'concert', 'theme park', 'cruise', 'nightlife', 'comedy', 'musical', 'city pass', 'sport', 'dance', 'aquarium', 'zoo', 'gallery', 'opera', 'wellness', 'water park', 'workshop', 'religious', 'festival'. Examples: ['museum'] for museums; ['family','indoor'] for indoor family attractions; ['outdoor','adventure'] for outdoor adventure activities. Other free-form values may match by substring but are not guaranteed."}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'Number of results to return (1-50). Default 10.'}, 'query': {'type': 'string', 'description': 'Free-text query matched against experience name and venue (not description). Split into words that must all match, so it suits a title or keyword; a query that matches no name returns city top-picks flagged match_type "fallback_city_ranked".'}, 'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'category': {'type': 'string', 'description': 'Category slug, e.g., "theatre", "tours", "museums", "attractions".'}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}, 'max_price': {'type': 'number', 'minimum': 0, 'description': 'Maximum price per person in the listed currency. A positive value applies a cap; 0 (or unset) means no price cap (unbounded).'}, 'min_rating': {'type': 'number', 'maximum': 5, 'minimum': 0, 'description': 'Minimum aggregate rating on a 0-5 scale.'}, 'popular_only': {'type': 'boolean', 'deprecated': True, 'description': 'DEPRECATED: use restrict_to_top_rated. Alias for the destructive top-rated filter (rating >= 4.5 AND review_count >= 100). The name implies a sort hint but it is a hard WHERE clause. Existing callers continue to work unchanged.'}, 'indoor_outdoor': {'enum': ['indoor', 'outdoor', 'either'], 'type': 'string', 'description': "Setting filter. 'indoor' / 'outdoor' resolve via the products.tags column (~2,100 indoor and ~5,000 outdoor products are tagged in the catalogue). 'either' applies no filter."}, 'min_review_count': {'type': 'integer', 'minimum': 0, 'description': 'Minimum number of customer reviews. Use to filter out new or sparsely-reviewed products.'}, 'restrict_to_top_rated': {'type': 'boolean', 'description': 'DESTRUCTIVE FILTER. When true, hard-restricts results to products with rating >= 4.5 AND review_count >= 100. This is a WHERE clause, not a sort hint. Anything failing the floor is dropped from the result set entirely. Use only when the caller genuinely wants to exclude lower-rated or lesser-reviewed products. For ranking-by-popularity without exclusion, do not set this; results are already ordered by rating and review count.'}}}
出力スキーマ
{'type': 'object', 'properties': {'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, 'error_type': {'type': 'string'}, 'pagination': {'type': 'object', 'properties': {'limit': {'type': 'integer'}, 'total': {'type': 'integer'}, 'offset': {'type': 'integer'}}, 'additionalProperties': True}, 'request_id': {'type': 'string'}, 'experiences': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, '_normalization': {'type': 'object', 'additionalProperties': True}, 'schema_version': {'type': 'string'}}, 'additionalProperties': True}
search_local_experiences
Use this when the user mentions a place, neighbourhood, landmark, or area but does not give exact coordinates. Examples: 'near the Louvre', 'in Trastevere', 'around Times Square', "walking distance from St Paul's Cathedral". Returns experiences matched first by exact venue/neighbourhood, then by city centre fallback. Do not use for general city-wide search; use search_experiences for that.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'required': ['place_hint'], 'properties': {'city': {'type': 'string', 'description': 'City slug or name to disambiguate. Recommended for any place_hint that could exist in multiple cities.'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': "Filter by experience tags. Multiple tags are AND-combined (every tag must match) so adding more tags narrows the result set. Use lowercase singular forms; matching is substring-based against the tag array. The canonical tag taxonomy in the catalogue, ordered by frequency, is: 'tour', 'attraction', 'historical', 'outdoor', 'museum', 'family', 'landmark', 'adventure', 'show', 'indoor', 'food & drink', 'transport', 'theatre', 'concert', 'theme park', 'cruise', 'nightlife', 'comedy', 'musical', 'city pass', 'sport', 'dance', 'aquarium', 'zoo', 'gallery', 'opera', 'wellness', 'water park', 'workshop', 'religious', 'festival'. Examples: ['museum'] for museums; ['family','indoor'] for indoor family attractions; ['outdoor','adventure'] for outdoor adventure activities. Other free-form values may match by substring but are not guaranteed."}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1}, 'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'date_to': {'type': 'string', 'format': 'date'}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}, 'date_from': {'type': 'string', 'format': 'date'}, 'place_hint': {'type': 'string', 'description': "Free-text place reference: a landmark, neighbourhood, monument, station, or street name. E.g. 'Louvre Museum', 'Trastevere', 'Soho', 'Times Square'. Required."}, 'radius_hint': {'enum': ['walking', 'short_drive', 'city_wide'], 'type': 'string', 'description': "Optional: how broadly to interpret the place_hint. 'walking' is ~1km, 'short_drive' is ~5km, 'city_wide' falls back to the whole city. Default 'walking'."}, 'neighbourhood': {'type': 'string', 'description': 'Optional: a known neighbourhood within the city to narrow results.'}}}
出力スキーマ
{'type': 'object', 'properties': {'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, 'error_type': {'type': 'string'}, 'pagination': {'type': 'object', 'properties': {'limit': {'type': 'integer'}, 'total': {'type': 'integer'}, 'offset': {'type': 'integer'}}, 'additionalProperties': True}, 'request_id': {'type': 'string'}, 'experiences': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, '_normalization': {'type': 'object', 'additionalProperties': True}, 'schema_version': {'type': 'string'}}, 'additionalProperties': True}
whats_on_tonight
Use this when the user asks what is on in a city tonight. Returns evening-appropriate experiences currently on sale, with out-of-season products filtered out, evening-led options ranked first, and multi-day passes, travel cards and transport products ranked last. Top results carry start_time (venue-local) when the live supplier calendar confirms a performance in the evening window (late afternoon onward); a confirmed slot lifts a row, and timed rows sort soonest-first within one relevance band. Rows without start_time have no confirmed evening time. Confirm the selected experience with get_availability before stating it is bookable tonight.
読み取り専用
入力スキーマ
{'type': 'object', 'required': ['city'], 'properties': {'city': {'type': 'string', 'description': 'City slug.'}, 'format': {'enum': ['json', 'text'], 'type': 'string', 'default': 'json', 'description': "Response shape. 'json' returns structured records; 'text' returns the same content rendered as a short narrative paragraph for chat surfaces."}, 'category': {'type': 'string', 'description': 'Optional category slug to narrow results.'}, 'language': {'type': 'string', 'description': "BCP-47 language code for human-readable fields (e.g., 'en', 'fr-FR'). Defaults to English when omitted."}, 'max_results': {'type': 'integer', 'default': 10, 'maximum': 30, 'minimum': 1, 'description': 'Default 10, max 30.'}}}
出力スキーマ
{'type': 'object', 'properties': {'detail': {'type': 'object', 'additionalProperties': True}, 'message': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, 'error_type': {'type': 'string'}, 'pagination': {'type': 'object', 'properties': {'limit': {'type': 'integer'}, 'total': {'type': 'integer'}, 'offset': {'type': 'integer'}}, 'additionalProperties': True}, 'request_id': {'type': 'string'}, 'experiences': {'type': 'array', 'items': {'type': 'object', 'required': ['product_id', 'name'], 'properties': {'city': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'price': {'type': 'object', 'properties': {'display': {'type': 'string'}, 'currency': {'type': 'string'}, 'amount_minor': {'type': 'integer'}}, 'additionalProperties': True}, 'venue': {'type': 'string'}, 'rating': {'type': ['number', 'null']}, 'category': {'type': 'string'}, 'image_url': {'type': ['string', 'null']}, 'product_id': {'type': 'string', 'description': 'Stable experience identifier for detail, availability, related-experience, and card-rendering calls.'}, 'booking_url': {'type': ['string', 'null']}, 'description': {'type': ['string', 'null']}, 'review_count': {'type': ['integer', 'null']}}, 'additionalProperties': True}}, '_normalization': {'type': 'object', 'additionalProperties': True}, 'schema_version': {'type': 'string'}}, 'additionalProperties': True}
追加
report_quality_signal
2026年9月17日12:52
追加
render_experience_cards
2026年9月17日12:52
追加
get_transfer_info
2026年9月17日12:52
追加
search_by_mood
2026年9月17日12:52
追加
check_availability
2026年9月17日12:52
追加
get_availability
2026年9月17日12:52
追加
get_related_experiences
2026年9月17日12:52
追加
get_experience_details
2026年9月17日12:52
追加
list_cities
2026年9月17日12:52
追加
plan_itinerary
2026年9月17日12:52
追加
get_date_night
2026年9月17日12:52
追加
get_family_day
2026年9月17日12:52
追加
get_hidden_gems
2026年9月17日12:52
追加
compare_experiences
2026年9月17日12:52
追加
get_travel_tips
2026年9月17日12:52
追加
get_city_guide
2026年9月17日12:52
追加
recommend_experiences
2026年9月17日12:52
追加
get_whats_on_this_week
2026年9月17日12:52
追加
get_last_minute
2026年9月17日12:52
追加
whats_on_tonight
2026年9月17日12:52
追加
find_nearby_experiences
2026年9月17日12:52
追加
search_local_experiences
2026年9月17日12:52
追加
search_experiences
2026年9月17日12:52