Koskamo

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.

Yenta Directory MCP logo, by YentaVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Yenta
MCP endpoint (Streamable HTTP)
https://mcp.yentaknows.ai/mcp
Vendor documentation

What 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

Vendor evidenceRegistry 0.2.0

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
Server-advertised capabilities
{
  "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.

Yenta directory of restaurants, bars and travel destinations. Covers: Los Cabos, Dubai, Milan and more. search finds by name; fetch reads a result; search_venues filters venues. venue_profile, venue_menu, destination_overview, destination_listings and other venue_*/destination_* tools read one by name, no reconnect. `source` gives freshness. `booking.url` is a venue's booking page; `mcp_endpoint` (under venues.yentaknows.ai) is a read-only server unless booking.method is live. No auth. Powered by Yenta.

Tools

17 advertised

search — Search everything by name
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

search input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 256,
      "description": "A name or keywords, e.g. 'whale watching' or 'Acme Bistro'."
    }
  }
}
search output schema
{
  "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."
}
search annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
fetch — Fetch a search result
Advertised by the server during the last successful anonymous check.
Advertised read-only

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".

fetch input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "maxLength": 256,
      "description": "An id exactly as search returned it."
    }
  }
}
fetch output schema
{
  "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."
}
fetch annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_venues — Search venues
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

search_venues input schema
{
  "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."
    }
  }
}
search_venues output schema
{
  "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
}
search_venues annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_cities — List cities
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

list_cities input schema
{
  "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."
    }
  }
}
list_cities output schema
{
  "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
}
list_cities annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_menus — Search menus across venues
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

search_menus input schema
{
  "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)."
    }
  }
}
search_menus output schema
{
  "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
}
search_menus annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
send_feedback — Send feedback to Yenta
Advertised by the server during the last successful anonymous check.

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.

send_feedback input schema
{
  "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."
    }
  }
}
send_feedback output schema
{
  "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
}
send_feedback annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
venue_profile — Venue profile by name or slug
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

venue_profile input schema
{
  "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."
    }
  }
}
venue_profile output schema
{
  "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
}
venue_profile annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
venue_menu — A venue's menu by name
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

venue_menu input schema
{
  "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)."
    }
  }
}
venue_menu output schema
{
  "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
}
venue_menu annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
venue_faq — Venue FAQ by name
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

venue_faq input schema
{
  "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."
    }
  }
}
venue_faq output schema
{
  "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
}
venue_faq annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
venue_events — Search a venue's events by name
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

venue_events input schema
{
  "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."
    }
  }
}
venue_events output schema
{
  "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
}
venue_events annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
destination_overview — Destination overview by name or slug
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

destination_overview input schema
{
  "type": "object",
  "required": [
    "destination"
  ],
  "properties": {
    "destination": {
      "type": "string",
      "maxLength": 256,
      "description": "Destination name or slug, e.g. 'Los Cabos'; list_cities names them."
    }
  }
}
destination_overview output schema
{
  "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
}
destination_overview annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
destination_listings — Search a destination's listings by name
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

destination_listings input schema
{
  "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."
    }
  }
}
destination_listings output schema
{
  "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
}
destination_listings annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
destination_events — Search a destination's events by name
Advertised by the server during the last successful anonymous check.
Advertised read-only

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_events input schema
{
  "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."
    }
  }
}
destination_events output schema
{
  "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
}
destination_events annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
destination_guide — Destination guides by name
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

destination_guide input schema
{
  "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."
    }
  }
}
destination_guide output schema
{
  "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
}
destination_guide annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
destination_faq — Destination FAQ by name
Advertised by the server during the last successful anonymous check.
Advertised read-only

Answer a question about a named destination from its published FAQs; omit query to read them all.

destination_faq input schema
{
  "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."
    }
  }
}
destination_faq output schema
{
  "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
}
destination_faq annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
destination_offers — Search a destination's offers by name
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

destination_offers input schema
{
  "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."
    }
  }
}
destination_offers output schema
{
  "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
}
destination_offers annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
destination_seasonality — Destination seasonality by name
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get a named destination's best time to visit, weather and wildlife seasons (e.g. whale watching), month by month.

destination_seasonality input schema
{
  "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."
    }
  }
}
destination_seasonality output schema
{
  "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
}
destination_seasonality annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

1 advertised

find_a_venue — Find a venue

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

One published venue's summary, capabilities and live mcp_endpoint.

directory_venue URI template
yenta://venue/{slug}

MIME type: application/json

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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http yenta-directory-mcp https://mcp.yentaknows.ai/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add yenta-directory-mcp --url https://mcp.yentaknows.ai/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable yenta-directory-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "yenta-directory-mcp": {
      "url": "https://mcp.yentaknows.ai/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "yenta-directory-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.yentaknows.ai/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start yenta-directory-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "yenta-directory-mcp": {
      "type": "http",
      "url": "https://mcp.yentaknows.ai/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http yenta-directory-mcp https://mcp.yentaknows.ai/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "yenta-directory-mcp": {
      "url": "https://mcp.yentaknows.ai/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.

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.

Claim this listing