Taste Match
oficialReserve e encontre restaurantes com facilidade — somente na Suíça e arredores
O que você pode fazer com Taste Match MCP?
- Conte primeiro os resultados — Pergunte quantos estabelecimentos atendem a um conjunto de filtros antes de buscar os registros, usando
count_restaurants. - Filtre por categorias — Pesquise estabelecimentos por localização, dia ou serviço de funcionamento, culinária, opções de pratos e bebidas ou possibilidade de reserva com
filter_restaurants. - Encontre um prato específico — Pesquise nos cardápios um prato usando as palavras do próprio cliente e veja quais estabelecimentos o servem por meio de
search_dishes. - Pesquise um estabelecimento pelo nome — Encontre restaurantes pelo nome ou por como são chamados, opcionalmente limitando a busca a uma região, com
search_restaurants. - Veja os mais populares — Liste os estabelecimentos mais apreciados em uma determinada região com
list_popular_restaurants. - Encontre lugares semelhantes — Encontre estabelecimentos com gostos parecidos com os de um que você já tem a chave, usando
list_similar_restaurants.
Servidor MCP hospedado
npx add-mcp 'https://mcp.tastematch.io/'Instala no Claude Code, Codex, Cursor e outros
Documentação
| URL do serviço público | https://mcp.tastematch.io/ |
|---|---|
| URL da declaração de privacidade | https://tastematch.io/mcp/privacy.html |
Toolkit MCP com HTTP Streamable que ajuda você a encontrar os restaurantes mais adequados para você na Suíça e em outros lugares. Adicione-o a um cliente MCP usando a URL acima. A descoberta é pública.
AUTENTICAÇÃO
Para acessar nosso servidor MCP, seu serviço precisará se registrar por conta própria usando DCR (OAuth 2.0 Dynamic Client Registration) no servidor de autorização indicado em /.well-known/oauth-protected-resource/mcp como authorization_servers; o documento de metadados desse servidor contém o registration_endpoint.
Para oferecer suporte a endpoints autenticados, seus usuários precisarão se autenticar no mesmo servidor de autorização com OpenID Connect (authorization code with PKCE), solicitando o que scopes_supported lista em /.well-known/oauth-protected-resource/mcp.
- 🟢 Sem login: a ferramenta responde a qualquer pessoa.
- 🟡 Login para alguns argumentos, por exemplo,
list_recommended_restaurantsresolve_key. Caso contrário, as chamadas são públicas e permitem parâmetros específicos do usuário; o uso desses parâmetros só funciona quando o usuário está conectado. Consulte abaixo a falha de login. - 🔴 Login: a ferramenta age em nome de um usuário. Os usuários podem ser anônimos. Se chamada sem um token, ela responde com HTTP 401 e um desafio
WWW-Authenticateque aponta para/.well-known/oauth-protected-resource/mcp, e o cliente autentica a pessoa com OAuth (authorization code with PKCE). A pessoa conectada é a identidade. - Nível:
anonymousé qualquer pessoa conectada.reservationadiciona nome e sobrenome, um contato e os Termos aceitos, quepromote_identitycoleta quando uma reserva precisa deles. - Limite de taxa: as chamadas são contabilizadas por pessoa conectada, e todas as chamadas sem token compartilham o mesmo limite. Uma chamada que exceda o limite é recusada com um código; aguarde e depois envie menos chamadas.
DESCOBRIR
🟢 count_restaurants read Conta quantos estabelecimentos correspondem a um conjunto de facetas, sem retornar linhas. Use antes de filter_restaurants ao explorar um espaço de filtros: responde à mesma pergunta sem os documentos.
Contar restaurantes
Conta quantos estabelecimentos correspondem a um conjunto de facetas, sem retornar linhas. Use antes de filter_restaurants ao explorar um espaço de filtros: responde à mesma pergunta sem os documentos.
| Parâmetro | Tipo | Descrição |
|---|---|---|
drinkOptions | object | o que a lista de bebidas deve incluir |
drinkOptions.beerSelection | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
drinkOptions.cocktailSelection | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
drinkOptions.natureWineSelection | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
drinkOptions.wineSelection | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
kitchen | object | o tipo de cozinha que serve |
kitchen.cuisine | array<string> | slugs de culinárias; qualquer um deles atende ao critério. A lista está em get_vocabulary |
location | object | onde pesquisar: um regionId ou um ponto com um raio |
location.lat | number | latitude do centro da pesquisa, em conjunto com lng |
location.lng | number | longitude do centro da pesquisa |
location.radiusMeters | integer | distância a partir do ponto a pesquisar |
location.regionId | string | a região a pesquisar, obtida de list_regions ou resolve_key |
menuOptions | object | o que o menu deve incluir |
menuOptions.fishDishes | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
menuOptions.glutenFreeDishes | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
menuOptions.halalDishes | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
menuOptions.lactoseFreeDishes | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
menuOptions.meatDishes | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
menuOptions.veganDishes | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
menuOptions.vegetarianDishes | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
nutrition | object | o que o estabelecimento é como um todo |
nutrition.veganRestaurants | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
nutrition.vegetarianRestaurants | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
opening | object | quando o estabelecimento está aberto |
opening.daytime | string | o serviço em que deve estar aberto: almoço ou jantar |
opening.openOn | array<integer> | dias da semana em que deve estar aberto; domingo é 0 |
reservation | object | como é possível fazer uma reserva |
reservation.hasWidget | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
reservation.liveAvailability | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
Definição de protocolo (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Count restaurants"
},
"description": "How many venues a facet set matches, with no rows. Call this before filter_restaurants when exploring a filter space: it answers the same question without the documents.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"drinkOptions": {
"additionalProperties": false,
"description": "what the drinks list must carry",
"properties": {
"beerSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"cocktailSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"natureWineSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"wineSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
},
"kitchen": {
"additionalProperties": false,
"description": "the kitchen it cooks",
"properties": {
"cuisine": {
"description": "cuisine slugs, any one of which satisfies it; the list is in get_vocabulary",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"location": {
"additionalProperties": false,
"description": "where to search: a regionId, or a point with a radius",
"properties": {
"lat": {
"description": "latitude of the search centre, paired with lng",
"type": "number"
},
"lng": {
"description": "longitude of the search centre",
"type": "number"
},
"radiusMeters": {
"description": "how far around the point to look",
"type": "integer"
},
"regionId": {
"description": "the region to search in, from list_regions or resolve_key",
"type": "string"
}
},
"type": "object"
},
"menuOptions": {
"additionalProperties": false,
"description": "what the menu must carry",
"properties": {
"fishDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"glutenFreeDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"halalDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"lactoseFreeDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"meatDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"veganDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"vegetarianDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
},
"nutrition": {
"additionalProperties": false,
"description": "what the venue is as a whole",
"properties": {
"veganRestaurants": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"vegetarianRestaurants": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
},
"opening": {
"additionalProperties": false,
"description": "when the venue is open",
"properties": {
"daytime": {
"description": "the service to be open for: lunch or dinner",
"type": "string"
},
"openOn": {
"description": "weekdays it must be open on, Sunday is 0",
"items": {
"type": "integer"
},
"type": "array"
}
},
"type": "object"
},
"reservation": {
"additionalProperties": false,
"description": "how it can be booked",
"properties": {
"hasWidget": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"liveAvailability": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
}
},
"required": [],
"type": "object"
},
"name": "count_restaurants",
"title": "Count restaurants"
}
🟢 filter_restaurants read Pesquisa estabelecimentos por faceta: onde ficam, quando estão abertos, que tipo de cozinha servem, o que o menu e a lista de bebidas oferecem e como é possível fazer uma reserva. Cada faceta restringe os resultados aos estabelecimentos que atendem ao critério; portanto, informe apenas o que o cliente pediu. Os valores de descritores e culinárias vêm de get_vocabulary — valores inventados são recusados, não ignorados. Ordenados por popularidade; nenhum vetor de preferências é aplicado.
Filtrar restaurantes
Pesquisa estabelecimentos por faceta: onde ficam, quando estão abertos, que tipo de cozinha servem, o que o menu e a lista de bebidas oferecem e como é possível fazer uma reserva. Cada faceta restringe os resultados aos estabelecimentos que atendem ao critério; portanto, informe apenas o que o cliente pediu. Os valores de descritores e culinárias vêm de get_vocabulary — valores inventados são recusados, não ignorados. Ordenados por popularidade; nenhum vetor de preferências é aplicado.
| Parâmetro | Tipo | Descrição |
|---|---|---|
drinkOptions | object | o que a lista de bebidas deve incluir |
drinkOptions.beerSelection | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
drinkOptions.cocktailSelection | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
drinkOptions.natureWineSelection | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
drinkOptions.wineSelection | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
kitchen | object | o tipo de cozinha que serve |
kitchen.cuisine | array<string> | slugs de culinárias; qualquer um deles atende ao critério. A lista está em get_vocabulary |
limit | integer | linhas a retornar, no máximo 50 |
location | object | onde pesquisar: um regionId ou um ponto com um raio |
location.lat | number | latitude do centro da pesquisa, em conjunto com lng |
location.lng | number | longitude do centro da pesquisa |
location.radiusMeters | integer | distância a partir do ponto a pesquisar |
location.regionId | string | a região a pesquisar, obtida de list_regions ou resolve_key |
menuOptions | object | o que o menu deve incluir |
menuOptions.fishDishes | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
menuOptions.glutenFreeDishes | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
menuOptions.halalDishes | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
menuOptions.lactoseFreeDishes | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
menuOptions.meatDishes | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
menuOptions.veganDishes | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
menuOptions.vegetarianDishes | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
nutrition | object | o que o estabelecimento é como um todo |
nutrition.veganRestaurants | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
nutrition.vegetarianRestaurants | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
offset | integer | linhas a ignorar; com totalCount no resultado, permite percorrer as páginas |
opening | object | quando o estabelecimento está aberto |
opening.daytime | string | o serviço em que deve estar aberto: almoço ou jantar |
opening.openOn | array<integer> | dias da semana em que deve estar aberto; domingo é 0 |
reservation | object | como é possível fazer uma reserva |
reservation.hasWidget | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
reservation.liveAvailability | boolean | true restringe aos estabelecimentos que oferecem isso; omita para não restringir por esse critério |
Definição de protocolo (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Filter restaurants"
},
"description": "Search venues by facet: where, when open, what kitchen, what the menu and the drinks list carry, and how it can be booked. Every facet narrows the result to the venues carrying it, so pass only what the guest asked for. Descriptor and cuisine values come from get_vocabulary — an invented one is refused rather than ignored. Ranked by popularity; no taste vector is applied.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"drinkOptions": {
"additionalProperties": false,
"description": "what the drinks list must carry",
"properties": {
"beerSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"cocktailSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"natureWineSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"wineSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
},
"kitchen": {
"additionalProperties": false,
"description": "the kitchen it cooks",
"properties": {
"cuisine": {
"description": "cuisine slugs, any one of which satisfies it; the list is in get_vocabulary",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"location": {
"additionalProperties": false,
"description": "where to search: a regionId, or a point with a radius",
"properties": {
"lat": {
"description": "latitude of the search centre, paired with lng",
"type": "number"
},
"lng": {
"description": "longitude of the search centre",
"type": "number"
},
"radiusMeters": {
"description": "how far around the point to look",
"type": "integer"
},
"regionId": {
"description": "the region to search in, from list_regions or resolve_key",
"type": "string"
}
},
"type": "object"
},
"menuOptions": {
"additionalProperties": false,
"description": "what the menu must carry",
"properties": {
"fishDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"glutenFreeDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"halalDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"lactoseFreeDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"meatDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"veganDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"vegetarianDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
},
"nutrition": {
"additionalProperties": false,
"description": "what the venue is as a whole",
"properties": {
"veganRestaurants": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"vegetarianRestaurants": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
},
"opening": {
"additionalProperties": false,
"description": "when the venue is open",
"properties": {
"daytime": {
"description": "the service to be open for: lunch or dinner",
"type": "string"
},
"openOn": {
"description": "weekdays it must be open on, Sunday is 0",
"items": {
"type": "integer"
},
"type": "array"
}
},
"type": "object"
},
"reservation": {
"additionalProperties": false,
"description": "how it can be booked",
"properties": {
"hasWidget": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"liveAvailability": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
}
},
"required": [],
"type": "object"
},
"name": "filter_restaurants",
"title": "Filter restaurants"
}
🟢 list_popular_restaurants read Os estabelecimentos mais curtidos de uma região. É obrigatório informar uma região: sem ela, esta ferramenta consulta todos os estabelecimentos que temos.
Listar restaurantes populares
Os estabelecimentos mais curtidos de uma região. É obrigatório informar uma região: sem ela, esta ferramenta consulta todos os estabelecimentos que temos.
| Parâmetro | Tipo | Descrição |
|---|---|---|
regionId required | string | a região a consultar, obtida de list_regions |
limit | integer | linhas a retornar, no máximo 50 |
offset | integer | linhas a ignorar; com totalCount no resultado, permite percorrer as páginas |
Definição de protocolo (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List popular restaurants"
},
"description": "The most-liked venues of one region. A region is required: without one this reads every venue we hold.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
},
"regionId": {
"description": "the region to read, from list_regions",
"type": "string"
}
},
"required": [
"regionId"
],
"type": "object"
},
"name": "list_popular_restaurants",
"title": "List popular restaurants"
}
🟡 list_recommended_restaurants read Estabelecimentos recomendados para o cliente conectado, começando pelos mais próximos em termos de preferências; antes de alguém se conectar, as recomendações não são personalizadas. bookableOnly\ mantém apenas estabelecimentos com uma mesa disponível, um conjunto bem menor que exige login.
Listar restaurantes recomendados
Estabelecimentos recomendados para o cliente conectado, começando pelos mais próximos em termos de preferências; antes de alguém se conectar, as recomendações não são personalizadas. bookableOnly\ mantém apenas estabelecimentos com uma mesa disponível, um conjunto bem menor que exige login.
| Parâmetro | Tipo | Descrição |
|---|---|---|
bookableOnly | boolean | manter apenas estabelecimentos com disponibilidade em tempo real |
interDiem | integer | com bookableOnly, quantos dias à frente pode haver uma mesa disponível |
limit | integer | linhas a retornar, no máximo 50 |
offset | integer | linhas a ignorar; com totalCount no resultado, permite percorrer as páginas |
regionId | string | a região para recomendar; se omitida, usa a região da própria identidade |
Definição de protocolo (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List recommended restaurants"
},
"description": "Venues recommended for the signed-in guest, closest in taste first; before anyone signs in they are not personal. \`bookableOnly\` keeps only venues with a table free, which is a much smaller set and needs a sign-in.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"bookableOnly": {
"description": "keep only venues with live availability",
"type": "boolean"
},
"interDiem": {
"description": "with bookableOnly, how many days ahead a free table may lie",
"type": "integer"
},
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
},
"regionId": {
"description": "the region to recommend in; the identity's own region when omitted",
"type": "string"
}
},
"required": [],
"type": "object"
},
"name": "list_recommended_restaurants",
"title": "List recommended restaurants"
}
🟢 list_similar_restaurants read Estabelecimentos com preferências semelhantes às de um estabelecimento para o qual você já tem uma chave, começando pelos mais próximos. sameCategory\ mantém os resultados na mesma família de culinária e fica ativado por padrão, a menos que você o desative.
Listar restaurantes semelhantes
Estabelecimentos com preferências semelhantes às de um estabelecimento para o qual você já tem uma chave, começando pelos mais próximos. sameCategory\ mantém os resultados na mesma família de culinária e fica ativado por padrão, a menos que você o desative.
| Parâmetro | Tipo | Descrição |
|---|---|---|
restaurantKey required | string | o estabelecimento cujos semelhantes serão encontrados |
limit | integer | linhas a retornar, no máximo 50 |
offset | integer | linhas a ignorar; com totalCount no resultado, permite percorrer as páginas |
sameCategory | boolean | manter na mesma família de culinária; true quando omitido |
Definição de protocolo (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List similar restaurants"
},
"description": "Venues close in taste to one you already hold a key for, nearest first. \`sameCategory\` keeps them inside the same kitchen family and is on unless you turn it off.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
},
"restaurantKey": {
"description": "the venue to find neighbours of",
"type": "string"
},
"sameCategory": {
"description": "keep to the same kitchen family; true when omitted",
"type": "boolean"
}
},
"required": [
"restaurantKey"
],
"type": "object"
},
"name": "list_similar_restaurants",
"title": "List similar restaurants"
}
🟢 search_dishes read Encontra os estabelecimentos que servem um prato específico. Pesquise o prato exatamente como o cliente o descreveu, com as mesmas palavras e na mesma ordem — a forma como o prato é escrito faz parte da sua identidade; portanto, não reformule, traduza nem encurte. Palavras mais longas toleram pequenos erros de ortografia; as muito curtas precisam estar exatas. Cada resultado cita o prato como aparece no menu, e exact\ é true somente quando o nome corresponde palavra por palavra. Esta ferramenta não considera o horário de funcionamento — para isso, use filter_restaurants. A cobertura dos menus é parcial: um resultado vazio significa que nenhum menu disponível para nós menciona esse prato, não que ninguém o prepare.
Pesquisar pratos
Encontra os estabelecimentos que servem um prato específico. Pesquise o prato exatamente como o cliente o descreveu, com as mesmas palavras e na mesma ordem — a forma como o prato é escrito faz parte da sua identidade; portanto, não reformule, traduza nem encurte. Palavras mais longas toleram pequenos erros de ortografia; as muito curtas precisam estar exatas. Cada resultado cita o prato como aparece no menu, e exact\ é true somente quando o nome corresponde palavra por palavra. Esta ferramenta não considera o horário de funcionamento — para isso, use filter_restaurants. A cobertura dos menus é parcial: um resultado vazio significa que nenhum menu disponível para nós menciona esse prato, não que ninguém o prepare.
| Parâmetro | Tipo | Descrição |
|---|---|---|
q obrigatório | string | o prato conforme o hóspede o chamou |
lat | number | latitude para pesquisar ao redor, combinada com lng |
limit | integer | linhas a retornar, no máximo 50 |
lng | number | longitude para pesquisar ao redor |
offset | integer | linhas a ignorar; com totalCount no resultado, isso permite percorrê-las por páginas |
radiusMeters | integer | distância ao redor do ponto a pesquisar |
regionId | string | limitar a pesquisa a uma região |
Definição da ferramenta (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 leitura Encontrar estabelecimentos pelo nome ou por como são chamados, nas palavras do próprio hóspede. No mínimo três caracteres. Limite a uma região quando souber qual é. Use filter_restaurants quando o hóspede descrever um tipo de lugar em vez de dar um nome.
Pesquisar restaurantes
Encontrar estabelecimentos pelo nome ou por como são chamados, nas palavras do próprio hóspede. No mínimo três caracteres. Limite a uma região quando souber qual é. Use filter_restaurants quando o hóspede descrever um tipo de lugar em vez de dar um nome.
| Parâmetro | Tipo | Descrição |
|---|---|---|
text obrigatório | string | o que pesquisar, com três caracteres ou mais |
limit | integer | linhas a retornar, no máximo 50 |
offset | integer | linhas a ignorar; com totalCount no resultado, isso permite percorrê-las por páginas |
regionId | string | limitar a pesquisa a uma região; se omitido, pesquisa em todas as regiões que abrangemos |
Definição da ferramenta (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"
}
LUGAR
🟢 list_regions leitura As regiões abrangidas pelo TasteMatch. Cada uma inclui o regionId usado por todas as ferramentas com escopo regional e o fuso horário IANA no qual são expressos os horários de funcionamento e os horários disponíveis dos estabelecimentos. Informe um ponto para obtê-las em ordem de proximidade. Um lugar que não esteja em nenhuma dessas regiões não tem estabelecimentos em nosso catálogo.
Listar regiões
As regiões abrangidas pelo TasteMatch. Cada uma inclui o regionId usado por todas as ferramentas com escopo regional e o fuso horário IANA no qual são expressos os horários de funcionamento e os horários disponíveis dos estabelecimentos. Informe um ponto para obtê-las em ordem de proximidade. Um lugar que não esteja em nenhuma dessas regiões não tem estabelecimentos em nosso catálogo.
| Parâmetro | Tipo | Descrição |
|---|---|---|
lat | number | latitude para ordenar por distância, combinada com lng |
limit | integer | linhas a retornar, no máximo 50 |
lng | number | longitude para ordenar por distância |
offset | integer | linhas a ignorar; com totalCount no resultado, isso permite percorrê-las por páginas |
Definição da ferramenta (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 leitura Associar uma cidade, distrito ou bairro mencionado pelo hóspede à região que o contém. Um resultado vazio significa que o lugar fica fora de todas as regiões que abrangemos, não que o nome esteja errado.
Pesquisar lugares
Associar uma cidade, distrito ou bairro mencionado pelo hóspede à região que o contém. Um resultado vazio significa que o lugar fica fora de todas as regiões que abrangemos, não que o nome esteja errado.
| Parâmetro | Tipo | Descrição |
|---|---|---|
q obrigatório | string | o lugar conforme o hóspede o chamou |
countryCode | string | código ISO 3166-1 alpha-2 para restringir a correspondência |
limit | integer | linhas a retornar, no máximo 50 |
offset | integer | linhas a ignorar; com totalCount no resultado, isso permite percorrê-las por páginas |
Definição da ferramenta (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"
}
RESTAURANTE
🟢 get_restaurant leitura Ler um estabelecimento. A projeção padrão é enxuta — nome, chaves, região, endereço, descritores, formas de reserva e resumo do horário de funcionamento. Os dados mais pesados só são retornados quando você os especifica em fields\: ContactInformation, MenuCards, MenuCardsV2, labelVector, coverPictures, socialScore, matchInfo, tmType, eventId, businessPro, likesByUser, likesByFollowees, likesUserAvatars, likesFolloweeAvatars. Um documento sem projeção pode ser maior que o restante da sua tarefa.
Obter restaurante
Ler um estabelecimento. A projeção padrão é enxuta — nome, chaves, região, endereço, descritores, formas de reserva e resumo do horário de funcionamento. Os dados mais pesados só são retornados quando você os especifica em fields\: ContactInformation, MenuCards, MenuCardsV2, labelVector, coverPictures, socialScore, matchInfo, tmType, eventId, businessPro, likesByUser, likesByFollowees, likesUserAvatars, likesFolloweeAvatars. Um documento sem projeção pode ser maior que o restante da sua tarefa.
| Parâmetro | Tipo | Descrição |
|---|---|---|
restaurantKey obrigatório | string | a chave do estabelecimento |
accessType | string | quando o hóspede pediu para abrir este estabelecimento, como chegou até ele — um de filtered, searched, recommended, similar, popular, spotlight. A abertura é então contabilizada como sendo dele; omita quando estiver apenas verificando um estabelecimento por conta própria. |
fields | array<string> | os campos a retornar; a projeção padrão é enxuta, e as chaves são sempre incluídas |
Definição da ferramenta (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 gravação Registrar que a identidade ativa gosta deste estabelecimento. Curtir é o que melhora as recomendações seguintes, e isso deve refletir a opinião do hóspede, não a sua — curta o que ele disse que gostou.
Curtir restaurante
Registrar que a identidade ativa gosta deste estabelecimento. Curtir é o que melhora as recomendações seguintes, e isso deve refletir a opinião do hóspede, não a sua — curta o que ele disse que gostou.
| Parâmetro | Tipo | Descrição |
|---|---|---|
idempotencyKey obrigatório | string | uma chave própria para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
restaurantKey obrigatório | string | a chave do estabelecimento |
Definição da ferramenta (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 gravação Informar quais estabelecimentos a identidade realmente viu e em quais deles agiu. Um lote por turno, com um sessionId próprio que permanece igual durante toda a conversa. Relate o que aconteceu, nunca o que pretende fazer: são esses os sinais com que o recomendador aprende.
Enviar impressões sobre restaurantes
Informar quais estabelecimentos a identidade realmente viu e em quais deles agiu. Um lote por turno, com um sessionId próprio que permanece igual durante toda a conversa. Relate o que aconteceu, nunca o que pretende fazer: são esses os sinais com que o recomendador aprende.
| Parâmetro | Tipo | Descrição |
|---|---|---|
idempotencyKey obrigatório | string | uma chave própria para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
impressions obrigatório | array<object> | o que foi exibido ou recebeu alguma ação |
impressions[].accessType obrigatório | string | um de filtered, searched, recommended, similar, popular, spotlight |
impressions[].restaurantKey obrigatório | string | |
sessionId obrigatório | string | um UUID próprio, igual para todos os lotes de uma conversa |
Definição da ferramenta (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 gravação Desfazer uma curtida. O estabelecimento permanece no catálogo; apenas a opinião da identidade sobre ele é removida.
Descurtir restaurante
Desfazer uma curtida. O estabelecimento permanece no catálogo; apenas a opinião da identidade sobre ele é removida.
| Parâmetro | Tipo | Descrição |
|---|---|---|
idempotencyKey obrigatório | string | uma chave própria para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
restaurantKey obrigatório | string | a chave do estabelecimento |
Definição da ferramenta (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"
}
DISPONIBILIDADE
🟢 get_reservation_info leitura Como este estabelecimento aceita reservas. mode\ é instantâneo quando as mesas são confirmadas em tempo real, request quando alguém do estabelecimento precisa aceitar, e a ferramenta recusa quando o estabelecimento não aceita reservas. Leia isto primeiro: determina se você deve chamar create_instant_reservation ou create_reservation_request. maxPeople\ é o maior grupo que podemos acomodar. Esta consulta apenas lê — não reserva nem registra nada.
Obter informações sobre reservas
Como este estabelecimento aceita reservas. mode\ é instantâneo quando as mesas são confirmadas em tempo real, request quando alguém do estabelecimento precisa aceitar, e a ferramenta recusa quando o estabelecimento não aceita reservas. Leia isto primeiro: determina se você deve chamar create_instant_reservation ou create_reservation_request. maxPeople\ é o maior grupo que podemos acomodar. Esta consulta apenas lê — não reserva nem registra nada.
| Parâmetro | Tipo | Descrição |
|---|---|---|
restaurantKey obrigatório | string | a chave do estabelecimento |
Definição da ferramenta (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 leitura As mesas disponíveis em um estabelecimento em um determinado dia. Os horários seguem o relógio local do estabelecimento e não obedecem a uma grade fixa — reserve um horário consultado aqui, não um horário redondo escolhido por você. Um estabelecimento no modo de solicitação responde em windows\: os intervalos nos quais aceitará uma solicitação. Se ambos estiverem vazios, o estabelecimento está fechado nesse dia ou o período de reservas ainda não foi alcançado.
Listar horários disponíveis
As mesas disponíveis em um estabelecimento em um determinado dia. Os horários seguem o relógio local do estabelecimento e não obedecem a uma grade fixa — reserve um horário consultado aqui, não um horário redondo escolhido por você. Um estabelecimento no modo de solicitação responde em windows\: os intervalos nos quais aceitará uma solicitação. Se ambos estiverem vazios, o estabelecimento está fechado nesse dia ou o período de reservas ainda não foi alcançado.
| Parâmetro | Tipo | Descrição |
|---|---|---|
date obrigatório | string | o dia a consultar, em RFC3339 com o deslocamento UTC da região |
restaurantKey obrigatório | string | a chave do estabelecimento |
pax | integer | tamanho do grupo, para excluir horários com capacidade insuficiente |
Definição da ferramenta (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"
}
RESERVA
🔴 cancel_reservation destrutiva Cancelar uma reserva pertencente à identidade. Isso não pode ser desfeito e a mesa será liberada. Primeiro consulte a reserva, informe ao hóspede o estabelecimento e o horário, aguarde a confirmação e então repita ambos aqui: confirmRestaurantName\ e confirmDateTime\ devem corresponder à reserva registrada ou a chamada será recusada. Nunca cancele usando apenas uma chave, por mais certeza que tenha.
Cancelar reserva
Cancelar uma reserva pertencente à identidade. Isso não pode ser desfeito e a mesa será liberada. Primeiro consulte a reserva, informe ao hóspede o estabelecimento e o horário, aguarde a confirmação e então repita ambos aqui: confirmRestaurantName\ e confirmDateTime\ devem corresponder à reserva registrada ou a chamada será recusada. Nunca cancele usando apenas uma chave, por mais certeza que tenha.
| Parâmetro | Tipo | Descrição |
|---|---|---|
confirmDateTime obrigatório | string | o horário da reserva conforme informado ao hóspede, em RFC3339 |
confirmRestaurantName obrigatório | string | o nome do estabelecimento conforme informado ao hóspede |
idempotencyKey obrigatório | string | uma chave própria para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
reservationKey obrigatório | string | a reserva a cancelar, do conjunto de reservas próprias de list_reservations |
Definição da ferramenta (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 gravação Reservar uma mesa disponível agora. Isso é para estabelecimentos instantâneos, e a mesa é confirmada quando a chamada retorna. Reserve um horário dateTime\ consultado em list_availability_slots — os horários do estabelecimento não seguem uma grade fixa, então um horário redondo geralmente não estará entre eles. Deixe approxMinutes\ em 0, a menos que o hóspede tenha dito que é flexível: um valor diferente de zero permite que o estabelecimento reserve um horário próximo, e a resposta informa isso em adjusted\ e bookedDate\. A reserva é feita usando a identidade armazenada, que precisa ter e-mail e telefone para um estabelecimento instantâneo.
Criar reserva instantânea
Pegue uma mesa que esteja livre agora. Isso é para estabelecimentos instantâneos, e a mesa é confirmada quando a chamada retorna. Reserve um dateTime\ que você leu em list_availability_slots — os horários do estabelecimento não seguem uma grade, então um horário redondo geralmente não está entre eles. Deixe approxMinutes\ em 0, a menos que o cliente tenha dito que é flexível: um valor diferente de zero permite que o estabelecimento reserve um horário próximo, e a resposta informa isso em adjusted\ e bookedDate\. A reserva usa a identidade armazenada, que precisa ter um e-mail e um telefone para um estabelecimento instantâneo.
| Parâmetro | Tipo | Descrição |
|---|---|---|
dateTime obrigatório | string | o horário a reservar, em RFC3339 com o deslocamento UTC da região, conforme lido em list_availability_slots |
idempotencyKey obrigatório | string | uma chave sua para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
pax obrigatório | integer | tamanho do grupo |
restaurantKey obrigatório | string | a chave do estabelecimento |
approxMinutes | integer | o quanto o estabelecimento pode se afastar de dateTime ao reservar; 0 significa este horário ou nenhum |
areaId | string | a área onde sentar, do horário escolhido; restringe a busca e nunca altera a reserva |
comment | string | uma observação para o estabelecimento, nas palavras do cliente |
Definição da interface (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 gravação Abrir uma reserva em um estabelecimento que aceita reservas pelo próprio widget. Esta é uma gravação: ela cria um rascunho atribuído à identidade em uso e um widgetUrl\ de uso único para o cliente concluir. Envie o URL ao cliente e, em seguida, consulte get_reservation_status usando o reservationKey\ retornado. Chame uma vez por tentativa de reserva — uma segunda chamada cria um segundo rascunho. Um estabelecimento que aceita reservas nativamente não precisa de oferta: use create_instant_reservation ou create_reservation_request.
Criar oferta de reserva
Abrir uma reserva em um estabelecimento que aceita reservas pelo próprio widget. Esta é uma gravação: ela cria um rascunho atribuído à identidade em uso e um widgetUrl\ de uso único para o cliente concluir. Envie o URL ao cliente e, em seguida, consulte get_reservation_status usando o reservationKey\ retornado. Chame uma vez por tentativa de reserva — uma segunda chamada cria um segundo rascunho. Um estabelecimento que aceita reservas nativamente não precisa de oferta: use create_instant_reservation ou create_reservation_request.
| Parâmetro | Tipo | Descrição |
|---|---|---|
idempotencyKey obrigatório | string | uma chave sua para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
restaurantKey obrigatório | string | a chave do estabelecimento |
Definição da interface (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 gravação Solicite uma mesa a um estabelecimento. Isso é para estabelecimentos que trabalham com solicitações: a reserva retorna como pendente e alguém do estabelecimento a aceita ou recusa, então informe ao cliente que a mesa ainda não está confirmada. O horário precisa estar dentro de uma das janelas informadas por list_availability_slots. A reserva usa a identidade armazenada — o nome e o contato são lidos do registro, não desta chamada.
Criar solicitação de reserva
Solicite uma mesa a um estabelecimento. Isso é para estabelecimentos que trabalham com solicitações: a reserva retorna como pendente e alguém do estabelecimento a aceita ou recusa, então informe ao cliente que a mesa ainda não está confirmada. O horário precisa estar dentro de uma das janelas informadas por list_availability_slots. A reserva usa a identidade armazenada — o nome e o contato são lidos do registro, não desta chamada.
| Parâmetro | Tipo | Descrição |
|---|---|---|
dateTime obrigatório | string | o horário solicitado, em RFC3339 com o deslocamento UTC da região |
idempotencyKey obrigatório | string | uma chave sua para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
pax obrigatório | integer | tamanho do grupo |
restaurantKey obrigatório | string | a chave do estabelecimento |
comment | string | uma observação para o estabelecimento, nas palavras do cliente |
Definição da interface (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 leitura Consulte o status de uma reserva da identidade em uso. Faça isso após uma oferta: uma reserva feita por widget só se torna real quando o estabelecimento a confirma, e o status informa quando isso acontece.
Obter status da reserva
Consulte o status de uma reserva da identidade em uso. Faça isso após uma oferta: uma reserva feita por widget só se torna real quando o estabelecimento a confirma, e o status informa quando isso acontece.
| Parâmetro | Tipo | Descrição |
|---|---|---|
reservationKey obrigatório | string | a chave da reserva, obtida em list_reservations |
Definição da interface (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 leitura Consulte para quais horários uma reserva existente poderia ser alterada. Esta é uma pergunta diferente de list_availability_slots: ela se limita à reserva e às opções para as quais o estabelecimento permite alterá-la. Somente uma reserva aceita em um estabelecimento com disponibilidade em tempo real pode ser alterada.
Listar horários da reserva
Consulte para quais horários uma reserva existente poderia ser alterada. Esta é uma pergunta diferente de list_availability_slots: ela se limita à reserva e às opções para as quais o estabelecimento permite alterá-la. Somente uma reserva aceita em um estabelecimento com disponibilidade em tempo real pode ser alterada.
| Parâmetro | Tipo | Descrição |
|---|---|---|
reservationKey obrigatório | string | a reserva a alterar, obtida em list_reservations |
fromDate | string | o primeiro dia a consultar, em RFC3339; se omitido, usa o dia da própria reserva |
Definição da interface (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 leitura Todas as reservas da identidade em uso. owned\ permite ações — essas são as chaves aceitas pelas ferramentas de gravação. foundByEmail\ foi transferida para outro titular: ela é exibida para que você possa falar sobre ela, mas todas as gravações relacionadas são recusadas.
Listar reservas
Todas as reservas da identidade em uso. owned\ permite ações — essas são as chaves aceitas pelas ferramentas de gravação. foundByEmail\ foi transferida para outro titular: ela é exibida para que você possa falar sobre ela, mas todas as gravações relacionadas são recusadas.
Sem parâmetros.
Definição da interface (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 gravação Altere uma reserva pertencente à identidade ou mude o tamanho do grupo. Informe somente o que será alterado. O novo horário precisa ser um dos oferecidos por list_reservation_slots para essa reserva.
Atualizar reserva
Altere uma reserva pertencente à identidade ou mude o tamanho do grupo. Informe somente o que será alterado. O novo horário precisa ser um dos oferecidos por list_reservation_slots para essa reserva.
| Parâmetro | Tipo | Descrição |
|---|---|---|
idempotencyKey obrigatório | string | uma chave sua para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
reservationKey obrigatório | string | a reserva a alterar, do conjunto de reservas próprias de list_reservations |
dateTime | string | o novo horário, em RFC3339 com o deslocamento UTC da região |
pax | integer | o novo tamanho do grupo |
Definição da interface (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"
}
IDENTIDADE
🔴 get_identity leitura Consulte a identidade em nome da qual você está agindo. Leia-a antes de perguntar qualquer coisa ao cliente: um valor já registrado nunca é substituído, e perguntar novamente algo que já temos dá a impressão de que você não está ouvindo.
Obter identidade
Consulte a identidade em nome da qual você está agindo. Leia-a antes de perguntar qualquer coisa ao cliente: um valor já registrado nunca é substituído, e perguntar novamente algo que já temos dá a impressão de que você não está ouvindo.
Sem parâmetros.
Definição da interface (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 leitura O que esta conexão permite acessar: as jornadas disponíveis e a pessoa conectada em nome de quem você age, com seu nível — acting\ está ausente até alguém entrar. Chame primeiro quando não souber se alguém está conectado e consulte climbWith\ para saber qual ferramenta coleta o que estiver faltando no nível atual.
Obter sessão
O que esta conexão permite acessar: as jornadas disponíveis e a pessoa conectada em nome de quem você age, com seu nível — acting\ está ausente até alguém entrar. Chame primeiro quando não souber se alguém está conectado e consulte climbWith\ para saber qual ferramenta coleta o que estiver faltando no nível atual.
Sem parâmetros.
Definição da interface (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 gravação Avance até o nível que permite fazer reservas, fornecendo o que falta na identidade: nome e sobrenome, um canal de contato e a aceitação dos Termos. Envie somente o que o cliente informou nesta conversa. Um estabelecimento instantâneo precisa de e-mail e telefone, então colete ambos quando o cliente quiser uma mesa confirmada.
Promover identidade
Avance até o nível que permite fazer reservas, fornecendo o que falta na identidade: nome e sobrenome, um canal de contato e a aceitação dos Termos. Envie somente o que o cliente informou nesta conversa. Um estabelecimento instantâneo precisa de e-mail e telefone, então colete ambos quando o cliente quiser uma mesa confirmada.
| Parâmetro | Tipo | Descrição |
|---|---|---|
idempotencyKey obrigatório | string | uma chave sua para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
acceptTerms | boolean | true quando o cliente aceita os Termos em https://www.tastematch.io/agb |
email | string | e-mail de contato |
firstName | string | nome do cliente |
lastName | string | sobrenome do cliente |
phone | string | telefone de contato em formato internacional |
Definição da interface (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 gravação Corrija ou complete a identidade. Um campo em branco é preenchido e um campo incorreto é corrigido, mas um canal que o cliente validou não pode ser substituído por aqui. Envie somente o que mudou.
Atualizar identidade
Corrija ou complete a identidade. Um campo em branco é preenchido e um campo incorreto é corrigido, mas um canal que o cliente validou não pode ser substituído por aqui. Envie somente o que mudou.
| Parâmetro | Tipo | Descrição |
|---|---|---|
idempotencyKey obrigatório | string | uma chave sua para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
acceptTerms | boolean | true quando o cliente aceita os Termos em https://www.tastematch.io/agb |
email | string | e-mail de contato |
firstName | string | nome do cliente |
lastName | string | sobrenome do cliente |
phone | string | telefone de contato em formato internacional |
Definição da interface (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"
}
PREFERÊNCIAS
🔴 get_taste_profile leitura Consulte as preferências registradas para esta identidade: os descritores associados, o nível de confiança indicado para cada um e o tipo de preferência derivado deles. Leia antes de informar as preferências novamente — você está corrigindo um perfil, não criando um novo.
Obter perfil de preferências
Consulte as preferências registradas para esta identidade: os descritores associados, o nível de confiança indicado para cada um e o tipo de preferência derivado deles. Leia antes de informar as preferências novamente — você está corrigindo um perfil, não criando um novo.
Sem parâmetros.
Definição da interface (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 gravação Informe as preferências do cliente como um nível de confiança de 0 a 1 para cada descritor e infira o máximo possível com base na conversa. Isso substitui o que estava registrado, então envie o perfil completo, não apenas uma correção. Os descritores são os que weights\ nomeia, todos publicados por get_vocabulary — qualquer outro será recusado. Ocasiões e características do cardápio são armazenadas junto com o restante, mas são atributos do estabelecimento e, portanto, influenciam os filtros em vez do vetor de preferências. Opcional: descoberta, listas e reservas funcionam sem isso; esse recurso apenas personaliza list_recommended_restaurants.
Enviar perfil de preferências
Informe o gosto do convidado como um nível de confiança de 0 a 1 para cada descritor e infira o máximo que a conversa permitir. Isso substitui o que estava registrado, então envie o quadro completo, não apenas uma correção. Os descritores são os que weights\ nomeia, todos publicados por get_vocabulary — qualquer outro será recusado. Ocasiões e características do menu são armazenadas junto com o restante, mas são atributos do estabelecimento, então influenciam os filtros, não o vetor de gosto. Opcional: descoberta, listas e reservas funcionam sem isso; esse recurso só personaliza list_recommended_restaurants.
| Parâmetro | Tipo | Descrição |
|---|---|---|
idempotencyKey obrigatório | string | uma chave sua para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
weights obrigatório | map<string, number> | confiança de 0 a 1 por descritor, um entre 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 |
Definição wire (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"
}
LISTAS
🔴 add_restaurant_to_list gravação Adicione um estabelecimento a uma das listas da identidade. Se ele já estiver na lista, nada muda.
Adicionar restaurante à lista
Adicione um estabelecimento a uma das listas da identidade. Se ele já estiver na lista, nada muda.
| Parâmetro | Tipo | Descrição |
|---|---|---|
idempotencyKey obrigatório | string | uma chave sua para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
listKey obrigatório | string | a lista à qual adicionar |
restaurantKey obrigatório | string | o estabelecimento a adicionar |
Definição wire (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 gravação Crie uma lista com nome para a identidade. Dê a ela um nome que indique sua finalidade — o convidado verá esse nome novamente na próxima vez, e você também.
Criar lista
Crie uma lista com nome para a identidade. Dê a ela um nome que indique sua finalidade — o convidado verá esse nome novamente na próxima vez, e você também.
| Parâmetro | Tipo | Descrição |
|---|---|---|
idempotencyKey obrigatório | string | uma chave sua para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
title obrigatório | string | a finalidade da lista, no idioma do convidado |
Definição wire (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 destrutivo Exclua uma das listas da identidade e tudo o que estiver nela. Leia a lista primeiro e diga ao convidado o que será removido; não é possível desfazer essa ação.
Excluir lista
Exclua uma das listas da identidade e tudo o que estiver nela. Leia a lista primeiro e diga ao convidado o que será removido; não é possível desfazer essa ação.
| Parâmetro | Tipo | Descrição |
|---|---|---|
idempotencyKey obrigatório | string | uma chave sua para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
listKey obrigatório | string | a lista a excluir |
Definição wire (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 leitura Leia por completo uma das listas da identidade em uso, com todos os estabelecimentos nela. Não é possível ler a lista de outra identidade.
Obter lista
Leia por completo uma das listas da identidade em uso, com todos os estabelecimentos nela. Não é possível ler a lista de outra identidade.
| Parâmetro | Tipo | Descrição |
|---|---|---|
listKey obrigatório | string | a chave da lista, obtida de list_lists |
Definição wire (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 leitura As listas da própria identidade, com a quantidade de itens e uma capa para cada uma. Leia isso no início de uma conversa com um convidado recorrente: mostra o que ele guardou da última vez.
Listar listas
As listas da própria identidade, com a quantidade de itens e uma capa para cada uma. Leia isso no início de uma conversa com um convidado recorrente: mostra o que ele guardou da última vez.
| Parâmetro | Tipo | Descrição |
|---|---|---|
limit | integer | linhas a retornar, no máximo 50 |
offset | integer | linhas a ignorar; com totalCount no resultado, permite percorrer as páginas |
Definição wire (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 destrutivo Remova um estabelecimento de uma das listas da identidade. Antes de chamar, diga ao convidado qual estabelecimento e qual lista serão afetados — isso remove dados.
Remover restaurante da lista
Remova um estabelecimento de uma das listas da identidade. Antes de chamar, diga ao convidado qual estabelecimento e qual lista serão afetados — isso remove dados.
| Parâmetro | Tipo | Descrição |
|---|---|---|
idempotencyKey obrigatório | string | uma chave sua para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
listKey obrigatório | string | a lista da qual remover |
restaurantKey obrigatório | string | o estabelecimento a remover |
Definição wire (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 gravação Renomeie uma das listas da identidade. Os estabelecimentos nela permanecem inalterados.
Atualizar lista
Renomeie uma das listas da identidade. Os estabelecimentos nela permanecem inalterados.
| Parâmetro | Tipo | Descrição |
|---|---|---|
idempotencyKey obrigatório | string | uma chave sua para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
listKey obrigatório | string | a lista a renomear |
title obrigatório | string | o novo nome |
Definição wire (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"
}
GRUPO
🔴 close_group_match gravação Encerre a votação de uma decisão em grupo. A decisão e todos os votos continuam disponíveis para leitura; apenas a votação é encerrada. Encerre-a quando o grupo tiver decidido e, em seguida, reserve a opção vencedora.
Encerrar decisão em grupo
Encerre a votação de uma decisão em grupo. A decisão e todos os votos continuam disponíveis para leitura; apenas a votação é encerrada. Encerre-a quando o grupo tiver decidido e, em seguida, reserve a opção vencedora.
| Parâmetro | Tipo | Descrição |
|---|---|---|
groupMatchKey obrigatório | string | a decisão a encerrar |
idempotencyKey obrigatório | string | uma chave sua para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
Definição wire (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 gravação Inicie uma decisão em grupo: alguns estabelecimentos, algumas datas e as pessoas a consultar. A resposta inclui um link de compartilhamento — entregue-o ao convidado para que possa encaminhá-lo, pois quem recebe o convite não precisa de uma identidade TasteMatch para votar por esse link. Mantenha poucas opções: trata-se de uma decisão, não de um catálogo.
Criar decisão em grupo
Inicie uma decisão em grupo: alguns estabelecimentos, algumas datas e as pessoas a consultar. A resposta inclui um link de compartilhamento — entregue-o ao convidado para que possa encaminhá-lo, pois quem recebe o convite não precisa de uma identidade TasteMatch para votar por esse link. Mantenha poucas opções: trata-se de uma decisão, não de um catálogo.
| Parâmetro | Tipo | Descrição |
|---|---|---|
dateOptions obrigatório | array<string> | as datas entre as quais escolher, em RFC3339 com o deslocamento UTC da região |
idempotencyKey obrigatório | string | uma chave sua para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
restaurantKeys obrigatório | array<string> | os estabelecimentos entre os quais escolher |
title obrigatório | string | o que o grupo está decidindo, nas palavras do convidado |
invitees | array<object> | as pessoas a consultar, cada uma identificada por nome e e-mail |
invitees[].displayName obrigatório | string | o nome que o grupo verá |
invitees[].email obrigatório | string | para onde vai o convite |
Definição wire (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 destrutivo Exclua uma decisão em grupo. O link de compartilhamento deixará de funcionar para todos que o tiverem, e os votos serão excluídos junto com ela. Leia a decisão e diga ao convidado o que será removido antes de chamar esta ferramenta.
Excluir decisão em grupo
Exclua uma decisão em grupo. O link de compartilhamento deixará de funcionar para todos que o tiverem, e os votos serão excluídos junto com ela. Leia a decisão e diga ao convidado o que será removido antes de chamar esta ferramenta.
| Parâmetro | Tipo | Descrição |
|---|---|---|
groupMatchKey obrigatório | string | a decisão a excluir |
idempotencyKey obrigatório | string | uma chave sua para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
Definição wire (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 leitura Uma decisão em grupo criada pela identidade: os estabelecimentos, as opções de data, quem foi convidado, quem votou e em quê, e o link de compartilhamento.
Obter decisão em grupo
Uma decisão em grupo criada pela identidade: os estabelecimentos, as opções de data, quem foi convidado, quem votou e em quê, e o link de compartilhamento.
| Parâmetro | Tipo | Descrição |
|---|---|---|
groupMatchKey obrigatório | string | a chave da decisão, obtida de list_group_matches |
Definição wire (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 leitura As decisões em grupo criadas por esta identidade, com a quantidade de convidados e de pessoas que votaram. As decisões para as quais ela apenas recebeu um convite não aparecem aqui.
Listar decisões em grupo
As decisões em grupo criadas por esta identidade, com a quantidade de convidados e de pessoas que votaram. As decisões para as quais ela apenas recebeu um convite não aparecem aqui.
| Parâmetro | Tipo | Descrição |
|---|---|---|
limit | integer | linhas a retornar, no máximo 50 |
offset | integer | linhas a ignorar; com totalCount no resultado, permite percorrer as páginas |
Definição wire (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 gravação Registre o voto de uma pessoa em uma decisão em grupo aberta. Passe memberId\ para alguém convidado pelo nome; passe displayName\ em vez disso para alguém que entrou pelo link de compartilhamento. Registre apenas o que essa pessoa realmente disse: ter a chave da decisão é a autorização completa, e um memberId que você não obteve dessa pessoa substitui o voto dela. A decisão ainda precisa estar aberta.
Enviar voto em decisão em grupo
Registre o voto de uma pessoa em uma decisão em grupo aberta. Passe memberId\ para alguém convidado pelo nome; passe displayName\ em vez disso para alguém que entrou pelo link de compartilhamento. Registre apenas o que essa pessoa realmente disse: ter a chave da decisão é a autorização completa, e um memberId que você não obteve dessa pessoa substitui o voto dela. A decisão ainda precisa estar aberta.
| Parâmetro | Tipo | Descrição |
|---|---|---|
groupMatchKey obrigatório | string | a decisão em que se está votando |
idempotencyKey obrigatório | string | uma chave sua para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
picks obrigatório | array<object> | uma escolha para cada par de estabelecimento e data aceito pela pessoa |
picks[].dateOptionIdx obrigatório | integer | o índice da opção de data, começando em zero |
picks[].restaurantKey obrigatório | string | |
displayName | string | o nome de alguém que entrou pelo link, quando essa pessoa não foi convidada pelo nome |
memberId | string | a pessoa convidada a quem este voto pertence, obtida de get_group_match |
Definição wire (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"
}
COMPARTILHAMENTO
🔴 cancel_shared_reservation destrutivo Cancele uma reserva para a qual o convidado tem um link de edição. Não é possível desfazer essa ação. Confirme com o convidado o estabelecimento e o horário e aguarde a resposta antes de chamar esta ferramenta. Para uma reserva pertencente à identidade em uso, use cancel_reservation, que verifica essa confirmação por você.
Cancelar reserva compartilhada
Cancele uma reserva para a qual o convidado tem um link de edição. Não é possível desfazer essa ação. Confirme com o convidado o estabelecimento e o horário e aguarde a resposta antes de chamar esta ferramenta. Para uma reserva pertencente à identidade em uso, use cancel_reservation, que verifica essa confirmação por você.
| Parâmetro | Tipo | Descrição |
|---|---|---|
editToken obrigatório | string | o token do próprio link de edição do convidado |
idempotencyKey obrigatório | string | uma chave sua para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado em vez de gravar duas vezes |
Definição wire (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 Criar um link que o cliente possa enviar para outra pessoa. Somente leitura: quem abrir poderá visualizar, mas nunca editar. Criar o link duas vezes para o mesmo objeto retorna o mesmo link. Crie links apenas para um estabelecimento sobre o qual o cliente perguntou ou para uma reserva pertencente à identidade em nome da qual você está agindo — qualquer pessoa que tenha o link poderá acessá-lo, e o link de uma reserva mostra o estabelecimento, a data e o tamanho do grupo.
Criar chave de compartilhamento
Criar um link que o cliente possa enviar para outra pessoa. Somente leitura: quem abrir poderá visualizar, mas nunca editar. Criar o link duas vezes para o mesmo objeto retorna o mesmo link. Crie links apenas para um estabelecimento sobre o qual o cliente perguntou ou para uma reserva pertencente à identidade em nome da qual você está agindo — qualquer pessoa que tenha o link poderá acessá-lo, e o link de uma reserva mostra o estabelecimento, a data e o tamanho do grupo.
| Parâmetro | Tipo | Descrição |
|---|---|---|
idempotencyKey obrigatório | string | uma chave própria para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado, em vez de gravar duas vezes |
kind obrigatório | string | o que compartilhar: restaurant, reservation |
objectKey obrigatório | string | a chave do estabelecimento ou da reserva a compartilhar |
Definição do protocolo (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 O índice público de todos os estabelecimentos e listas compartilháveis, em XML. É extenso: leia-o para descobrir o que existe, não para responder a uma pergunta específica.
Obter mapa do site de compartilhamento
O índice público de todos os estabelecimentos e listas compartilháveis, em XML. É extenso: leia-o para descobrir o que existe, não para responder a uma pergunta específica.
Sem parâmetros.
Definição do protocolo (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 Transforme um ID de página pública — o identificador legível em uma URL de estabelecimento ou lista do tastematch.io — no objeto que ele identifica e na respectiva chave.
Resolver ID público de compartilhamento
Transforme um ID de página pública — o identificador legível em uma URL de estabelecimento ou lista do tastematch.io — no objeto que ele identifica e na respectiva chave.
| Parâmetro | Tipo | Descrição |
|---|---|---|
objectType obrigatório | string | restaurant ou list |
publicId obrigatório | string | o ID legível da URL pública |
Definição do protocolo (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 Transforme um link de compartilhamento enviado pelo cliente no item para o qual ele aponta — um estabelecimento, uma reserva ou uma combinação de grupo — e na chave necessária para continuar. Passe o token, que é o último segmento do caminho do link. Se o link tiver expirado ou nunca tiver sido nosso, ele simplesmente não será encontrado.
Resolver token de compartilhamento
Transforme um link de compartilhamento enviado pelo cliente no item para o qual ele aponta — um estabelecimento, uma reserva ou uma combinação de grupo — e na chave necessária para continuar. Passe o token, que é o último segmento do caminho do link. Se o link tiver expirado ou nunca tiver sido nosso, ele simplesmente não será encontrado.
| Parâmetro | Tipo | Descrição |
|---|---|---|
token obrigatório | string | o token do link de compartilhamento, seu último segmento do caminho |
Definição do protocolo (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 Altere uma reserva para a qual o cliente tem um link de edição — criada em outro lugar, não por nós. O link é a autorização; portanto, peça-o ao cliente e use-o somente para a reserva que ele indicou. Para uma reserva pertencente à identidade em nome da qual você está agindo, use update_reservation.
Atualizar reserva compartilhada
Altere uma reserva para a qual o cliente tem um link de edição — criada em outro lugar, não por nós. O link é a autorização; portanto, peça-o ao cliente e use-o somente para a reserva que ele indicou. Para uma reserva pertencente à identidade em nome da qual você está agindo, use update_reservation.
| Parâmetro | Tipo | Descrição |
|---|---|---|
editToken obrigatório | string | o token do próprio link de edição do cliente |
idempotencyKey obrigatório | string | uma chave própria para esta gravação; enviar a mesma chave novamente retorna o primeiro resultado, em vez de gravar duas vezes |
dateTime | string | o novo horário, em RFC3339 com o deslocamento UTC da região |
pax | integer | o novo tamanho do grupo |
Definição do protocolo (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"
}
UTILITÁRIOS
🟢 get_skill read Leia um ou mais guias completos. Peça vários de uma vez, em vez de um por turno.
Obter habilidade
Leia um ou mais guias completos. Peça vários de uma vez, em vez de um por turno.
| Parâmetro | Tipo | Descrição |
|---|---|---|
names obrigatório | array<string> | os guias a ler, de list_skills |
Definição do protocolo (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 Todos os valores aceitos pelos filtros, organizados por eixo, com a regra para combiná-los. Leia antes de usar seu primeiro filtro e mantenha essas informações durante a conversa — um descritor inventado será recusado, e um slug de culinária inventado não encontrará resultados.
Obter vocabulário
Todos os valores aceitos pelos filtros, organizados por eixo, com a regra para combiná-los. Leia antes de usar seu primeiro filtro e mantenha essas informações durante a conversa — um descritor inventado será recusado, e um slug de culinária inventado não encontrará resultados.
Sem parâmetros.
Definição do protocolo (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 Os guias disponíveis, uma linha para cada um. Leia um guia antes de iniciar uma jornada que ainda não realizou; eles contêm a sequência e as armadilhas que as descrições das ferramentas não conseguem explicar.
Listar habilidades
Os guias disponíveis, uma linha para cada um. Leia um guia antes de iniciar uma jornada que ainda não realizou; eles contêm a sequência e as armadilhas que as descrições das ferramentas não conseguem explicar.
Sem parâmetros.
Definição do protocolo (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 Transforme um nome mencionado pelo cliente nas possíveis chaves correspondentes, começando pela mais provável. kind\ indica o que você está procurando: restaurant, region, list, reservation. Um list\ ou um reservation\ pertence à pessoa que iniciou sessão e exige que ela esteja conectada. Resolva cada item uma vez e depois continue usando a chave: resolver o mesmo nome novamente mais tarde pode levar a outro estabelecimento. Quando mais de um candidato for plausível, diga o nome de cada um ao cliente.
Resolver chave
Transforme um nome mencionado pelo cliente nas possíveis chaves correspondentes, começando pela mais provável. kind\ indica o que você está procurando: restaurant, region, list, reservation. Um list\ ou um reservation\ pertence à pessoa que iniciou sessão e exige que ela esteja conectada. Resolva cada item uma vez e depois continue usando a chave: resolver o mesmo nome novamente mais tarde pode levar a outro estabelecimento. Quando mais de um candidato for plausível, diga o nome de cada um ao cliente.
| Parâmetro | Tipo | Descrição |
|---|---|---|
kind obrigatório | string | o que resolver: restaurant, region, list, reservation |
lat | number | latitude, para resolver uma região a partir de um ponto em vez de um nome |
lng | number | longitude, junto com lat |
regionId | string | restringe a busca por estabelecimentos a uma região |
text | string | o nome tal como foi dito pelo cliente |
Definição do protocolo (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"
}
INSTRUÇÕES
Você é um agente que usa o núcleo do TasteMatch — descoberta de restaurantes, combinação de gostos e reservas. Não é necessário entender o vetor do TasteMatch nem nossa rotulagem para ser útil. Use qualquer filtro com a interpretação que considerar adequada. Nunca invente um descritor — chame get_vocabulary. Você age em nome de uma pessoa: quem iniciou sessão nesta conexão. Até que alguém o faça, a descoberta funciona, e uma ferramenta que precise de uma pessoa solicitará que ela inicie sessão. Jornadas: DISCOVER, PLACE, RESTAURANT, AVAILABILITY, RESERVATION, IDENTITY, TASTE, LISTS, GROUP, SHARE, UTILITY. Gramática dos nomes — todas as ferramentas seguem este padrão: get_ | list_ | search_ | filter_ | count_ | resolve_ para leitura; create_ | update_ | delete_ | {verb}_ para gravação. Direcione pela intenção: Um nome, não uma chave -> resolve_key, depois opere usando a chave "restaurantes como X" -> filter_restaurants, facetas de get_vocabulary "quantos" -> count_restaurants, nunca filtre e depois conte as linhas Um estabelecimento específico -> get_restaurant, com fields[] Um prato específico -> search_dishes Reserva -> get_reservation_info -> list_availability_slots -> create_instant_reservation ou create_reservation_request Guardar algo para depois -> uma lista As chaves são suas para guardar. Resolva um nome uma vez e depois use a chave ao longo do restante da jornada. Não resolva novamente um nome para o qual já tem uma chave. As listas são seu espaço de armazenamento. Coloque uma lista de opções, um conjunto para comparação ou os lugares que discutiu em uma lista com nome: ela pertence à identidade em nome da qual você está agindo e continuará disponível na próxima sessão, quando seu contexto já não estiver. A identidade só é solicitada quando necessária, nunca antes. A descoberta não grava nada e não exige que alguém inicie sessão. Para reservar, é necessário alcançar o nível de reserva: um nome, um canal de contato e os Termos aceitos. Uma ferramenta que recusar por falta de identidade indicará o nível que falta e a ferramenta que permite alcançá-lo. Um valor já registrado nunca é substituído por algo que você enviar. Não há recursos sociais: sem seguir, bloquear, seguidores, busca de usuários, notificações ou navegação por perfis. A combinação de grupo é o único recurso para várias pessoas e funciona por link de compartilhamento — os convidados não precisam ter uma identidade no TasteMatch. Eficiência de dados: o limite padrão é 10; totalCount é sempre informado. Sempre use filtros. Peça fields[] em vez de documentos completos. Agrupe as solicitações, não faça chamadas em loop. Reservas: primeiro leia o modo de reserva do estabelecimento; reserva instantânea e solicitação são ferramentas diferentes. Reserve um horário que tenha lido em list_availability_slots. Deixe approxMinutes em 0, a menos que o cliente tenha dito que é flexível — um valor diferente de zero permite que o estabelecimento reserve um horário diferente do solicitado, e a resposta informa isso em adjusted e bookedDate. Gravações: passe idempotencyKey — usar a mesma chave duas vezes retorna o primeiro resultado, em vez de gravar duas vezes. As ferramentas destrutivas estão identificadas; leia o alvo e diga ao cliente o que será removido antes de chamar uma delas. É necessário confirmar antes de usar cancel_reservation: leia a reserva, diga ao cliente o nome do estabelecimento e o horário, aguarde e repita ambos na chamada. Nunca cancele usando apenas uma chave, por mais certeza que tenha. Em caso de falha, leia a mensagem. Uma recusa por validação, item não encontrado ou falta de permissão é nossa e informa como corrigir a chamada — corrija-a, não a repita. Um código sem explicação não pode ser repetido; informe-o ao cliente. Apresente os resultados como resumos legíveis, não como JSON bruto, salvo se solicitado de outra forma. Para uma jornada que ainda não realizou, consulte os guias: list_skills e depois get_skill.
HABILIDADES
discover-to-reserve — a jornada completa: encontrar um estabelecimento, consultar como ele aceita reservas e conseguir uma mesa
Primeiro o local, depois o estabelecimento e, por fim, a reserva. 1. Transforme o local indicado pelo cliente em um regionId: use resolve_key com kind region ou list_regions. 2. Encontre estabelecimentos: filter_restaurants para um tipo de lugar, search_restaurants para um estabelecimento específico, search_dishes para um prato específico. Leia get_vocabulary uma vez antes de usar seu primeiro filtro. 3. Refine os resultados com count_restaurants antes de buscar os registros quando a descrição do cliente for vaga. 4. Consulte o estabelecimento: get_restaurant; use a versão resumida por padrão e fields[] para os demais campos. 5. Consulte como ele aceita reservas: get_reservation_info. Isso determina a próxima ferramenta; nunca adivinhe. 6. Consulte os horários disponíveis: list_availability_slots. Ofereça ao cliente horários reais. 7. Só agora solicite os dados de identidade: o cliente inicia sessão e, em seguida, use promote_identity para alcançar o nível necessário para reservar. 8. Reserve a mesa: use create_instant_reservation em um estabelecimento com reserva instantânea, create_reservation_request em um estabelecimento que aceite solicitações ou create_reservation_offer em um estabelecimento que faça reservas por meio do próprio widget. Informe ao cliente qual das três ações foi realizada. Uma solicitação ainda não é uma reserva; uma oferta também não é uma reserva até que o cliente conclua o processo no widget e get_reservation_status confirme.
sign-in-and-identity — em nome de quem você age, os níveis, qual ferramenta permite avançar e o que cada nível possibilita
Você atua por uma pessoa: aquela que está conectada a esta conexão. O login é a identidade; nada mais determina de quem são os dados afetados, e nenhum argumento pode fazer isso. Antes de alguém entrar, a descoberta funciona. Uma ferramenta que atua por uma pessoa pede que ela entre quando você a chama, então chame-a quando o convidado precisar, em vez de pedir que entre primeiro. Níveis, derivados do que a identidade possui: uma pessoa anônima conectada tem acesso à descoberta, listas, combinação de grupo, reserva por preferência + nome e sobrenome; um contato dá acesso ao perfil de reserva + contato validado, nada além disso. Suba de nível com promote_identity. Uma recusa por identidade informa o nível que falta e a ferramenta que permite alcançá-lo — leia a mensagem em vez de tentar novamente. Um estabelecimento com reserva instantânea exige e-mail e telefone, então colete ambos quando o convidado quiser uma mesa confirmada, em vez de uma solicitação. Um valor já registrado nunca é substituído por algo que você enviar. Leia get_identity antes de pedir ao convidado algo que já temos.
label-vocabulary — os eixos dos descritores, validar em vez de mapear e como as facetas se combinam
Chame get_vocabulary e use exatamente os termos retornados. Nunca invente um, traduza um ou o abrevie. Eixos: dims (como é um estabelecimento), occasions (para quais ocasiões é adequado), menuMetas (qual serviço), menuDescriptors (o que o menu oferece), cuisine (qual cozinha). AND entre facetas, OR dentro de uma faceta. Cada valor restringe os resultados. Passe o que o convidado pediu e nada mais — um filtro que ninguém pediu remove silenciosamente estabelecimentos de que ele poderia gostar. menuDescriptors dizem respeito ao estabelecimento, nunca ao convidado. Uma pessoa celíaca não precisa de "um convidado sem glúten"; precisa de um menu que indique pratos sem glúten. Um valor desconhecido é recusado com uma mensagem que identifica a faceta. Caso contrário, um slug de culinária inventado retornaria uma lista vazia, que parece dizer "não há nada desse tipo por aqui".
availability-semantics — instantânea versus solicitação, a sequência de horários, approxMinutes e adjusted
O modo de reserva de um estabelecimento é definido pelo próprio estabelecimento. Leia-o com get_reservation_info antes de escolher uma ferramenta. mesas instantâneas confirmadas na hora -> create_instant_reservation solicitação que alguém no estabelecimento aceita -> create_reservation_request Os horários disponíveis seguem a sequência própria do estabelecimento, no relógio local dele. Eles não seguem uma grade fixa, então muitas vezes não é possível reservar às 19:00, mas às 19:15 sim. Leia list_availability_slots e reserve um horário que ela retornar. Informe pax e a ferramenta removerá os horários pequenos demais para o grupo, incluindo os mínimos por área. Informe o areaId do horário escolhido para manter a área de assentos; isso restringe a busca e nunca altera a reserva. approxMinutes tem o padrão 0, que significa este horário ou nenhum. Aumente-o somente quando o convidado disser que tem flexibilidade; nesse caso, leia adjusted\ e bookedDate\ na resposta e informe o que ele realmente conseguiu. Horários e períodos vazios significam que o estabelecimento está fechado nesse dia ou que a data está além do limite de reservas. Ofereça outro dia em vez de tentar novamente.
group-match — criar, convidar por link, coletar votos de pessoas sem identidade, encerrar
A combinação de grupo é o único recurso para várias pessoas, e funciona por link. 1. Use create_group_match com alguns estabelecimentos e algumas datas. Mantenha ambos em quantidade reduzida: trata-se de uma decisão, não de um catálogo. 2. A resposta inclui um link de compartilhamento. Entregue-o ao convidado para que ele o distribua. Qualquer pessoa que o abrir pode votar sem ter uma identidade no TasteMatch. 3. get_group_match mostra quem votou e em quê. submit_group_match_vote serve para um voto que chega até você em vez de pelo link — memberId para alguém convidado pelo nome, displayName para alguém novo. 4. Use close_group_match quando o grupo tiver decidido. Os votos continuam disponíveis para consulta. 5. Depois, reserve a opção vencedora pelo fluxo de reserva, para quem estiver organizando.
regions-and-places — localizar um lugar e para que serve regionId
Tudo que é delimitado por região exige um regionId, e o regionId vem de nós, nunca do convidado. Use resolve_key com kind region para informar uma cidade, um bairro, um endereço ou latitude e longitude. list_regions mostra todas as regiões que cobrimos; search_places encontra um lugar menor e a região que o contém. Uma região inclui o fuso horário IANA usado nos horários dos estabelecimentos. Todo dateTime enviado deve incluir o deslocamento UTC dessa região, e todos os horários disponíveis consultados usam esse relógio. Um resultado vazio significa que não temos estabelecimentos naquela região. Diga isso em vez de ampliar a busca silenciosamente.
lists-as-store — o que deve ficar em uma lista, em vez de no contexto
Seu contexto termina com a conversa. Uma lista, não. Coloque uma seleção curta, um conjunto para comparação ou os lugares que o convidado já descartou em uma lista nomeada, usando create_list e add_restaurant_to_list. Dê a ela um nome que descreva sua finalidade; o convidado verá esse nome novamente. Comece uma conversa com alguém que está voltando usando list_lists. É o que essa pessoa guardou da última vez. As listas pertencem à identidade que está agindo e são privadas aqui — compartilhar, consultar as listas de outra pessoa e pesquisar entre elas são ações sociais, e esta interface não oferece recursos sociais. Remova itens em vez de acumular: remove_restaurant_from_list exclui dados, então informe primeiro ao convidado qual estabelecimento e qual lista serão afetados.
bulk-and-pagination — contar antes de filtrar, usar lotes em vez de loops, limites padrão, fields[]
Peça menos. count_restaurants responde "quantos" sem retornar linhas. Use-a enquanto restringe os resultados e só então busque as linhas. Todas as ferramentas de lista e busca aceitam limit e offset e informam totalCount. O limite padrão é 10. Use offset para paginar, em vez de executar a busca novamente. get_restaurant usa uma projeção enxuta por padrão. Especifique em fields[] somente o que você realmente dirá ao convidado; o vetor de rótulos e os cartões de menu são grandes. Agrupe o que puder ser agrupado: uma chamada de impressões por turno, várias habilidades em um único get_skill. Resolva um nome uma vez e reutilize a chave. Resolver novamente exige outra chamada e também pode levar a um estabelecimento diferente.