Yenta Directory MCP
An MCP server providing structured restaurant and bar data including menus, dietary tags, opening hours, events, and booking links. It also offers travel destination guides and allows agents to search venues, check allergens, and verify facts with cited sources.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.yentaknows.ai/mcpWhat you can do with it
- Search for restaurants by cuisine, price, or opening hours
- Check menu items for dietary tags and allergens
- Retrieve venue profiles and official booking links
- Access destination guides and event listings
Source and maintenance
Protocol and capabilities
- Server
- Yenta Directory 0.2.0
- MCP protocol
- 2025-06-18
- Tools
- 17 advertised
- Resources
- 0 advertised
- Resource templates
- 1 advertised
- Prompts
- 1 advertised
{
"tools": {
"listChanged": false
},
"prompts": {
"listChanged": false
},
"resources": {
"subscribe": false,
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
17 advertised
search — Search everything by name
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.
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 256,
"description": "A name or keywords, e.g. 'whale watching' or 'Acme Bistro'."
}
}
}{
"type": "object",
"required": [
"results"
],
"properties": {
"reason": {
"type": "string"
},
"status": {
"enum": [
"ok",
"not_available",
"validation_error"
],
"type": "string"
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"title",
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string"
},
"title": {
"type": "string"
}
}
}
}
},
"description": "OpenAI search results: each id can be passed to fetch."
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}fetch — Fetch a search result
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", "venue:acme-bistro:menu", "destination:los-cabos" or "listing:los-cabos:1234".
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 256,
"description": "An id exactly as search returned it."
}
}
}{
"type": "object",
"required": [
"status"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string"
},
"text": {
"type": "string"
},
"title": {
"type": "string"
},
"reason": {
"type": "string"
},
"sample": {
"type": "boolean"
},
"status": {
"enum": [
"ok",
"not_available",
"validation_error"
],
"type": "string"
},
"metadata": {
"type": "object"
}
},
"description": "One OpenAI fetch document: its full Markdown text and citable url."
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_venues — Search venues
Find restaurants and bars by city, cuisine, opening time or features. Filters are HARD, prefer_* and avoid are SOFT (rank only), and query is a name, a keyword or a short description. Each result has slug, capabilities, open_now and distance_km; a destination city's venues are here, its listings in destination_listings.
{
"type": "object",
"properties": {
"at": {
"type": [
"string",
"null"
],
"default": null,
"description": "A local time (20:00 or 8pm) for the open_on filter; 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": "A name, a cuisine word or a short description of the place (e.g. 'quiet seafood with a sea view'); a dish is in search_menus. Venues whose name, description, cuisine, neighbourhood, city or alternate names contain every word come first, then venues whose profile is closest in meaning, each with match.similarity; 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', 'view:sea'). A venue must match every facet_type given (values OR within a type); a miss EXCLUDES it. Values: vibe: authentic, bustling, buzzy, calm, casual, charming, chic, chill, classic, cozy, creative, elegant, energetic, family-friendly, friendly, fun, hidden-gem, historic, intimate, laid-back, lively, local, local-favorite, luxurious, modern, neighbourhood, party, quiet, refined, relaxed, romantic, rustic, scenic, sophisticated, stylish, traditional, trendy, upscale, vibrant, warm, welcoming; good_for: business-dinner, business-lunch, celebration, date-night, drinks, family, groups, nightlife, quick-bite, solo, work-friendly; not_good_for: alcohol, budget, date-night, dogs, fine-dining, kids, large-groups, late-night, outdoor-dining, quick-bite, quiet-conversation, sports-watching, vegetarians, work-friendly; feature: alcohol-free, beach-club, beer, bib-gourmand, cocktails, coffee, delivery, desserts, dog-friendly, kids-menu, live-music, michelin-guide, michelin-star, nightclub, outdoor-seating, private-dining, reservations, rooftop, serves-alcohol, shisha, sports-screening, takeout, waterfront, wine-list; noise_level: lively, loud, moderate, quiet; view: garden, sea, skyline, street, waterfront; dress_code: casual, formal, smart-casual; meal_period: breakfast, brunch, dinner, late-night, lunch; dietary: dairy-free, gluten-free, halal, jain, kosher, nut-free, pescatarian, vegan, vegetarian; accessibility: accessible-parking, accessible-restroom, step-free, wheelchair-accessible; cuisine: a cuisine word, e.g. italian, japanese, seafood."
},
"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. A result's open_now is still the request time (open_now_at), not the open_on/at time."
},
"open_now": {
"type": [
"boolean",
"null"
],
"default": null,
"description": "Set true = open at this moment, not later today (venue local time, as open_now_at); 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, the same '<facet_type>:<value>' tokens and values 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."
}
}
}{
"type": "object",
"required": [
"status"
],
"properties": {
"item": {
"type": [
"object",
"null"
]
},
"items": {
"type": [
"array",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"sample": {
"type": [
"boolean",
"null"
]
},
"source": {
"type": "object"
},
"status": {
"enum": [
"ok",
"not_available",
"validation_error"
],
"type": "string"
},
"pagination": {
"type": [
"object",
"null"
]
}
},
"description": "The Yenta response envelope: a status, the answer in `item` or `items`, and the approved content revision it was read from.",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_cities — List cities
List the cities that have published restaurants and bars. A city can also be a travel destination, such as Los Cabos: search_venues finds its venues, and destination_overview and destination_listings read the destination's own board.
{
"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."
}
}
}{
"type": "object",
"required": [
"status"
],
"properties": {
"item": {
"type": [
"object",
"null"
]
},
"items": {
"type": [
"array",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"sample": {
"type": [
"boolean",
"null"
]
},
"source": {
"type": "object"
},
"status": {
"enum": [
"ok",
"not_available",
"validation_error"
],
"type": "string"
},
"pagination": {
"type": [
"object",
"null"
]
}
},
"description": "The Yenta response envelope: a status, the answer in `item` or `items`, and the approved content revision it was read from.",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_menus — Search menus across venues
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.
{
"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)."
}
}
}{
"type": "object",
"required": [
"status"
],
"properties": {
"item": {
"type": [
"object",
"null"
]
},
"items": {
"type": [
"array",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"sample": {
"type": [
"boolean",
"null"
]
},
"source": {
"type": "object"
},
"status": {
"enum": [
"ok",
"not_available",
"validation_error"
],
"type": "string"
},
"pagination": {
"type": [
"object",
"null"
]
}
},
"description": "The Yenta response envelope: a status, the answer in `item` or `items`, and the approved content revision it was read from.",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}send_feedback — Send feedback to Yenta
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.
{
"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."
}
}
}{
"type": "object",
"required": [
"status"
],
"properties": {
"item": {
"type": [
"object",
"null"
]
},
"items": {
"type": [
"array",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"sample": {
"type": [
"boolean",
"null"
]
},
"source": {
"type": "object"
},
"status": {
"enum": [
"ok",
"not_available",
"validation_error"
],
"type": "string"
},
"pagination": {
"type": [
"object",
"null"
]
}
},
"description": "The Yenta response envelope: a status, the answer in `item` or `items`, and the approved content revision it was read from.",
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}venue_profile — Venue profile by name or slug
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.
{
"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."
}
}
}{
"type": "object",
"required": [
"status"
],
"properties": {
"item": {
"type": [
"object",
"null"
]
},
"items": {
"type": [
"array",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"sample": {
"type": [
"boolean",
"null"
]
},
"source": {
"type": "object"
},
"status": {
"enum": [
"ok",
"not_available",
"validation_error"
],
"type": "string"
},
"pagination": {
"type": [
"object",
"null"
]
}
},
"description": "The Yenta response envelope: a status, the answer in `item` or `items`, and the approved content revision it was read from.",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}venue_menu — A venue's menu by name
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.
{
"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)."
}
}
}{
"type": "object",
"required": [
"status"
],
"properties": {
"item": {
"type": [
"object",
"null"
]
},
"items": {
"type": [
"array",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"sample": {
"type": [
"boolean",
"null"
]
},
"source": {
"type": "object"
},
"status": {
"enum": [
"ok",
"not_available",
"validation_error"
],
"type": "string"
},
"pagination": {
"type": [
"object",
"null"
]
}
},
"description": "The Yenta response envelope: a status, the answer in `item` or `items`, and the approved content revision it was read from.",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}venue_faq — Venue FAQ by name
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.
{
"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."
}
}
}{
"type": "object",
"required": [
"status"
],
"properties": {
"item": {
"type": [
"object",
"null"
]
},
"items": {
"type": [
"array",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"sample": {
"type": [
"boolean",
"null"
]
},
"source": {
"type": "object"
},
"status": {
"enum": [
"ok",
"not_available",
"validation_error"
],
"type": "string"
},
"pagination": {
"type": [
"object",
"null"
]
}
},
"description": "The Yenta response envelope: a status, the answer in `item` or `items`, and the approved content revision it was read from.",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}venue_events — Search a venue's events by name
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.
{
"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."
}
}
}{
"type": "object",
"required": [
"status"
],
"properties": {
"item": {
"type": [
"object",
"null"
]
},
"items": {
"type": [
"array",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"sample": {
"type": [
"boolean",
"null"
]
},
"source": {
"type": "object"
},
"status": {
"enum": [
"ok",
"not_available",
"validation_error"
],
"type": "string"
},
"pagination": {
"type": [
"object",
"null"
]
}
},
"description": "The Yenta response envelope: a status, the answer in `item` or `items`, and the approved content revision it was read from.",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}destination_overview — Destination overview by name or slug
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.
{
"type": "object",
"required": [
"destination"
],
"properties": {
"destination": {
"type": "string",
"maxLength": 256,
"description": "Destination name or slug, e.g. 'Los Cabos'; list_cities names them."
}
}
}{
"type": "object",
"required": [
"status"
],
"properties": {
"item": {
"type": [
"object",
"null"
]
},
"items": {
"type": [
"array",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"sample": {
"type": [
"boolean",
"null"
]
},
"source": {
"type": "object"
},
"status": {
"enum": [
"ok",
"not_available",
"validation_error"
],
"type": "string"
},
"pagination": {
"type": [
"object",
"null"
]
}
},
"description": "The Yenta response envelope: a status, the answer in `item` or `items`, and the approved content revision it was read from.",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}destination_listings — Search a destination's listings by name
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.
{
"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",
"required": [
"status"
],
"properties": {
"item": {
"type": [
"object",
"null"
]
},
"items": {
"type": [
"array",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"sample": {
"type": [
"boolean",
"null"
]
},
"source": {
"type": "object"
},
"status": {
"enum": [
"ok",
"not_available",
"validation_error"
],
"type": "string"
},
"pagination": {
"type": [
"object",
"null"
]
}
},
"description": "The Yenta response envelope: a status, the answer in `item` or `items`, and the approved content revision it was read from.",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}destination_events — Search a destination's events by name
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.
{
"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."
}
}
}{
"type": "object",
"required": [
"status"
],
"properties": {
"item": {
"type": [
"object",
"null"
]
},
"items": {
"type": [
"array",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"sample": {
"type": [
"boolean",
"null"
]
},
"source": {
"type": "object"
},
"status": {
"enum": [
"ok",
"not_available",
"validation_error"
],
"type": "string"
},
"pagination": {
"type": [
"object",
"null"
]
}
},
"description": "The Yenta response envelope: a status, the answer in `item` or `items`, and the approved content revision it was read from.",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}destination_guide — Destination guides by name
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.
{
"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."
}
}
}{
"type": "object",
"required": [
"status"
],
"properties": {
"item": {
"type": [
"object",
"null"
]
},
"items": {
"type": [
"array",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"sample": {
"type": [
"boolean",
"null"
]
},
"source": {
"type": "object"
},
"status": {
"enum": [
"ok",
"not_available",
"validation_error"
],
"type": "string"
},
"pagination": {
"type": [
"object",
"null"
]
}
},
"description": "The Yenta response envelope: a status, the answer in `item` or `items`, and the approved content revision it was read from.",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}destination_faq — Destination FAQ by name
Answer a question about a named destination from its published FAQs; omit query to read them all.
{
"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."
}
}
}{
"type": "object",
"required": [
"status"
],
"properties": {
"item": {
"type": [
"object",
"null"
]
},
"items": {
"type": [
"array",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"sample": {
"type": [
"boolean",
"null"
]
},
"source": {
"type": "object"
},
"status": {
"enum": [
"ok",
"not_available",
"validation_error"
],
"type": "string"
},
"pagination": {
"type": [
"object",
"null"
]
}
},
"description": "The Yenta response envelope: a status, the answer in `item` or `items`, and the approved content revision it was read from.",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}destination_offers — Search a destination's offers by name
Find a named destination's current deals and packages, with the partner booking link. Only offers valid on valid_on (today by default), or on any day from from_date to to_date, are returned. Results carry booking_url, the partner's booking page when present, and canonical_url, the destination's page.
{
"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."
},
"to_date": {
"type": [
"string",
"null"
],
"format": "date",
"default": null,
"description": "ISO date; last day of the range; open-ended if omitted."
},
"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."
},
"from_date": {
"type": [
"string",
"null"
],
"format": "date",
"default": null,
"description": "ISO date; first day of a date range (defaults to today)."
},
"destination": {
"type": "string",
"maxLength": 256,
"description": "Destination name or slug, e.g. 'Los Cabos'; list_cities names them."
}
}
}{
"type": "object",
"required": [
"status"
],
"properties": {
"item": {
"type": [
"object",
"null"
]
},
"items": {
"type": [
"array",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"sample": {
"type": [
"boolean",
"null"
]
},
"source": {
"type": "object"
},
"status": {
"enum": [
"ok",
"not_available",
"validation_error"
],
"type": "string"
},
"pagination": {
"type": [
"object",
"null"
]
}
},
"description": "The Yenta response envelope: a status, the answer in `item` or `items`, and the approved content revision it was read from.",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}destination_seasonality — Destination seasonality by name
Get a named destination's best time to visit, weather and wildlife seasons (e.g. whale watching), month by month.
{
"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."
}
}
}{
"type": "object",
"required": [
"status"
],
"properties": {
"item": {
"type": [
"object",
"null"
]
},
"items": {
"type": [
"array",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"sample": {
"type": [
"boolean",
"null"
]
},
"source": {
"type": "object"
},
"status": {
"enum": [
"ok",
"not_available",
"validation_error"
],
"type": "string"
},
"pagination": {
"type": [
"object",
"null"
]
}
},
"description": "The Yenta response envelope: a status, the answer in `item` or `items`, and the approved content revision it was read from.",
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
1 advertised
find_a_venue — Find a venue
Find a published venue in a city and read it by name from here.
- city
- City to search; call list_cities for the exact values. Provide a value matching the following JSON schema: {"type":"string"}. Encode non-string values as JSON. (required)
- cuisine
- Optional cuisine or dish to match in the query. Provide a value matching the following JSON schema: {"anyOf":[{"type":"string"},{"type":"null"}]}. Encode non-string values as JSON.
Resources
0 advertised
directory_venue — Published venue
One published venue's summary, capabilities and live mcp_endpoint.
yenta://venue/{slug}30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 2028 ms
- 95th percentile latency
- 2028 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 2028 ms · metadata changed · 17 tool(s), 0 resource(s), 1 resource template(s), 1 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http yenta-directory-mcp https://mcp.yentaknows.ai/mcpCodex
codex mcp add yenta-directory-mcp --url https://mcp.yentaknows.ai/mcpCursor
{
"mcpServers": {
"yenta-directory-mcp": {
"url": "https://mcp.yentaknows.ai/mcp"
}
}
}Cline
{
"mcpServers": {
"yenta-directory-mcp": {
"type": "streamableHttp",
"url": "https://mcp.yentaknows.ai/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"yenta-directory-mcp": {
"type": "http",
"url": "https://mcp.yentaknows.ai/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http yenta-directory-mcp https://mcp.yentaknows.ai/mcpClaude Desktop
{
"mcpServers": {
"yenta-directory-mcp": {
"url": "https://mcp.yentaknows.ai/mcp"
}
}
}Windsurf
{
"mcpServers": {
"yenta-directory-mcp": {
"serverUrl": "https://mcp.yentaknows.ai/mcp"
}
}
}Let your agent find its tools
Find servers like Yenta Directory MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other commerce servers
Do you run Yenta Directory MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.