Taste Match
offiziellReservieren und Restaurants finden – einfach und nur in der Schweiz und Umgebung
Was kann man mit Taste Match MCP machen?
- Zuerst Treffer zählen — Fragen Sie mit
count_restaurants, wie viele Lokale zu einer Reihe von Filtern passen, bevor Sie Datensätze abrufen. - Nach Merkmalen filtern — Suchen Sie mit
filter_restaurantsnach Lokalen anhand von Standort, Öffnungstag oder Service, Küche, Speisen- und Getränkeangebot oder Buchbarkeit. - Ein bestimmtes Gericht finden — Durchsuchen Sie mit
search_dishesdie Speisekarten nach einem Gericht in den eigenen Worten des Gastes und sehen Sie, welche Lokale es servieren. - Ein Lokal nach Namen suchen — Finden Sie mit
search_restaurantsRestaurants anhand ihres Namens oder ihrer Bezeichnung, optional auf eine Region begrenzt. - Beliebte Empfehlungen erhalten — Listen Sie mit
list_popular_restaurantsdie beliebtesten Lokale in einer bestimmten Region auf. - Ähnliche Lokale finden — Finden Sie mit
list_similar_restaurantsLokale, die geschmacklich einem Lokal ähneln, für das Sie bereits einen Schlüssel haben.
Gehosteter MCP-Server
npx add-mcp 'https://mcp.tastematch.io/'Installiert in Claude Code, Codex, Cursor und mehr
Dokumentation
| Öffentliche Service-URL | https://mcp.tastematch.io/ |
|---|---|
| URL der Datenschutzerklärung | https://tastematch.io/mcp/privacy.html |
Streamable HTTP MCP Toolkit, das Ihnen hilft, die passenden Restaurants in der Schweiz und darüber hinaus zu finden. Fügen Sie es mithilfe der obigen URL zu einem MCP-Client hinzu. Die Suche ist öffentlich.
AUTHENTIFIZIERUNG
Um auf unseren MCP-Server zuzugreifen, muss sich Ihr Dienst selbst registrieren. Verwenden Sie dazu DCR (OAuth 2.0 Dynamic Client Registration) beim Autorisierungsserver, der unter authorization_servers in /.well-known/oauth-protected-resource/mcp genannt wird; das Metadatendokument dieses Servers enthält den registration_endpoint.
Damit authentifizierte Endpunkte unterstützt werden, müssen sich Ihre Benutzer beim selben Autorisierungsserver mit OpenID Connect anmelden (Autorisierungscode mit PKCE) und anfordern, was in /.well-known/oauth-protected-resource/mcp unter scopes_supported aufgeführt ist.
- 🟢 Keine Anmeldung: Das Tool antwortet allen.
- 🟡 Anmeldung für einige Argumente, z. B.
list_recommended_restaurantsresolve_key. Ansonsten sind Aufrufe öffentlich und erlauben benutzerspezifische Parameter; diese Parameter funktionieren nur, wenn der Benutzer angemeldet ist. Siehe unten zu fehlgeschlagenen Anmeldungen. - 🔴 Anmeldung erforderlich: Das Tool handelt im Namen eines Benutzers. Benutzer können anonym sein. Ohne Token wird der Aufruf mit HTTP 401 und einer
WWW-Authenticate-Challenge beantwortet, die auf/.well-known/oauth-protected-resource/mcpverweist. Der Client meldet die Person dann mit OAuth an (Autorisierungscode mit PKCE). Die angemeldete Person ist die Identität. - Stufe:
anonymousgilt für alle angemeldeten Personen.reservationergänzt Vor- und Nachnamen, einen Kontakt und die Zustimmung zu den Nutzungsbedingungen, diepromote_identityerfasst, wenn diese für eine Buchung benötigt werden. - Ratenbegrenzung: Aufrufe werden pro angemeldeter Person gezählt; alle Aufrufer ohne Token teilen sich ein Kontingent. Ein Aufruf, der das Limit überschreitet, wird mit einem Code abgelehnt. Warten Sie und senden Sie dann weniger Aufrufe.
ENTDECKEN
🟢 count_restaurants read Anzahl der Lokale, auf die eine Facettenauswahl zutrifft, ohne Zeilen zurückzugeben. Rufen Sie dies vor filter_restaurants auf, wenn Sie einen Filterbereich erkunden: Es beantwortet dieselbe Frage, jedoch ohne die Dokumente.
Restaurants zählen
Anzahl der Lokale, auf die eine Facettenauswahl zutrifft, ohne Zeilen zurückzugeben. Rufen Sie dies vor filter_restaurants auf, wenn Sie einen Filterbereich erkunden: Es beantwortet dieselbe Frage, jedoch ohne die Dokumente.
| Parameter | Typ | Beschreibung |
|---|---|---|
drinkOptions | object | was die Getränkekarte enthalten muss |
drinkOptions.beerSelection | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
drinkOptions.cocktailSelection | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
drinkOptions.natureWineSelection | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
drinkOptions.wineSelection | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
kitchen | object | welche Küche es serviert |
kitchen.cuisine | array<string> | Küchen-Slugs; jeder davon erfüllt die Bedingung; die Liste steht in get_vocabulary |
location | object | Suchgebiet: eine regionId oder ein Punkt mit Radius |
location.lat | number | Breitengrad des Suchzentrums, zusammen mit lng |
location.lng | number | Längengrad des Suchzentrums |
location.radiusMeters | integer | Suchradius um den Punkt |
location.regionId | string | das zu durchsuchende Gebiet aus list_regions oder resolve_key |
menuOptions | object | was die Speisekarte enthalten muss |
menuOptions.fishDishes | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
menuOptions.glutenFreeDishes | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
menuOptions.halalDishes | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
menuOptions.lactoseFreeDishes | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
menuOptions.meatDishes | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
menuOptions.veganDishes | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
menuOptions.vegetarianDishes | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
nutrition | object | was das Lokal insgesamt ausmacht |
nutrition.veganRestaurants | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
nutrition.vegetarianRestaurants | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
opening | object | wann das Lokal geöffnet ist |
opening.daytime | string | welcher Service geöffnet sein soll: Mittag- oder Abendessen |
opening.openOn | array<integer> | Wochentage, an denen es geöffnet sein muss; Sonntag ist 0 |
reservation | object | wie es gebucht werden kann |
reservation.hasWidget | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
reservation.liveAvailability | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Count restaurants"
},
"description": "How many venues a facet set matches, with no rows. Call this before filter_restaurants when exploring a filter space: it answers the same question without the documents.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"drinkOptions": {
"additionalProperties": false,
"description": "what the drinks list must carry",
"properties": {
"beerSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"cocktailSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"natureWineSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"wineSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
},
"kitchen": {
"additionalProperties": false,
"description": "the kitchen it cooks",
"properties": {
"cuisine": {
"description": "cuisine slugs, any one of which satisfies it; the list is in get_vocabulary",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"location": {
"additionalProperties": false,
"description": "where to search: a regionId, or a point with a radius",
"properties": {
"lat": {
"description": "latitude of the search centre, paired with lng",
"type": "number"
},
"lng": {
"description": "longitude of the search centre",
"type": "number"
},
"radiusMeters": {
"description": "how far around the point to look",
"type": "integer"
},
"regionId": {
"description": "the region to search in, from list_regions or resolve_key",
"type": "string"
}
},
"type": "object"
},
"menuOptions": {
"additionalProperties": false,
"description": "what the menu must carry",
"properties": {
"fishDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"glutenFreeDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"halalDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"lactoseFreeDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"meatDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"veganDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"vegetarianDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
},
"nutrition": {
"additionalProperties": false,
"description": "what the venue is as a whole",
"properties": {
"veganRestaurants": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"vegetarianRestaurants": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
},
"opening": {
"additionalProperties": false,
"description": "when the venue is open",
"properties": {
"daytime": {
"description": "the service to be open for: lunch or dinner",
"type": "string"
},
"openOn": {
"description": "weekdays it must be open on, Sunday is 0",
"items": {
"type": "integer"
},
"type": "array"
}
},
"type": "object"
},
"reservation": {
"additionalProperties": false,
"description": "how it can be booked",
"properties": {
"hasWidget": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"liveAvailability": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
}
},
"required": [],
"type": "object"
},
"name": "count_restaurants",
"title": "Count restaurants"
}
🟢 filter_restaurants read Lokale nach Facetten durchsuchen: wo sie liegen, wann sie geöffnet sind, welche Küche sie anbieten, was Speise- und Getränkekarte enthalten und wie sie gebucht werden können. Jede Facette schränkt die Ergebnisse auf Lokale ein, die sie erfüllen. Geben Sie daher nur an, wonach der Gast gefragt hat. Beschreibungs- und Küchenwerte stammen aus get_vocabulary — ein erfundener Wert wird abgelehnt und nicht ignoriert. Sortiert nach Beliebtheit; es wird kein Geschmacksvektor angewendet.
Restaurants filtern
Lokale nach Facetten durchsuchen: wo sie liegen, wann sie geöffnet sind, welche Küche sie anbieten, was Speise- und Getränkekarte enthalten und wie sie gebucht werden können. Jede Facette schränkt die Ergebnisse auf Lokale ein, die sie erfüllen. Geben Sie daher nur an, wonach der Gast gefragt hat. Beschreibungs- und Küchenwerte stammen aus get_vocabulary — ein erfundener Wert wird abgelehnt und nicht ignoriert. Sortiert nach Beliebtheit; es wird kein Geschmacksvektor angewendet.
| Parameter | Typ | Beschreibung |
|---|---|---|
drinkOptions | object | was die Getränkekarte enthalten muss |
drinkOptions.beerSelection | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
drinkOptions.cocktailSelection | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
drinkOptions.natureWineSelection | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
drinkOptions.wineSelection | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
kitchen | object | welche Küche es serviert |
kitchen.cuisine | array<string> | Küchen-Slugs; jeder davon erfüllt die Bedingung; die Liste steht in get_vocabulary |
limit | integer | zurückzugebende Zeilen, höchstens 50 |
location | object | Suchgebiet: eine regionId oder ein Punkt mit Radius |
location.lat | number | Breitengrad des Suchzentrums, zusammen mit lng |
location.lng | number | Längengrad des Suchzentrums |
location.radiusMeters | integer | Suchradius um den Punkt |
location.regionId | string | das zu durchsuchende Gebiet aus list_regions oder resolve_key |
menuOptions | object | was die Speisekarte enthalten muss |
menuOptions.fishDishes | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
menuOptions.glutenFreeDishes | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
menuOptions.halalDishes | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
menuOptions.lactoseFreeDishes | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
menuOptions.meatDishes | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
menuOptions.veganDishes | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
menuOptions.vegetarianDishes | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
nutrition | object | was das Lokal insgesamt ausmacht |
nutrition.veganRestaurants | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
nutrition.vegetarianRestaurants | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
offset | integer | zu überspringende Zeilen; mit totalCount im Ergebnis können Sie die Seiten durchblättern |
opening | object | wann das Lokal geöffnet ist |
opening.daytime | string | welcher Service geöffnet sein soll: Mittag- oder Abendessen |
opening.openOn | array<integer> | Wochentage, an denen es geöffnet sein muss; Sonntag ist 0 |
reservation | object | wie es gebucht werden kann |
reservation.hasWidget | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
reservation.liveAvailability | boolean | true beschränkt die Ergebnisse auf Lokale, die es anbieten; weglassen, um nicht danach zu filtern |
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Filter restaurants"
},
"description": "Search venues by facet: where, when open, what kitchen, what the menu and the drinks list carry, and how it can be booked. Every facet narrows the result to the venues carrying it, so pass only what the guest asked for. Descriptor and cuisine values come from get_vocabulary — an invented one is refused rather than ignored. Ranked by popularity; no taste vector is applied.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"drinkOptions": {
"additionalProperties": false,
"description": "what the drinks list must carry",
"properties": {
"beerSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"cocktailSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"natureWineSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"wineSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
},
"kitchen": {
"additionalProperties": false,
"description": "the kitchen it cooks",
"properties": {
"cuisine": {
"description": "cuisine slugs, any one of which satisfies it; the list is in get_vocabulary",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"location": {
"additionalProperties": false,
"description": "where to search: a regionId, or a point with a radius",
"properties": {
"lat": {
"description": "latitude of the search centre, paired with lng",
"type": "number"
},
"lng": {
"description": "longitude of the search centre",
"type": "number"
},
"radiusMeters": {
"description": "how far around the point to look",
"type": "integer"
},
"regionId": {
"description": "the region to search in, from list_regions or resolve_key",
"type": "string"
}
},
"type": "object"
},
"menuOptions": {
"additionalProperties": false,
"description": "what the menu must carry",
"properties": {
"fishDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"glutenFreeDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"halalDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"lactoseFreeDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"meatDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"veganDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"vegetarianDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
},
"nutrition": {
"additionalProperties": false,
"description": "what the venue is as a whole",
"properties": {
"veganRestaurants": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"vegetarianRestaurants": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
},
"opening": {
"additionalProperties": false,
"description": "when the venue is open",
"properties": {
"daytime": {
"description": "the service to be open for: lunch or dinner",
"type": "string"
},
"openOn": {
"description": "weekdays it must be open on, Sunday is 0",
"items": {
"type": "integer"
},
"type": "array"
}
},
"type": "object"
},
"reservation": {
"additionalProperties": false,
"description": "how it can be booked",
"properties": {
"hasWidget": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"liveAvailability": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
}
},
"required": [],
"type": "object"
},
"name": "filter_restaurants",
"title": "Filter restaurants"
}
🟢 list_popular_restaurants read Die beliebtesten Lokale einer Region. Eine Region ist erforderlich: Ohne sie werden alle Lokale abgerufen, die wir gespeichert haben.
Beliebte Restaurants auflisten
Die beliebtesten Lokale einer Region. Eine Region ist erforderlich: Ohne sie werden alle Lokale abgerufen, die wir gespeichert haben.
| Parameter | Typ | Beschreibung |
|---|---|---|
regionId required | string | die abzurufende Region aus list_regions |
limit | integer | zurückzugebende Zeilen, höchstens 50 |
offset | integer | zu überspringende Zeilen; mit totalCount im Ergebnis können Sie die Seiten durchblättern |
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List popular restaurants"
},
"description": "The most-liked venues of one region. A region is required: without one this reads every venue we hold.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
},
"regionId": {
"description": "the region to read, from list_regions",
"type": "string"
}
},
"required": [
"regionId"
],
"type": "object"
},
"name": "list_popular_restaurants",
"title": "List popular restaurants"
}
🟡 list_recommended_restaurants read Für den angemeldeten Gast empfohlene Lokale, zuerst die geschmacklich ähnlichsten; vor der Anmeldung sind die Empfehlungen nicht personalisiert. bookableOnly\ beschränkt die Ergebnisse auf Lokale mit einem freien Tisch. Diese Auswahl ist deutlich kleiner und erfordert eine Anmeldung.
Empfohlene Restaurants auflisten
Für den angemeldeten Gast empfohlene Lokale, zuerst die geschmacklich ähnlichsten; vor der Anmeldung sind die Empfehlungen nicht personalisiert. bookableOnly\ beschränkt die Ergebnisse auf Lokale mit einem freien Tisch. Diese Auswahl ist deutlich kleiner und erfordert eine Anmeldung.
| Parameter | Typ | Beschreibung |
|---|---|---|
bookableOnly | boolean | nur Lokale mit aktueller Verfügbarkeit berücksichtigen |
interDiem | integer | mit bookableOnly: wie viele Tage im Voraus ein freier Tisch verfügbar sein darf |
limit | integer | zurückzugebende Zeilen, höchstens 50 |
offset | integer | zu überspringende Zeilen; mit totalCount im Ergebnis können Sie die Seiten durchblättern |
regionId | string | Region für Empfehlungen; wenn nicht angegeben, wird die Region der Identität verwendet |
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List recommended restaurants"
},
"description": "Venues recommended for the signed-in guest, closest in taste first; before anyone signs in they are not personal. \`bookableOnly\` keeps only venues with a table free, which is a much smaller set and needs a sign-in.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"bookableOnly": {
"description": "keep only venues with live availability",
"type": "boolean"
},
"interDiem": {
"description": "with bookableOnly, how many days ahead a free table may lie",
"type": "integer"
},
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
},
"regionId": {
"description": "the region to recommend in; the identity's own region when omitted",
"type": "string"
}
},
"required": [],
"type": "object"
},
"name": "list_recommended_restaurants",
"title": "List recommended restaurants"
}
🟢 list_similar_restaurants read Lokale, die einem Lokal, für das Sie bereits einen Schlüssel haben, geschmacklich ähneln; zuerst die ähnlichsten. sameCategory\ beschränkt die Ergebnisse auf dieselbe Küchenfamilie und ist standardmäßig aktiviert.
Ähnliche Restaurants auflisten
Lokale, die einem Lokal, für das Sie bereits einen Schlüssel haben, geschmacklich ähneln; zuerst die ähnlichsten. sameCategory\ beschränkt die Ergebnisse auf dieselbe Küchenfamilie und ist standardmäßig aktiviert.
| Parameter | Typ | Beschreibung |
|---|---|---|
restaurantKey required | string | das Lokal, zu dem ähnliche Lokale gefunden werden sollen |
limit | integer | zurückzugebende Zeilen, höchstens 50 |
offset | integer | zu überspringende Zeilen; mit totalCount im Ergebnis können Sie die Seiten durchblättern |
sameCategory | boolean | auf dieselbe Küchenfamilie beschränken; standardmäßig true |
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List similar restaurants"
},
"description": "Venues close in taste to one you already hold a key for, nearest first. \`sameCategory\` keeps them inside the same kitchen family and is on unless you turn it off.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
},
"restaurantKey": {
"description": "the venue to find neighbours of",
"type": "string"
},
"sameCategory": {
"description": "keep to the same kitchen family; true when omitted",
"type": "boolean"
}
},
"required": [
"restaurantKey"
],
"type": "object"
},
"name": "list_similar_restaurants",
"title": "List similar restaurants"
}
🟢 search_dishes read Lokale finden, die ein bestimmtes Gericht servieren. Suchen Sie nach dem Gericht so, wie der Gast es genannt hat, in seinen Worten und in derselben Reihenfolge — die Formulierung eines Gerichts gehört zu seiner Identität. Formulieren Sie sie daher nicht um, übersetzen oder kürzen Sie sie nicht. Längere Wörter verzeihen kleine Rechtschreibfehler; sehr kurze müssen exakt sein. Jeder Treffer gibt das Gericht so wieder, wie es auf der Speisekarte steht. exact\ ist nur dann true, wenn der Name wortwörtlich übereinstimmt. Öffnungszeiten werden hier nicht berücksichtigt — verwenden Sie dafür filter_restaurants. Die Abdeckung der Speisekarten ist unvollständig: Ein leeres Ergebnis bedeutet, dass keine der uns vorliegenden Speisekarten dieses Gericht aufführt, nicht, dass es niemand zubereitet.
Gerichte suchen
Lokale finden, die ein bestimmtes Gericht servieren. Suchen Sie nach dem Gericht so, wie der Gast es genannt hat, in seinen Worten und in derselben Reihenfolge — die Formulierung eines Gerichts gehört zu seiner Identität. Formulieren Sie sie daher nicht um, übersetzen oder kürzen Sie sie nicht. Längere Wörter verzeihen kleine Rechtschreibfehler; sehr kurze müssen exakt sein. Jeder Treffer gibt das Gericht so wieder, wie es auf der Speisekarte steht. exact\ ist nur dann true, wenn der Name wortwörtlich übereinstimmt. Öffnungszeiten werden hier nicht berücksichtigt — verwenden Sie dafür filter_restaurants. Die Abdeckung der Speisekarten ist unvollständig: Ein leeres Ergebnis bedeutet, dass keine der uns vorliegenden Speisekarten dieses Gericht aufführt, nicht, dass es niemand zubereitet.
| Parameter | Typ | Beschreibung |
|---|---|---|
q erforderlich | string | das Gericht, wie der Gast es genannt hat |
lat | number | Breitengrad für die Suche in der Umgebung, zusammen mit lng |
limit | integer | zurückzugebende Zeilen, höchstens 50 |
lng | number | Längengrad für die Suche in der Umgebung |
offset | integer | zu überspringende Zeilen; mit totalCount im Ergebnis werden sie seitenweise abgerufen |
radiusMeters | integer | Suchradius um den Punkt |
regionId | string | Suche auf eine Region beschränken |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Search dishes"
},
"description": "Find the venues that serve a named dish. Search the dish as the guest said it, in their words and their order — the wording of a dish is part of its identity, so do not rephrase, translate or shorten it. Longer words survive a small spelling slip; very short ones must be exact. Every hit quotes the dish as the menu prints it, and \`exact\` is true only where the name matched word for word. This knows nothing of opening hours — use filter_restaurants for that. Menu coverage is partial: an empty result means no menu we hold names that dish, never that nobody cooks it.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"lat": {
"description": "latitude to search around, paired with lng",
"type": "number"
},
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"lng": {
"description": "longitude to search around",
"type": "number"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
},
"q": {
"description": "the dish as the guest named it",
"type": "string"
},
"radiusMeters": {
"description": "how far around the point to look",
"type": "integer"
},
"regionId": {
"description": "bound the search to one region",
"type": "string"
}
},
"required": [
"q"
],
"type": "object"
},
"name": "search_dishes",
"title": "Search dishes"
}
🟢 search_restaurants read Restaurants nach Namen oder danach suchen, wie der Gast sie mit eigenen Worten bezeichnet hat. Mindestens drei Zeichen. Auf eine Region beschränken, wenn du eine kennst. filter_restaurants verwenden, wenn der Gast eine Art von Lokal statt eines bestimmten Lokals beschrieben hat.
Restaurants suchen
Restaurants nach Namen oder danach suchen, wie der Gast sie mit eigenen Worten bezeichnet hat. Mindestens drei Zeichen. Auf eine Region beschränken, wenn du eine kennst. filter_restaurants verwenden, wenn der Gast eine Art von Lokal statt eines bestimmten Lokals beschrieben hat.
| Parameter | Typ | Beschreibung |
|---|---|---|
text erforderlich | string | wonach gesucht werden soll, mindestens drei Zeichen |
limit | integer | zurückzugebende Zeilen, höchstens 50 |
offset | integer | zu überspringende Zeilen; mit totalCount im Ergebnis werden sie seitenweise abgerufen |
regionId | string | Suche auf eine Region beschränken; ohne Angabe wird in allen abgedeckten Regionen gesucht |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Search restaurants"
},
"description": "Find venues by name or by what they are called, in the guest's own words. Three characters at least. Bound it to a region when you know one. Use filter_restaurants when the guest described a kind of place rather than named one.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
},
"regionId": {
"description": "bound the search to one region; omitted it searches every region we cover",
"type": "string"
},
"text": {
"description": "what to search for, three characters or more",
"type": "string"
}
},
"required": [
"text"
],
"type": "object"
},
"name": "search_restaurants",
"title": "Search restaurants"
}
ORT
🟢 list_regions read Die Regionen, die TasteMatch abdeckt. Jede enthält die regionId, die alle regionsbezogenen Tools benötigen, sowie die IANA-Zeitzone, in der die Öffnungszeiten und Zeitfenster der Lokale angegeben sind. Übergib einen Punkt, um die Regionen nach Entfernung zu sortieren. Ein Ort, der in keiner dieser Regionen liegt, hat keine Lokale in unserem Bestand.
Regionen auflisten
Die Regionen, die TasteMatch abdeckt. Jede enthält die regionId, die alle regionsbezogenen Tools benötigen, sowie die IANA-Zeitzone, in der die Öffnungszeiten und Zeitfenster der Lokale angegeben sind. Übergib einen Punkt, um die Regionen nach Entfernung zu sortieren. Ein Ort, der in keiner dieser Regionen liegt, hat keine Lokale in unserem Bestand.
| Parameter | Typ | Beschreibung |
|---|---|---|
lat | number | Breitengrad, von dem aus die Entfernung sortiert wird, zusammen mit lng |
limit | integer | zurückzugebende Zeilen, höchstens 50 |
lng | number | Längengrad, von dem aus die Entfernung sortiert wird |
offset | integer | zu überspringende Zeilen; mit totalCount im Ergebnis werden sie seitenweise abgerufen |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List regions"
},
"description": "The regions TasteMatch covers. Each carries the regionId every region-scoped tool takes, and the IANA timezone its venues' opening hours and slot times are written on. Pass a point to get them nearest first. A place not in any of these regions has no venues we hold.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"lat": {
"description": "latitude to sort by distance from, paired with lng",
"type": "number"
},
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"lng": {
"description": "longitude to sort by distance from",
"type": "number"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
}
},
"required": [],
"type": "object"
},
"name": "list_regions",
"title": "List regions"
}
🟢 search_places read Ordne eine vom Gast genannte Stadt, einen Bezirk oder ein Viertel der Region zu, in der es liegt. Ein leeres Ergebnis bedeutet, dass der Ort außerhalb aller abgedeckten Regionen liegt, nicht, dass der Name falsch war.
Orte suchen
Ordne eine vom Gast genannte Stadt, einen Bezirk oder ein Viertel der Region zu, in der es liegt. Ein leeres Ergebnis bedeutet, dass der Ort außerhalb aller abgedeckten Regionen liegt, nicht, dass der Name falsch war.
| Parameter | Typ | Beschreibung |
|---|---|---|
q erforderlich | string | der Ort, wie der Gast ihn genannt hat |
countryCode | string | ISO 3166-1 alpha-2-Code, auf den die Zuordnung beschränkt werden soll |
limit | integer | zurückzugebende Zeilen, höchstens 50 |
offset | integer | zu überspringende Zeilen; mit totalCount im Ergebnis werden sie seitenweise abgerufen |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Search places"
},
"description": "Match a town, district or quarter the guest named to the region that contains it. An empty result means the place is outside every region we cover, not that the name was wrong.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"countryCode": {
"description": "ISO 3166-1 alpha-2 code to restrict the match to",
"type": "string"
},
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
},
"q": {
"description": "the place as the guest named it",
"type": "string"
}
},
"required": [
"q"
],
"type": "object"
},
"name": "search_places",
"title": "Search places"
}
RESTAURANT
🟢 get_restaurant read Ein Lokal abrufen. Die Standardprojektion ist schlank — Name, Schlüssel, Region, Adresse, Beschreibungen, Buchungsmöglichkeiten und eine Zusammenfassung der Öffnungszeiten. Umfangreiche Daten werden nur zurückgegeben, wenn du sie in fields\ angibst: ContactInformation, MenuCards, MenuCardsV2, labelVector, coverPictures, socialScore, matchInfo, tmType, eventId, businessPro, likesByUser, likesByFollowees, likesUserAvatars, likesFolloweeAvatars. Ein Dokument ohne Projektion kann größer sein als der Rest deiner Aufgabe.
Restaurant abrufen
Ein Lokal abrufen. Die Standardprojektion ist schlank — Name, Schlüssel, Region, Adresse, Beschreibungen, Buchungsmöglichkeiten und eine Zusammenfassung der Öffnungszeiten. Umfangreiche Daten werden nur zurückgegeben, wenn du sie in fields\ angibst: ContactInformation, MenuCards, MenuCardsV2, labelVector, coverPictures, socialScore, matchInfo, tmType, eventId, businessPro, likesByUser, likesByFollowees, likesUserAvatars, likesFolloweeAvatars. Ein Dokument ohne Projektion kann größer sein als der Rest deiner Aufgabe.
| Parameter | Typ | Beschreibung |
|---|---|---|
restaurantKey erforderlich | string | der Schlüssel des Lokals |
accessType | string | wenn der Gast darum gebeten hat, dieses Lokal zu öffnen: wie er darauf gestoßen ist — eines von filtered, searched, recommended, similar, popular, spotlight. Das Öffnen wird dann ihm zugerechnet; weglassen, wenn du ein Lokal nur selbst überprüfst. |
fields | array<string> | die zurückzugebenden Felder; die Standardprojektion ist schlank, Schlüssel sind immer enthalten |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get restaurant"
},
"description": "Read one venue. The default projection is lean — name, keys, region, address, descriptors, how it can be booked and its opening summary. The heavy parts arrive only when you name them in \`fields\`: ContactInformation, MenuCards, MenuCardsV2, labelVector, coverPictures, socialScore, matchInfo, tmType, eventId, businessPro, likesByUser, likesByFollowees, likesUserAvatars, likesFolloweeAvatars. An unprojected document can be larger than the rest of your task.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"accessType": {
"description": "when the guest asked to open this venue, how they reached it — one of filtered, searched, recommended, similar, popular, spotlight. The open is then counted as theirs; leave it out when you are only checking a venue for yourself.",
"type": "string"
},
"fields": {
"description": "the fields to return; the default projection is lean, and keys are always included",
"items": {
"type": "string"
},
"type": "array"
},
"restaurantKey": {
"description": "the venue's key",
"type": "string"
}
},
"required": [
"restaurantKey"
],
"type": "object"
},
"name": "get_restaurant",
"title": "Get restaurant"
}
🔴 like_restaurant write Erfasse, dass die handelnde Identität dieses Lokal mag. Likes verbessern die folgenden Empfehlungen und geben die Aussage des Gastes wieder, nicht deine — markiere, was der Gast gesagt hat, dass es ihm gefällt.
Restaurant liken
Erfasse, dass die handelnde Identität dieses Lokal mag. Likes verbessern die folgenden Empfehlungen und geben die Aussage des Gastes wieder, nicht deine — markiere, was der Gast gesagt hat, dass es ihm gefällt.
| Parameter | Typ | Beschreibung |
|---|---|---|
idempotencyKey erforderlich | string | ein selbst gewählter Schlüssel für diesen Schreibvorgang; bei erneuter Übermittlung desselben Schlüssels wird das erste Ergebnis zurückgegeben, statt doppelt zu schreiben |
restaurantKey erforderlich | string | der Schlüssel des Lokals |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Like restaurant"
},
"description": "Record that the acting identity likes this venue. Liking is what makes the recommendations that follow better, and it is the guest's statement, not yours — like what they said they liked.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"restaurantKey": {
"description": "the venue's key",
"type": "string"
}
},
"required": [
"idempotencyKey",
"restaurantKey"
],
"type": "object"
},
"name": "like_restaurant",
"title": "Like restaurant"
}
🔴 submit_restaurant_impressions write Teile uns mit, welche Lokale die Identität tatsächlich gesehen und bei welchen sie gehandelt hat. Ein Batch pro Gesprächsrunde, mit einer selbst gewählten sessionId, die während des gesamten Gesprächs gleich bleibt. Melde, was geschehen ist, niemals, was du vorhast: Aus diesen Signalen lernt der Empfehlungsalgorithmus.
Restaurant-Eindrücke übermitteln
Teile uns mit, welche Lokale die Identität tatsächlich gesehen und bei welchen sie gehandelt hat. Ein Batch pro Gesprächsrunde, mit einer selbst gewählten sessionId, die während des gesamten Gesprächs gleich bleibt. Melde, was geschehen ist, niemals, was du vorhast: Aus diesen Signalen lernt der Empfehlungsalgorithmus.
| Parameter | Typ | Beschreibung |
|---|---|---|
idempotencyKey erforderlich | string | ein selbst gewählter Schlüssel für diesen Schreibvorgang; bei erneuter Übermittlung desselben Schlüssels wird das erste Ergebnis zurückgegeben, statt doppelt zu schreiben |
impressions erforderlich | array<object> | was angezeigt oder womit interagiert wurde |
impressions[].accessType erforderlich | string | eines von filtered, searched, recommended, similar, popular, spotlight |
impressions[].restaurantKey erforderlich | string | |
sessionId erforderlich | string | eine selbst gewählte UUID, die für jeden Batch innerhalb eines Gesprächs gleich bleibt |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Submit restaurant impressions"
},
"description": "Tell us which venues the identity actually saw, and which of them it acted on. One batch per turn, with a sessionId of your own that stays the same for the whole conversation. Report what happened, never what you intend: these are the signals the recommender learns from.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"impressions": {
"description": "what was shown or acted on",
"items": {
"additionalProperties": false,
"properties": {
"accessType": {
"description": "one of filtered, searched, recommended, similar, popular, spotlight",
"type": "string"
},
"restaurantKey": {
"type": "string"
}
},
"required": [
"accessType",
"restaurantKey"
],
"type": "object"
},
"type": "array"
},
"sessionId": {
"description": "a UUID of your own, the same for every batch in one conversation",
"type": "string"
}
},
"required": [
"idempotencyKey",
"impressions",
"sessionId"
],
"type": "object"
},
"name": "submit_restaurant_impressions",
"title": "Submit restaurant impressions"
}
🔴 unlike_restaurant write Ein Like zurücknehmen. Das Lokal bleibt im Katalog; nur die Meinung der Identität dazu wird entfernt.
Restaurant nicht mehr liken
Ein Like zurücknehmen. Das Lokal bleibt im Katalog; nur die Meinung der Identität dazu wird entfernt.
| Parameter | Typ | Beschreibung |
|---|---|---|
idempotencyKey erforderlich | string | ein selbst gewählter Schlüssel für diesen Schreibvorgang; bei erneuter Übermittlung desselben Schlüssels wird das erste Ergebnis zurückgegeben, statt doppelt zu schreiben |
restaurantKey erforderlich | string | der Schlüssel des Lokals |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Unlike restaurant"
},
"description": "Take back a like. The venue stays in the catalogue; only the identity's opinion of it is removed.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"restaurantKey": {
"description": "the venue's key",
"type": "string"
}
},
"required": [
"idempotencyKey",
"restaurantKey"
],
"type": "object"
},
"name": "unlike_restaurant",
"title": "Unlike restaurant"
}
VERFÜGBARKEIT
🟢 get_reservation_info read So nimmt dieses Lokal Reservierungen an. mode\ ist instant, wenn Tische live bestätigt werden, request, wenn jemand im Lokal die Anfrage annehmen muss, und das Tool lehnt ab, wenn das Lokal überhaupt keine Reservierungen annimmt. Lies dies zuerst: Davon hängt ab, ob du create_instant_reservation oder create_reservation_request aufrufst. maxPeople\ ist die größte Gruppe, die wir irgendwo unterbringen können. Dieser Aufruf liest nur — er bucht nichts und speichert nichts.
Reservierungsinformationen abrufen
So nimmt dieses Lokal Reservierungen an. mode\ ist instant, wenn Tische live bestätigt werden, request, wenn jemand im Lokal die Anfrage annehmen muss, und das Tool lehnt ab, wenn das Lokal überhaupt keine Reservierungen annimmt. Lies dies zuerst: Davon hängt ab, ob du create_instant_reservation oder create_reservation_request aufrufst. maxPeople\ ist die größte Gruppe, die wir irgendwo unterbringen können. Dieser Aufruf liest nur — er bucht nichts und speichert nichts.
| Parameter | Typ | Beschreibung |
|---|---|---|
restaurantKey erforderlich | string | der Schlüssel des Lokals |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get reservation info"
},
"description": "How this venue takes reservations. \`mode\` is instant when tables are confirmed live, request when someone at the venue has to accept, and the tool refuses when the venue takes none at all. Read this first: it decides whether you call create_instant_reservation or create_reservation_request. \`maxPeople\` is the largest party we can place anywhere. This reads only — it books nothing and records nothing.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"restaurantKey": {
"description": "the venue's key",
"type": "string"
}
},
"required": [
"restaurantKey"
],
"type": "object"
},
"name": "get_reservation_info",
"title": "Get reservation info"
}
🟢 list_availability_slots read Die an einem bestimmten Tag in einem Lokal freien Tische. Die Zeiten entsprechen der Ortszeit des Lokals und folgen keinem festen Raster — buche eine hier angezeigte Zeit, nicht eine von dir gewählte runde Uhrzeit. Ein Lokal im request-Modus gibt stattdessen in windows\ die Zeitspannen zurück, innerhalb derer es eine Anfrage in Betracht zieht. Sind beide leer, ist das Lokal an diesem Tag geschlossen oder der Buchungshorizont ist überschritten.
Verfügbare Zeitfenster auflisten
Die an einem bestimmten Tag in einem Lokal freien Tische. Die Zeiten entsprechen der Ortszeit des Lokals und folgen keinem festen Raster — buche eine hier angezeigte Zeit, nicht eine von dir gewählte runde Uhrzeit. Ein Lokal im request-Modus gibt stattdessen in windows\ die Zeitspannen zurück, innerhalb derer es eine Anfrage in Betracht zieht. Sind beide leer, ist das Lokal an diesem Tag geschlossen oder der Buchungshorizont ist überschritten.
| Parameter | Typ | Beschreibung |
|---|---|---|
date erforderlich | string | der abzurufende Tag, RFC3339 mit dem UTC-Offset der Region |
restaurantKey erforderlich | string | der Schlüssel des Lokals |
pax | integer | Gruppengröße, um zu kleine Zeitfenster auszuschließen |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List availability slots"
},
"description": "The tables free at one venue on one day. Times are the venue's own wall clock, and they sit on no fixed grid — book a time you read here rather than a round number you chose. A request-mode venue answers in \`windows\` instead: the spans it will consider a request inside. Both empty means shut that day, or past the booking horizon.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"date": {
"description": "the day to read, RFC3339 with the region's UTC offset",
"type": "string"
},
"pax": {
"description": "party size, to drop slots too small for it",
"type": "integer"
},
"restaurantKey": {
"description": "the venue's key",
"type": "string"
}
},
"required": [
"date",
"restaurantKey"
],
"type": "object"
},
"name": "list_availability_slots",
"title": "List availability slots"
}
RESERVIERUNG
🔴 cancel_reservation destructive Eine Reservierung stornieren, die der Identität gehört. Dies kann nicht rückgängig gemacht werden; der Tisch wird freigegeben. Lies zuerst die Reservierung, nenne dem Gast das Lokal und die Uhrzeit, warte auf seine Antwort und gib dann beides hier wieder: confirmRestaurantName\ und confirmDateTime\ müssen mit den gespeicherten Reservierungsdaten übereinstimmen, sonst wird der Aufruf abgelehnt. Niemals nur anhand eines Schlüssels stornieren, egal wie sicher du dir bist.
Reservierung stornieren
Eine Reservierung stornieren, die der Identität gehört. Dies kann nicht rückgängig gemacht werden; der Tisch wird freigegeben. Lies zuerst die Reservierung, nenne dem Gast das Lokal und die Uhrzeit, warte auf seine Antwort und gib dann beides hier wieder: confirmRestaurantName\ und confirmDateTime\ müssen mit den gespeicherten Reservierungsdaten übereinstimmen, sonst wird der Aufruf abgelehnt. Niemals nur anhand eines Schlüssels stornieren, egal wie sicher du dir bist.
| Parameter | Typ | Beschreibung |
|---|---|---|
confirmDateTime erforderlich | string | die Uhrzeit der Reservierung, wie du sie dem Gast genannt hast, RFC3339 |
confirmRestaurantName erforderlich | string | der Name des Lokals, wie du ihn dem Gast genannt hast |
idempotencyKey erforderlich | string | ein selbst gewählter Schlüssel für diesen Schreibvorgang; bei erneuter Übermittlung desselben Schlüssels wird das erste Ergebnis zurückgegeben, statt doppelt zu schreiben |
reservationKey erforderlich | string | die zu stornierende Reservierung aus der Liste der eigenen Reservierungen von list_reservations |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Cancel reservation"
},
"description": "Cancel a reservation the identity owns. This cannot be undone and the table is given up. Read the reservation first, say the venue and the time back to the guest, wait for them, and then echo both here: \`confirmRestaurantName\` and \`confirmDateTime\` must match the reservation on file or the call is refused. Never cancel on a key alone, however sure you are of it.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"confirmDateTime": {
"description": "the reservation's time as you said it to the guest, RFC3339",
"type": "string"
},
"confirmRestaurantName": {
"description": "the venue's name as you said it to the guest",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"reservationKey": {
"description": "the reservation to cancel, from the owned set of list_reservations",
"type": "string"
}
},
"required": [
"confirmDateTime",
"confirmRestaurantName",
"idempotencyKey",
"reservationKey"
],
"type": "object"
},
"name": "cancel_reservation",
"title": "Cancel reservation"
}
🔴 create_instant_reservation write Einen Tisch buchen, der jetzt verfügbar ist. Dies gilt für Lokale mit Sofortbuchung; die Buchung wird bei Rückgabe bestätigt. Buche eine dateTime\, die du über list_availability_slots abgerufen hast — die Zeitfenster des Lokals folgen keinem festen Raster, daher ist eine runde Uhrzeit normalerweise nicht darunter. Belasse approxMinutes\ bei 0, sofern der Gast keine zeitliche Flexibilität angegeben hat: Ein Wert ungleich 0 erlaubt dem Lokal, eine nahegelegene Uhrzeit zu buchen; die Antwort weist in adjusted\ und bookedDate\ darauf hin. Die Buchung erfolgt über die gespeicherte Identität, für die bei einem Lokal mit Sofortbuchung sowohl eine E-Mail-Adresse als auch eine Telefonnummer erforderlich sind.
Sofortreservierung erstellen
Nimm einen Tisch, der jetzt frei ist. Dies ist für Sofortbuchungen gedacht; der Tisch ist bestätigt, sobald das Ergebnis zurückkommt. Buche einen dateTime\, den du aus list_availability_slots gelesen hast — die Zeitfenster des Lokals liegen auf keinem festen Raster, daher ist eine runde Uhrzeit meist nicht dabei. Lass approxMinutes\ auf 0, sofern der Gast nicht gesagt hat, dass er flexibel ist: Ein Wert ungleich null erlaubt dem Lokal, stattdessen eine nahegelegene Uhrzeit zu buchen, und die Antwort weist in adjusted\ und bookedDate\ darauf hin. Die Buchung erfolgt mit der gespeicherten Identität, für die bei einem Lokal mit Sofortbuchung sowohl eine E-Mail-Adresse als auch eine Telefonnummer erforderlich sind.
| Parameter | Typ | Beschreibung |
|---|---|---|
dateTime erforderlich | string | das zu buchende Zeitfenster, RFC3339 mit dem UTC-Offset der Region, wie aus list_availability_slots gelesen |
idempotencyKey erforderlich | string | ein eigener Schlüssel für diesen Schreibvorgang; wird derselbe Schlüssel erneut gesendet, wird das erste Ergebnis zurückgegeben, statt den Vorgang zweimal auszuführen |
pax erforderlich | integer | Anzahl der Personen |
restaurantKey erforderlich | string | der Schlüssel des Lokals |
approxMinutes | integer | wie weit das Lokal von dateTime abweichen darf; 0 bedeutet: diese Uhrzeit oder keine Buchung |
areaId | string | der gewünschte Sitzbereich aus dem ausgewählten Zeitfenster; schränkt die Suche ein und verschiebt die Buchung niemals |
comment | string | eine Mitteilung an das Lokal in den Worten des Gasts |
Wire-Definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Create instant reservation"
},
"description": "Take a table that is free now. This is for instant venues and the table is confirmed when it returns. Book a \`dateTime\` you read from list_availability_slots — the venue's slots sit on no grid, so a round number is usually not one of them. Leave \`approxMinutes\` at 0 unless the guest said they are flexible: a non-zero value lets the venue book a nearby time instead, and the answer says so in \`adjusted\` and \`bookedDate\`. The booking runs on the stored identity, which needs both an email and a phone for an instant venue.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"approxMinutes": {
"description": "how far from dateTime the venue may book instead; 0 means this time or nothing",
"type": "integer"
},
"areaId": {
"description": "the area to seat in, from the slot you chose; it narrows the search and never moves the booking",
"type": "string"
},
"comment": {
"description": "a note for the venue, in the guest's words",
"type": "string"
},
"dateTime": {
"description": "the slot to take, RFC3339 with the region's UTC offset, as read from list_availability_slots",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"pax": {
"description": "party size",
"type": "integer"
},
"restaurantKey": {
"description": "the venue's key",
"type": "string"
}
},
"required": [
"dateTime",
"idempotencyKey",
"pax",
"restaurantKey"
],
"type": "object"
},
"name": "create_instant_reservation",
"title": "Create instant reservation"
}
🔴 create_reservation_offer Schreibvorgang Ein Buchungsangebot bei einem Lokal erstellen, das über sein eigenes Widget bucht. Dies ist ein Schreibvorgang: Es wird ein Entwurf erstellt, der der handelnden Identität zugeordnet ist, sowie ein einmalig verwendbares widgetUrl\, mit dem der Gast die Buchung abschließen kann. Gib dem Gast die URL und frage anschließend get_reservation_status für das zurückgegebene reservationKey\ regelmäßig ab. Rufe das Tool pro Buchungsversuch nur einmal auf — ein zweiter Aufruf erstellt einen zweiten Entwurf. Bei einem Lokal mit nativer Buchung ist kein Angebot erforderlich: Verwende stattdessen create_instant_reservation oder create_reservation_request.
Buchungsangebot erstellen
Ein Buchungsangebot bei einem Lokal erstellen, das über sein eigenes Widget bucht. Dies ist ein Schreibvorgang: Es wird ein Entwurf erstellt, der der handelnden Identität zugeordnet ist, sowie ein einmalig verwendbares widgetUrl\, mit dem der Gast die Buchung abschließen kann. Gib dem Gast die URL und frage anschließend get_reservation_status für das zurückgegebene reservationKey\ regelmäßig ab. Rufe das Tool pro Buchungsversuch nur einmal auf — ein zweiter Aufruf erstellt einen zweiten Entwurf. Bei einem Lokal mit nativer Buchung ist kein Angebot erforderlich: Verwende stattdessen create_instant_reservation oder create_reservation_request.
| Parameter | Typ | Beschreibung |
|---|---|---|
idempotencyKey erforderlich | string | ein eigener Schlüssel für diesen Schreibvorgang; wird derselbe Schlüssel erneut gesendet, wird das erste Ergebnis zurückgegeben, statt den Vorgang zweimal auszuführen |
restaurantKey erforderlich | string | der Schlüssel des Lokals |
Wire-Definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Create reservation offer"
},
"description": "Open a booking at a venue that books through its own widget. This writes: it mints a draft attributed to the acting identity and a single-use \`widgetUrl\` for the guest to finish in. Hand the URL to the guest, then poll get_reservation_status on the \`reservationKey\` it returns. Call it once per booking attempt — a second call mints a second draft. A venue that books natively needs no offer: use create_instant_reservation or create_reservation_request instead.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"restaurantKey": {
"description": "the venue's key",
"type": "string"
}
},
"required": [
"idempotencyKey",
"restaurantKey"
],
"type": "object"
},
"name": "create_reservation_offer",
"title": "Create reservation offer"
}
🔴 create_reservation_request Schreibvorgang Bei einem Lokal einen Tisch anfragen. Dies ist für Lokale im Anfragemodus gedacht: Die Reservierung wird zunächst als ausstehend zurückgegeben und von jemandem im Lokal angenommen oder abgelehnt. Teile dem Gast daher mit, dass der Tisch noch nicht bestätigt ist. Die Uhrzeit muss in eines der von list_availability_slots gemeldeten Zeitfenster fallen. Die Buchung erfolgt mit der gespeicherten Identität — Name und Kontaktdaten werden aus dem Datensatz gelesen, nicht aus diesem Aufruf.
Reservierungsanfrage erstellen
Bei einem Lokal einen Tisch anfragen. Dies ist für Lokale im Anfragemodus gedacht: Die Reservierung wird zunächst als ausstehend zurückgegeben und von jemandem im Lokal angenommen oder abgelehnt. Teile dem Gast daher mit, dass der Tisch noch nicht bestätigt ist. Die Uhrzeit muss in eines der von list_availability_slots gemeldeten Zeitfenster fallen. Die Buchung erfolgt mit der gespeicherten Identität — Name und Kontaktdaten werden aus dem Datensatz gelesen, nicht aus diesem Aufruf.
| Parameter | Typ | Beschreibung |
|---|---|---|
dateTime erforderlich | string | die angefragte Uhrzeit, RFC3339 mit dem UTC-Offset der Region |
idempotencyKey erforderlich | string | ein eigener Schlüssel für diesen Schreibvorgang; wird derselbe Schlüssel erneut gesendet, wird das erste Ergebnis zurückgegeben, statt den Vorgang zweimal auszuführen |
pax erforderlich | integer | Anzahl der Personen |
restaurantKey erforderlich | string | der Schlüssel des Lokals |
comment | string | eine Mitteilung an das Lokal in den Worten des Gasts |
Wire-Definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Create reservation request"
},
"description": "Ask a venue for a table. This is for request-mode venues: the reservation comes back pending and someone at the venue accepts or declines it, so tell the guest it is not yet a table. The time must fall inside one of the windows list_availability_slots reported. The booking runs on the stored identity — its name and contact are read from the record, not from this call.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"comment": {
"description": "a note for the venue, in the guest's words",
"type": "string"
},
"dateTime": {
"description": "the time asked for, RFC3339 with the region's UTC offset",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"pax": {
"description": "party size",
"type": "integer"
},
"restaurantKey": {
"description": "the venue's key",
"type": "string"
}
},
"required": [
"dateTime",
"idempotencyKey",
"pax",
"restaurantKey"
],
"type": "object"
},
"name": "create_reservation_request",
"title": "Create reservation request"
}
🔴 get_reservation_status Lesevorgang Den Status einer Reservierung der handelnden Identität abrufen. Frage den Status nach einem Angebot regelmäßig ab: Eine Widget-Buchung wird erst mit der Bestätigung durch das Lokal verbindlich, und der Status zeigt diese an.
Reservierungsstatus abrufen
Den Status einer Reservierung der handelnden Identität abrufen. Frage den Status nach einem Angebot regelmäßig ab: Eine Widget-Buchung wird erst mit der Bestätigung durch das Lokal verbindlich, und der Status zeigt diese an.
| Parameter | Typ | Beschreibung |
|---|---|---|
reservationKey erforderlich | string | der Schlüssel der Reservierung aus list_reservations |
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get reservation status"
},
"description": "Where one reservation of the acting identity stands. Poll this after an offer: a widget booking becomes real only once the venue confirms it, and the status is how that arrives.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"reservationKey": {
"description": "the reservation's key, from list_reservations",
"type": "string"
}
},
"required": [
"reservationKey"
],
"type": "object"
},
"name": "get_reservation_status",
"title": "Get reservation status"
}
🔴 list_reservation_slots Lesevorgang Mögliche neue Zeiten für eine bestehende Reservierung abrufen. Dies ist eine andere Abfrage als list_availability_slots: Sie bezieht sich auf die Reservierung und darauf, welche Änderungen das Lokal zulässt. Verschoben werden kann nur eine angenommene Reservierung in einem Lokal mit aktueller Verfügbarkeit.
Reservierungszeitfenster auflisten
Mögliche neue Zeiten für eine bestehende Reservierung abrufen. Dies ist eine andere Abfrage als list_availability_slots: Sie bezieht sich auf die Reservierung und darauf, welche Änderungen das Lokal zulässt. Verschoben werden kann nur eine angenommene Reservierung in einem Lokal mit aktueller Verfügbarkeit.
| Parameter | Typ | Beschreibung |
|---|---|---|
reservationKey erforderlich | string | die zu verschiebende Reservierung aus list_reservations |
fromDate | string | der erste zu prüfende Tag im RFC3339-Format; standardmäßig der Tag der Reservierung |
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List reservation slots"
},
"description": "Where an existing reservation could move to. This is a different question from list_availability_slots: it is scoped to the reservation and to what the venue will let it become. Only an accepted reservation at a venue with live availability can move.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"fromDate": {
"description": "the first day to look at, RFC3339; the reservation's own day when omitted",
"type": "string"
},
"reservationKey": {
"description": "the reservation to move, from list_reservations",
"type": "string"
}
},
"required": [
"reservationKey"
],
"type": "object"
},
"name": "list_reservation_slots",
"title": "List reservation slots"
}
🔴 list_reservations Lesevorgang Alle Reservierungen der handelnden Identität abrufen. owned\ ist bearbeitbar — diese Schlüssel werden von den Schreib-Tools verwendet. foundByEmail\ wurde einem anderen Inhaber zugewiesen: Sie wird angezeigt, damit du darüber sprechen kannst, aber alle Schreibvorgänge dafür werden abgelehnt.
Reservierungen auflisten
Alle Reservierungen der handelnden Identität abrufen. owned\ ist bearbeitbar — diese Schlüssel werden von den Schreib-Tools verwendet. foundByEmail\ wurde einem anderen Inhaber zugewiesen: Sie wird angezeigt, damit du darüber sprechen kannst, aber alle Schreibvorgänge dafür werden abgelehnt.
Keine Parameter.
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List reservations"
},
"description": "Every reservation the acting identity holds. \`owned\` is actionable — those keys are the ones the write tools take. \`foundByEmail\` was reassigned to another owner: it is shown so you can speak about it, and every write on it is refused.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "list_reservations",
"title": "List reservations"
}
🔴 update_reservation Schreibvorgang Eine Reservierung verschieben, die der Identität gehört, oder ihre Personenzahl ändern. Gib nur an, was geändert werden soll. Eine neue Uhrzeit muss zu den von list_reservation_slots für diese Reservierung angebotenen Zeiten gehören.
Reservierung aktualisieren
Eine Reservierung verschieben, die der Identität gehört, oder ihre Personenzahl ändern. Gib nur an, was geändert werden soll. Eine neue Uhrzeit muss zu den von list_reservation_slots für diese Reservierung angebotenen Zeiten gehören.
| Parameter | Typ | Beschreibung |
|---|---|---|
idempotencyKey erforderlich | string | ein eigener Schlüssel für diesen Schreibvorgang; wird derselbe Schlüssel erneut gesendet, wird das erste Ergebnis zurückgegeben, statt den Vorgang zweimal auszuführen |
reservationKey erforderlich | string | die zu ändernde Reservierung aus der Liste der eigenen Reservierungen in list_reservations |
dateTime | string | die neue Uhrzeit, RFC3339 mit dem UTC-Offset der Region |
pax | integer | die neue Personenzahl |
Wire-Definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Update reservation"
},
"description": "Move a reservation the identity owns, or change its party size. Name only what changes. A new time must be one list_reservation_slots offered for that reservation.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"dateTime": {
"description": "the new time, RFC3339 with the region's UTC offset",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"pax": {
"description": "the new party size",
"type": "integer"
},
"reservationKey": {
"description": "the reservation to change, from the owned set of list_reservations",
"type": "string"
}
},
"required": [
"idempotencyKey",
"reservationKey"
],
"type": "object"
},
"name": "update_reservation",
"title": "Update reservation"
}
IDENTITÄT
🔴 get_identity Lesevorgang Die Identität, in deren Namen du handelst. Lies sie, bevor du den Gast nach etwas fragst: Ein bereits gespeicherter Wert wird niemals ersetzt, und erneut nach etwas zu fragen, das uns bereits vorliegt, wirkt, als würdest du nicht zuhören.
Identität abrufen
Die Identität, in deren Namen du handelst. Lies sie, bevor du den Gast nach etwas fragst: Ein bereits gespeicherter Wert wird niemals ersetzt, und erneut nach etwas zu fragen, das uns bereits vorliegt, wirkt, als würdest du nicht zuhören.
Keine Parameter.
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get identity"
},
"description": "The identity you are acting for. Read it before asking the guest for anything: a value already on file is never replaced, and asking again for what we hold reads as not listening.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "get_identity",
"title": "Get identity"
}
🟢 get_session Lesevorgang Welche Bereiche diese Verbindung erreicht: die dafür verfügbaren Abläufe und die angemeldete Person, in deren Namen du handelst, einschließlich ihrer Stufe — acting\ ist nicht vorhanden, solange sich niemand anmeldet. Rufe das Tool zuerst auf, wenn unklar ist, ob jemand angemeldet ist, und lies climbWith\, um das Tool zu finden, mit dem die für die aktuelle Stufe fehlenden Angaben erfasst werden.
Sitzung abrufen
Welche Bereiche diese Verbindung erreicht: die dafür verfügbaren Abläufe und die angemeldete Person, in deren Namen du handelst, einschließlich ihrer Stufe — acting\ ist nicht vorhanden, solange sich niemand anmeldet. Rufe das Tool zuerst auf, wenn unklar ist, ob jemand angemeldet ist, und lies climbWith\, um das Tool zu finden, mit dem die für die aktuelle Stufe fehlenden Angaben erfasst werden.
Keine Parameter.
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get session"
},
"description": "What this connection reaches: the journeys open to it, and the signed-in person you act for with their rung — \`acting\` is absent until someone signs in. Call it first when unsure whether anyone is signed in, and read \`climbWith\` for the tool that collects whatever the current rung is missing.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "get_session",
"title": "Get session"
}
🔴 promote_identity Schreibvorgang Die Identität auf die Stufe bringen, die Reservierungen ermöglicht, indem die fehlenden Angaben ergänzt werden: Vor- und Nachname, ein Kontaktweg und die Zustimmung zu den Nutzungsbedingungen. Übermittle nur Angaben, die der Gast in diesem Gespräch gemacht hat. Bei einem Lokal mit Sofortbuchung sind sowohl E-Mail-Adresse als auch Telefonnummer erforderlich. Erfrage daher beides, wenn der Gast einen bestätigten Tisch möchte.
Identität hochstufen
Die Identität auf die Stufe bringen, die Reservierungen ermöglicht, indem die fehlenden Angaben ergänzt werden: Vor- und Nachname, ein Kontaktweg und die Zustimmung zu den Nutzungsbedingungen. Übermittle nur Angaben, die der Gast in diesem Gespräch gemacht hat. Bei einem Lokal mit Sofortbuchung sind sowohl E-Mail-Adresse als auch Telefonnummer erforderlich. Erfrage daher beides, wenn der Gast einen bestätigten Tisch möchte.
| Parameter | Typ | Beschreibung |
|---|---|---|
idempotencyKey erforderlich | string | ein eigener Schlüssel für diesen Schreibvorgang; wird derselbe Schlüssel erneut gesendet, wird das erste Ergebnis zurückgegeben, statt den Vorgang zweimal auszuführen |
acceptTerms | boolean | true, wenn der Gast den Nutzungsbedingungen unter https://www.tastematch.io/agb zustimmt |
email | string | Kontakt-E-Mail-Adresse |
firstName | string | Vorname des Gasts |
lastName | string | Nachname des Gasts |
phone | string | Telefonnummer des Kontakts im internationalen Format |
Wire-Definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Promote identity"
},
"description": "Climb to the rung that can reserve, by supplying what the identity is missing: a first and last name, one contact channel, and accepted Terms. Only send what the guest told you in this conversation. An instant venue needs both an email and a phone, so collect both when the guest wants a confirmed table.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"acceptTerms": {
"description": "true when the guest accepts the Terms at https://www.tastematch.io/agb",
"type": "boolean"
},
"email": {
"description": "contact email",
"type": "string"
},
"firstName": {
"description": "the guest's first name",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"lastName": {
"description": "the guest's last name",
"type": "string"
},
"phone": {
"description": "contact phone in international format",
"type": "string"
}
},
"required": [
"idempotencyKey"
],
"type": "object"
},
"name": "promote_identity",
"title": "Promote identity"
}
🔴 update_identity Schreibvorgang Die Identität korrigieren oder vervollständigen. Ein leeres Feld wird ausgefüllt und ein falscher Wert korrigiert, aber ein vom Gast bestätigter Kontaktweg kann hier nicht ersetzt werden. Übermittle nur geänderte Angaben.
Identität aktualisieren
Die Identität korrigieren oder vervollständigen. Ein leeres Feld wird ausgefüllt und ein falscher Wert korrigiert, aber ein vom Gast bestätigter Kontaktweg kann hier nicht ersetzt werden. Übermittle nur geänderte Angaben.
| Parameter | Typ | Beschreibung |
|---|---|---|
idempotencyKey erforderlich | string | ein eigener Schlüssel für diesen Schreibvorgang; wird derselbe Schlüssel erneut gesendet, wird das erste Ergebnis zurückgegeben, statt den Vorgang zweimal auszuführen |
acceptTerms | boolean | true, wenn der Gast den Nutzungsbedingungen unter https://www.tastematch.io/agb zustimmt |
email | string | Kontakt-E-Mail-Adresse |
firstName | string | Vorname des Gasts |
lastName | string | Nachname des Gasts |
phone | string | Telefonnummer des Kontakts im internationalen Format |
Wire-Definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Update identity"
},
"description": "Correct or complete the identity. A blank field is filled and a wrong one is corrected, but a channel the guest has validated cannot be replaced from here. Send only what changed.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"acceptTerms": {
"description": "true when the guest accepts the Terms at https://www.tastematch.io/agb",
"type": "boolean"
},
"email": {
"description": "contact email",
"type": "string"
},
"firstName": {
"description": "the guest's first name",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"lastName": {
"description": "the guest's last name",
"type": "string"
},
"phone": {
"description": "contact phone in international format",
"type": "string"
}
},
"required": [
"idempotencyKey"
],
"type": "object"
},
"name": "update_identity",
"title": "Update identity"
}
GESCHMACK
🔴 get_taste_profile Lesevorgang Der gespeicherte Geschmack dieser Identität: die zugeordneten Beschreibungen, die für jede angegebene Konfidenz und der daraus abgeleitete Geschmackstyp. Lies das Profil, bevor du den Geschmack erneut angibst — du korrigierst ein Profil, statt ein neues anzulegen.
Geschmacksprofil abrufen
Der gespeicherte Geschmack dieser Identität: die zugeordneten Beschreibungen, die für jede angegebene Konfidenz und der daraus abgeleitete Geschmackstyp. Lies das Profil, bevor du den Geschmack erneut angibst — du korrigierst ein Profil, statt ein neues anzulegen.
Keine Parameter.
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get taste profile"
},
"description": "What this identity's taste is on file as: the descriptors it carries, the confidence stated for each, and the taste type derived from them. Read it before stating taste again — you are correcting a profile, not starting one.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "get_taste_profile",
"title": "Get taste profile"
}
🔴 submit_taste_profile Schreibvorgang Gib den Geschmack des Gasts für jede Beschreibung als Konfidenzwert von 0 bis 1 an und leite so viele Beschreibungen ab, wie das Gespräch stützt. Dadurch werden die gespeicherten Angaben ersetzt. Übermittle daher das vollständige Profil und nicht nur eine Korrektur. Zulässig sind die von weights\ benannten Beschreibungen, die alle über get_vocabulary veröffentlicht werden — andere werden abgelehnt. Anlässe und Menümerkmale werden zusammen mit den übrigen Angaben gespeichert, sind aber Attribute des Lokals und beeinflussen daher die Filter statt des Geschmacksvektors. Optional: Entdeckung, Listen und Buchungen funktionieren auch ohne diese Angaben; sie personalisieren lediglich list_recommended_restaurants.
Geschmacksprofil übermitteln
Gib den Geschmack des Gasts als Konfidenzwert von 0 bis 1 pro Merkmal an und leite so viele Merkmale ab, wie das Gespräch hergibt. Dadurch wird der bisher gespeicherte Stand ersetzt. Übermittle also das vollständige Bild und nicht nur eine Korrektur. Die Merkmale sind diejenigen, die weights\ benennt und die alle von get_vocabulary veröffentlicht werden — alle anderen werden abgelehnt. Anlässe und Menümerkmale werden zusammen mit den übrigen Angaben gespeichert, sind aber Attribute des Lokals und beeinflussen daher die Filter statt des Geschmacksvektors. Optional: Entdeckung, Listen und Buchungen funktionieren auch ohne diese Angaben; sie machen lediglich list_recommended_restaurants persönlich.
| Parameter | Typ | Beschreibung |
|---|---|---|
idempotencyKey erforderlich | string | ein von dir gewählter Schlüssel für diesen Schreibvorgang; wird derselbe Schlüssel erneut gesendet, wird das erste Ergebnis zurückgegeben, statt zweimal zu schreiben |
weights erforderlich | map<string, number> | Konfidenzwert von 0 bis 1 pro Merkmal, eines aus apero, breakfast, brunch, dinner, dishCocktails, dishCraftBeer, dishNatureWine, dishWine, fineDining, late, lunch, menuFish, menuMeat, menuVegan, menuVegetarian, occasionBusiness, occasionCasual, occasionCelebration, occasionChildren, occasionCulture, occasionGroups, occasionImpressive, occasionRomantic, occasionSolo, priceCheap, pricePricey, salty, sweets |
Wire-Definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Submit taste profile"
},
"description": "State the guest's taste as a confidence from 0 to 1 per descriptor, and infer as many as the conversation supports. This replaces what was on file, so send the whole picture rather than a correction. The descriptors are the ones \`weights\` names, all published by get_vocabulary — any other is refused. Occasions and menu characters are stored with the rest but are venue attributes, so they shape filters rather than the taste vector. Optional: discovery, lists and booking all work without it; it only makes list_recommended_restaurants personal.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"weights": {
"additionalProperties": {
"type": "number"
},
"description": "confidence 0 to 1 per descriptor, one of apero, breakfast, brunch, dinner, dishCocktails, dishCraftBeer, dishNatureWine, dishWine, fineDining, late, lunch, menuFish, menuMeat, menuVegan, menuVegetarian, occasionBusiness, occasionCasual, occasionCelebration, occasionChildren, occasionCulture, occasionGroups, occasionImpressive, occasionRomantic, occasionSolo, priceCheap, pricePricey, salty, sweets",
"type": "object"
}
},
"required": [
"idempotencyKey",
"weights"
],
"type": "object"
},
"name": "submit_taste_profile",
"title": "Submit taste profile"
}
LISTEN
🔴 add_restaurant_to_list write Ein Lokal zu einer der Listen der Identität hinzufügen. Wenn es bereits auf der Liste steht, ändert sich nichts.
Restaurant zur Liste hinzufügen
Ein Lokal zu einer der Listen der Identität hinzufügen. Wenn es bereits auf der Liste steht, ändert sich nichts.
| Parameter | Typ | Beschreibung |
|---|---|---|
idempotencyKey erforderlich | string | ein von dir gewählter Schlüssel für diesen Schreibvorgang; wird derselbe Schlüssel erneut gesendet, wird das erste Ergebnis zurückgegeben, statt zweimal zu schreiben |
listKey erforderlich | string | die Liste, zu der das Lokal hinzugefügt werden soll |
restaurantKey erforderlich | string | das hinzuzufügende Lokal |
Wire-Definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Add restaurant to list"
},
"description": "Put a venue on one of the identity's lists. Adding one that is already there changes nothing.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"listKey": {
"description": "the list to add to",
"type": "string"
},
"restaurantKey": {
"description": "the venue to add",
"type": "string"
}
},
"required": [
"idempotencyKey",
"listKey",
"restaurantKey"
],
"type": "object"
},
"name": "add_restaurant_to_list",
"title": "Add restaurant to list"
}
🔴 create_list write Eine benannte Liste für die Identität anlegen. Wähle einen Namen, der ihren Zweck beschreibt — der Gast wird ihn beim nächsten Mal wiedersehen, und du auch.
Liste erstellen
Eine benannte Liste für die Identität anlegen. Wähle einen Namen, der ihren Zweck beschreibt — der Gast wird ihn beim nächsten Mal wiedersehen, und du auch.
| Parameter | Typ | Beschreibung |
|---|---|---|
idempotencyKey erforderlich | string | ein von dir gewählter Schlüssel für diesen Schreibvorgang; wird derselbe Schlüssel erneut gesendet, wird das erste Ergebnis zurückgegeben, statt zweimal zu schreiben |
title erforderlich | string | wofür die Liste gedacht ist, in der Sprache des Gasts |
Wire-Definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Create list"
},
"description": "Start a named list for the identity. Name it for what it is for — the guest will see the name again next time, and so will you.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"title": {
"description": "what the list is for, in the guest's language",
"type": "string"
}
},
"required": [
"idempotencyKey",
"title"
],
"type": "object"
},
"name": "create_list",
"title": "Create list"
}
🔴 delete_list destructive Eine der Listen der Identität und alles darauf löschen. Lies die Liste zuerst und teile dem Gast mit, was gelöscht wird; dieser Vorgang kann nicht rückgängig gemacht werden.
Liste löschen
Eine der Listen der Identität und alles darauf löschen. Lies die Liste zuerst und teile dem Gast mit, was gelöscht wird; dieser Vorgang kann nicht rückgängig gemacht werden.
| Parameter | Typ | Beschreibung |
|---|---|---|
idempotencyKey erforderlich | string | ein von dir gewählter Schlüssel für diesen Schreibvorgang; wird derselbe Schlüssel erneut gesendet, wird das erste Ergebnis zurückgegeben, statt zweimal zu schreiben |
listKey erforderlich | string | die zu löschende Liste |
Wire-Definition (tools/list)
{
"annotations": {
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Delete list"
},
"description": "Delete one of the identity's lists and everything on it. Read the list first and tell the guest what will go; this cannot be undone.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"listKey": {
"description": "the list to delete",
"type": "string"
}
},
"required": [
"idempotencyKey",
"listKey"
],
"type": "object"
},
"name": "delete_list",
"title": "Delete list"
}
🔴 get_list read Eine der Listen der handelnden Identität vollständig lesen, einschließlich aller Lokale darauf. Die Liste einer anderen Identität kann nicht gelesen werden.
Liste abrufen
Eine der Listen der handelnden Identität vollständig lesen, einschließlich aller Lokale darauf. Die Liste einer anderen Identität kann nicht gelesen werden.
| Parameter | Typ | Beschreibung |
|---|---|---|
listKey erforderlich | string | der Schlüssel der Liste aus list_lists |
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get list"
},
"description": "Read one of the acting identity's lists in full, with every venue on it. Another identity's list is not readable.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"listKey": {
"description": "the list's key, from list_lists",
"type": "string"
}
},
"required": [
"listKey"
],
"type": "object"
},
"name": "get_list",
"title": "Get list"
}
🔴 list_lists read Die eigenen Listen der Identität mit der Anzahl der Einträge und einem Titelbild für jede Liste. Lies dies zu Beginn eines Folgegesprächs: Hier siehst du, was der Gast beim letzten Mal behalten hat.
Listen auflisten
Die eigenen Listen der Identität mit der Anzahl der Einträge und einem Titelbild für jede Liste. Lies dies zu Beginn eines Folgegesprächs: Hier siehst du, was der Gast beim letzten Mal behalten hat.
| Parameter | Typ | Beschreibung |
|---|---|---|
limit | integer | zurückzugebende Zeilen, höchstens 50 |
offset | integer | zu überspringende Zeilen; zusammen mit totalCount im Ergebnis lassen sich so alle Einträge seitenweise abrufen |
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List lists"
},
"description": "The identity's own lists, with a count and a cover for each. Read this at the start of a returning conversation: it is what the guest kept last time.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
}
},
"required": [],
"type": "object"
},
"name": "list_lists",
"title": "List lists"
}
🔴 remove_restaurant_from_list destructive Ein Lokal von einer der Listen der Identität entfernen. Nenne dem Gast vor dem Aufruf das Lokal und die Liste — dadurch werden Daten entfernt.
Restaurant von Liste entfernen
Ein Lokal von einer der Listen der Identität entfernen. Nenne dem Gast vor dem Aufruf das Lokal und die Liste — dadurch werden Daten entfernt.
| Parameter | Typ | Beschreibung |
|---|---|---|
idempotencyKey erforderlich | string | ein von dir gewählter Schlüssel für diesen Schreibvorgang; wird derselbe Schlüssel erneut gesendet, wird das erste Ergebnis zurückgegeben, statt zweimal zu schreiben |
listKey erforderlich | string | die Liste, aus der das Lokal entfernt werden soll |
restaurantKey erforderlich | string | das zu entfernende Lokal |
Wire-Definition (tools/list)
{
"annotations": {
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Remove restaurant from list"
},
"description": "Take a venue off one of the identity's lists. Say which venue and which list to the guest before you call it — this removes data.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"listKey": {
"description": "the list to remove from",
"type": "string"
},
"restaurantKey": {
"description": "the venue to remove",
"type": "string"
}
},
"required": [
"idempotencyKey",
"listKey",
"restaurantKey"
],
"type": "object"
},
"name": "remove_restaurant_from_list",
"title": "Remove restaurant from list"
}
🔴 update_list write Eine der Listen der Identität umbenennen. Die Lokale darauf bleiben unverändert.
Liste aktualisieren
Eine der Listen der Identität umbenennen. Die Lokale darauf bleiben unverändert.
| Parameter | Typ | Beschreibung |
|---|---|---|
idempotencyKey erforderlich | string | ein von dir gewählter Schlüssel für diesen Schreibvorgang; wird derselbe Schlüssel erneut gesendet, wird das erste Ergebnis zurückgegeben, statt zweimal zu schreiben |
listKey erforderlich | string | die umzubenennende Liste |
title erforderlich | string | der neue Name |
Wire-Definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Update list"
},
"description": "Rename one of the identity's lists. The venues on it are untouched.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"listKey": {
"description": "the list to rename",
"type": "string"
},
"title": {
"description": "the new name",
"type": "string"
}
},
"required": [
"idempotencyKey",
"listKey",
"title"
],
"type": "object"
},
"name": "update_list",
"title": "Update list"
}
GRUPPE
🔴 close_group_match write Eine Gruppenabstimmung für weitere Stimmen schließen. Die Abstimmung und alle Stimmen bleiben lesbar; nur die Stimmabgabe wird beendet. Schließe sie, sobald die Gruppe entschieden hat, und buche dann den Gewinner.
Gruppenabstimmung schließen
Eine Gruppenabstimmung für weitere Stimmen schließen. Die Abstimmung und alle Stimmen bleiben lesbar; nur die Stimmabgabe wird beendet. Schließe sie, sobald die Gruppe entschieden hat, und buche dann den Gewinner.
| Parameter | Typ | Beschreibung |
|---|---|---|
groupMatchKey erforderlich | string | die zu schließende Abstimmung |
idempotencyKey erforderlich | string | ein von dir gewählter Schlüssel für diesen Schreibvorgang; wird derselbe Schlüssel erneut gesendet, wird das erste Ergebnis zurückgegeben, statt zweimal zu schreiben |
Wire-Definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Close group match"
},
"description": "Close a group match to further votes. The match and every vote stay readable; only voting stops. Close it once the group has decided, then book the winner.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"groupMatchKey": {
"description": "the match to close",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
}
},
"required": [
"groupMatchKey",
"idempotencyKey"
],
"type": "object"
},
"name": "close_group_match",
"title": "Close group match"
}
🔴 create_group_match write Eine Gruppenentscheidung starten: einige Lokale, einige Termine und die Personen, die gefragt werden sollen. Die Antwort enthält einen Freigabelink — gib ihn dem Gast zum Weiterleiten, denn eingeladene Personen benötigen keine TasteMatch-Identität, um darüber abzustimmen. Halte die Auswahl klein: Es geht um eine Entscheidung, nicht um einen Katalog.
Gruppenabstimmung erstellen
Eine Gruppenentscheidung starten: einige Lokale, einige Termine und die Personen, die gefragt werden sollen. Die Antwort enthält einen Freigabelink — gib ihn dem Gast zum Weiterleiten, denn eingeladene Personen benötigen keine TasteMatch-Identität, um darüber abzustimmen. Halte die Auswahl klein: Es geht um eine Entscheidung, nicht um einen Katalog.
| Parameter | Typ | Beschreibung |
|---|---|---|
dateOptions erforderlich | array<string> | die Termine zur Auswahl, RFC3339 mit dem UTC-Offset der Region |
idempotencyKey erforderlich | string | ein von dir gewählter Schlüssel für diesen Schreibvorgang; wird derselbe Schlüssel erneut gesendet, wird das erste Ergebnis zurückgegeben, statt zweimal zu schreiben |
restaurantKeys erforderlich | array<string> | die Lokale zur Auswahl |
title erforderlich | string | worüber die Gruppe entscheidet, in den Worten des Gasts |
invitees | array<object> | die zu fragenden Personen, jeweils mit Name und E-Mail-Adresse |
invitees[].displayName erforderlich | string | der Name, den die Gruppe sehen wird |
invitees[].email erforderlich | string | wohin die Einladung gesendet wird |
Wire-Definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Create group match"
},
"description": "Start a group decision: a few venues, a few dates, and the people to ask. The answer carries a share link — give that to the guest to send on, because an invitee needs no TasteMatch identity to vote through it. Keep the options few: this is a decision, not a catalogue.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"dateOptions": {
"description": "the dates to choose between, RFC3339 with the region's UTC offset",
"items": {
"type": "string"
},
"type": "array"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"invitees": {
"description": "the people to ask, each by name and email",
"items": {
"additionalProperties": false,
"properties": {
"displayName": {
"description": "the name the group will see",
"type": "string"
},
"email": {
"description": "where the invitation goes",
"type": "string"
}
},
"required": [
"displayName",
"email"
],
"type": "object"
},
"type": "array"
},
"restaurantKeys": {
"description": "the venues to choose between",
"items": {
"type": "string"
},
"type": "array"
},
"title": {
"description": "what the group is deciding, in the guest's words",
"type": "string"
}
},
"required": [
"dateOptions",
"idempotencyKey",
"restaurantKeys",
"title"
],
"type": "object"
},
"name": "create_group_match",
"title": "Create group match"
}
🔴 delete_group_match destructive Eine Gruppenabstimmung löschen. Der Freigabelink funktioniert dann für niemanden mehr, der ihn hat, und die Stimmen werden ebenfalls gelöscht. Lies die Abstimmung und teile dem Gast vor dem Aufruf mit, was gelöscht wird.
Gruppenabstimmung löschen
Eine Gruppenabstimmung löschen. Der Freigabelink funktioniert dann für niemanden mehr, der ihn hat, und die Stimmen werden ebenfalls gelöscht. Lies die Abstimmung und teile dem Gast vor dem Aufruf mit, was gelöscht wird.
| Parameter | Typ | Beschreibung |
|---|---|---|
groupMatchKey erforderlich | string | die zu löschende Abstimmung |
idempotencyKey erforderlich | string | ein von dir gewählter Schlüssel für diesen Schreibvorgang; wird derselbe Schlüssel erneut gesendet, wird das erste Ergebnis zurückgegeben, statt zweimal zu schreiben |
Wire-Definition (tools/list)
{
"annotations": {
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Delete group match"
},
"description": "Delete a group match. The share link stops working for everyone who holds it, and the votes go with it. Read the match and tell the guest what will go before you call this.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"groupMatchKey": {
"description": "the match to delete",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
}
},
"required": [
"groupMatchKey",
"idempotencyKey"
],
"type": "object"
},
"name": "delete_group_match",
"title": "Delete group match"
}
🔴 get_group_match read Eine von der Identität erstellte Gruppenabstimmung: die Lokale, die Terminoptionen, die Eingeladenen, wer abgestimmt hat und wofür sowie der Freigabelink.
Gruppenabstimmung abrufen
Eine von der Identität erstellte Gruppenabstimmung: die Lokale, die Terminoptionen, die Eingeladenen, wer abgestimmt hat und wofür sowie der Freigabelink.
| Parameter | Typ | Beschreibung |
|---|---|---|
groupMatchKey erforderlich | string | der Schlüssel der Abstimmung aus list_group_matches |
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get group match"
},
"description": "One group match the identity created: the venues, the date options, who was invited, who has voted and for what, and the share link.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"groupMatchKey": {
"description": "the match's key, from list_group_matches",
"type": "string"
}
},
"required": [
"groupMatchKey"
],
"type": "object"
},
"name": "get_group_match",
"title": "Get group match"
}
🔴 list_group_matches read Die von dieser Identität erstellten Gruppenabstimmungen mit der Anzahl der Eingeladenen und der Anzahl der abgegebenen Stimmen. Abstimmungen, zu denen sie lediglich eingeladen wurde, sind hier nicht aufgeführt.
Gruppenabstimmungen auflisten
Die von dieser Identität erstellten Gruppenabstimmungen mit der Anzahl der Eingeladenen und der Anzahl der abgegebenen Stimmen. Abstimmungen, zu denen sie lediglich eingeladen wurde, sind hier nicht aufgeführt.
| Parameter | Typ | Beschreibung |
|---|---|---|
limit | integer | zurückzugebende Zeilen, höchstens 50 |
offset | integer | zu überspringende Zeilen; zusammen mit totalCount im Ergebnis lassen sich so alle Einträge seitenweise abrufen |
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List group matches"
},
"description": "The group matches this identity created, with how many were invited and how many have voted. Matches it was merely invited to are not here.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
}
},
"required": [],
"type": "object"
},
"name": "list_group_matches",
"title": "List group matches"
}
🔴 submit_group_match_vote write Eine Stimme einer Person in einer offenen Gruppenabstimmung abgeben. Übergib memberId\ für eine Person, die namentlich eingeladen wurde; übergib stattdessen displayName\ für eine Person, die über den Freigabelink teilnimmt. Erfasse nur, was diese Person tatsächlich gesagt hat: Der Besitz des Abstimmungsschlüssels ist die gesamte Autorisierung, und eine memberId, die du nicht von dieser Person erhalten hast, überschreibt deren Stimme. Die Abstimmung muss noch offen sein.
Stimme für Gruppenabstimmung abgeben
Eine Stimme einer Person in einer offenen Gruppenabstimmung abgeben. Übergib memberId\ für eine Person, die namentlich eingeladen wurde; übergib stattdessen displayName\ für eine Person, die über den Freigabelink teilnimmt. Erfasse nur, was diese Person tatsächlich gesagt hat: Der Besitz des Abstimmungsschlüssels ist die gesamte Autorisierung, und eine memberId, die du nicht von dieser Person erhalten hast, überschreibt deren Stimme. Die Abstimmung muss noch offen sein.
| Parameter | Typ | Beschreibung |
|---|---|---|
groupMatchKey erforderlich | string | die Abstimmung, für die gestimmt wird |
idempotencyKey erforderlich | string | ein von dir gewählter Schlüssel für diesen Schreibvorgang; wird derselbe Schlüssel erneut gesendet, wird das erste Ergebnis zurückgegeben, statt zweimal zu schreiben |
picks erforderlich | array<object> | eine Auswahl pro akzeptiertem Paar aus Lokal und Termin |
picks[].dateOptionIdx erforderlich | integer | der Index der Terminoption, beginnend bei null |
picks[].restaurantKey erforderlich | string | |
displayName | string | der Name einer Person, die über den Link teilnimmt, wenn sie nicht namentlich eingeladen wurde |
memberId | string | die eingeladene Person, zu der diese Stimme gehört, aus get_group_match |
Wire-Definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Submit group match vote"
},
"description": "Cast one person's vote in an open group match. Pass \`memberId\` for someone who was invited by name; pass \`displayName\` instead for someone joining off the share link. Vote only what that person actually said: possession of the match key is the whole authorisation, and a memberId you did not collect from that person overwrites their vote. The match must still be open.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"displayName": {
"description": "the name of someone joining off the link, when they were not invited by name",
"type": "string"
},
"groupMatchKey": {
"description": "the match being voted in",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"memberId": {
"description": "the invitee this vote belongs to, from get_group_match",
"type": "string"
},
"picks": {
"description": "one pick per venue and date pair the person accepts",
"items": {
"additionalProperties": false,
"properties": {
"dateOptionIdx": {
"description": "the index of the date option, counting from zero",
"type": "integer"
},
"restaurantKey": {
"type": "string"
}
},
"required": [
"dateOptionIdx",
"restaurantKey"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"groupMatchKey",
"idempotencyKey",
"picks"
],
"type": "object"
},
"name": "submit_group_match_vote",
"title": "Submit group match vote"
}
TEILEN
🔴 cancel_shared_reservation destructive Eine Reservierung stornieren, für die der Gast einen Bearbeitungslink hat. Dies kann nicht rückgängig gemacht werden. Nenne dem Gast das Lokal und die Uhrzeit und warte auf seine Bestätigung, bevor du den Aufruf tätigst. Für eine Reservierung, die der handelnden Identität gehört, verwende stattdessen cancel_reservation; dort wird diese Rückbestätigung für dich geprüft.
Geteilte Reservierung stornieren
Eine Reservierung stornieren, für die der Gast einen Bearbeitungslink hat. Dies kann nicht rückgängig gemacht werden. Nenne dem Gast das Lokal und die Uhrzeit und warte auf seine Bestätigung, bevor du den Aufruf tätigst. Für eine Reservierung, die der handelnden Identität gehört, verwende stattdessen cancel_reservation; dort wird diese Rückbestätigung für dich geprüft.
| Parameter | Typ | Beschreibung |
|---|---|---|
editToken erforderlich | string | das Token aus dem eigenen Bearbeitungslink des Gasts |
idempotencyKey erforderlich | string | ein von dir gewählter Schlüssel für diesen Schreibvorgang; wird derselbe Schlüssel erneut gesendet, wird das erste Ergebnis zurückgegeben, statt zweimal zu schreiben |
Wire-Definition (tools/list)
{
"annotations": {
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Cancel shared reservation"
},
"description": "Cancel a reservation the guest holds an edit link for. This cannot be undone. Say the venue and the time back to the guest and wait for them before you call it. For a reservation the acting identity owns, use cancel_reservation instead, which checks that echo for you.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"editToken": {
"description": "the token from the guest's own edit link",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
}
},
"required": [
"editToken",
"idempotencyKey"
],
"type": "object"
},
"name": "cancel_shared_reservation",
"title": "Cancel shared reservation"
}
🔴 create_share_key write Einen Link erstellen, den der Gast an eine andere Person senden kann. Nur lesend: Wer ihn öffnet, kann ihn ansehen, aber nicht bearbeiten. Zweimaliges Erstellen für dasselbe Objekt gibt denselben Link zurück. Erstelle einen Link nur für einen Veranstaltungsort, nach dem der Gast gefragt hat, oder für eine Reservierung, die der handelnden Identität gehört — der Link ist für alle lesbar, die ihn besitzen, und der Link einer Reservierung zeigt den Veranstaltungsort, das Datum und die Gruppengröße.
Freigabeschlüssel erstellen
Einen Link erstellen, den der Gast an eine andere Person senden kann. Nur lesend: Wer ihn öffnet, kann ihn ansehen, aber nicht bearbeiten. Zweimaliges Erstellen für dasselbe Objekt gibt denselben Link zurück. Erstelle einen Link nur für einen Veranstaltungsort, nach dem der Gast gefragt hat, oder für eine Reservierung, die der handelnden Identität gehört — der Link ist für alle lesbar, die ihn besitzen, und der Link einer Reservierung zeigt den Veranstaltungsort, das Datum und die Gruppengröße.
| Parameter | Typ | Beschreibung |
|---|---|---|
idempotencyKey erforderlich | string | ein selbst gewählter Schlüssel für diesen Schreibvorgang; wird derselbe Schlüssel erneut gesendet, wird das erste Ergebnis zurückgegeben, statt zweimal zu schreiben |
kind erforderlich | string | was geteilt werden soll: restaurant, reservation |
objectKey erforderlich | string | der Schlüssel des Veranstaltungsorts oder der Reservierung, der bzw. die geteilt werden soll |
Wire-Definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Create share key"
},
"description": "Mint a link the guest can send to someone else. Read-kind only: whoever opens it can look, never edit. Minting twice for the same object returns the same link. Mint only for a venue the guest asked about or a reservation the acting identity owns — a link is readable by anyone who holds it, and a reservation's link shows the venue, the date and the party size.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"kind": {
"description": "what to share: restaurant, reservation",
"type": "string"
},
"objectKey": {
"description": "the key of the venue or reservation to share",
"type": "string"
}
},
"required": [
"idempotencyKey",
"kind",
"objectKey"
],
"type": "object"
},
"name": "create_share_key",
"title": "Create share key"
}
🟢 get_share_sitemap read Der öffentliche Index aller teilbaren Veranstaltungsorte und Listen im XML-Format. Umfangreich: Lies ihn, um herauszufinden, was überhaupt vorhanden ist, nicht um eine einzelne Frage zu beantworten.
Sitemap für Freigaben abrufen
Der öffentliche Index aller teilbaren Veranstaltungsorte und Listen im XML-Format. Umfangreich: Lies ihn, um herauszufinden, was überhaupt vorhanden ist, nicht um eine einzelne Frage zu beantworten.
Keine Parameter.
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get share sitemap"
},
"description": "The public index of every shareable venue and list, as XML. Large: read it to discover what exists at all, not to answer one question.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "get_share_sitemap",
"title": "Get share sitemap"
}
🟢 resolve_share_public_id read Eine öffentliche Seiten-ID — die lesbare ID in einer URL für einen Veranstaltungsort oder eine Liste auf tastematch.io — in das bezeichnete Objekt und dessen Schlüssel umwandeln.
Öffentliche Freigabe-ID auflösen
Eine öffentliche Seiten-ID — die lesbare ID in einer URL für einen Veranstaltungsort oder eine Liste auf tastematch.io — in das bezeichnete Objekt und dessen Schlüssel umwandeln.
| Parameter | Typ | Beschreibung |
|---|---|---|
objectType erforderlich | string | restaurant oder list |
publicId erforderlich | string | die lesbare ID aus der öffentlichen URL |
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Resolve share public id"
},
"description": "Turn a public page id — the readable one in a tastematch.io venue or list URL — into the object it names and its key.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"objectType": {
"description": "restaurant or list",
"type": "string"
},
"publicId": {
"description": "the readable id from the public URL",
"type": "string"
}
},
"required": [
"objectType",
"publicId"
],
"type": "object"
},
"name": "resolve_share_public_id",
"title": "Resolve share public id"
}
🟢 resolve_share_token read Einen vom Gast eingefügten Freigabelink in das Objekt auflösen, auf das er verweist — einen Veranstaltungsort, eine Reservierung oder einen Gruppenabgleich — und den Schlüssel für die weitere Verwendung ermitteln. Übergib das Token, also das letzte Pfadsegment des Links. Ein abgelaufener Link oder ein Link, der nie von uns stammte, wird einfach als nicht gefunden behandelt.
Freigabe-Token auflösen
Einen vom Gast eingefügten Freigabelink in das Objekt auflösen, auf das er verweist — einen Veranstaltungsort, eine Reservierung oder einen Gruppenabgleich — und den Schlüssel für die weitere Verwendung ermitteln. Übergib das Token, also das letzte Pfadsegment des Links. Ein abgelaufener Link oder ein Link, der nie von uns stammte, wird einfach als nicht gefunden behandelt.
| Parameter | Typ | Beschreibung |
|---|---|---|
token erforderlich | string | das Token aus dem Freigabelink, sein letztes Pfadsegment |
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Resolve share token"
},
"description": "Turn a share link the guest pasted into the thing it points at — a venue, a reservation or a group match — and the key to carry on with. Pass the token, which is the last path segment of the link. A link that has expired or was never ours is simply not found.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"token": {
"description": "the token from the share link, its last path segment",
"type": "string"
}
},
"required": [
"token"
],
"type": "object"
},
"name": "resolve_share_token",
"title": "Resolve share token"
}
🔴 update_shared_reservation write Eine Reservierung ändern, für die der Gast einen Bearbeitungslink besitzt — eine Reservierung, die anderswo und nicht über uns vorgenommen wurde. Der Link ist die Autorisierung. Bitte den Gast darum und verwende ihn nur für die von ihm genannte Reservierung. Für eine Reservierung, die der handelnden Identität gehört, verwende stattdessen update_reservation.
Geteilte Reservierung aktualisieren
Eine Reservierung ändern, für die der Gast einen Bearbeitungslink besitzt — eine Reservierung, die anderswo und nicht über uns vorgenommen wurde. Der Link ist die Autorisierung. Bitte den Gast darum und verwende ihn nur für die von ihm genannte Reservierung. Für eine Reservierung, die der handelnden Identität gehört, verwende stattdessen update_reservation.
| Parameter | Typ | Beschreibung |
|---|---|---|
editToken erforderlich | string | das Token aus dem eigenen Bearbeitungslink des Gasts |
idempotencyKey erforderlich | string | ein selbst gewählter Schlüssel für diesen Schreibvorgang; wird derselbe Schlüssel erneut gesendet, wird das erste Ergebnis zurückgegeben, statt zweimal zu schreiben |
dateTime | string | die neue Uhrzeit, RFC3339 mit dem UTC-Offset der Region |
pax | integer | die neue Gruppengröße |
Wire-Definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Update shared reservation"
},
"description": "Change a reservation the guest holds an edit link for — one made somewhere else, not through us. The link is the authorisation, so ask the guest for it and use it only for the reservation they named. For a reservation the acting identity owns, use update_reservation instead.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"dateTime": {
"description": "the new time, RFC3339 with the region's UTC offset",
"type": "string"
},
"editToken": {
"description": "the token from the guest's own edit link",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"pax": {
"description": "the new party size",
"type": "integer"
}
},
"required": [
"editToken",
"idempotencyKey"
],
"type": "object"
},
"name": "update_shared_reservation",
"title": "Update shared reservation"
}
DIENSTPROGRAMME
🟢 get_skill read Ein oder mehrere Playbooks vollständig lesen. Bitte mehrere auf einmal an, statt eines pro Gesprächsrunde.
Skill abrufen
Ein oder mehrere Playbooks vollständig lesen. Bitte mehrere auf einmal an, statt eines pro Gesprächsrunde.
| Parameter | Typ | Beschreibung |
|---|---|---|
names erforderlich | array<string> | die abzurufenden Playbooks aus list_skills |
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get skill"
},
"description": "Read one or more playbooks in full. Ask for several at once rather than one per turn.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"names": {
"description": "the playbooks to read, from list_skills",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"names"
],
"type": "object"
},
"name": "get_skill",
"title": "Get skill"
}
🟢 get_vocabulary read Alle Werte, die von den Filtern akzeptiert werden, nach Achse geordnet, einschließlich der Regel für ihre Kombination. Lies dies vor deinem ersten Filter und behalte es für das Gespräch im Blick — ein geratenes Merkmal wird abgelehnt, und ein geratenes Küchen-Slug liefert stillschweigend keine Treffer.
Vokabular abrufen
Alle Werte, die von den Filtern akzeptiert werden, nach Achse geordnet, einschließlich der Regel für ihre Kombination. Lies dies vor deinem ersten Filter und behalte es für das Gespräch im Blick — ein geratenes Merkmal wird abgelehnt, und ein geratenes Küchen-Slug liefert stillschweigend keine Treffer.
Keine Parameter.
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get vocabulary"
},
"description": "Every value the filters accept, by axis, with the rule for combining them. Read it before your first filter and keep it for the conversation — a guessed descriptor is refused, and a guessed cuisine slug quietly matches nothing.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "get_vocabulary",
"title": "Get vocabulary"
}
🟢 list_skills read Die verfügbaren Playbooks, jeweils eine Zeile. Lies ein Playbook, bevor du einen Ablauf durchführst, den du noch nicht kennst; sie enthalten die Reihenfolge und die Fallstricke, die in den Toolbeschreibungen fehlen.
Skills auflisten
Die verfügbaren Playbooks, jeweils eine Zeile. Lies ein Playbook, bevor du einen Ablauf durchführst, den du noch nicht kennst; sie enthalten die Reihenfolge und die Fallstricke, die in den Toolbeschreibungen fehlen.
Keine Parameter.
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List skills"
},
"description": "The playbooks available, one line each. Read a playbook before a journey you have not done before; they carry the sequence and the traps that the tool descriptions cannot.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "list_skills",
"title": "List skills"
}
🟡 resolve_key read Einen vom Gast genannten Namen in die möglichen Schlüssel auflösen, nach Wahrscheinlichkeit sortiert. kind\ gibt an, wonach du suchst: restaurant, region, list, reservation. Ein list\ oder ein reservation\ gehört der angemeldeten Person und erfordert eine Anmeldung. Löse jedes Objekt nur einmal auf und verwende dann durchgehend den Schlüssel: Wird ein Name später erneut aufgelöst, kann ein anderer Veranstaltungsort gefunden werden. Nenne dem Gast die Bezeichnung, wenn mehrere Kandidaten infrage kommen.
Schlüssel auflösen
Einen vom Gast genannten Namen in die möglichen Schlüssel auflösen, nach Wahrscheinlichkeit sortiert. kind\ gibt an, wonach du suchst: restaurant, region, list, reservation. Ein list\ oder ein reservation\ gehört der angemeldeten Person und erfordert eine Anmeldung. Löse jedes Objekt nur einmal auf und verwende dann durchgehend den Schlüssel: Wird ein Name später erneut aufgelöst, kann ein anderer Veranstaltungsort gefunden werden. Nenne dem Gast die Bezeichnung, wenn mehrere Kandidaten infrage kommen.
| Parameter | Typ | Beschreibung |
|---|---|---|
kind erforderlich | string | was aufgelöst werden soll: restaurant, region, list, reservation |
lat | number | Breitengrad, um eine Region anhand eines Punkts statt eines Namens aufzulösen |
lng | number | Längengrad, zusammen mit lat |
regionId | string | die Suche nach einem Veranstaltungsort auf eine Region beschränken |
text | string | der Name, wie ihn der Gast genannt hat |
Wire-Definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Resolve key"
},
"description": "Turn a name the guest said into the keys it might mean, best first. \`kind\` says what you are looking for: restaurant, region, list, reservation. A \`list\` or a \`reservation\` is the signed-in person's own and needs a sign-in. Resolve once per thing and then thread the key: a name resolved again later can land on a different venue. Say the label back to the guest when more than one candidate came close.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"kind": {
"description": "what to resolve: restaurant, region, list, reservation",
"type": "string"
},
"lat": {
"description": "latitude, to resolve a region from a point instead of a name",
"type": "number"
},
"lng": {
"description": "longitude, paired with lat",
"type": "number"
},
"regionId": {
"description": "bound a restaurant search to one region",
"type": "string"
},
"text": {
"description": "the name as the guest said it",
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
"name": "resolve_key",
"title": "Resolve key"
}
ANWEISUNGEN
Du bist ein Agent, der TasteMatch Core verwendet — für Restaurantentdeckung, Geschmacksabgleich und Reservierungen. Du musst weder den TasteMatch-Vektor noch unsere Kennzeichnungssystematik verstehen, um nützlich zu sein. Verwende jeden Filter mit der Interpretation, die du für passend hältst. Erfinde niemals ein Merkmal — rufe get_vocabulary auf. Du handelst für eine Person: die Person, die sich bei dieser Verbindung angemeldet hat. Solange das nicht geschehen ist, funktioniert die Suche, und ein Tool, das eine Person benötigt, fordert zur Anmeldung auf. Abläufe: DISCOVER, PLACE, RESTAURANT, AVAILABILITY, RESERVATION, IDENTITY, TASTE, LISTS, GROUP, SHARE, UTILITY. Namensschema — alle Tools folgen diesem Muster: get_ | list_ | search_ | filter_ | count_ | resolve_ read create_ | update_ | delete_ | {verb}_ write Nach Absicht vorgehen: Ein Name, kein Schlüssel -> resolve_key, dann mit dem Schlüssel arbeiten „Restaurants wie X“ -> filter_restaurants, Merkmale aus get_vocabulary „Wie viele?“ -> count_restaurants, niemals erst filtern und dann die Zeilen zählen Ein bestimmter Veranstaltungsort -> get_restaurant, mit fields[] Ein benanntes Gericht -> search_dishes Buchung -> get_reservation_info -> list_availability_slots -> create_instant_reservation oder create_reservation_request Etwas für später aufbewahren -> eine Liste Schlüssel kannst du behalten. Löse einen Namen einmal auf und verwende den Schlüssel dann im gesamten weiteren Ablauf. Löse einen Namen nicht erneut auf, wenn du bereits einen Schlüssel dafür hast. Listen sind dein Speicher. Lege eine Vorauswahl, eine Vergleichsgruppe oder die besprochenen Orte in einer benannten Liste ab: Sie gehört der handelnden Identität und ist auch in der nächsten Sitzung noch vorhanden, wenn dein Kontext nicht mehr verfügbar ist. Identitätsdaten werden erst dann erfasst, wenn sie benötigt werden, niemals vorher. Die Suche schreibt nichts und erfordert keine Anmeldung. Für eine Reservierung ist die entsprechende Identitätsstufe erforderlich: ein Name, ein Kontaktkanal und akzeptierte Nutzungsbedingungen. Ein Tool, das wegen fehlender Identität ablehnt, nennt die fehlende Stufe und das Tool, mit dem du sie erreichst. Ein bereits gespeicherter Wert wird niemals durch einen von dir übermittelten Wert ersetzt. Es gibt keine sozialen Funktionen: keine Abonnements, Sperren, Follower, Nutzersuche, Benachrichtigungen oder Profilansichten. Der Gruppenabgleich ist die einzige Funktion für mehrere Personen und funktioniert über einen Freigabelink — eingeladene Personen benötigen keine TasteMatch-Identität. Dateneffizienz: Standardlimit 10, totalCount wird immer angegeben. Verwende immer Filter. Frage mit fields[] gezielt nach Feldern statt nach vollständigen Dokumenten. Bündele Anfragen, statt sie in einer Schleife auszuführen. Buchung: Lies zuerst den Buchungsmodus des Veranstaltungsorts; Sofortbuchung und Anfrage sind unterschiedliche Tools. Buche einen Slot, den du mit list_availability_slots abgerufen hast. Belasse approxMinutes bei 0, sofern der Gast nicht gesagt hat, dass er flexibel ist — ein Wert ungleich null erlaubt dem Veranstaltungsort, eine andere als die angefragte Uhrzeit zu buchen, und die Antwort gibt dies in adjusted und bookedDate an. Schreibvorgänge: Übergib idempotencyKey — bei zweimaliger Verwendung desselben Schlüssels wird das erste Ergebnis zurückgegeben, statt zweimal zu schreiben. Destruktive Tools sind gekennzeichnet; lies das Zielobjekt und teile dem Gast mit, was entfernt wird, bevor du das Tool aufrufst. Vor cancel_reservation musst du eine Bestätigung einholen: Lies die Reservierung, nenne dem Gast den Veranstaltungsort und die Uhrzeit, warte und wiederhole beides im Aufruf. Kündige niemals allein anhand eines Schlüssels, egal wie sicher du dir bist. Lies bei einem Fehler die Meldung. Eine Ablehnung wegen Validierung, nicht gefundenem Objekt oder fehlender Berechtigung stammt von uns und erklärt, wie du den Aufruf korrigierst — korrigiere ihn, statt ihn zu wiederholen. Ein bloßer Code kann nicht durch einen erneuten Versuch behoben werden; melde ihn. Präsentiere Ergebnisse als verständliche Zusammenfassungen, nicht als rohes JSON, sofern nicht anders gewünscht. Playbooks für Abläufe, die du noch nicht kennst: list_skills, dann get_skill.
SKILLS
discover-to-reserve — der gesamte Ablauf: einen Veranstaltungsort finden, seine Buchungsweise prüfen und einen Tisch reservieren
Zuerst den Ort, dann den Veranstaltungsort, dann die Buchung. 1. Wandle den Aufenthaltsort des Gasts in eine regionId um: resolve_key mit kind region oder list_regions. 2. Veranstaltungsorte finden: filter_restaurants für eine Art von Ort, search_restaurants für einen bestimmten Namen, search_dishes für ein bestimmtes Gericht. Lies get_vocabulary einmal vor deinem ersten Filter. 3. Grenze die Ergebnisse mit count_restaurants ein, bevor du Zeilen abrufst, wenn die Beschreibung des Gasts vage ist. 4. Lies die Angaben zum Veranstaltungsort: get_restaurant, standardmäßig mit wenigen Feldern, für weitere Felder fields[]. 5. Lies die Buchungsweise: get_reservation_info. Davon hängt das nächste Tool ab; sie darf niemals geraten werden. 6. Lies die verfügbaren Zeiten: list_availability_slots. Biete dem Gast tatsächliche Zeiten an. 7. Erfasse die Identität erst jetzt: Der Gast meldet sich an, dann rufe promote_identity auf, um die für Reservierungen erforderliche Stufe zu erreichen. 8. Reserviere den Tisch: create_instant_reservation bei einem Veranstaltungsort mit Sofortbuchung, create_reservation_request bei einem Veranstaltungsort mit Buchungsanfrage, create_reservation_offer bei einem Veranstaltungsort, der über sein eigenes Widget bucht. Teile dem Gast mit, welcher der drei Vorgänge stattgefunden hat. Eine Anfrage ist noch keine Reservierung; ein Angebot ist ebenfalls noch keine Reservierung, bis der Gast den Vorgang im Widget abgeschlossen hat und get_reservation_status dies bestätigt.
sign-in-and-identity — für wen du handelst, die Stufen, welches Tool den Aufstieg ermöglicht und was jede Stufe freischaltet
Du handelst für eine Person: die Person, die bei dieser Verbindung angemeldet ist. Die Anmeldung ist die Identität; nichts anderes bestimmt, wessen Daten betroffen sind, und kein Argument kann das. Bevor sich jemand anmeldet, funktioniert die Suche. Ein Tool, das für eine Person handelt, fordert sie bei seinem Aufruf zur Anmeldung auf. Rufe es also auf, wenn der Gast es benötigt, statt ihn vorher zur Anmeldung aufzufordern. Stufen, abgeleitet aus dem, was die Identität besitzt: anonym angemeldet ermöglicht Suche, Listen, Gruppenabstimmung und Geschmacksreservierung + Vor- und Nachname; ein Kontakt ermöglicht das Reservierungsprofil + validierten Kontakt, hier nichts weiter. Mit promote_identity aufsteigen. Eine Ablehnung wegen der Identität nennt die fehlende Stufe und das Tool, mit dem du sie erreichst — lies sie, statt es erneut zu versuchen. Für eine Sofortreservierung benötigt ein Veranstaltungsort sowohl eine E-Mail-Adresse als auch eine Telefonnummer. Erfrage also beides, wenn der Gast einen bestätigten Tisch statt einer Anfrage möchte. Ein bereits gespeicherter Wert wird niemals durch etwas ersetzt, das du sendest. Rufe get_identity auf, bevor du den Gast nach etwas fragst, das uns bereits vorliegt.
label-vocabulary — die Achsen der Deskriptoren, validieren statt zuordnen und wie Facetten kombiniert werden
Rufe get_vocabulary auf und verwende exakt die dort aufgeführten Begriffe. Erfinde niemals einen, übersetze niemals einen und kürze niemals einen ab. Achsen: dims (wie ein Veranstaltungsort ist), occasions (wofür er geeignet ist), menuMetas (welcher Service), menuDescriptors (was die Speisekarte bietet), cuisine (welche Küche). UND über Facetten hinweg, ODER innerhalb einer Facette. Jeder Wert schränkt die Auswahl ein. Übergib, wonach der Gast gefragt hat, und nichts anderes — ein Filter, nach dem niemand gefragt hat, entfernt stillschweigend Veranstaltungsorte, die dem Gast gefallen hätten. menuDescriptors beziehen sich auf den Veranstaltungsort, niemals auf den Gast. Eine Person mit Zöliakie braucht keinen „glutenfreien Gast“; sie braucht eine Speisekarte, auf der glutenfreie Gerichte ausgewiesen sind. Ein unbekannter Wert wird mit einer Nachricht abgelehnt, die die Facette nennt. Ein erfundener Cuisine-Slug würde andernfalls eine leere Liste zurückgeben, die den Eindruck erweckt: „So etwas gibt es hier nicht“.
availability-semantics — Sofortreservierung oder Anfrage, die Slot-Leiter, approxMinutes und adjusted
Der Buchungsmodus eines Veranstaltungsorts ist individuell. Lies ihn mit get_reservation_info aus, bevor du ein Tool auswählst. Sofortreservierung: Tische werden live bestätigt -> create_instant_reservation. Anfrage: Jemand am Veranstaltungsort nimmt sie an -> create_reservation_request. Die Slot-Zeiten folgen der eigenen Leiter des Veranstaltungsorts auf dessen eigener Uhr. Sie liegen auf keinem festen Raster, daher ist 19:00 oft nicht buchbar, während 19:15 verfügbar ist. Rufe list_availability_slots auf und buche eine der ausgegebenen Zeiten. Übergib pax; das Tool entfernt Slots, die für die Gruppe zu klein sind, einschließlich der Mindestgrößen pro Bereich. Übergib die areaId des ausgewählten Slots, um den Sitzbereich festzulegen; sie schränkt die Suche ein und verschiebt die Buchung niemals. approxMinutes ist standardmäßig 0 und bedeutet: diese Zeit oder keine. Erhöhe den Wert nur, wenn der Gast gesagt hat, dass er flexibel ist. Lies dann adjusted\ und bookedDate\ in der Antwort und teile dem Gast mit, was er tatsächlich bekommen hat. Leere Slots und leere Zeitfenster bedeuten, dass der Veranstaltungsort an diesem Tag geschlossen ist oder der Buchungshorizont überschritten wurde. Biete einen anderen Tag an, statt es erneut zu versuchen.
group-match — erstellen, per Link einladen, Stimmen von Personen ohne Identität sammeln, abschließen
Die Gruppenabstimmung ist die einzige Funktion für mehrere Personen und funktioniert über einen Link. 1. Rufe create_group_match mit einigen Veranstaltungsorten und einigen Terminen auf. Halte beides kurz: Es geht um eine Entscheidung, nicht um einen Katalog. 2. Die Antwort enthält einen Freigabelink. Gib ihn dem Gast zum Weiterleiten. Alle, die ihn öffnen, können ohne TasteMatch-Identität abstimmen. 3. get_group_match zeigt, wer abgestimmt hat und wofür. submit_group_match_vote ist für eine Stimme, die dich statt über den Link erreicht — memberId für jemanden, der namentlich eingeladen wurde, displayName für eine neue Person. 4. Rufe close_group_match auf, wenn die Gruppe sich entschieden hat. Die Stimmen bleiben einsehbar. 5. Buche anschließend den Gewinner über den Buchungsablauf, für die Person, die Gastgeber ist.
regions-and-places — einen Ort auflösen und wofür regionId verwendet wird
Alles, was an eine Region gebunden ist, benötigt eine regionId, und eine regionId kommt von uns, niemals vom Gast. resolve_key mit kind region akzeptiert einen Ort, einen Stadtteil, eine Adresse oder lat und lng. list_regions listet alle Gebiete auf, die wir abdecken; search_places ordnet einen kleineren Ort der Region zu, in der er liegt. Eine Region enthält die IANA-Zeitzone, nach der die Zeiten ihrer Veranstaltungsorte angegeben sind. Jedes dateTime, das du sendest, sollte den UTC-Offset dieser Region enthalten, und jede Slot-Zeit, die du ausliest, folgt dieser Uhr. Ein leeres Ergebnis bedeutet, dass wir dort keine Veranstaltungsorte haben. Sag das, statt die Suche stillschweigend auszuweiten.
lists-as-store — was in eine Liste gehört statt in den Kontext
Dein Kontext endet mit dem Gespräch. Eine Liste nicht. Lege eine Auswahlliste, eine Vergleichsgruppe oder die Orte, die der Gast bereits abgelehnt hat, mit create_list und add_restaurant_to_list in einer benannten Liste ab. Benenne sie nach ihrem Zweck; der Gast sieht diesen Namen wieder. Beginne ein Folgegespräch mit list_lists. Dort steht, was der Gast beim letzten Mal behalten hat. Listen gehören der handelnden Identität und sind hier privat — Teilen, die Listen anderer durchsuchen und übergreifende Suchen darin sind soziale Funktionen, und diese Oberfläche bietet keine sozialen Funktionen. Lieber ausmisten als anhäufen: remove_restaurant_from_list entfernt Daten. Nenne dem Gast daher zuerst den Veranstaltungsort und die Liste.
bulk-and-pagination — vor dem Filtern zählen, Stapelverarbeitung statt Schleife, Standardlimits, fields[]
Frage weniger ab. count_restaurants beantwortet „wie viele“ ohne Zeilen zurückzugeben. Verwende es beim Eingrenzen und rufe die Zeilen erst danach ab. Jedes Listen- und Suchtool akzeptiert limit und offset und gibt totalCount zurück. Das Standardlimit ist 10. Blättere mit offset weiter, statt die Suche erneut auszuführen. get_restaurant verwendet standardmäßig eine schlanke Projektion. Gib fields[] nur für das an, was du dem Gast tatsächlich sagen wirst; der Label-Vektor und die Speisekarten sind umfangreich. Nutze Stapelverarbeitung, wo sie möglich ist: einen impressions-Aufruf pro Gesprächsrunde, mehrere Skills in einem get_skill-Aufruf. Löse einen Namen einmal auf und verwende den Schlüssel weiter. Eine erneute Auflösung kostet nicht nur einen zusätzlichen Aufruf, sondern birgt auch das Risiko, bei einem anderen Veranstaltungsort zu landen.