Anonymous, read-only cross-venue discovery of partner-approved venues, cities, destinations.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Find what is on in a named destination: events from today onwards. A recurring event's dates are its series span, so read its recurrence. Results carry booking_url, the partner's booking page when present, and canonical_url, the destination's page.
Destination name or slug, e.g. 'Los Cabos'; list_cities names them.
Area name or slug; destination_overview lists them.
Maximum number of items to return.
Words matched in any order against event names and descriptions.
Number of items to skip; pass `next_cursor` from the previous page.
ISO date; omit to_date for everything upcoming (recommended for "coming up").
Category name or slug; destination_overview lists them.
ISO date; defaults to today.
Find what is on in a named destination: events from today onwards. A recurring event's dates are its series span, so read its recurrence. Results carry booking_url, the partner's booking page when present, and canonical_url, the destination's page.
| Argument | Type | Description |
|---|---|---|
| area | string | null | Area name or slug; destination_overview lists them. |
| limit | integer | Maximum number of items to return. |
| query | string | null | Words matched in any order against event names and descriptions. |
| cursor | integer | Number of items to skip; pass `next_cursor` from the previous page. |
| to_date | string | null | ISO date; omit to_date for everything upcoming (recommended for "coming up"). |
| category | string | null | Category name or slug; destination_overview lists them. |
| from_date | string | null | ISO date; defaults to today. |
| destination* | string | Destination name or slug, e.g. 'Los Cabos'; list_cities names them. |
{
"type": "object",
"required": [
"destination"
],
"properties": {
"area": {
"type": [
"string",
"null"
],
"default": null,
"description": "Area name or slug; destination_overview lists them."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum number of items to return."
},
"query": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 256,
"description": "Words matched in any order against event names and descriptions."
},
"cursor": {
"type": "integer",
"default": 0,
"maximum": 10000,
"minimum": 0,
"description": "Number of items to skip; pass `next_cursor` from the previous page."
},
"to_date": {
"type": [
"string",
"null"
],
"format": "date",
"default": null,
"description": "ISO date; omit to_date for everything upcoming (recommended for \"coming up\")."
},
"category": {
"type": [
"string",
"null"
],
"default": null,
"description": "Category name or slug; destination_overview lists them."
},
"from_date": {
"type": [
"string",
"null"
],
"format": "date",
"default": null,
"description": "ISO date; defaults to today."
},
"destination": {
"type": "string",
"maxLength": 256,
"description": "Destination name or slug, e.g. 'Los Cabos'; list_cities names them."
}
}
}Answer a question about a named destination from its published FAQs; omit query to read them all.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of items to return. |
| query | string | null | Text to match in question/answer. |
| cursor | integer | Number of items to skip; pass `next_cursor` from the previous page. |
| destination* | string | Destination name or slug, e.g. 'Los Cabos'; list_cities names them. |
{
"type": "object",
"required": [
"destination"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum number of items to return."
},
"query": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 256,
"description": "Text to match in question/answer."
},
"cursor": {
"type": "integer",
"default": 0,
"maximum": 10000,
"minimum": 0,
"description": "Number of items to skip; pass `next_cursor` from the previous page."
},
"destination": {
"type": "string",
"maxLength": 256,
"description": "Destination name or slug, e.g. 'Los Cabos'; list_cities names them."
}
}
}Read a named destination's travel guides: weather, getting here, transport, entry requirements, safety and more. Pass topic (from destination_overview guide_topics) to read one subject; page with cursor.
| Argument | Type | Description |
|---|---|---|
| limit | integer | null | Entries per page; omit for the server's short default. |
| query | string | null | Text to match in guide title/body. |
| topic | any | Guide topic; omit for all. |
| cursor | integer | Number of items to skip; pass `next_cursor` from the previous page. |
| destination* | string | Destination name or slug, e.g. 'Los Cabos'; list_cities names them. |
{
"type": "object",
"required": [
"destination"
],
"properties": {
"limit": {
"type": [
"integer",
"null"
],
"default": null,
"maximum": 50,
"minimum": 1,
"description": "Entries per page; omit for the server's short default."
},
"query": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 256,
"description": "Text to match in guide title/body."
},
"topic": {
"anyOf": [
{
"enum": [
"weather",
"getting_here",
"transportation",
"entry_requirements",
"emergencies",
"safety",
"culture",
"packing",
"sustainability"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Guide topic; omit for all."
},
"cursor": {
"type": "integer",
"default": 0,
"maximum": 10000,
"minimum": 0,
"description": "Number of items to skip; pass `next_cursor` from the previous page."
},
"destination": {
"type": "string",
"maxLength": 256,
"description": "Destination name or slug, e.g. 'Los Cabos'; list_cities names them."
}
}
}Find places to stay, eat and visit in a named destination by text, category, area or tags. Every query word matches, in any order; each business appears once (also_listed_as) with a snippet and map_url, so call it again with listing_id for the full text. An unknown filter value's reason lists the valid ones.
| Argument | Type | Description |
|---|---|---|
| area | string | null | Area name or slug; destination_overview lists them. |
| tags | array | Tag slugs; only listings carrying ALL are returned. |
| limit | integer | Maximum number of items to return. |
| query | string | null | Words matched in any order against listing names, descriptions, tags and categories. |
| cursor | integer | Number of items to skip; pass `next_cursor` from the previous page. |
| category | string | null | Category name or slug; destination_overview lists them. |
| language | string | null | Language code (e.g. 'en', 'es'); defaults to the destination's. |
| radius_km | number | null | Search radius in km around near_listing_id; a larger value is reduced to the server maximum. |
Find a named destination's current deals and packages, with the partner booking link. Only offers valid on valid_on (today by default) are returned. Results carry booking_url, the partner's booking page when present, and canonical_url, the destination's page.
| Argument | Type | Description |
|---|---|---|
| area | string | null | Area name or slug; destination_overview lists them. |
| limit | integer | Maximum number of items to return. |
| cursor | integer | Number of items to skip; pass `next_cursor` from the previous page. |
| category | string | null | Category name or slug; destination_overview lists them. |
| valid_on | string | null | ISO date an offer must be valid on (valid_from to valid_through, inclusive); defaults to today. |
| destination* | string | Destination name or slug, e.g. 'Los Cabos'; list_cities names them. |
{
"type": "object",
"required": [
"destination"
],
"properties": {
"area": {
"type": [
"string",
"null"
],
"default": null,
"description": "Area name or slug; destination_overview lists them."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum number of items to return."
},
"cursor": {
"type": "integer",
"default": 0,
"maximum": 10000,
"minimum": 0,
"description": "Number of items to skip; pass `next_cursor` from the previous page."
},
"category": {
"type": [
"string",
"null"
],
"default": null,
"description": "Category name or slug; destination_overview lists them."
},
"valid_on": {
"type": [
"string",
"null"
],
"format": "date",
"default": null,
"description": "ISO date an offer must be valid on (valid_from to valid_through, inclusive); defaults to today."
},
"destination": {
"type": "string",
"maxLength": 256,
"description": "Destination name or slug, e.g. 'Los Cabos'; list_cities names them."
}
}
}One call answers what a destination offers and what's on: counts, a few places, next events and guide topics. It counts offers, seasonality and FAQs too, and names the categories and areas listings, events and offers filter by. preview.complete is false when destination_listings / destination_events hold more.
| Argument | Type | Description |
|---|---|---|
| destination* | string | Destination name or slug, e.g. 'Los Cabos'; list_cities names them. |
{
"type": "object",
"required": [
"destination"
],
"properties": {
"destination": {
"type": "string",
"maxLength": 256,
"description": "Destination name or slug, e.g. 'Los Cabos'; list_cities names them."
}
}
}Get a named destination's best time to visit, weather and wildlife seasons (e.g. whale watching), month by month.
| Argument | Type | Description |
|---|---|---|
| month | integer | null | 1-12; omit for all twelve. |
| interest | string | null | An activity or season, e.g. whales; keeps the months whose highlights or notes mention it. |
| destination* | string | Destination name or slug, e.g. 'Los Cabos'; list_cities names them. |
{
"type": "object",
"required": [
"destination"
],
"properties": {
"month": {
"type": [
"integer",
"null"
],
"default": null,
"maximum": 12,
"minimum": 1,
"description": "1-12; omit for all twelve."
},
"interest": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 256,
"description": "An activity or season, e.g. whales; keeps the months whose highlights or notes mention it."
},
"destination": {
"type": "string",
"maxLength": 256,
"description": "Destination name or slug, e.g. 'Los Cabos'; list_cities names them."
}
}
}Read a search result's full page: a restaurant's menu, dietary options, hours and events, or a destination's. Returns Markdown text with its citable url. Ids look like "venue:acme-bistro", "destination:los-cabos" or "listing:los-cabos:1234".
| Argument | Type | Description |
|---|---|---|
| id* | string | An id exactly as search returned it. |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 256,
"description": "An id exactly as search returned it."
}
}
}List the cities that have published restaurants and bars. Travel destinations such as Los Cabos are not cities here; read one with destination_overview.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of items to return. |
| cursor | integer | Number of items to skip; pass `next_cursor` from the previous page. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum number of items to return."
},
"cursor": {
"type": "integer",
"default": 0,
"maximum": 10000,
"minimum": 0,
"description": "Number of items to skip; pass `next_cursor` from the previous page."
}
}
}Search venues, travel destinations and places inside destinations by name or keyword. Returns results of id, title and url; pass an id to fetch for the full page. For filters use search_venues, search_menus or destination_listings.
| Argument | Type | Description |
|---|---|---|
| query* | string | A name or keywords, e.g. 'whale watching' or 'Acme Bistro'. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 256,
"description": "A name or keywords, e.g. 'whale watching' or 'Acme Bistro'."
}
}
}Find dishes across all venues by text, city, dietary tags or allergens to avoid. Each item is tagged with its venue, so one call compares venues; for one named venue use venue_menu.
| Argument | Type | Description |
|---|---|---|
| city | string | null | Only return items from venues in this city (case-insensitive); call list_cities for the exact values. |
| limit | integer | Maximum number of items to return. |
| query | string | null | Text matched in item name, description, section and menu names; every word must match; connector words (and, with, in) aren't required. |
| cursor | integer | Number of items to skip; pass `next_cursor` from the previous page. |
| allergens | array | Exclude items that declare any of these allergens (spelling-insensitive; synonyms match: milk, lactose and dairy all match dairy; pass one term). |
| max_price | number | null | Only items priced at or under this, in the menu's currency. |
| dietary_tags | array | Require ALL of these dietary tags (case- and separator-insensitive). |
Find restaurants and bars by city, cuisine, opening time or features. Filters are HARD, prefer_* and avoid are SOFT (rank only), and query is ONE keyword. Each result has slug, capabilities, open_now and distance_km; a place inside a destination is not here, use destination_listings.
| Argument | Type | Description |
|---|---|---|
| at | string | null | A local time (20:00 or 8pm); requires open_on. |
| city | string | null | HARD filter: only venues in this city (case-insensitive); call list_cities for the exact values this directory knows. |
| near | string | null | HARD filter: only venues within radius_km of this 'latitude,longitude' point, nearest first, each with a distance_km; venues with no coordinates are excluded. |
| avoid | array | SOFT: venues matching these cuisine/neighbourhood tokens rank LOWER; not dropped. |
| limit | integer | Maximum number of items to return. |
| query | string | null | ONE keyword: a name or cuisine word; for a dish use search_menus. Matched in name, description, cuisine, neighbourhood, city or alternate names; omit to list all. |
| cursor | integer | Number of items to skip; pass `next_cursor` from the previous page. |
Send Yenta a report: data that is missing or looks wrong, a tool that was hard to use, or anything else. Stored for Yenta's team and never shown publicly; the answer carries a reference. Leave out personal details.
| Argument | Type | Description |
|---|---|---|
| city | string | null | The city the question was about; a city name only, never an address. |
| kind* | string | What the report is about. |
| tool | string | null | The Yenta tool the report is about, if any. |
| model | string | null | The model sending the report, e.g. its model id. |
| client | string | null | The app or agent the model runs in. |
| message* | string | The report itself, in plain words. |
| purpose | string | null | What the person was trying to do, in one short sentence. |
| subject | string | null | The venue, destination or city the report is about, if any. |
{
"type": "object",
"required": [
"kind",
"message"
],
"properties": {
"city": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 256,
"description": "The city the question was about; a city name only, never an address."
},
"kind": {
"enum": [
"missing_data",
"wrong_data",
"hard_to_use",
"other"
],
"type": "string",
"description": "What the report is about."
},
"tool": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 64,
"description": "The Yenta tool the report is about, if any."
},
"model": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 64,
"description": "The model sending the report, e.g. its model id."
},
"client": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 64,
"description": "The app or agent the model runs in."
},
"message": {
"type": "string",
"maxLength": 1000,
"minLength": 1,
"description": "The report itself, in plain words."
},
"purpose": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 256,
"description": "What the person was trying to do, in one short sentence."
},
"subject": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 256,
"description": "The venue, destination or city the report is about, if any."
}
}
}Find what is on at a named venue: dated events from its local today onwards. Filter by exact event_type if you know it. If not available, check the capabilities venue_profile lists; the venue may not publish this.
| Argument | Type | Description |
|---|---|---|
| city | string | null | Disambiguate a name by city (call list_cities); ignored for a slug. |
| limit | integer | Maximum number of items to return. |
| venue* | string | Venue name or slug; call search_venues to discover one. |
| cursor | integer | Number of items to skip; pass `next_cursor` from the previous page. |
| to_date | string | null | ISO date; omit to_date for everything upcoming (recommended for "coming up"). |
| from_date | string | null | ISO date; defaults to the venue's own local today, or to today UTC if it publishes no timezone. |
| event_type | string | null | Exact event_type spelling from published events. |
{
"type": "object",
"required": [
"venue"
],
"properties": {
"city": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 256,
"description": "Disambiguate a name by city (call list_cities); ignored for a slug."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum number of items to return."
},
"venue": {
"type": "string",
"maxLength": 256,
"description": "Venue name or slug; call search_venues to discover one."
},
"cursor": {
"type": "integer",
"default": 0,
"maximum": 10000,
"minimum": 0,
"description": "Number of items to skip; pass `next_cursor` from the previous page."
},
"to_date": {
"type": [
"string",
"null"
],
"format": "date",
"default": null,
"description": "ISO date; omit to_date for everything upcoming (recommended for \"coming up\")."
},
"from_date": {
"type": [
"string",
"null"
],
"format": "date",
"default": null,
"description": "ISO date; defaults to the venue's own local today, or to today UTC if it publishes no timezone."
},
"event_type": {
"type": [
"string",
"null"
],
"default": null,
"description": "Exact event_type spelling from published events."
}
}
}Answer a question about a named venue from its published FAQs; omit query to read them all. If not available, check the capabilities venue_profile lists; the venue may not publish this.
| Argument | Type | Description |
|---|---|---|
| city | string | null | Disambiguate a name by city (call list_cities); ignored for a slug. |
| limit | integer | Maximum number of items to return. |
| query | string | null | Text to match against questions and answers. |
| venue* | string | Venue name or slug; call search_venues to discover one. |
| cursor | integer | Number of items to skip; pass `next_cursor` from the previous page. |
{
"type": "object",
"required": [
"venue"
],
"properties": {
"city": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 256,
"description": "Disambiguate a name by city (call list_cities); ignored for a slug."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum number of items to return."
},
"query": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 256,
"description": "Text to match against questions and answers."
},
"venue": {
"type": "string",
"maxLength": 256,
"description": "Venue name or slug; call search_venues to discover one."
},
"cursor": {
"type": "integer",
"default": 0,
"maximum": 10000,
"minimum": 0,
"description": "Number of items to skip; pass `next_cursor` from the previous page."
}
}
}Find dishes at a named venue, e.g. venue="Acme Bistro", dietary_tags=["vegan"], allergens=["milk"]. Filter by text, tags, allergens or max_price; unfiltered, item lists its dietary tags, example dishes and allergen counts. If not available, check the capabilities venue_profile lists; the venue may not publish this.
| Argument | Type | Description |
|---|---|---|
| city | string | null | Disambiguate a name by city (call list_cities); ignored for a slug. |
| limit | integer | Maximum number of items to return. |
| query | string | null | Text matched in item name, description, section and menu names; every word must match; connector words (and, with, in) aren't required. |
| venue* | string | Venue name or slug; call search_venues to discover one. |
| cursor | integer | Number of items to skip; pass `next_cursor` from the previous page. |
| allergens | array | Exclude items declaring any of these allergens (case- and separator-insensitive (gluten free = gluten-free); synonyms match: milk, lactose and dairy all match dairy; pass one term). |
| max_price | number | null | Only items priced at or under this, in the menu's currency. |
Get a venue's hours, address, map, phone, booking and links by name or slug, e.g. venue="Acme Bistro". It also holds cuisine, attributes, menu_summary and capabilities (the other venue_* tools that answer for it); hours_summary is ready to quote.
| Argument | Type | Description |
|---|---|---|
| city | string | null | Disambiguate a name by city (call list_cities); ignored for a slug. |
| venue* | string | Venue name or slug; call search_venues to discover one. |
{
"type": "object",
"required": [
"venue"
],
"properties": {
"city": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 256,
"description": "Disambiguate a name by city (call list_cities); ignored for a slug."
},
"venue": {
"type": "string",
"maxLength": 256,
"description": "Venue name or slug; call search_venues to discover one."
}
}
}| listing_id | string | null | One listing's id from a previous result: returns its full detail in item, ignoring the other filters; read a live linked_venue_slug with the venue_* tools, whose answer carries its booking link. |
| destination* | string | Destination name or slug, e.g. 'Los Cabos'; list_cities names them. |
| near_listing_id | string | null | A listing id; returns listings within radius_km, nearest first, each with distance_km. |
{
"type": "object",
"required": [
"destination"
],
"properties": {
"area": {
"type": [
"string",
"null"
],
"default": null,
"description": "Area name or slug; destination_overview lists them."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 8,
"description": "Tag slugs; only listings carrying ALL are returned."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum number of items to return."
},
"query": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 256,
"description": "Words matched in any order against listing names, descriptions, tags and categories."
},
"cursor": {
"type": "integer",
"default": 0,
"maximum": 10000,
"minimum": 0,
"description": "Number of items to skip; pass `next_cursor` from the previous page."
},
"category": {
"type": [
"string",
"null"
],
"default": null,
"description": "Category name or slug; destination_overview lists them."
},
"language": {
"type": [
"string",
"null"
],
"default": null,
"description": "Language code (e.g. 'en', 'es'); defaults to the destination's."
},
"radius_km": {
"type": [
"number",
"null"
],
"default": null,
"maximum": 50,
"minimum": 0,
"description": "Search radius in km around near_listing_id; a larger value is reduced to the server maximum."
},
"listing_id": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 256,
"description": "One listing's id from a previous result: returns its full detail in item, ignoring the other filters; read a live linked_venue_slug with the venue_* tools, whose answer carries its booking link."
},
"destination": {
"type": "string",
"maxLength": 256,
"description": "Destination name or slug, e.g. 'Los Cabos'; list_cities names them."
},
"near_listing_id": {
"type": [
"string",
"null"
],
"default": null,
"description": "A listing id; returns listings within radius_km, nearest first, each with distance_km."
}
}
}{
"type": "object",
"properties": {
"city": {
"type": [
"string",
"null"
],
"default": null,
"description": "Only return items from venues in this city (case-insensitive); call list_cities for the exact values."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum number of items to return."
},
"query": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 256,
"description": "Text matched in item name, description, section and menu names; every word must match; connector words (and, with, in) aren't required."
},
"cursor": {
"type": "integer",
"default": 0,
"maximum": 10000,
"minimum": 0,
"description": "Number of items to skip; pass `next_cursor` from the previous page."
},
"allergens": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 8,
"description": "Exclude items that declare any of these allergens (spelling-insensitive; synonyms match: milk, lactose and dairy all match dairy; pass one term)."
},
"max_price": {
"type": [
"number",
"null"
],
"default": null,
"maximum": 1000000,
"minimum": 0,
"description": "Only items priced at or under this, in the menu's currency."
},
"dietary_tags": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 8,
"description": "Require ALL of these dietary tags (case- and separator-insensitive)."
}
}
}| facets | array | HARD experiential-facet filter: each token is '<facet_type>:<value>' (e.g. 'dietary:vegetarian', 'vibe:romantic'); types are vibe, good_for, not_good_for, feature, noise_level, view, dress_code, meal_period, cuisine, dietary, accessibility. A venue must match every facet_type given (values OR within a type); a miss EXCLUDES it. |
| cuisine | string | null | HARD filter: only venues with this cuisine (case-insensitive exact match; a miss's reason lists the valid values). |
| open_on | any | HARD filter: only venues open on this weekday, or today/tomorrow in the venue's own timezone (optionally at 'at'); for tonight use open_on=today with at. Venues with no published hours are excluded. |
| open_now | boolean | null | Set true = open at this moment, not later today (venue local time); for tonight use open_on=today with at; omit otherwise. |
| radius_km | number | null | Search radius in km around 'near' (default applied when omitted). |
| price_band | string | null | HARD filter: only venues in this price band, e.g. '$$'. |
| neighbourhood | string | null | HARD filter: only venues in this neighbourhood (case-insensitive exact match; a miss's reason lists the valid values). |
| prefer_facets | array | SOFT experiential-facet preference, same '<facet_type>:<value>' tokens as facets: a venue that declares them ranks higher but is NEVER dropped. |
| prefer_cuisine | array | SOFT: venues of these cuisines rank higher; non-matches are NOT dropped. |
| accepts_reservations | boolean | null | Set true to require venues that take reservations (a booking link or a live booking tool); omit otherwise. |
| prefer_neighbourhood | array | SOFT: venues in these neighbourhoods rank higher; non-matches are NOT dropped. |
{
"type": "object",
"properties": {
"at": {
"type": [
"string",
"null"
],
"default": null,
"description": "A local time (20:00 or 8pm); requires open_on."
},
"city": {
"type": [
"string",
"null"
],
"default": null,
"description": "HARD filter: only venues in this city (case-insensitive); call list_cities for the exact values this directory knows."
},
"near": {
"type": [
"string",
"null"
],
"default": null,
"examples": [
"19.0413,-98.2062"
],
"description": "HARD filter: only venues within radius_km of this 'latitude,longitude' point, nearest first, each with a distance_km; venues with no coordinates are excluded."
},
"avoid": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 8,
"description": "SOFT: venues matching these cuisine/neighbourhood tokens rank LOWER; not dropped."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum number of items to return."
},
"query": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 256,
"description": "ONE keyword: a name or cuisine word; for a dish use search_menus. Matched in name, description, cuisine, neighbourhood, city or alternate names; omit to list all."
},
"cursor": {
"type": "integer",
"default": 0,
"maximum": 10000,
"minimum": 0,
"description": "Number of items to skip; pass `next_cursor` from the previous page."
},
"facets": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 8,
"description": "HARD experiential-facet filter: each token is '<facet_type>:<value>' (e.g. 'dietary:vegetarian', 'vibe:romantic'); types are vibe, good_for, not_good_for, feature, noise_level, view, dress_code, meal_period, cuisine, dietary, accessibility. A venue must match every facet_type given (values OR within a type); a miss EXCLUDES it."
},
"cuisine": {
"type": [
"string",
"null"
],
"default": null,
"description": "HARD filter: only venues with this cuisine (case-insensitive exact match; a miss's reason lists the valid values)."
},
"open_on": {
"anyOf": [
{
"enum": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday",
"saturday",
"sunday",
"today",
"tomorrow"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "HARD filter: only venues open on this weekday, or today/tomorrow in the venue's own timezone (optionally at 'at'); for tonight use open_on=today with at. Venues with no published hours are excluded."
},
"open_now": {
"type": [
"boolean",
"null"
],
"default": null,
"description": "Set true = open at this moment, not later today (venue local time); for tonight use open_on=today with at; omit otherwise."
},
"radius_km": {
"type": [
"number",
"null"
],
"default": null,
"maximum": 50,
"minimum": 0,
"description": "Search radius in km around 'near' (default applied when omitted)."
},
"price_band": {
"type": [
"string",
"null"
],
"default": null,
"description": "HARD filter: only venues in this price band, e.g. '$$'."
},
"neighbourhood": {
"type": [
"string",
"null"
],
"default": null,
"description": "HARD filter: only venues in this neighbourhood (case-insensitive exact match; a miss's reason lists the valid values)."
},
"prefer_facets": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 8,
"description": "SOFT experiential-facet preference, same '<facet_type>:<value>' tokens as facets: a venue that declares them ranks higher but is NEVER dropped."
},
"prefer_cuisine": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 8,
"description": "SOFT: venues of these cuisines rank higher; non-matches are NOT dropped."
},
"accepts_reservations": {
"type": [
"boolean",
"null"
],
"default": null,
"description": "Set true to require venues that take reservations (a booking link or a live booking tool); omit otherwise."
},
"prefer_neighbourhood": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 8,
"description": "SOFT: venues in these neighbourhoods rank higher; non-matches are NOT dropped."
}
}
}| dietary_tags | array | A JSON array, e.g. ["gluten-free"]: items must carry ALL of these tags; case- and separator-insensitive (gluten free = gluten-free). |
{
"type": "object",
"required": [
"venue"
],
"properties": {
"city": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 256,
"description": "Disambiguate a name by city (call list_cities); ignored for a slug."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum number of items to return."
},
"query": {
"type": [
"string",
"null"
],
"default": null,
"maxLength": 256,
"description": "Text matched in item name, description, section and menu names; every word must match; connector words (and, with, in) aren't required."
},
"venue": {
"type": "string",
"maxLength": 256,
"description": "Venue name or slug; call search_venues to discover one."
},
"cursor": {
"type": "integer",
"default": 0,
"maximum": 10000,
"minimum": 0,
"description": "Number of items to skip; pass `next_cursor` from the previous page."
},
"allergens": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 8,
"description": "Exclude items declaring any of these allergens (case- and separator-insensitive (gluten free = gluten-free); synonyms match: milk, lactose and dairy all match dairy; pass one term)."
},
"max_price": {
"type": [
"number",
"null"
],
"default": null,
"maximum": 1000000,
"minimum": 0,
"description": "Only items priced at or under this, in the menu's currency."
},
"dietary_tags": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 8,
"description": "A JSON array, e.g. [\"gluten-free\"]: items must carry ALL of these tags; case- and separator-insensitive (gluten free = gluten-free)."
}
}
}