Taste Match
officielRéservez et trouvez facilement des restaurants, uniquement en Suisse et dans ses environs.
Que pouvez-vous faire avec Taste Match MCP ?
- Compter les résultats d’abord — Demandez combien d’établissements correspondent à un ensemble de filtres avant de récupérer les lignes, avec
count_restaurants. - Filtrer par critères — Recherchez des établissements selon leur emplacement, leur jour ou service d’ouverture, leur cuisine, leurs options de menu et de boissons, ou la possibilité de réserver, avec
filter_restaurants. - Trouver un plat précis — Recherchez un plat dans les menus en utilisant les mots du client et découvrez quels établissements le servent via
search_dishes. - Rechercher un établissement par son nom — Trouvez des restaurants par leur nom ou la façon dont on les appelle, éventuellement dans une région donnée, avec
search_restaurants. - Obtenir les adresses populaires — Listez les établissements les plus appréciés d’une région donnée avec
list_popular_restaurants. - Trouver des établissements similaires — Trouvez des établissements aux goûts proches de ceux d’un établissement dont vous avez déjà la clé, avec
list_similar_restaurants.
Serveur MCP hébergé
npx add-mcp 'https://mcp.tastematch.io/'S’installe dans Claude Code, Codex, Cursor et plus
Documentation
| URL du service public | https://mcp.tastematch.io/ |
|---|---|
| URL de la déclaration de confidentialité | https://tastematch.io/mcp/privacy.html |
Toolkit MCP HTTP Streamable qui vous aide à trouver les restaurants qui vous correspondent le mieux en Suisse et ailleurs. Ajoutez-le à un client MCP à l’aide de l’URL ci-dessus. La découverte est publique.
AUTHENTIFICATION
Pour accéder à notre serveur MCP, votre service devra s’enregistrer lui-même à l’aide de DCR (OAuth 2.0 Dynamic Client Registration) auprès du serveur d’autorisation nommé sous authorization_servers dans /.well-known/oauth-protected-resource/mcp ; le document de métadonnées de ce serveur contient le registration_endpoint.
Pour prendre en charge les points de terminaison authentifiés, vos utilisateurs devront s’authentifier auprès du même serveur d’autorisation avec OpenID Connect (code d’autorisation avec PKCE), en demandant ce que scopes_supported répertorie dans /.well-known/oauth-protected-resource/mcp.
- 🟢 Aucune connexion requise : l’outil répond à tout le monde.
- 🟡 Connexion requise pour certains arguments, par exemple
list_recommended_restaurantsresolve_key. Sinon, les appels sont publics et autorisent des paramètres propres à l’utilisateur ; l’utilisation de ces paramètres ne réussit que si l’utilisateur est connecté. Voir ci-dessous en cas d’échec de connexion. - 🔴 Connexion requise : l’outil agit pour le compte d’un utilisateur. Les utilisateurs peuvent être anonymes. Appelé sans jeton, il répond avec HTTP 401 et un défi
WWW-Authenticatepointant vers/.well-known/oauth-protected-resource/mcp, et le client connecte la personne avec OAuth (code d’autorisation avec PKCE). La personne connectée constitue l’identité. - Niveau :
anonymouscorrespond à toute personne connectée.reservationajoute un prénom et un nom, un moyen de contact et l’acceptation des conditions, quepromote_identityrecueille lorsqu’une réservation en a besoin. - Limite de débit : les appels sont comptabilisés par personne connectée, et tous les appelants sans jeton partagent le même quota. Un appel dépassant la limite est refusé avec un code ; attendez, puis envoyez-en moins.
DÉCOUVRIR
🟢 count_restaurants lire le nombre d’établissements correspondant à un ensemble de facettes, sans lignes. Appelez cet outil avant filter_restaurants lorsque vous explorez un espace de filtres : il répond à la même question sans les documents.
Compter les restaurants
Nombre d’établissements correspondant à un ensemble de facettes, sans lignes. Appelez cet outil avant filter_restaurants lorsque vous explorez un espace de filtres : il répond à la même question sans les documents.
| Paramètre | Type | Description |
|---|---|---|
drinkOptions | object | ce que la carte des boissons doit proposer |
drinkOptions.beerSelection | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
drinkOptions.cocktailSelection | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
drinkOptions.natureWineSelection | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
drinkOptions.wineSelection | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
kitchen | object | le type de cuisine proposé |
kitchen.cuisine | array<string> | identifiants de cuisine ; un seul suffit ; la liste se trouve dans get_vocabulary |
location | object | où effectuer la recherche : un regionId ou un point avec un rayon |
location.lat | number | latitude du centre de recherche, associée à lng |
location.lng | number | longitude du centre de recherche |
location.radiusMeters | integer | distance de recherche autour du point |
location.regionId | string | région où effectuer la recherche, obtenue avec list_regions ou resolve_key |
menuOptions | object | ce que le menu doit proposer |
menuOptions.fishDishes | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
menuOptions.glutenFreeDishes | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
menuOptions.halalDishes | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
menuOptions.lactoseFreeDishes | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
menuOptions.meatDishes | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
menuOptions.veganDishes | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
menuOptions.vegetarianDishes | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
nutrition | object | ce qu’est l’établissement dans son ensemble |
nutrition.veganRestaurants | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
nutrition.vegetarianRestaurants | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
opening | object | horaires d’ouverture de l’établissement |
opening.daytime | string | service pour lequel l’établissement doit être ouvert : déjeuner ou dîner |
opening.openOn | array<integer> | jours de la semaine où l’établissement doit être ouvert ; dimanche vaut 0 |
reservation | object | modes de réservation possibles |
reservation.hasWidget | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
reservation.liveAvailability | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
Définition du protocole (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 lire les établissements selon des facettes : où, horaires d’ouverture, type de cuisine, contenu du menu et de la carte des boissons, et modes de réservation. Chaque facette limite les résultats aux établissements qui la satisfont ; ne transmettez donc que les critères demandés par le client. Les valeurs de descripteur et de cuisine proviennent de get_vocabulary — toute valeur inventée est refusée, et non ignorée. Classement par popularité ; aucun vecteur de goûts n’est appliqué.
Filtrer les restaurants
Rechercher des établissements selon des facettes : où, horaires d’ouverture, type de cuisine, contenu du menu et de la carte des boissons, et modes de réservation. Chaque facette limite les résultats aux établissements qui la satisfont ; ne transmettez donc que les critères demandés par le client. Les valeurs de descripteur et de cuisine proviennent de get_vocabulary — toute valeur inventée est refusée, et non ignorée. Classement par popularité ; aucun vecteur de goûts n’est appliqué.
| Paramètre | Type | Description |
|---|---|---|
drinkOptions | object | ce que la carte des boissons doit proposer |
drinkOptions.beerSelection | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
drinkOptions.cocktailSelection | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
drinkOptions.natureWineSelection | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
drinkOptions.wineSelection | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
kitchen | object | le type de cuisine proposé |
kitchen.cuisine | array<string> | identifiants de cuisine ; un seul suffit ; la liste se trouve dans get_vocabulary |
limit | integer | nombre de lignes à renvoyer, 50 au maximum |
location | object | où effectuer la recherche : un regionId ou un point avec un rayon |
location.lat | number | latitude du centre de recherche, associée à lng |
location.lng | number | longitude du centre de recherche |
location.radiusMeters | integer | distance de recherche autour du point |
location.regionId | string | région où effectuer la recherche, obtenue avec list_regions ou resolve_key |
menuOptions | object | ce que le menu doit proposer |
menuOptions.fishDishes | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
menuOptions.glutenFreeDishes | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
menuOptions.halalDishes | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
menuOptions.lactoseFreeDishes | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
menuOptions.meatDishes | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
menuOptions.veganDishes | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
menuOptions.vegetarianDishes | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
nutrition | object | ce qu’est l’établissement dans son ensemble |
nutrition.veganRestaurants | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
nutrition.vegetarianRestaurants | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
offset | integer | nombre de lignes à ignorer ; avec totalCount dans le résultat, permet de parcourir les pages |
opening | object | horaires d’ouverture de l’établissement |
opening.daytime | string | service pour lequel l’établissement doit être ouvert : déjeuner ou dîner |
opening.openOn | array<integer> | jours de la semaine où l’établissement doit être ouvert ; dimanche vaut 0 |
reservation | object | modes de réservation possibles |
reservation.hasWidget | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
reservation.liveAvailability | boolean | true limite aux établissements qui le proposent ; omettez-le pour ne pas appliquer ce filtre |
Définition du protocole (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 lire les établissements les plus appréciés d’une région. Une région est obligatoire : sans elle, cet outil renvoie tous les établissements de notre base.
Lister les restaurants populaires
Établissements les plus appréciés d’une région. Une région est obligatoire : sans elle, cet outil renvoie tous les établissements de notre base.
| Paramètre | Type | Description |
|---|---|---|
regionId required | string | région à consulter, obtenue avec list_regions |
limit | integer | nombre de lignes à renvoyer, 50 au maximum |
offset | integer | nombre de lignes à ignorer ; avec totalCount dans le résultat, permet de parcourir les pages |
Définition du protocole (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 lire les établissements recommandés pour le client connecté, classés du plus proche de ses goûts au moins proche ; avant toute connexion, les recommandations ne sont pas personnalisées. bookableOnly\ ne conserve que les établissements ayant une table disponible, un ensemble bien plus restreint qui nécessite une connexion.
Lister les restaurants recommandés
Établissements recommandés pour le client connecté, classés du plus proche de ses goûts au moins proche ; avant toute connexion, les recommandations ne sont pas personnalisées. bookableOnly\ ne conserve que les établissements ayant une table disponible, un ensemble bien plus restreint qui nécessite une connexion.
| Paramètre | Type | Description |
|---|---|---|
bookableOnly | boolean | ne conserver que les établissements ayant des disponibilités en temps réel |
interDiem | integer | avec bookableOnly, nombre de jours à l’avance où une table peut être disponible |
limit | integer | nombre de lignes à renvoyer, 50 au maximum |
offset | integer | nombre de lignes à ignorer ; avec totalCount dans le résultat, permet de parcourir les pages |
regionId | string | région pour les recommandations ; région propre à l’identité si omise |
Définition du protocole (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 lire les établissements proches, par leurs goûts, d’un établissement dont vous possédez déjà la clé, du plus proche au moins proche. sameCategory\ les conserve dans la même famille de cuisines et est activé par défaut.
Lister les restaurants similaires
Établissements proches, par leurs goûts, d’un établissement dont vous possédez déjà la clé, du plus proche au moins proche. sameCategory\ les conserve dans la même famille de cuisines et est activé par défaut.
| Paramètre | Type | Description |
|---|---|---|
restaurantKey required | string | établissement dont vous recherchez les voisins |
limit | integer | nombre de lignes à renvoyer, 50 au maximum |
offset | integer | nombre de lignes à ignorer ; avec totalCount dans le résultat, permet de parcourir les pages |
sameCategory | boolean | limiter aux établissements de la même famille de cuisines ; true par défaut |
Définition du protocole (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 lire les établissements qui servent un plat donné. Recherchez le plat tel que le client l’a formulé, avec ses mots et dans le même ordre — la formulation d’un plat fait partie de son identité : ne la reformulez pas, ne la traduisez pas et ne la raccourcissez pas. Les mots longs tolèrent une petite faute d’orthographe ; les mots très courts doivent être exacts. Chaque résultat cite le plat tel qu’il apparaît sur le menu, et exact\ vaut true uniquement si le nom correspond mot pour mot. Cet outil ne tient pas compte des horaires d’ouverture — utilisez filter_restaurants pour cela. La couverture des menus est partielle : un résultat vide signifie qu’aucun menu de notre base ne mentionne ce plat, et non que personne ne le cuisine.
Rechercher des plats
Trouver les établissements qui servent un plat donné. Recherchez le plat tel que le client l’a formulé, avec ses mots et dans le même ordre — la formulation d’un plat fait partie de son identité : ne la reformulez pas, ne la traduisez pas et ne la raccourcissez pas. Les mots longs tolèrent une petite faute d’orthographe ; les mots très courts doivent être exacts. Chaque résultat cite le plat tel qu’il apparaît sur le menu, et exact\ vaut true uniquement si le nom correspond mot pour mot. Cet outil ne tient pas compte des horaires d’ouverture — utilisez filter_restaurants pour cela. La couverture des menus est partielle : un résultat vide signifie qu’aucun menu de notre base ne mentionne ce plat, et non que personne ne le cuisine.
| Paramètre | Type | Description |
|---|---|---|
q obligatoire | string | le plat tel que le client l’a nommé |
lat | number | latitude autour de laquelle effectuer la recherche, associée à lng |
limit | integer | nombre de lignes à renvoyer, 50 au maximum |
lng | number | longitude autour de laquelle effectuer la recherche |
offset | integer | nombre de lignes à ignorer ; avec totalCount dans le résultat, permet de parcourir les pages |
radiusMeters | integer | distance autour du point à explorer |
regionId | string | limiter la recherche à une région |
Définition du protocole (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 Rechercher des établissements par leur nom ou par la façon dont le client les désigne, avec ses propres mots. Trois caractères minimum. Limiter la recherche à une région si vous en connaissez une. Utiliser filter_restaurants lorsque le client a décrit un type d’établissement plutôt que d’en nommer un.
Rechercher des restaurants
Rechercher des établissements par leur nom ou par la façon dont le client les désigne, avec ses propres mots. Trois caractères minimum. Limiter la recherche à une région si vous en connaissez une. Utiliser filter_restaurants lorsque le client a décrit un type d’établissement plutôt que d’en nommer un.
| Paramètre | Type | Description |
|---|---|---|
text obligatoire | string | élément à rechercher, trois caractères ou plus |
limit | integer | nombre de lignes à renvoyer, 50 au maximum |
offset | integer | nombre de lignes à ignorer ; avec totalCount dans le résultat, permet de parcourir les pages |
regionId | string | limiter la recherche à une région ; si ce paramètre est omis, la recherche porte sur toutes les régions couvertes |
Définition du protocole (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"
}
LIEU
🟢 list_regions read Les régions couvertes par TasteMatch. Chacune comporte le regionId requis par tous les outils limités à une région, ainsi que le fuseau horaire IANA utilisé pour les horaires d’ouverture et les créneaux des établissements. Indiquer un point pour les obtenir par ordre de proximité. Un lieu qui ne se trouve dans aucune de ces régions ne compte aucun établissement dans notre base.
Lister les régions
Les régions couvertes par TasteMatch. Chacune comporte le regionId requis par tous les outils limités à une région, ainsi que le fuseau horaire IANA utilisé pour les horaires d’ouverture et les créneaux des établissements. Indiquer un point pour les obtenir par ordre de proximité. Un lieu qui ne se trouve dans aucune de ces régions ne compte aucun établissement dans notre base.
| Paramètre | Type | Description |
|---|---|---|
lat | number | latitude à partir de laquelle trier par distance, associée à lng |
limit | integer | nombre de lignes à renvoyer, 50 au maximum |
lng | number | longitude à partir de laquelle trier par distance |
offset | integer | nombre de lignes à ignorer ; avec totalCount dans le résultat, permet de parcourir les pages |
Définition du protocole (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 Associer une ville, un quartier ou une zone mentionné par le client à la région qui le contient. Un résultat vide signifie que le lieu se trouve en dehors de toutes les régions couvertes, et non que son nom est incorrect.
Rechercher des lieux
Associer une ville, un quartier ou une zone mentionné par le client à la région qui le contient. Un résultat vide signifie que le lieu se trouve en dehors de toutes les régions couvertes, et non que son nom est incorrect.
| Paramètre | Type | Description |
|---|---|---|
q obligatoire | string | le lieu tel que le client l’a nommé |
countryCode | string | code ISO 3166-1 alpha-2 pour limiter la recherche |
limit | integer | nombre de lignes à renvoyer, 50 au maximum |
offset | integer | nombre de lignes à ignorer ; avec totalCount dans le résultat, permet de parcourir les pages |
Définition du protocole (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 Lire un établissement. La projection par défaut est légère : nom, clés, région, adresse, descripteurs, modalités de réservation et résumé des horaires d’ouverture. Les éléments volumineux ne sont renvoyés que si vous les indiquez dans fields\ : ContactInformation, MenuCards, MenuCardsV2, labelVector, coverPictures, socialScore, matchInfo, tmType, eventId, businessPro, likesByUser, likesByFollowees, likesUserAvatars, likesFolloweeAvatars. Un document sans projection peut être plus volumineux que le reste de votre tâche.
Obtenir un restaurant
Lire un établissement. La projection par défaut est légère : nom, clés, région, adresse, descripteurs, modalités de réservation et résumé des horaires d’ouverture. Les éléments volumineux ne sont renvoyés que si vous les indiquez dans fields\ : ContactInformation, MenuCards, MenuCardsV2, labelVector, coverPictures, socialScore, matchInfo, tmType, eventId, businessPro, likesByUser, likesByFollowees, likesUserAvatars, likesFolloweeAvatars. Un document sans projection peut être plus volumineux que le reste de votre tâche.
| Paramètre | Type | Description |
|---|---|---|
restaurantKey obligatoire | string | clé de l’établissement |
accessType | string | lorsque le client a demandé à ouvrir cet établissement, indiquez comment il y est arrivé : filtered, searched, recommended, similar, popular, spotlight. L’ouverture lui est alors attribuée ; omettez ce paramètre si vous consultez simplement un établissement pour vous-même. |
fields | array<string> | champs à renvoyer ; la projection par défaut est légère et les clés sont toujours incluses |
Définition du protocole (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 Enregistrer que l’identité active aime cet établissement. Les mentions « J’aime » améliorent les recommandations suivantes ; elles expriment l’avis du client, pas le vôtre : indiquez les établissements qu’il a dit aimer.
Aimer un restaurant
Enregistrer que l’identité active aime cet établissement. Les mentions « J’aime » améliorent les recommandations suivantes ; elles expriment l’avis du client, pas le vôtre : indiquez les établissements qu’il a dit aimer.
| Paramètre | Type | Description |
|---|---|---|
idempotencyKey obligatoire | string | clé de votre choix pour cette écriture ; renvoyer la même clé renvoie le premier résultat au lieu d’effectuer une seconde écriture |
restaurantKey obligatoire | string | clé de l’établissement |
Définition du protocole (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 Nous indiquer quels établissements l’identité a réellement vus et lesquels ont suscité une action de sa part. Un seul lot par tour, avec un sessionId de votre choix qui reste identique pendant toute la conversation. Signalez ce qui s’est passé, jamais ce que vous avez l’intention de faire : ce sont les signaux à partir desquels le système de recommandation apprend.
Envoyer les impressions sur les restaurants
Nous indiquer quels établissements l’identité a réellement vus et lesquels ont suscité une action de sa part. Un seul lot par tour, avec un sessionId de votre choix qui reste identique pendant toute la conversation. Signalez ce qui s’est passé, jamais ce que vous avez l’intention de faire : ce sont les signaux à partir desquels le système de recommandation apprend.
| Paramètre | Type | Description |
|---|---|---|
idempotencyKey obligatoire | string | clé de votre choix pour cette écriture ; renvoyer la même clé renvoie le premier résultat au lieu d’effectuer une seconde écriture |
impressions obligatoire | array<object> | éléments affichés ou ayant suscité une action |
impressions[].accessType obligatoire | string | l’une des valeurs suivantes : filtered, searched, recommended, similar, popular, spotlight |
impressions[].restaurantKey obligatoire | string | |
sessionId obligatoire | string | UUID de votre choix, identique pour chaque lot d’une même conversation |
Définition du protocole (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 Annuler un « J’aime ». L’établissement reste dans le catalogue ; seule l’opinion de l’identité à son sujet est supprimée.
Ne plus aimer un restaurant
Annuler un « J’aime ». L’établissement reste dans le catalogue ; seule l’opinion de l’identité à son sujet est supprimée.
| Paramètre | Type | Description |
|---|---|---|
idempotencyKey obligatoire | string | clé de votre choix pour cette écriture ; renvoyer la même clé renvoie le premier résultat au lieu d’effectuer une seconde écriture |
restaurantKey obligatoire | string | clé de l’établissement |
Définition du protocole (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"
}
DISPONIBILITÉ
🟢 get_reservation_info read Modalités de réservation de cet établissement. mode\ vaut instant lorsque les tables sont confirmées en temps réel, request lorsqu’une personne de l’établissement doit accepter la demande, et l’outil refuse si l’établissement n’accepte aucune réservation. Consultez d’abord cette information : elle détermine si vous devez appeler create_instant_reservation ou create_reservation_request. maxPeople\ indique la taille maximale du groupe que nous pouvons placer. Cette opération est en lecture seule : elle ne réserve rien et n’enregistre rien.
Obtenir les informations de réservation
Modalités de réservation de cet établissement. mode\ vaut instant lorsque les tables sont confirmées en temps réel, request lorsqu’une personne de l’établissement doit accepter la demande, et l’outil refuse si l’établissement n’accepte aucune réservation. Consultez d’abord cette information : elle détermine si vous devez appeler create_instant_reservation ou create_reservation_request. maxPeople\ indique la taille maximale du groupe que nous pouvons placer. Cette opération est en lecture seule : elle ne réserve rien et n’enregistre rien.
| Paramètre | Type | Description |
|---|---|---|
restaurantKey obligatoire | string | clé de l’établissement |
Définition du protocole (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 Tables disponibles dans un établissement pour une journée donnée. Les horaires sont ceux de l’horloge locale de l’établissement et ne suivent aucune grille fixe : réservez un horaire indiqué ici plutôt qu’une heure ronde choisie par vous. Un établissement en mode request renvoie plutôt windows\ : les plages horaires pour lesquelles il acceptera une demande. Si les deux résultats sont vides, l’établissement est fermé ce jour-là ou la date dépasse la période de réservation autorisée.
Lister les créneaux disponibles
Tables disponibles dans un établissement pour une journée donnée. Les horaires sont ceux de l’horloge locale de l’établissement et ne suivent aucune grille fixe : réservez un horaire indiqué ici plutôt qu’une heure ronde choisie par vous. Un établissement en mode request renvoie plutôt windows\ : les plages horaires pour lesquelles il acceptera une demande. Si les deux résultats sont vides, l’établissement est fermé ce jour-là ou la date dépasse la période de réservation autorisée.
| Paramètre | Type | Description |
|---|---|---|
date obligatoire | string | journée à consulter, au format RFC3339 avec le décalage UTC de la région |
restaurantKey obligatoire | string | clé de l’établissement |
pax | integer | taille du groupe, pour exclure les créneaux trop petits |
Définition du protocole (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"
}
RÉSERVATION
🔴 cancel_reservation destructive Annuler une réservation appartenant à l’identité. Cette action est irréversible et la table est libérée. Consultez d’abord la réservation, indiquez au client le nom de l’établissement et l’heure, puis attendez sa réponse avant de répéter ces deux informations ici : confirmRestaurantName\ et confirmDateTime\ doivent correspondre à la réservation enregistrée, sinon l’appel sera refusé. N’annulez jamais une réservation en vous fiant uniquement à une clé, même si vous êtes certain de vous.
Annuler une réservation
Annuler une réservation appartenant à l’identité. Cette action est irréversible et la table est libérée. Consultez d’abord la réservation, indiquez au client le nom de l’établissement et l’heure, puis attendez sa réponse avant de répéter ces deux informations ici : confirmRestaurantName\ et confirmDateTime\ doivent correspondre à la réservation enregistrée, sinon l’appel sera refusé. N’annulez jamais une réservation en vous fiant uniquement à une clé, même si vous êtes certain de vous.
| Paramètre | Type | Description |
|---|---|---|
confirmDateTime obligatoire | string | heure de la réservation telle que vous l’avez indiquée au client, au format RFC3339 |
confirmRestaurantName obligatoire | string | nom de l’établissement tel que vous l’avez indiqué au client |
idempotencyKey obligatoire | string | clé de votre choix pour cette écriture ; renvoyer la même clé renvoie le premier résultat au lieu d’effectuer une seconde écriture |
reservationKey obligatoire | string | réservation à annuler, parmi celles appartenant à l’identité et renvoyées par list_reservations |
Définition du protocole (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 Réserver une table disponible immédiatement. Cette option concerne les établissements instant et la table est confirmée dès le retour de l’appel. Réservez un horaire dateTime\ obtenu avec list_availability_slots : les créneaux de l’établissement ne suivent aucune grille, une heure ronde n’en fait donc généralement pas partie. Laissez approxMinutes\ à 0, sauf si le client a indiqué qu’il était flexible : une valeur non nulle autorise l’établissement à réserver un horaire proche, ce qui sera précisé dans adjusted\ et bookedDate\. La réservation est effectuée avec l’identité enregistrée, qui doit disposer d’une adresse e-mail et d’un numéro de téléphone pour un établissement instant.
Créer une réservation instantanée
Prenez une table disponible maintenant. Cette option est destinée aux établissements à réservation instantanée ; la table est confirmée dès que l’appel renvoie un résultat. Réservez un dateTime\ que vous avez lu dans list_availability_slots — les créneaux de l’établissement ne suivent aucune grille, donc une heure ronde n’en fait généralement pas partie. Laissez approxMinutes\ à 0, sauf si le client a indiqué qu’il était flexible : une valeur non nulle permet à l’établissement de réserver à une heure proche, et la réponse le précise dans adjusted\ et bookedDate\. La réservation utilise l’identité enregistrée, qui doit comporter une adresse e-mail et un numéro de téléphone pour un établissement à réservation instantanée.
| Paramètre | Type | Description |
|---|---|---|
dateTime obligatoire | string | le créneau à réserver, au format RFC3339 avec le décalage UTC de la région, tel qu’il apparaît dans list_availability_slots |
idempotencyKey obligatoire | string | une clé de votre choix pour cette écriture ; renvoyer la même clé renvoie le premier résultat au lieu d’effectuer une deuxième écriture |
pax obligatoire | integer | nombre de personnes |
restaurantKey obligatoire | string | la clé de l’établissement |
approxMinutes | integer | l’écart maximal par rapport à dateTime auquel l’établissement peut réserver ; 0 signifie cette heure ou rien |
areaId | string | la zone où s’asseoir, issue du créneau choisi ; elle restreint la recherche et ne déplace jamais la réservation |
comment | string | une note destinée à l’établissement, formulée avec les mots du client |
Définition du protocole (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 écriture Ouvrez une réservation dans un établissement qui utilise son propre widget de réservation. Cette opération écrit des données : elle crée un brouillon associé à l’identité utilisée et un widgetUrl\ à usage unique que le client pourra utiliser pour finaliser la réservation. Transmettez l’URL au client, puis interrogez get_reservation_status avec le reservationKey\ renvoyé. Appelez cet outil une seule fois par tentative de réservation — un deuxième appel crée un deuxième brouillon. Un établissement qui gère les réservations de manière native n’a pas besoin d’une offre : utilisez plutôt create_instant_reservation ou create_reservation_request.
Créer une offre de réservation
Ouvrez une réservation dans un établissement qui utilise son propre widget de réservation. Cette opération écrit des données : elle crée un brouillon associé à l’identité utilisée et un widgetUrl\ à usage unique que le client pourra utiliser pour finaliser la réservation. Transmettez l’URL au client, puis interrogez get_reservation_status avec le reservationKey\ renvoyé. Appelez cet outil une seule fois par tentative de réservation — un deuxième appel crée un deuxième brouillon. Un établissement qui gère les réservations de manière native n’a pas besoin d’une offre : utilisez plutôt create_instant_reservation ou create_reservation_request.
| Paramètre | Type | Description |
|---|---|---|
idempotencyKey obligatoire | string | une clé de votre choix pour cette écriture ; renvoyer la même clé renvoie le premier résultat au lieu d’effectuer une deuxième écriture |
restaurantKey obligatoire | string | la clé de l’établissement |
Définition du protocole (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 écriture Demandez une table à un établissement. Cette option est destinée aux établissements fonctionnant sur demande : la réservation est renvoyée avec le statut « en attente », et une personne de l’établissement l’accepte ou la refuse. Indiquez donc au client qu’il n’a pas encore de table. L’heure doit se situer dans l’un des créneaux signalés par list_availability_slots. La réservation utilise l’identité enregistrée — le nom et les coordonnées sont lus dans le dossier, et non dans cet appel.
Créer une demande de réservation
Demandez une table à un établissement. Cette option est destinée aux établissements fonctionnant sur demande : la réservation est renvoyée avec le statut « en attente », et une personne de l’établissement l’accepte ou la refuse. Indiquez donc au client qu’il n’a pas encore de table. L’heure doit se situer dans l’un des créneaux signalés par list_availability_slots. La réservation utilise l’identité enregistrée — le nom et les coordonnées sont lus dans le dossier, et non dans cet appel.
| Paramètre | Type | Description |
|---|---|---|
dateTime obligatoire | string | l’heure demandée, au format RFC3339 avec le décalage UTC de la région |
idempotencyKey obligatoire | string | une clé de votre choix pour cette écriture ; renvoyer la même clé renvoie le premier résultat au lieu d’effectuer une deuxième écriture |
pax obligatoire | integer | nombre de personnes |
restaurantKey obligatoire | string | la clé de l’établissement |
comment | string | une note destinée à l’établissement, formulée avec les mots du client |
Définition du protocole (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 lecture État d’une réservation de l’identité utilisée. Après une offre, interrogez cet outil : une réservation via un widget ne devient effective qu’une fois confirmée par l’établissement, et son statut vous en informe.
Obtenir le statut de la réservation
État d’une réservation de l’identité utilisée. Après une offre, interrogez cet outil : une réservation via un widget ne devient effective qu’une fois confirmée par l’établissement, et son statut vous en informe.
| Paramètre | Type | Description |
|---|---|---|
reservationKey obligatoire | string | la clé de la réservation, issue de list_reservations |
Définition du protocole (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 lecture Créneaux auxquels une réservation existante pourrait être déplacée. Cette question diffère de list_availability_slots : elle porte sur la réservation et sur les changements autorisés par l’établissement. Seule une réservation acceptée dans un établissement disposant de disponibilités en temps réel peut être déplacée.
Lister les créneaux de réservation
Créneaux auxquels une réservation existante pourrait être déplacée. Cette question diffère de list_availability_slots : elle porte sur la réservation et sur les changements autorisés par l’établissement. Seule une réservation acceptée dans un établissement disposant de disponibilités en temps réel peut être déplacée.
| Paramètre | Type | Description |
|---|---|---|
reservationKey obligatoire | string | la réservation à déplacer, issue de list_reservations |
fromDate | string | le premier jour à examiner, au format RFC3339 ; par défaut, le jour de la réservation |
Définition du protocole (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 lecture Toutes les réservations détenues par l’identité utilisée. owned\ peut faire l’objet d’une action — ce sont les clés utilisées par les outils d’écriture. foundByEmail\ a été réattribuée à un autre propriétaire : elle est affichée pour que vous puissiez en parler, mais toute écriture la concernant est refusée.
Lister les réservations
Toutes les réservations détenues par l’identité utilisée. owned\ peut faire l’objet d’une action — ce sont les clés utilisées par les outils d’écriture. foundByEmail\ a été réattribuée à un autre propriétaire : elle est affichée pour que vous puissiez en parler, mais toute écriture la concernant est refusée.
Aucun paramètre.
Définition du protocole (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 écriture Déplacez une réservation détenue par l’identité ou modifiez le nombre de personnes. Indiquez uniquement les éléments à modifier. La nouvelle heure doit faire partie des créneaux proposés par list_reservation_slots pour cette réservation.
Mettre à jour une réservation
Déplacez une réservation détenue par l’identité ou modifiez le nombre de personnes. Indiquez uniquement les éléments à modifier. La nouvelle heure doit faire partie des créneaux proposés par list_reservation_slots pour cette réservation.
| Paramètre | Type | Description |
|---|---|---|
idempotencyKey obligatoire | string | une clé de votre choix pour cette écriture ; renvoyer la même clé renvoie le premier résultat au lieu d’effectuer une deuxième écriture |
reservationKey obligatoire | string | la réservation à modifier, issue de l’ensemble des réservations détenues dans list_reservations |
dateTime | string | la nouvelle heure, au format RFC3339 avec le décalage UTC de la région |
pax | integer | le nouveau nombre de personnes |
Définition du protocole (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É
🔴 get_identity lecture L’identité pour laquelle vous agissez. Consultez-la avant de demander quoi que ce soit au client : une valeur déjà enregistrée n’est jamais remplacée, et redemander une information que nous possédons donne l’impression de ne pas écouter.
Obtenir l’identité
L’identité pour laquelle vous agissez. Consultez-la avant de demander quoi que ce soit au client : une valeur déjà enregistrée n’est jamais remplacée, et redemander une information que nous possédons donne l’impression de ne pas écouter.
Aucun paramètre.
Définition du protocole (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 lecture Ce à quoi cette connexion donne accès : les parcours disponibles et la personne connectée pour laquelle vous agissez, avec son niveau — acting\ est absent tant qu’aucune personne n’est connectée. Appelez cet outil en premier si vous ne savez pas si quelqu’un est connecté, et consultez climbWith\ pour connaître l’outil qui recueille les informations manquantes au niveau actuel.
Obtenir la session
Ce à quoi cette connexion donne accès : les parcours disponibles et la personne connectée pour laquelle vous agissez, avec son niveau — acting\ est absent tant qu’aucune personne n’est connectée. Appelez cet outil en premier si vous ne savez pas si quelqu’un est connecté, et consultez climbWith\ pour connaître l’outil qui recueille les informations manquantes au niveau actuel.
Aucun paramètre.
Définition du protocole (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 écriture Passez au niveau permettant de réserver en fournissant les informations manquantes sur l’identité : prénom et nom, un moyen de contact et l’acceptation des Conditions. N’envoyez que les informations communiquées par le client au cours de cette conversation. Un établissement à réservation instantanée exige une adresse e-mail et un numéro de téléphone ; recueillez les deux si le client souhaite une table confirmée.
Promouvoir l’identité
Passez au niveau permettant de réserver en fournissant les informations manquantes sur l’identité : prénom et nom, un moyen de contact et l’acceptation des Conditions. N’envoyez que les informations communiquées par le client au cours de cette conversation. Un établissement à réservation instantanée exige une adresse e-mail et un numéro de téléphone ; recueillez les deux si le client souhaite une table confirmée.
| Paramètre | Type | Description |
|---|---|---|
idempotencyKey obligatoire | string | une clé de votre choix pour cette écriture ; renvoyer la même clé renvoie le premier résultat au lieu d’effectuer une deuxième écriture |
acceptTerms | boolean | true lorsque le client accepte les Conditions à https://www.tastematch.io/agb |
email | string | adresse e-mail de contact |
firstName | string | prénom du client |
lastName | string | nom du client |
phone | string | numéro de téléphone de contact au format international |
Définition du protocole (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 écriture Corrigez ou complétez l’identité. Un champ vide est renseigné et une valeur erronée est corrigée, mais un moyen de contact validé par le client ne peut pas être remplacé ici. N’envoyez que les éléments modifiés.
Mettre à jour l’identité
Corrigez ou complétez l’identité. Un champ vide est renseigné et une valeur erronée est corrigée, mais un moyen de contact validé par le client ne peut pas être remplacé ici. N’envoyez que les éléments modifiés.
| Paramètre | Type | Description |
|---|---|---|
idempotencyKey obligatoire | string | une clé de votre choix pour cette écriture ; renvoyer la même clé renvoie le premier résultat au lieu d’effectuer une deuxième écriture |
acceptTerms | boolean | true lorsque le client accepte les Conditions à https://www.tastematch.io/agb |
email | string | adresse e-mail de contact |
firstName | string | prénom du client |
lastName | string | nom du client |
phone | string | numéro de téléphone de contact au format international |
Définition du protocole (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"
}
GOÛTS
🔴 get_taste_profile lecture Goûts enregistrés pour cette identité : descripteurs associés, niveau de confiance indiqué pour chacun et type de goût qui en découle. Consultez-les avant de redécrire les goûts : vous corrigez un profil, vous n’en créez pas un nouveau.
Obtenir le profil de goûts
Goûts enregistrés pour cette identité : descripteurs associés, niveau de confiance indiqué pour chacun et type de goût qui en découle. Consultez-les avant de redécrire les goûts : vous corrigez un profil, vous n’en créez pas un nouveau.
Aucun paramètre.
Définition du protocole (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 écriture Indiquez les goûts du client en attribuant à chaque descripteur un niveau de confiance compris entre 0 et 1, et déduisez-en autant que la conversation le permet. Cette opération remplace les informations enregistrées : envoyez donc le profil complet plutôt qu’une correction. Les descripteurs sont ceux que nomme weights\, tous publiés par get_vocabulary — tout autre descripteur est refusé. Les occasions et les caractéristiques des menus sont enregistrées avec le reste, mais ce sont des attributs des établissements ; elles influencent donc les filtres plutôt que le vecteur de goûts. Facultatif : la découverte, les listes et les réservations fonctionnent sans ces informations ; elles servent uniquement à personnaliser list_recommended_restaurants.
Soumettre le profil de goûts
Indiquez les goûts du client sous forme d’un niveau de confiance compris entre 0 et 1 pour chaque descripteur, et déduisez-en autant que la conversation le permet. Cela remplace les informations enregistrées : transmettez donc le profil complet plutôt qu’une correction. Les descripteurs sont ceux que nomme weights\, tous publiés par get_vocabulary — tout autre descripteur est refusé. Les occasions et les caractéristiques du menu sont enregistrées avec le reste, mais ce sont des attributs du lieu : elles influencent donc les filtres plutôt que le vecteur de goûts. Facultatif : la découverte, les listes et les réservations fonctionnent sans cela ; cela ne fait que personnaliser list_recommended_restaurants.
| Paramètre | Type | Description |
|---|---|---|
idempotencyKey required | string | une clé de votre choix pour cette écriture ; si vous renvoyez la même clé, le premier résultat vous sera retourné au lieu d’effectuer une deuxième écriture |
weights required | map<string, number> | niveau de confiance de 0 à 1 pour chaque descripteur, parmi 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 |
Définition du protocole (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"
}
LISTES
🔴 add_restaurant_to_list write Ajouter un établissement à l’une des listes de l’identité. Si l’établissement y figure déjà, rien ne change.
Ajouter un restaurant à une liste
Ajouter un établissement à l’une des listes de l’identité. Si l’établissement y figure déjà, rien ne change.
| Paramètre | Type | Description |
|---|---|---|
idempotencyKey required | string | une clé de votre choix pour cette écriture ; si vous renvoyez la même clé, le premier résultat vous sera retourné au lieu d’effectuer une deuxième écriture |
listKey required | string | la liste à laquelle l’ajouter |
restaurantKey required | string | l’établissement à ajouter |
Définition du protocole (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 Créer une liste nommée pour l’identité. Donnez-lui un nom qui indique son utilité : le client le reverra la prochaine fois, et vous aussi.
Créer une liste
Créer une liste nommée pour l’identité. Donnez-lui un nom qui indique son utilité : le client le reverra la prochaine fois, et vous aussi.
| Paramètre | Type | Description |
|---|---|---|
idempotencyKey required | string | une clé de votre choix pour cette écriture ; si vous renvoyez la même clé, le premier résultat vous sera retourné au lieu d’effectuer une deuxième écriture |
title required | string | l’utilité de la liste, dans la langue du client |
Définition du protocole (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 Supprimer l’une des listes de l’identité et tout son contenu. Consultez d’abord la liste et indiquez au client ce qui sera supprimé ; cette action est irréversible.
Supprimer une liste
Supprimer l’une des listes de l’identité et tout son contenu. Consultez d’abord la liste et indiquez au client ce qui sera supprimé ; cette action est irréversible.
| Paramètre | Type | Description |
|---|---|---|
idempotencyKey required | string | une clé de votre choix pour cette écriture ; si vous renvoyez la même clé, le premier résultat vous sera retourné au lieu d’effectuer une deuxième écriture |
listKey required | string | la liste à supprimer |
Définition du protocole (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 Lire intégralement l’une des listes de l’identité active, avec tous les établissements qu’elle contient. Les listes d’une autre identité ne sont pas accessibles en lecture.
Obtenir une liste
Lire intégralement l’une des listes de l’identité active, avec tous les établissements qu’elle contient. Les listes d’une autre identité ne sont pas accessibles en lecture.
| Paramètre | Type | Description |
|---|---|---|
listKey required | string | la clé de la liste, obtenue avec list_lists |
Définition du protocole (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 Les listes de l’identité, avec le nombre d’éléments et une image de couverture pour chacune. Consultez-les au début d’une conversation avec un client de retour : elles indiquent ce qu’il avait conservé la dernière fois.
Lister les listes
Les listes de l’identité, avec le nombre d’éléments et une image de couverture pour chacune. Consultez-les au début d’une conversation avec un client de retour : elles indiquent ce qu’il avait conservé la dernière fois.
| Paramètre | Type | Description |
|---|---|---|
limit | integer | nombre de lignes à renvoyer, 50 au maximum |
offset | integer | nombre de lignes à ignorer ; avec totalCount dans le résultat, permet de parcourir les pages |
Définition du protocole (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 Retirer un établissement de l’une des listes de l’identité. Avant l’appel, indiquez au client de quel établissement et de quelle liste il s’agit : cette action supprime des données.
Retirer un restaurant d’une liste
Retirer un établissement de l’une des listes de l’identité. Avant l’appel, indiquez au client de quel établissement et de quelle liste il s’agit : cette action supprime des données.
| Paramètre | Type | Description |
|---|---|---|
idempotencyKey required | string | une clé de votre choix pour cette écriture ; si vous renvoyez la même clé, le premier résultat vous sera retourné au lieu d’effectuer une deuxième écriture |
listKey required | string | la liste dont le retirer |
restaurantKey required | string | l’établissement à retirer |
Définition du protocole (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 Renommer l’une des listes de l’identité. Les établissements qu’elle contient ne sont pas modifiés.
Mettre à jour une liste
Renommer l’une des listes de l’identité. Les établissements qu’elle contient ne sont pas modifiés.
| Paramètre | Type | Description |
|---|---|---|
idempotencyKey required | string | une clé de votre choix pour cette écriture ; si vous renvoyez la même clé, le premier résultat vous sera retourné au lieu d’effectuer une deuxième écriture |
listKey required | string | la liste à renommer |
title required | string | le nouveau nom |
Définition du protocole (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"
}
GROUPE
🔴 close_group_match write Clore un vote de groupe pour empêcher tout nouveau vote. Le vote et tous les suffrages restent consultables ; seul le vote est interrompu. Clôturez-le une fois que le groupe a pris sa décision, puis réservez le choix retenu.
Clore un vote de groupe
Clore un vote de groupe pour empêcher tout nouveau vote. Le vote et tous les suffrages restent consultables ; seul le vote est interrompu. Clôturez-le une fois que le groupe a pris sa décision, puis réservez le choix retenu.
| Paramètre | Type | Description |
|---|---|---|
groupMatchKey required | string | le vote à clore |
idempotencyKey required | string | une clé de votre choix pour cette écriture ; si vous renvoyez la même clé, le premier résultat vous sera retourné au lieu d’effectuer une deuxième écriture |
Définition du protocole (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 Lancer une décision de groupe : quelques établissements, quelques dates et les personnes à consulter. La réponse contient un lien de partage : donnez-le au client pour qu’il le transmette, car les personnes invitées peuvent voter via ce lien sans avoir d’identité TasteMatch. Limitez le nombre d’options : il s’agit de prendre une décision, pas de consulter un catalogue.
Créer un vote de groupe
Lancer une décision de groupe : quelques établissements, quelques dates et les personnes à consulter. La réponse contient un lien de partage : donnez-le au client pour qu’il le transmette, car les personnes invitées peuvent voter via ce lien sans avoir d’identité TasteMatch. Limitez le nombre d’options : il s’agit de prendre une décision, pas de consulter un catalogue.
| Paramètre | Type | Description |
|---|---|---|
dateOptions required | array<string> | les dates parmi lesquelles choisir, au format RFC3339 avec le décalage UTC de la région |
idempotencyKey required | string | une clé de votre choix pour cette écriture ; si vous renvoyez la même clé, le premier résultat vous sera retourné au lieu d’effectuer une deuxième écriture |
restaurantKeys required | array<string> | les établissements parmi lesquels choisir |
title required | string | l’objet de la décision du groupe, formulé avec les mots du client |
invitees | array<object> | les personnes à consulter, chacune identifiée par son nom et son adresse e-mail |
invitees[].displayName required | string | le nom qui sera affiché au groupe |
invitees[].email required | string | la destination de l’invitation |
Définition du protocole (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 Supprimer un vote de groupe. Le lien de partage cessera de fonctionner pour toutes les personnes qui le détiennent, et les votes seront également supprimés. Consultez le vote et indiquez au client ce qui sera supprimé avant d’effectuer cette action.
Supprimer un vote de groupe
Supprimer un vote de groupe. Le lien de partage cessera de fonctionner pour toutes les personnes qui le détiennent, et les votes seront également supprimés. Consultez le vote et indiquez au client ce qui sera supprimé avant d’effectuer cette action.
| Paramètre | Type | Description |
|---|---|---|
groupMatchKey required | string | le vote à supprimer |
idempotencyKey required | string | une clé de votre choix pour cette écriture ; si vous renvoyez la même clé, le premier résultat vous sera retourné au lieu d’effectuer une deuxième écriture |
Définition du protocole (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 Un vote de groupe créé par l’identité : les établissements, les dates proposées, les personnes invitées, les personnes qui ont voté et leurs choix, ainsi que le lien de partage.
Obtenir un vote de groupe
Un vote de groupe créé par l’identité : les établissements, les dates proposées, les personnes invitées, les personnes qui ont voté et leurs choix, ainsi que le lien de partage.
| Paramètre | Type | Description |
|---|---|---|
groupMatchKey required | string | la clé du vote, obtenue avec list_group_matches |
Définition du protocole (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 Les votes de groupe créés par cette identité, avec le nombre de personnes invitées et le nombre de personnes ayant voté. Les votes auxquels elle a seulement été invitée n’apparaissent pas ici.
Lister les votes de groupe
Les votes de groupe créés par cette identité, avec le nombre de personnes invitées et le nombre de personnes ayant voté. Les votes auxquels elle a seulement été invitée n’apparaissent pas ici.
| Paramètre | Type | Description |
|---|---|---|
limit | integer | nombre de lignes à renvoyer, 50 au maximum |
offset | integer | nombre de lignes à ignorer ; avec totalCount dans le résultat, permet de parcourir les pages |
Définition du protocole (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 Enregistrer le vote d’une personne dans un vote de groupe ouvert. Transmettez memberId\ pour une personne invitée par son nom ; transmettez plutôt displayName\ pour une personne qui participe via le lien de partage. N’enregistrez que les choix réellement exprimés par cette personne : la possession de la clé du vote constitue à elle seule l’autorisation, et un memberId que vous n’avez pas obtenu auprès de cette personne remplacera son vote. Le vote doit toujours être ouvert.
Soumettre un vote de groupe
Enregistrer le vote d’une personne dans un vote de groupe ouvert. Transmettez memberId\ pour une personne invitée par son nom ; transmettez plutôt displayName\ pour une personne qui participe via le lien de partage. N’enregistrez que les choix réellement exprimés par cette personne : la possession de la clé du vote constitue à elle seule l’autorisation, et un memberId que vous n’avez pas obtenu auprès de cette personne remplacera son vote. Le vote doit toujours être ouvert.
| Paramètre | Type | Description |
|---|---|---|
groupMatchKey required | string | le vote auquel la personne participe |
idempotencyKey required | string | une clé de votre choix pour cette écriture ; si vous renvoyez la même clé, le premier résultat vous sera retourné au lieu d’effectuer une deuxième écriture |
picks required | array<object> | un choix par paire établissement-date acceptée par la personne |
picks[].dateOptionIdx required | integer | l’index de la date proposée, en commençant à zéro |
picks[].restaurantKey required | string | |
displayName | string | le nom d’une personne qui participe via le lien, si elle n’a pas été invitée par son nom |
memberId | string | la personne invitée à laquelle ce vote appartient, obtenue avec get_group_match |
Définition du protocole (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"
}
PARTAGE
🔴 cancel_shared_reservation destructive Annuler une réservation pour laquelle le client dispose d’un lien de modification. Cette action est irréversible. Indiquez au client l’établissement et l’heure de la réservation, puis attendez sa confirmation avant de l’annuler. Pour une réservation appartenant à l’identité active, utilisez plutôt cancel_reservation, qui vérifie cette confirmation pour vous.
Annuler une réservation partagée
Annuler une réservation pour laquelle le client dispose d’un lien de modification. Cette action est irréversible. Indiquez au client l’établissement et l’heure de la réservation, puis attendez sa confirmation avant de l’annuler. Pour une réservation appartenant à l’identité active, utilisez plutôt cancel_reservation, qui vérifie cette confirmation pour vous.
| Paramètre | Type | Description |
|---|---|---|
editToken required | string | le jeton extrait du lien de modification du client |
idempotencyKey required | string | une clé de votre choix pour cette écriture ; si vous renvoyez la même clé, le premier résultat vous sera retourné au lieu d’effectuer une deuxième écriture |
Définition du protocole (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 Créer un lien que le client peut envoyer à quelqu’un d’autre. En lecture seule : toute personne qui l’ouvre peut consulter, mais jamais modifier. Créer deux fois un lien pour le même objet renvoie le même lien. Créez un lien uniquement pour un établissement au sujet duquel le client a posé une question ou pour une réservation appartenant à l’identité active — toute personne qui détient le lien peut le consulter, et le lien d’une réservation affiche l’établissement, la date et le nombre de personnes.
Créer une clé de partage
Créer un lien que le client peut envoyer à quelqu’un d’autre. En lecture seule : toute personne qui l’ouvre peut consulter, mais jamais modifier. Créer deux fois un lien pour le même objet renvoie le même lien. Créez un lien uniquement pour un établissement au sujet duquel le client a posé une question ou pour une réservation appartenant à l’identité active — toute personne qui détient le lien peut le consulter, et le lien d’une réservation affiche l’établissement, la date et le nombre de personnes.
| Paramètre | Type | Description |
|---|---|---|
idempotencyKey required | string | une clé de votre choix pour cette écriture ; renvoyer la même clé renvoie le premier résultat au lieu d’effectuer une deuxième écriture |
kind required | string | élément à partager : restaurant, reservation |
objectKey required | string | clé de l’établissement ou de la réservation à partager |
Définition du protocole (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 L’index public de tous les établissements et listes partageables, au format XML. Volumineux : consultez-le pour découvrir tout ce qui existe, et non pour répondre à une seule question.
Obtenir le plan du site de partage
L’index public de tous les établissements et listes partageables, au format XML. Volumineux : consultez-le pour découvrir tout ce qui existe, et non pour répondre à une seule question.
Aucun paramètre.
Définition du protocole (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 Convertir un identifiant de page publique — celui qui est lisible dans l’URL d’un établissement ou d’une liste sur tastematch.io — en l’objet qu’il désigne et en sa clé.
Résoudre un identifiant public de partage
Convertir un identifiant de page publique — celui qui est lisible dans l’URL d’un établissement ou d’une liste sur tastematch.io — en l’objet qu’il désigne et en sa clé.
| Paramètre | Type | Description |
|---|---|---|
objectType required | string | restaurant ou liste |
publicId required | string | identifiant lisible de l’URL publique |
Définition du protocole (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 Convertir un lien de partage envoyé par le client en l’élément vers lequel il pointe — un établissement, une réservation ou une correspondance de groupe — et en la clé à utiliser pour continuer. Transmettez le jeton, qui correspond au dernier segment du chemin du lien. Un lien expiré ou qui n’a jamais été créé par nos soins est simplement introuvable.
Résoudre un jeton de partage
Convertir un lien de partage envoyé par le client en l’élément vers lequel il pointe — un établissement, une réservation ou une correspondance de groupe — et en la clé à utiliser pour continuer. Transmettez le jeton, qui correspond au dernier segment du chemin du lien. Un lien expiré ou qui n’a jamais été créé par nos soins est simplement introuvable.
| Paramètre | Type | Description |
|---|---|---|
token required | string | jeton du lien de partage, son dernier segment de chemin |
Définition du protocole (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 Modifier une réservation pour laquelle le client dispose d’un lien de modification — une réservation effectuée ailleurs, et non par notre intermédiaire. Le lien fait office d’autorisation : demandez-le au client et utilisez-le uniquement pour la réservation qu’il a indiquée. Pour une réservation appartenant à l’identité active, utilisez update_reservation à la place.
Mettre à jour une réservation partagée
Modifier une réservation pour laquelle le client dispose d’un lien de modification — une réservation effectuée ailleurs, et non par notre intermédiaire. Le lien fait office d’autorisation : demandez-le au client et utilisez-le uniquement pour la réservation qu’il a indiquée. Pour une réservation appartenant à l’identité active, utilisez update_reservation à la place.
| Paramètre | Type | Description |
|---|---|---|
editToken required | string | jeton du propre lien de modification du client |
idempotencyKey required | string | une clé de votre choix pour cette écriture ; renvoyer la même clé renvoie le premier résultat au lieu d’effectuer une deuxième écriture |
dateTime | string | nouvelle heure, au format RFC3339 avec le décalage UTC de la région |
pax | integer | nouveau nombre de personnes |
Définition du protocole (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"
}
UTILITAIRES
🟢 get_skill read Lire intégralement un ou plusieurs guides pratiques. Demandez-en plusieurs à la fois plutôt qu’un seul par tour.
Obtenir un guide pratique
Lire intégralement un ou plusieurs guides pratiques. Demandez-en plusieurs à la fois plutôt qu’un seul par tour.
| Paramètre | Type | Description |
|---|---|---|
names required | array<string> | guides pratiques à lire, depuis list_skills |
Définition du protocole (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 Toutes les valeurs acceptées par les filtres, classées par axe, ainsi que la règle de combinaison. Consultez-les avant d’utiliser un filtre pour la première fois et gardez-les à portée de main pendant la conversation : un descripteur inventé sera refusé, et un identifiant de cuisine inventé ne renverra discrètement aucun résultat.
Obtenir le vocabulaire
Toutes les valeurs acceptées par les filtres, classées par axe, ainsi que la règle de combinaison. Consultez-les avant d’utiliser un filtre pour la première fois et gardez-les à portée de main pendant la conversation : un descripteur inventé sera refusé, et un identifiant de cuisine inventé ne renverra discrètement aucun résultat.
Aucun paramètre.
Définition du protocole (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 Liste des guides pratiques disponibles, à raison d’une ligne par guide. Consultez un guide avant d’entreprendre un parcours que vous n’avez jamais effectué ; ils indiquent la séquence à suivre et les pièges que les descriptions des outils ne peuvent pas signaler.
Lister les guides pratiques
Liste des guides pratiques disponibles, à raison d’une ligne par guide. Consultez un guide avant d’entreprendre un parcours que vous n’avez jamais effectué ; ils indiquent la séquence à suivre et les pièges que les descriptions des outils ne peuvent pas signaler.
Aucun paramètre.
Définition du protocole (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 Convertir un nom donné par le client en clés possibles, classées de la plus probable à la moins probable. kind\ indique ce que vous recherchez : restaurant, région, liste, réservation. Un list\ ou un reservation\ appartient à la personne connectée et nécessite une connexion. Résolvez chaque élément une seule fois, puis transmettez sa clé : une nouvelle résolution ultérieure du même nom peut renvoyer un autre établissement. Si plusieurs candidats sont proches, indiquez leur nom au client pour confirmation.
Résoudre une clé
Convertir un nom donné par le client en clés possibles, classées de la plus probable à la moins probable. kind\ indique ce que vous recherchez : restaurant, région, liste, réservation. Un list\ ou un reservation\ appartient à la personne connectée et nécessite une connexion. Résolvez chaque élément une seule fois, puis transmettez sa clé : une nouvelle résolution ultérieure du même nom peut renvoyer un autre établissement. Si plusieurs candidats sont proches, indiquez leur nom au client pour confirmation.
| Paramètre | Type | Description |
|---|---|---|
kind required | string | élément à résoudre : restaurant, région, liste, réservation |
lat | number | latitude, pour résoudre une région à partir d’un point plutôt que d’un nom |
lng | number | longitude, à associer à lat |
regionId | string | limiter la recherche de restaurants à une région |
text | string | nom tel que donné par le client |
Définition du protocole (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"
}
INSTRUCTIONS
Vous êtes un agent qui utilise TasteMatch core — découverte de restaurants, correspondance des goûts et réservations. Il n’est pas nécessaire de comprendre le vecteur TasteMatch ni notre système d’étiquetage pour être utile. Utilisez chaque filtre selon l’interprétation que vous lui donnez. N’inventez jamais de descripteur — appelez get_vocabulary. Vous agissez pour une seule personne : celle qui s’est connectée à cette connexion. Tant que personne ne l’a fait, la découverte fonctionne, et un outil qui nécessite une personne lui demande de se connecter. Parcours : DISCOVER, PLACE, RESTAURANT, AVAILABILITY, RESERVATION, IDENTITY, TASTE, LISTS, GROUP, SHARE, UTILITY. Grammaire des noms — chaque outil s’y conforme : get_ | list_ | search_ | filter_ | count_ | resolve_ pour la lecture ; create_ | update_ | delete_ | {verb}_ pour l’écriture. Orientez-vous selon l’intention : Un nom, pas une clé -> resolve_key, puis opérez sur la clé « restaurants comme X » -> filter_restaurants, facettes depuis get_vocabulary « combien » -> count_restaurants, ne filtrez jamais puis ne comptez jamais les lignes Un établissement précis -> get_restaurant, avec fields[] Un plat nommé -> search_dishes Réservation -> get_reservation_info -> list_availability_slots -> create_instant_reservation ou create_reservation_request Garder quelque chose pour plus tard -> une liste Les clés vous appartiennent. Résolvez un nom une seule fois, puis transmettez la clé tout au long du parcours. Ne résolvez pas à nouveau un nom dont vous avez déjà la clé. Les listes sont votre espace de stockage. Ajoutez une sélection, un ensemble de comparaison ou les lieux dont vous avez parlé à une liste nommée : elle appartient à l’identité active et sera toujours là à la prochaine session, contrairement à votre contexte. L’identité est recueillie au moment où elle est nécessaire, jamais avant. La découverte n’écrit rien et ne nécessite aucune connexion. Pour réserver, il faut atteindre le niveau de réservation : un nom, un moyen de contact et l’acceptation des conditions. Un outil qui refuse pour cause d’identité indique le niveau manquant et l’outil permettant de l’atteindre. Une valeur déjà enregistrée n’est jamais remplacée par une valeur que vous transmettez. Il n’existe aucune fonctionnalité sociale : ni abonnements, ni blocages, ni abonnés, ni recherche d’utilisateurs, ni notifications, ni consultation de profils. La correspondance de groupe est l’unique fonctionnalité impliquant plusieurs personnes, et elle fonctionne par lien de partage — les invités n’ont pas besoin d’une identité TasteMatch. Efficacité des données : limite par défaut de 10, totalCount toujours indiqué. Utilisez toujours des filtres. Demandez fields[] plutôt que des documents entiers. Regroupez les requêtes, ne les bouclez pas. Réservation : consultez d’abord le mode de réservation de l’établissement ; les réservations instantanées et sur demande utilisent des outils différents. Réservez un créneau obtenu avec list_availability_slots. Laissez approxMinutes à 0, sauf si le client vous a dit qu’il est flexible — une valeur non nulle permet à l’établissement de réserver un autre horaire que celui demandé, et la réponse le précise dans adjusted et bookedDate. Écritures : transmettez idempotencyKey — deux appels avec la même clé renvoient le premier résultat au lieu d’effectuer deux écritures. Les outils destructifs sont signalés ; consultez la cible et indiquez au client ce qui sera supprimé avant d’appeler l’outil. cancel_reservation nécessite une confirmation préalable : consultez la réservation, répétez à voix haute le nom de l’établissement et l’heure au client, attendez sa réponse, puis indiquez les deux dans l’appel. N’annulez jamais sur la seule base d’une clé, même si vous êtes certain de vous. En cas d’échec, lisez le message. Un refus pour cause de validation, d’élément introuvable ou d’accès interdit vient de notre système et vous indique comment corriger l’appel — corrigez-le, ne le répétez pas. Un code seul ne peut pas faire l’objet d’une nouvelle tentative ; signalez-le. Présentez les résultats sous forme de résumés lisibles, et non de JSON brut, sauf demande contraire. Pour un parcours que vous n’avez jamais effectué, consultez les guides pratiques : list_skills, puis get_skill.
COMPÉTENCES
discover-to-reserve — le parcours complet : trouver un établissement, consulter son mode de réservation, réserver une table
Commencez par le lieu, puis l’établissement, puis la réservation. 1. Convertissez le lieu indiqué par le client en regionId : utilisez resolve_key avec kind region, ou list_regions. 2. Trouvez des établissements : filter_restaurants pour un type de lieu, search_restaurants pour un établissement nommé, search_dishes pour un plat nommé. Consultez get_vocabulary une fois avant d’utiliser un filtre pour la première fois. 3. Affinez avec count_restaurants avant de récupérer les résultats lorsque la description du client est vague. 4. Consultez l’établissement : get_restaurant, avec les champs essentiels par défaut et fields[] pour le reste. 5. Consultez son mode de réservation : get_reservation_info. Cela détermine l’outil suivant ; ne le devinez jamais. 6. Consultez les disponibilités : list_availability_slots. Proposez au client des horaires réels. 7. Ne recueillez l’identité qu’à ce stade : le client se connecte, puis utilisez promote_identity pour atteindre le niveau permettant de réserver. 8. Réservez la table : create_instant_reservation dans un établissement proposant la réservation instantanée, create_reservation_request dans un établissement fonctionnant sur demande, create_reservation_offer dans un établissement qui réserve par son propre widget. Indiquez au client laquelle de ces trois opérations a eu lieu. Une demande ne constitue pas encore une réservation ; une offre non plus, tant que le client n’a pas terminé dans le widget et que get_reservation_status ne le confirme pas.
sign-in-and-identity — pour qui vous agissez, les niveaux, l’outil permettant de progresser et ce que chaque niveau permet d’atteindre
Vous agissez pour une seule personne : celle qui est connectée à cette session. La connexion définit l’identité ; rien d’autre ne détermine quelles données sont concernées, et aucun argument ne le peut. Avant toute connexion, la découverte fonctionne. Un outil qui agit pour une personne lui demande de se connecter lorsque vous l’appelez ; appelez-le donc lorsque la personne invitée en a besoin, au lieu de lui demander de se connecter au préalable. Niveaux, déterminés par ce que détient l’identité : une personne anonyme connectée accède à la découverte, aux listes, à la mise en relation de groupe et à la réservation selon ses goûts + un prénom et un nom ; un contact donne accès au profil de réservation + un contact validé, rien de plus ici. Montez de niveau avec promote_identity. Un refus lié à l’identité indique le niveau qui vous manque et l’outil qui permet de l’atteindre — lisez-le au lieu de réessayer. Une réservation instantanée dans un établissement nécessite à la fois une adresse e-mail et un numéro de téléphone ; recueillez les deux lorsque la personne invitée souhaite une table confirmée plutôt qu’une demande. Une valeur déjà enregistrée n’est jamais remplacée par ce que vous envoyez. Consultez get_identity avant de demander à la personne invitée une information que nous détenons déjà.
label-vocabulary — les axes des descripteurs, valider sans mapper et combiner les facettes
Appelez get_vocabulary et utilisez exactement les termes qu’il fournit. N’en inventez jamais, ne les traduisez jamais et ne les raccourcissez jamais. Axes : dims (ce qui caractérise un établissement), occasions (ce qui lui convient), menuMetas (le type de service), menuDescriptors (ce que propose le menu), cuisine (le type de cuisine). ET entre les facettes, OU au sein d’une même facette. Chaque valeur affine les résultats. Transmettez uniquement ce que la personne invitée a demandé — un filtre qu’elle n’a pas demandé exclut silencieusement des établissements qui auraient pu lui plaire. Les menuDescriptors décrivent l’établissement, jamais la personne invitée. Une personne cœliaque n’a pas besoin d’« un invité sans gluten » ; elle a besoin d’un menu qui indique des plats sans gluten. Une valeur inconnue est refusée avec un message qui nomme la facette. Un identifiant de cuisine inventé renverrait sinon une liste vide, laissant croire qu’« il n’y a rien de ce genre ici ».
availability-semantics — instantané ou sur demande, l’échelle des créneaux, approxMinutes et adjusted
Le mode de réservation d’un établissement lui est propre. Consultez get_reservation_info avant de choisir un outil. tables instantanées confirmées en direct -> create_instant_reservation demande acceptée par une personne de l’établissement -> create_reservation_request Les horaires des créneaux suivent l’échelle propre à l’établissement, sur sa propre horloge. Ils ne suivent aucune grille ; ainsi, 19:00 n’est souvent pas réservable alors que 19:15 l’est. Consultez list_availability_slots et réservez un horaire qu’il vous a indiqué. Transmettez pax et l’outil écartera les créneaux trop petits pour le groupe, y compris les minimums propres à chaque zone. Transmettez l’areaId du créneau choisi pour conserver la zone de placement ; cela affine la recherche sans jamais déplacer la réservation. approxMinutes vaut 0 par défaut, ce qui signifie cet horaire ou rien. Augmentez cette valeur uniquement si la personne invitée a indiqué qu’elle était flexible ; consultez alors adjusted\ et bookedDate\ dans la réponse et dites-lui ce qu’elle a réellement obtenu. Des créneaux ou des plages horaires vides signifient que l’établissement est fermé ce jour-là ou que la date dépasse l’horizon de réservation. Proposez un autre jour au lieu de réessayer.
group-match — créer, inviter par lien, recueillir les votes de personnes sans identité, clôturer
La mise en relation de groupe est la seule fonctionnalité prévue pour plusieurs personnes, et elle fonctionne par lien. 1. Appelez create_group_match avec quelques établissements et quelques dates. Limitez les deux : il s’agit de prendre une décision, pas de consulter un catalogue. 2. La réponse contient un lien de partage. Donnez-le à la personne invitée pour qu’elle le diffuse. Toute personne qui l’ouvre peut voter sans aucune identité TasteMatch. 3. get_group_match indique qui a voté et pour quoi. submit_group_match_vote sert à enregistrer un vote qui vous parvient autrement que par le lien — memberId pour une personne invitée par son nom, displayName pour une nouvelle personne. 4. Appelez close_group_match lorsque le groupe a pris sa décision. Les votes restent consultables. 5. Réservez ensuite le choix retenu en suivant le parcours de réservation, pour la personne qui organise.
regions-and-places — déterminer un lieu et comprendre à quoi sert regionId
Tout ce qui est associé à une région nécessite un regionId, et c’est nous qui le fournissons, jamais la personne invitée. resolve_key avec kind region accepte une ville, un quartier, une adresse ou une latitude et une longitude. list_regions répertorie toutes les zones couvertes ; search_places associe un lieu plus précis à la région qui le contient. Une région indique le fuseau horaire IANA utilisé pour les horaires de ses établissements. Chaque dateTime que vous transmettez doit inclure le décalage UTC de cette région, et chaque horaire de créneau que vous consultez suit cette horloge. Un résultat vide signifie que nous n’avons aucun établissement dans cette zone. Dites-le plutôt que d’élargir silencieusement la recherche.
lists-as-store — ce qui doit figurer dans une liste plutôt que dans le contexte
Votre contexte prend fin avec la conversation. Une liste, non. Ajoutez une sélection, un ensemble de comparaison ou les établissements que la personne invitée a déjà écartés à une liste nommée avec create_list et add_restaurant_to_list. Donnez-lui un nom qui reflète son utilité ; la personne invitée le reverra. Commencez une conversation de suivi avec list_lists. C’est ce qu’elle a conservé la dernière fois. Les listes appartiennent à l’identité qui agit et sont privées ici — le partage, la consultation des listes d’autrui et les recherches parmi celles-ci relèvent des fonctionnalités sociales, absentes de cette interface. Faites le tri plutôt que d’accumuler : remove_restaurant_from_list supprime des données ; indiquez donc d’abord à la personne invitée quel établissement et quelle liste sont concernés.
bulk-and-pagination — compter avant de filtrer, traiter par lots plutôt qu’en boucle, limites par défaut, fields[]
Demandez moins. count_restaurants répond à la question « combien ? » sans renvoyer de lignes. Utilisez-le pendant l’affinage, puis récupérez les lignes une fois. Tous les outils de liste et de recherche acceptent limit et offset et renvoient totalCount. La limite par défaut est 10. Parcourez les résultats avec offset plutôt que de relancer la recherche. get_restaurant utilise par défaut une projection allégée. Indiquez dans fields[] uniquement les éléments que vous allez réellement communiquer à la personne invitée ; le vecteur d’étiquettes et les fiches de menu sont volumineux. Traitez par lots ce qui peut l’être : un seul appel à impressions par tour, plusieurs compétences dans un seul get_skill. Résolvez un nom une seule fois et réutilisez la clé. Le résoudre à nouveau entraîne un aller-retour supplémentaire et risque de renvoyer vers un autre établissement.