Taste Match
chính thứcĐặt chỗ và tìm nhà hàng dễ dàng — chỉ ở Thụy Sĩ và khu vực lân cận
Bạn có thể làm gì với Taste Match MCP?
- Đếm số kết quả trước — Hỏi có bao nhiêu địa điểm phù hợp với bộ lọc trước khi lấy các hàng dữ liệu, bằng
count_restaurants. - Lọc theo tiêu chí — Tìm địa điểm theo vị trí, ngày hoặc dịch vụ phục vụ, ẩm thực, lựa chọn món ăn và đồ uống, hoặc khả năng đặt chỗ bằng
filter_restaurants. - Tìm món ăn cụ thể — Tìm món ăn trong thực đơn bằng cách diễn đạt của chính khách và xem địa điểm nào phục vụ món đó qua
search_dishes. - Tra cứu địa điểm theo tên — Tìm nhà hàng theo tên hoặc cách gọi, có thể giới hạn trong một khu vực, bằng
search_restaurants. - Xem các lựa chọn phổ biến — Liệt kê những địa điểm được yêu thích nhất trong một khu vực bằng
list_popular_restaurants. - Tìm địa điểm tương tự — Tìm các địa điểm có khẩu vị tương đồng với một địa điểm bạn đã có khóa, bằng
list_similar_restaurants.
Máy chủ MCP được lưu trữ
npx add-mcp 'https://mcp.tastematch.io/'Cài vào Claude Code, Codex, Cursor và nhiều công cụ khác
Tài liệu
| URL dịch vụ công khai | https://mcp.tastematch.io/ |
|---|---|
| URL tuyên bố quyền riêng tư | https://tastematch.io/mcp/privacy.html |
Bộ công cụ MCP Streamable HTTP giúp bạn tìm những nhà hàng phù hợp nhất với mình ở Thụy Sĩ và xa hơn nữa. Thêm bộ công cụ này vào ứng dụng khách MCP bằng URL ở trên. Khám phá là công khai.
XÁC THỰC
Để truy cập máy chủ MCP của chúng tôi, dịch vụ của bạn cần tự đăng ký bằng DCR (OAuth 2.0 Dynamic Client Registration) tại máy chủ ủy quyền có tên trong /.well-known/oauth-protected-resource/mcp dưới mục authorization_servers; tài liệu siêu dữ liệu riêng của máy chủ đó chứa registration_endpoint.
Để hỗ trợ các điểm cuối cần xác thực, người dùng của bạn sẽ phải xác thực với cùng máy chủ ủy quyền bằng OpenID Connect (authorization code with PKCE), yêu cầu những gì được liệt kê trong /.well-known/oauth-protected-resource/mcp tại scopes_supported.
- 🟢 Không cần đăng nhập: công cụ trả lời bất kỳ ai.
- 🟡 Một số đối số cần đăng nhập, ví dụ:
list_recommended_restaurantsresolve_key. Các lệnh gọi khác là công khai và cho phép dùng tham số riêng của người dùng; các tham số này chỉ có hiệu lực khi đã đăng nhập. Xem phần bên dưới về lỗi đăng nhập. - 🔴 Cần đăng nhập: công cụ hoạt động thay mặt người dùng. Người dùng có thể là khách ẩn danh. Nếu được gọi mà không có token, công cụ sẽ trả về HTTP 401 cùng thử thách
WWW-Authenticatetrỏ đến/.well-known/oauth-protected-resource/mcp, và ứng dụng khách sẽ đăng nhập cho người đó bằng OAuth (authorization code with PKCE). Người đã đăng nhập chính là danh tính. - Cấp độ:
anonymouslà bất kỳ ai đã đăng nhập.reservationbổ sung họ và tên, một thông tin liên hệ và việc chấp nhận Điều khoản;promote_identitythu thập những thông tin này khi cần để đặt chỗ. - Giới hạn tốc độ: số lượt gọi được tính theo từng người đã đăng nhập, còn mọi người gọi không có token cùng dùng chung một hạn mức. Lượt gọi vượt quá giới hạn sẽ bị từ chối kèm mã lỗi; hãy chờ rồi gửi ít yêu cầu hơn.
KHÁM PHÁ
🟢 count_restaurants đọc Số lượng địa điểm khớp với một tập tiêu chí, không trả về hàng nào. Hãy gọi công cụ này trước filter_restaurants khi khám phá các bộ lọc: công cụ trả lời cùng một câu hỏi mà không cần tài liệu.
Đếm nhà hàng
Số lượng địa điểm khớp với một tập tiêu chí, không trả về hàng nào. Hãy gọi công cụ này trước filter_restaurants khi khám phá các bộ lọc: công cụ trả lời cùng một câu hỏi mà không cần tài liệu.
| Tham số | Kiểu | Mô tả |
|---|---|---|
drinkOptions | object | danh sách đồ uống cần có gì |
drinkOptions.beerSelection | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
drinkOptions.cocktailSelection | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
drinkOptions.natureWineSelection | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
drinkOptions.wineSelection | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
kitchen | object | loại ẩm thực nơi đó phục vụ |
kitchen.cuisine | array<string> | các slug ẩm thực, chỉ cần khớp một mục; danh sách có trong get_vocabulary |
location | object | khu vực tìm kiếm: regionId hoặc một điểm kèm bán kính |
location.lat | number | vĩ độ của tâm tìm kiếm, đi cùng lng |
location.lng | number | kinh độ của tâm tìm kiếm |
location.radiusMeters | integer | phạm vi tìm kiếm quanh điểm |
location.regionId | string | khu vực cần tìm, lấy từ list_regions hoặc resolve_key |
menuOptions | object | thực đơn cần có gì |
menuOptions.fishDishes | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
menuOptions.glutenFreeDishes | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
menuOptions.halalDishes | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
menuOptions.lactoseFreeDishes | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
menuOptions.meatDishes | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
menuOptions.veganDishes | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
menuOptions.vegetarianDishes | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
nutrition | object | đặc điểm tổng thể của địa điểm |
nutrition.veganRestaurants | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
nutrition.vegetarianRestaurants | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
opening | object | thời gian địa điểm mở cửa |
opening.daytime | string | dịch vụ cần mở cửa: bữa trưa hoặc bữa tối |
opening.openOn | array<integer> | các ngày trong tuần địa điểm phải mở cửa, Chủ nhật là 0 |
reservation | object | cách thức đặt chỗ |
reservation.hasWidget | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
reservation.liveAvailability | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
Định nghĩa wire (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 đọc Tìm kiếm địa điểm theo tiêu chí: ở đâu, mở cửa khi nào, phục vụ loại ẩm thực nào, thực đơn và danh sách đồ uống có gì, và có thể đặt chỗ bằng cách nào. Mỗi tiêu chí sẽ thu hẹp kết quả xuống các địa điểm đáp ứng tiêu chí đó, vì vậy chỉ truyền những gì khách yêu cầu. Giá trị mô tả và ẩm thực lấy từ get_vocabulary — giá trị tự nghĩ ra sẽ bị từ chối chứ không bị bỏ qua. Kết quả được xếp hạng theo mức độ phổ biến; không áp dụng vector khẩu vị.
Lọc nhà hàng
Tìm kiếm địa điểm theo tiêu chí: ở đâu, mở cửa khi nào, phục vụ loại ẩm thực nào, thực đơn và danh sách đồ uống có gì, và có thể đặt chỗ bằng cách nào. Mỗi tiêu chí sẽ thu hẹp kết quả xuống các địa điểm đáp ứng tiêu chí đó, vì vậy chỉ truyền những gì khách yêu cầu. Giá trị mô tả và ẩm thực lấy từ get_vocabulary — giá trị tự nghĩ ra sẽ bị từ chối chứ không bị bỏ qua. Kết quả được xếp hạng theo mức độ phổ biến; không áp dụng vector khẩu vị.
| Tham số | Kiểu | Mô tả |
|---|---|---|
drinkOptions | object | danh sách đồ uống cần có gì |
drinkOptions.beerSelection | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
drinkOptions.cocktailSelection | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
drinkOptions.natureWineSelection | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
drinkOptions.wineSelection | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
kitchen | object | loại ẩm thực nơi đó phục vụ |
kitchen.cuisine | array<string> | các slug ẩm thực, chỉ cần khớp một mục; danh sách có trong get_vocabulary |
limit | integer | số hàng trả về, tối đa 50 |
location | object | khu vực tìm kiếm: regionId hoặc một điểm kèm bán kính |
location.lat | number | vĩ độ của tâm tìm kiếm, đi cùng lng |
location.lng | number | kinh độ của tâm tìm kiếm |
location.radiusMeters | integer | phạm vi tìm kiếm quanh điểm |
location.regionId | string | khu vực cần tìm, lấy từ list_regions hoặc resolve_key |
menuOptions | object | thực đơn cần có gì |
menuOptions.fishDishes | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
menuOptions.glutenFreeDishes | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
menuOptions.halalDishes | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
menuOptions.lactoseFreeDishes | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
menuOptions.meatDishes | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
menuOptions.veganDishes | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
menuOptions.vegetarianDishes | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
nutrition | object | đặc điểm tổng thể của địa điểm |
nutrition.veganRestaurants | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
nutrition.vegetarianRestaurants | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
offset | integer | số hàng cần bỏ qua; dùng cùng totalCount trong kết quả để phân trang |
opening | object | thời gian địa điểm mở cửa |
opening.daytime | string | dịch vụ cần mở cửa: bữa trưa hoặc bữa tối |
opening.openOn | array<integer> | các ngày trong tuần địa điểm phải mở cửa, Chủ nhật là 0 |
reservation | object | cách thức đặt chỗ |
reservation.hasWidget | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
reservation.liveAvailability | boolean | true chỉ giữ lại các địa điểm có mục này; bỏ qua nếu không muốn lọc theo mục này |
Định nghĩa wire (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 đọc Các địa điểm được yêu thích nhất trong một khu vực. Bắt buộc phải chỉ định khu vực: nếu không có, công cụ sẽ đọc mọi địa điểm chúng tôi lưu trữ.
Liệt kê nhà hàng phổ biến
Các địa điểm được yêu thích nhất trong một khu vực. Bắt buộc phải chỉ định khu vực: nếu không có, công cụ sẽ đọc mọi địa điểm chúng tôi lưu trữ.
| Tham số | Kiểu | Mô tả |
|---|---|---|
regionId bắt buộc | string | khu vực cần đọc, lấy từ list_regions |
limit | integer | số hàng trả về, tối đa 50 |
offset | integer | số hàng cần bỏ qua; dùng cùng totalCount trong kết quả để phân trang |
Định nghĩa wire (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 đọc Các địa điểm được đề xuất cho khách đã đăng nhập, xếp theo mức độ phù hợp khẩu vị từ cao đến thấp; trước khi có người đăng nhập, các đề xuất không mang tính cá nhân hóa. bookableOnly\ chỉ giữ lại các địa điểm còn bàn trống, đây là tập nhỏ hơn nhiều và cần đăng nhập.
Liệt kê nhà hàng được đề xuất
Các địa điểm được đề xuất cho khách đã đăng nhập, xếp theo mức độ phù hợp khẩu vị từ cao đến thấp; trước khi có người đăng nhập, các đề xuất không mang tính cá nhân hóa. bookableOnly\ chỉ giữ lại các địa điểm còn bàn trống, đây là tập nhỏ hơn nhiều và cần đăng nhập.
| Tham số | Kiểu | Mô tả |
|---|---|---|
bookableOnly | boolean | chỉ giữ lại các địa điểm có chỗ trống theo thời gian thực |
interDiem | integer | với bookableOnly, số ngày tối đa có thể đặt trước |
limit | integer | số hàng trả về, tối đa 50 |
offset | integer | số hàng cần bỏ qua; dùng cùng totalCount trong kết quả để phân trang |
regionId | string | khu vực cần đề xuất; nếu bỏ qua thì dùng khu vực của danh tính |
Định nghĩa wire (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 đọc Các địa điểm có khẩu vị tương tự một địa điểm mà bạn đã có khóa truy cập, xếp theo mức độ gần nhất trước. sameCategory\ giới hạn kết quả trong cùng nhóm ẩm thực và được bật mặc định, trừ khi bạn tắt.
Liệt kê nhà hàng tương tự
Các địa điểm có khẩu vị tương tự một địa điểm mà bạn đã có khóa truy cập, xếp theo mức độ gần nhất trước. sameCategory\ giới hạn kết quả trong cùng nhóm ẩm thực và được bật mặc định, trừ khi bạn tắt.
| Tham số | Kiểu | Mô tả |
|---|---|---|
restaurantKey bắt buộc | string | địa điểm cần tìm các địa điểm lân cận |
limit | integer | số hàng trả về, tối đa 50 |
offset | integer | số hàng cần bỏ qua; dùng cùng totalCount trong kết quả để phân trang |
sameCategory | boolean | chỉ giới hạn trong cùng nhóm ẩm thực; mặc định là true nếu bỏ qua |
Định nghĩa wire (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 đọc Tìm các địa điểm phục vụ một món ăn có tên cụ thể. Tìm món ăn theo đúng cách khách nói, giữ nguyên từ ngữ và thứ tự của họ — cách gọi món ăn là một phần nhận diện của món, vì vậy đừng diễn đạt lại, dịch hoặc rút gọn. Từ dài vẫn có thể khớp khi sai chính tả đôi chút; từ rất ngắn phải chính xác tuyệt đối. Mỗi kết quả đều trích dẫn tên món như trên thực đơn, và exact\ chỉ là true khi tên khớp từng từ. Công cụ này không xét giờ mở cửa — hãy dùng filter_restaurants cho việc đó. Dữ liệu thực đơn chưa đầy đủ: kết quả trống có nghĩa là không thực đơn nào chúng tôi lưu trữ ghi tên món đó, chứ không có nghĩa là không nơi nào chế biến món này.
Tìm món ăn
Tìm các địa điểm phục vụ một món ăn có tên cụ thể. Tìm món ăn theo đúng cách khách nói, giữ nguyên từ ngữ và thứ tự của họ — cách gọi món ăn là một phần nhận diện của món, vì vậy đừng diễn đạt lại, dịch hoặc rút gọn. Từ dài vẫn có thể khớp khi sai chính tả đôi chút; từ rất ngắn phải chính xác tuyệt đối. Mỗi kết quả đều trích dẫn tên món như trên thực đơn, và exact\ chỉ là true khi tên khớp từng từ. Công cụ này không xét giờ mở cửa — hãy dùng filter_restaurants cho việc đó. Dữ liệu thực đơn chưa đầy đủ: kết quả trống có nghĩa là không thực đơn nào chúng tôi lưu trữ ghi tên món đó, chứ không có nghĩa là không nơi nào chế biến món này.
| Tham số | Kiểu | Mô tả |
|---|---|---|
q bắt buộc | string | món ăn theo cách khách gọi |
lat | number | vĩ độ để tìm kiếm xung quanh, đi kèm với lng |
limit | integer | số hàng trả về, tối đa 50 |
lng | number | kinh độ để tìm kiếm xung quanh |
offset | integer | số hàng cần bỏ qua; dùng cùng totalCount trong kết quả để phân trang |
radiusMeters | integer | phạm vi tìm kiếm xung quanh điểm |
regionId | string | giới hạn tìm kiếm trong một khu vực |
Định nghĩa wire (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 đọc Tìm địa điểm theo tên hoặc theo cách khách gọi, bằng chính lời của khách. Tối thiểu ba ký tự. Giới hạn trong một khu vực nếu bạn biết khu vực đó. Dùng filter_restaurants khi khách mô tả loại địa điểm thay vì nêu tên.
Tìm nhà hàng
Tìm địa điểm theo tên hoặc theo cách khách gọi, bằng chính lời của khách. Tối thiểu ba ký tự. Giới hạn trong một khu vực nếu bạn biết khu vực đó. Dùng filter_restaurants khi khách mô tả loại địa điểm thay vì nêu tên.
| Tham số | Kiểu | Mô tả |
|---|---|---|
text bắt buộc | string | nội dung cần tìm, từ ba ký tự trở lên |
limit | integer | số hàng trả về, tối đa 50 |
offset | integer | số hàng cần bỏ qua; dùng cùng totalCount trong kết quả để phân trang |
regionId | string | giới hạn tìm kiếm trong một khu vực; nếu bỏ qua, tìm kiếm trên mọi khu vực chúng tôi hỗ trợ |
Định nghĩa wire (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"
}
ĐỊA ĐIỂM
🟢 list_regions đọc Các khu vực TasteMatch hỗ trợ. Mỗi khu vực có regionId mà mọi công cụ giới hạn theo khu vực đều cần, cùng múi giờ IANA dùng để ghi giờ mở cửa và giờ đặt chỗ của các địa điểm trong khu vực đó. Truyền một tọa độ để nhận kết quả theo thứ tự gần nhất trước. Địa điểm không thuộc bất kỳ khu vực nào trong số này sẽ không có địa điểm nào trong dữ liệu của chúng tôi.
Liệt kê khu vực
Các khu vực TasteMatch hỗ trợ. Mỗi khu vực có regionId mà mọi công cụ giới hạn theo khu vực đều cần, cùng múi giờ IANA dùng để ghi giờ mở cửa và giờ đặt chỗ của các địa điểm trong khu vực đó. Truyền một tọa độ để nhận kết quả theo thứ tự gần nhất trước. Địa điểm không thuộc bất kỳ khu vực nào trong số này sẽ không có địa điểm nào trong dữ liệu của chúng tôi.
| Tham số | Kiểu | Mô tả |
|---|---|---|
lat | number | vĩ độ để sắp xếp theo khoảng cách, đi kèm với lng |
limit | integer | số hàng trả về, tối đa 50 |
lng | number | kinh độ để sắp xếp theo khoảng cách |
offset | integer | số hàng cần bỏ qua; dùng cùng totalCount trong kết quả để phân trang |
Định nghĩa wire (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 đọc Đối chiếu thị trấn, quận hoặc khu phố mà khách nêu với khu vực chứa địa điểm đó. Kết quả trống nghĩa là địa điểm nằm ngoài mọi khu vực chúng tôi hỗ trợ, chứ không phải tên địa điểm sai.
Tìm địa điểm
Đối chiếu thị trấn, quận hoặc khu phố mà khách nêu với khu vực chứa địa điểm đó. Kết quả trống nghĩa là địa điểm nằm ngoài mọi khu vực chúng tôi hỗ trợ, chứ không phải tên địa điểm sai.
| Tham số | Kiểu | Mô tả |
|---|---|---|
q bắt buộc | string | địa điểm theo cách khách gọi |
countryCode | string | mã ISO 3166-1 alpha-2 để giới hạn kết quả đối chiếu |
limit | integer | số hàng trả về, tối đa 50 |
offset | integer | số hàng cần bỏ qua; dùng cùng totalCount trong kết quả để phân trang |
Định nghĩa wire (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"
}
NHÀ HÀNG
🟢 get_restaurant đọc Đọc thông tin một địa điểm. Mặc định chỉ trả về các trường gọn nhẹ — tên, khóa, khu vực, địa chỉ, thông tin mô tả, cách đặt chỗ và tóm tắt giờ mở cửa. Các phần dữ liệu nặng chỉ được trả về khi bạn nêu tên chúng trong fields\: ContactInformation, MenuCards, MenuCardsV2, labelVector, coverPictures, socialScore, matchInfo, tmType, eventId, businessPro, likesByUser, likesByFollowees, likesUserAvatars, likesFolloweeAvatars. Tài liệu không giới hạn trường có thể lớn hơn phần còn lại của tác vụ.
Lấy thông tin nhà hàng
Đọc thông tin một địa điểm. Mặc định chỉ trả về các trường gọn nhẹ — tên, khóa, khu vực, địa chỉ, thông tin mô tả, cách đặt chỗ và tóm tắt giờ mở cửa. Các phần dữ liệu nặng chỉ được trả về khi bạn nêu tên chúng trong fields\: ContactInformation, MenuCards, MenuCardsV2, labelVector, coverPictures, socialScore, matchInfo, tmType, eventId, businessPro, likesByUser, likesByFollowees, likesUserAvatars, likesFolloweeAvatars. Tài liệu không giới hạn trường có thể lớn hơn phần còn lại của tác vụ.
| Tham số | Kiểu | Mô tả |
|---|---|---|
restaurantKey bắt buộc | string | khóa của địa điểm |
accessType | string | khi khách yêu cầu mở địa điểm này, họ tìm thấy địa điểm bằng cách nào — một trong các giá trị filtered, searched, recommended, similar, popular, spotlight. Khi đó lượt mở được ghi nhận là của họ; bỏ qua trường này nếu bạn chỉ tự kiểm tra địa điểm. |
fields | array<string> | các trường cần trả về; mặc định chỉ trả về các trường gọn nhẹ và luôn bao gồm khóa |
Định nghĩa wire (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 ghi lại Danh tính đang hoạt động thích địa điểm này. Lượt thích giúp cải thiện các đề xuất tiếp theo và phải phản ánh lời khách nói, không phải ý kiến của bạn — chỉ thích những gì họ nói là họ thích.
Thích nhà hàng
Ghi lại Danh tính đang hoạt động thích địa điểm này. Lượt thích giúp cải thiện các đề xuất tiếp theo và phải phản ánh lời khách nói, không phải ý kiến của bạn — chỉ thích những gì họ nói là họ thích.
| Tham số | Kiểu | Mô tả |
|---|---|---|
idempotencyKey bắt buộc | string | khóa do bạn tự tạo cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
restaurantKey bắt buộc | string | khóa của địa điểm |
Định nghĩa wire (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 ghi lại Cho chúng tôi biết Danh tính thực sự đã xem những địa điểm nào và đã tương tác với địa điểm nào. Mỗi lượt chỉ gửi một lô, với sessionId do bạn tự tạo và giữ nguyên trong suốt cuộc trò chuyện. Báo cáo những gì đã xảy ra, không phải những gì bạn định làm: đây là các tín hiệu mà hệ thống đề xuất học hỏi.
Gửi lượt xem nhà hàng
Cho chúng tôi biết Danh tính thực sự đã xem những địa điểm nào và đã tương tác với địa điểm nào. Mỗi lượt chỉ gửi một lô, với sessionId do bạn tự tạo và giữ nguyên trong suốt cuộc trò chuyện. Báo cáo những gì đã xảy ra, không phải những gì bạn định làm: đây là các tín hiệu mà hệ thống đề xuất học hỏi.
| Tham số | Kiểu | Mô tả |
|---|---|---|
idempotencyKey bắt buộc | string | khóa do bạn tự tạo cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
impressions bắt buộc | array<object> | nội dung đã hiển thị hoặc đã tương tác |
impressions[].accessType bắt buộc | string | một trong các giá trị filtered, searched, recommended, similar, popular, spotlight |
impressions[].restaurantKey bắt buộc | string | |
sessionId bắt buộc | string | UUID do bạn tự tạo, dùng giống nhau cho mọi lô trong một cuộc trò chuyện |
Định nghĩa wire (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 ghi lại Thu hồi lượt thích. Địa điểm vẫn nằm trong danh mục; chỉ ý kiến của Danh tính về địa điểm đó bị xóa.
Bỏ thích nhà hàng
Thu hồi lượt thích. Địa điểm vẫn nằm trong danh mục; chỉ ý kiến của Danh tính về địa điểm đó bị xóa.
| Tham số | Kiểu | Mô tả |
|---|---|---|
idempotencyKey bắt buộc | string | khóa do bạn tự tạo cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
restaurantKey bắt buộc | string | khóa của địa điểm |
Định nghĩa wire (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"
}
TÌNH TRẠNG CÒN CHỖ
🟢 get_reservation_info đọc Cách địa điểm này nhận đặt chỗ. mode\ là instant khi bàn được xác nhận trực tiếp, request khi cần người tại địa điểm chấp thuận, và công cụ sẽ từ chối nếu địa điểm hoàn toàn không nhận đặt chỗ. Hãy đọc thông tin này trước: nó quyết định bạn gọi create_instant_reservation hay create_reservation_request. maxPeople\ là số khách lớn nhất chúng tôi có thể xếp chỗ ở bất kỳ đâu. Công cụ này chỉ đọc — không đặt chỗ và không ghi nhận gì.
Lấy thông tin đặt chỗ
Cách địa điểm này nhận đặt chỗ. mode\ là instant khi bàn được xác nhận trực tiếp, request khi cần người tại địa điểm chấp thuận, và công cụ sẽ từ chối nếu địa điểm hoàn toàn không nhận đặt chỗ. Hãy đọc thông tin này trước: nó quyết định bạn gọi create_instant_reservation hay create_reservation_request. maxPeople\ là số khách lớn nhất chúng tôi có thể xếp chỗ ở bất kỳ đâu. Công cụ này chỉ đọc — không đặt chỗ và không ghi nhận gì.
| Tham số | Kiểu | Mô tả |
|---|---|---|
restaurantKey bắt buộc | string | khóa của địa điểm |
Định nghĩa wire (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 đọc Các bàn còn trống tại một địa điểm vào một ngày cụ thể. Giờ là giờ địa phương của địa điểm và không theo một khung giờ cố định — hãy đặt giờ bạn đọc được ở đây, thay vì một giờ tròn do bạn chọn. Địa điểm ở chế độ request sẽ trả lời bằng windows\ thay thế: các khoảng thời gian mà địa điểm chấp nhận yêu cầu. Cả hai đều trống nghĩa là địa điểm đóng cửa hôm đó hoặc đã quá thời hạn đặt chỗ.
Liệt kê khung giờ còn chỗ
Các bàn còn trống tại một địa điểm vào một ngày cụ thể. Giờ là giờ địa phương của địa điểm và không theo một khung giờ cố định — hãy đặt giờ bạn đọc được ở đây, thay vì một giờ tròn do bạn chọn. Địa điểm ở chế độ request sẽ trả lời bằng windows\ thay thế: các khoảng thời gian mà địa điểm chấp nhận yêu cầu. Cả hai đều trống nghĩa là địa điểm đóng cửa hôm đó hoặc đã quá thời hạn đặt chỗ.
| Tham số | Kiểu | Mô tả |
|---|---|---|
date bắt buộc | string | ngày cần tra cứu, theo RFC3339 với độ lệch UTC của khu vực |
restaurantKey bắt buộc | string | khóa của địa điểm |
pax | integer | số khách, để loại bỏ các khung giờ không đủ chỗ |
Định nghĩa wire (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"
}
ĐẶT CHỖ
🔴 cancel_reservation thao tác phá hủy Hủy đặt chỗ thuộc về Danh tính. Không thể hoàn tác và bàn sẽ được nhường lại. Trước tiên, hãy đọc thông tin đặt chỗ, nhắc lại tên địa điểm và thời gian với khách, chờ họ xác nhận, rồi gửi lại cả hai thông tin ở đây: confirmRestaurantName\ và confirmDateTime\ phải khớp với thông tin đặt chỗ đã lưu, nếu không lời gọi sẽ bị từ chối. Tuyệt đối không hủy chỉ dựa vào khóa, dù bạn chắc chắn đến đâu.
Hủy đặt chỗ
Hủy đặt chỗ thuộc về Danh tính. Không thể hoàn tác và bàn sẽ được nhường lại. Trước tiên, hãy đọc thông tin đặt chỗ, nhắc lại tên địa điểm và thời gian với khách, chờ họ xác nhận, rồi gửi lại cả hai thông tin ở đây: confirmRestaurantName\ và confirmDateTime\ phải khớp với thông tin đặt chỗ đã lưu, nếu không lời gọi sẽ bị từ chối. Tuyệt đối không hủy chỉ dựa vào khóa, dù bạn chắc chắn đến đâu.
| Tham số | Kiểu | Mô tả |
|---|---|---|
confirmDateTime bắt buộc | string | thời gian đặt chỗ như bạn đã nói với khách, theo RFC3339 |
confirmRestaurantName bắt buộc | string | tên địa điểm như bạn đã nói với khách |
idempotencyKey bắt buộc | string | khóa do bạn tự tạo cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
reservationKey bắt buộc | string | đặt chỗ cần hủy, lấy từ danh sách đặt chỗ thuộc về bạn trong list_reservations |
Định nghĩa wire (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 ghi lại Đặt bàn hiện đang còn trống. Dùng cho địa điểm instant; bàn được xác nhận ngay khi công cụ trả về. Hãy đặt một dateTime\ mà bạn đã đọc từ list_availability_slots — các khung giờ của địa điểm không theo một lưới cố định, nên giờ tròn thường không nằm trong số đó. Để approxMinutes\ ở mức 0, trừ khi khách nói họ linh hoạt: giá trị khác 0 cho phép địa điểm đặt giờ gần đó thay thế, và câu trả lời sẽ cho biết điều này trong adjusted\ và bookedDate\. Đặt chỗ được thực hiện bằng Danh tính đã lưu, cần có cả email và số điện thoại đối với địa điểm instant.
Tạo đặt chỗ tức thì
Hãy chọn một bàn hiện đang trống. Dành cho các địa điểm đặt tức thì; bàn được xác nhận khi công cụ trả kết quả. Đặt dateTime\ bạn đọc được từ list_availability_slots — các khung giờ của địa điểm không nằm trên một lưới cố định, nên giờ tròn thường không phải là một trong số đó. Để approxMinutes\ ở mức 0, trừ khi khách nói họ linh hoạt: giá trị khác 0 cho phép địa điểm đặt vào giờ gần đó, và câu trả lời sẽ cho biết điều này trong adjusted\ và bookedDate\. Việc đặt chỗ sử dụng danh tính đã lưu, danh tính này cần có cả email và số điện thoại đối với địa điểm đặt tức thì.
| Tham số | Kiểu | Mô tả |
|---|---|---|
dateTime bắt buộc | string | khung giờ cần đặt, theo RFC3339 với độ lệch UTC của khu vực, như đã đọc từ list_availability_slots |
idempotencyKey bắt buộc | string | khóa do bạn tự tạo cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
pax bắt buộc | integer | số người trong nhóm |
restaurantKey bắt buộc | string | khóa của địa điểm |
approxMinutes | integer | khoảng thời gian địa điểm có thể đặt lệch so với dateTime; 0 nghĩa là đúng giờ này hoặc không đặt |
areaId | string | khu vực chỗ ngồi, lấy từ khung giờ bạn đã chọn; tham số này thu hẹp phạm vi tìm kiếm và không bao giờ thay đổi giờ đặt |
comment | string | ghi chú cho địa điểm, dùng lời của khách |
Định nghĩa wire (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 ghi Tạo một lượt đặt chỗ tại địa điểm sử dụng tiện ích đặt chỗ riêng. Thao tác này ghi dữ liệu: tạo một bản nháp gắn với danh tính đang thao tác và một widgetUrl\ chỉ dùng một lần để khách hoàn tất. Gửi URL cho khách, sau đó thăm dò get_reservation_status bằng reservationKey\ mà công cụ trả về. Chỉ gọi một lần cho mỗi lần thử đặt chỗ — gọi lần thứ hai sẽ tạo một bản nháp khác. Địa điểm tự xử lý việc đặt chỗ không cần lời mời: thay vào đó, hãy dùng create_instant_reservation hoặc create_reservation_request.
Tạo lời mời đặt chỗ
Tạo một lượt đặt chỗ tại địa điểm sử dụng tiện ích đặt chỗ riêng. Thao tác này ghi dữ liệu: tạo một bản nháp gắn với danh tính đang thao tác và một widgetUrl\ chỉ dùng một lần để khách hoàn tất. Gửi URL cho khách, sau đó thăm dò get_reservation_status bằng reservationKey\ mà công cụ trả về. Chỉ gọi một lần cho mỗi lần thử đặt chỗ — gọi lần thứ hai sẽ tạo một bản nháp khác. Địa điểm tự xử lý việc đặt chỗ không cần lời mời: thay vào đó, hãy dùng create_instant_reservation hoặc create_reservation_request.
| Tham số | Kiểu | Mô tả |
|---|---|---|
idempotencyKey bắt buộc | string | khóa do bạn tự tạo cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
restaurantKey bắt buộc | string | khóa của địa điểm |
Định nghĩa wire (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 ghi Yêu cầu địa điểm đặt bàn. Dành cho các địa điểm hoạt động theo chế độ yêu cầu: lượt đặt chỗ sẽ ở trạng thái chờ và nhân viên địa điểm sẽ chấp nhận hoặc từ chối, vì vậy hãy nói với khách rằng bàn chưa được xác nhận. Giờ đặt phải nằm trong một trong các khung giờ mà list_availability_slots báo cáo. Việc đặt chỗ sử dụng danh tính đã lưu — tên và thông tin liên hệ được lấy từ hồ sơ, không phải từ lệnh gọi này.
Tạo yêu cầu đặt chỗ
Yêu cầu địa điểm đặt bàn. Dành cho các địa điểm hoạt động theo chế độ yêu cầu: lượt đặt chỗ sẽ ở trạng thái chờ và nhân viên địa điểm sẽ chấp nhận hoặc từ chối, vì vậy hãy nói với khách rằng bàn chưa được xác nhận. Giờ đặt phải nằm trong một trong các khung giờ mà list_availability_slots báo cáo. Việc đặt chỗ sử dụng danh tính đã lưu — tên và thông tin liên hệ được lấy từ hồ sơ, không phải từ lệnh gọi này.
| Tham số | Kiểu | Mô tả |
|---|---|---|
dateTime bắt buộc | string | giờ được yêu cầu, theo RFC3339 với độ lệch UTC của khu vực |
idempotencyKey bắt buộc | string | khóa do bạn tự tạo cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
pax bắt buộc | integer | số người trong nhóm |
restaurantKey bắt buộc | string | khóa của địa điểm |
comment | string | ghi chú cho địa điểm, dùng lời của khách |
Định nghĩa wire (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 đọc Trạng thái của một lượt đặt chỗ thuộc danh tính đang thao tác. Thăm dò công cụ này sau khi gửi lời mời: lượt đặt chỗ qua tiện ích chỉ có hiệu lực khi địa điểm xác nhận, và trạng thái là cách nhận thông tin xác nhận đó.
Lấy trạng thái đặt chỗ
Trạng thái của một lượt đặt chỗ thuộc danh tính đang thao tác. Thăm dò công cụ này sau khi gửi lời mời: lượt đặt chỗ qua tiện ích chỉ có hiệu lực khi địa điểm xác nhận, và trạng thái là cách nhận thông tin xác nhận đó.
| Tham số | Kiểu | Mô tả |
|---|---|---|
reservationKey bắt buộc | string | khóa của lượt đặt chỗ, lấy từ list_reservations |
Định nghĩa wire (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 đọc Các khung giờ mà một lượt đặt chỗ hiện có có thể chuyển sang. Đây là câu hỏi khác với list_availability_slots: phạm vi được giới hạn theo lượt đặt chỗ và những lựa chọn mà địa điểm cho phép chuyển sang. Chỉ có thể chuyển một lượt đặt chỗ đã được chấp nhận tại địa điểm có tình trạng chỗ trống trực tiếp.
Liệt kê khung giờ đặt chỗ
Các khung giờ mà một lượt đặt chỗ hiện có có thể chuyển sang. Đây là câu hỏi khác với list_availability_slots: phạm vi được giới hạn theo lượt đặt chỗ và những lựa chọn mà địa điểm cho phép chuyển sang. Chỉ có thể chuyển một lượt đặt chỗ đã được chấp nhận tại địa điểm có tình trạng chỗ trống trực tiếp.
| Tham số | Kiểu | Mô tả |
|---|---|---|
reservationKey bắt buộc | string | lượt đặt chỗ cần chuyển, lấy từ list_reservations |
fromDate | string | ngày đầu tiên cần xem, theo RFC3339; mặc định là ngày của lượt đặt chỗ nếu bỏ qua |
Định nghĩa wire (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 đọc Tất cả lượt đặt chỗ mà danh tính đang thao tác sở hữu. owned\ có thể thực hiện thao tác — đây là các khóa mà công cụ ghi sử dụng. foundByEmail\ đã được chuyển sang chủ sở hữu khác: lượt này vẫn được hiển thị để bạn có thể trao đổi về nó, nhưng mọi thao tác ghi trên lượt này đều bị từ chối.
Liệt kê lượt đặt chỗ
Tất cả lượt đặt chỗ mà danh tính đang thao tác sở hữu. owned\ có thể thực hiện thao tác — đây là các khóa mà công cụ ghi sử dụng. foundByEmail\ đã được chuyển sang chủ sở hữu khác: lượt này vẫn được hiển thị để bạn có thể trao đổi về nó, nhưng mọi thao tác ghi trên lượt này đều bị từ chối.
Không có tham số.
Định nghĩa wire (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 ghi Chuyển một lượt đặt chỗ thuộc sở hữu của danh tính hoặc thay đổi số người trong nhóm. Chỉ nêu những gì cần thay đổi. Giờ mới phải là một trong các khung giờ mà list_reservation_slots đưa ra cho lượt đặt chỗ đó.
Cập nhật lượt đặt chỗ
Chuyển một lượt đặt chỗ thuộc sở hữu của danh tính hoặc thay đổi số người trong nhóm. Chỉ nêu những gì cần thay đổi. Giờ mới phải là một trong các khung giờ mà list_reservation_slots đưa ra cho lượt đặt chỗ đó.
| Tham số | Kiểu | Mô tả |
|---|---|---|
idempotencyKey bắt buộc | string | khóa do bạn tự tạo cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
reservationKey bắt buộc | string | lượt đặt chỗ cần thay đổi, lấy từ danh sách lượt đặt chỗ thuộc sở hữu trong list_reservations |
dateTime | string | giờ mới, theo RFC3339 với độ lệch UTC của khu vực |
pax | integer | số người mới trong nhóm |
Định nghĩa wire (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"
}
DANH TÍNH
🔴 get_identity đọc Danh tính mà bạn đang thao tác thay mặt. Hãy đọc trước khi hỏi khách bất cứ điều gì: giá trị đã có trong hồ sơ sẽ không bao giờ bị thay thế, và hỏi lại thông tin chúng ta đã có sẽ khiến bạn có vẻ không lắng nghe.
Lấy danh tính
Danh tính mà bạn đang thao tác thay mặt. Hãy đọc trước khi hỏi khách bất cứ điều gì: giá trị đã có trong hồ sơ sẽ không bao giờ bị thay thế, và hỏi lại thông tin chúng ta đã có sẽ khiến bạn có vẻ không lắng nghe.
Không có tham số.
Định nghĩa wire (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 đọc Những gì kết nối này có thể truy cập: các hành trình được mở cho kết nối và người đã đăng nhập mà bạn đang thay mặt thao tác, cùng cấp độ của họ — acting\ sẽ không có cho đến khi có người đăng nhập. Hãy gọi công cụ này trước nếu không chắc có ai đang đăng nhập hay không, và đọc climbWith\ để biết công cụ thu thập những thông tin còn thiếu ở cấp độ hiện tại.
Lấy phiên
Những gì kết nối này có thể truy cập: các hành trình được mở cho kết nối và người đã đăng nhập mà bạn đang thay mặt thao tác, cùng cấp độ của họ — acting\ sẽ không có cho đến khi có người đăng nhập. Hãy gọi công cụ này trước nếu không chắc có ai đang đăng nhập hay không, và đọc climbWith\ để biết công cụ thu thập những thông tin còn thiếu ở cấp độ hiện tại.
Không có tham số.
Định nghĩa wire (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 ghi Nâng lên cấp độ cho phép đặt chỗ bằng cách cung cấp những thông tin danh tính còn thiếu: họ và tên, một kênh liên hệ và xác nhận chấp nhận Điều khoản. Chỉ gửi những gì khách đã nói trong cuộc trò chuyện này. Địa điểm đặt tức thì cần cả email và số điện thoại, vì vậy hãy thu thập cả hai khi khách muốn có bàn được xác nhận.
Nâng cấp danh tính
Nâng lên cấp độ cho phép đặt chỗ bằng cách cung cấp những thông tin danh tính còn thiếu: họ và tên, một kênh liên hệ và xác nhận chấp nhận Điều khoản. Chỉ gửi những gì khách đã nói trong cuộc trò chuyện này. Địa điểm đặt tức thì cần cả email và số điện thoại, vì vậy hãy thu thập cả hai khi khách muốn có bàn được xác nhận.
| Tham số | Kiểu | Mô tả |
|---|---|---|
idempotencyKey bắt buộc | string | khóa do bạn tự tạo cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
acceptTerms | boolean | true khi khách chấp nhận Điều khoản tại https://www.tastematch.io/agb |
email | string | email liên hệ |
firstName | string | tên của khách |
lastName | string | họ của khách |
phone | string | số điện thoại liên hệ theo định dạng quốc tế |
Định nghĩa wire (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 ghi Sửa hoặc bổ sung thông tin danh tính. Trường trống sẽ được điền và trường sai sẽ được sửa, nhưng không thể thay thế kênh liên hệ mà khách đã xác thực tại đây. Chỉ gửi những gì đã thay đổi.
Cập nhật danh tính
Sửa hoặc bổ sung thông tin danh tính. Trường trống sẽ được điền và trường sai sẽ được sửa, nhưng không thể thay thế kênh liên hệ mà khách đã xác thực tại đây. Chỉ gửi những gì đã thay đổi.
| Tham số | Kiểu | Mô tả |
|---|---|---|
idempotencyKey bắt buộc | string | khóa do bạn tự tạo cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
acceptTerms | boolean | true khi khách chấp nhận Điều khoản tại https://www.tastematch.io/agb |
email | string | email liên hệ |
firstName | string | tên của khách |
lastName | string | họ của khách |
phone | string | số điện thoại liên hệ theo định dạng quốc tế |
Định nghĩa wire (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"
}
KHẨU VỊ
🔴 get_taste_profile đọc Khẩu vị của danh tính này được lưu như thế nào: các mô tả đặc trưng, mức độ tin cậy được nêu cho từng mô tả và loại khẩu vị suy ra từ chúng. Hãy đọc trước khi khai báo lại khẩu vị — bạn đang chỉnh sửa hồ sơ, không phải tạo hồ sơ mới.
Lấy hồ sơ khẩu vị
Khẩu vị của danh tính này được lưu như thế nào: các mô tả đặc trưng, mức độ tin cậy được nêu cho từng mô tả và loại khẩu vị suy ra từ chúng. Hãy đọc trước khi khai báo lại khẩu vị — bạn đang chỉnh sửa hồ sơ, không phải tạo hồ sơ mới.
Không có tham số.
Định nghĩa wire (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 ghi Khai báo khẩu vị của khách bằng mức độ tin cậy từ 0 đến 1 cho từng mô tả đặc trưng, đồng thời suy ra càng nhiều mô tả càng tốt dựa trên nội dung cuộc trò chuyện. Thao tác này thay thế thông tin đã lưu, vì vậy hãy gửi toàn bộ hồ sơ thay vì chỉ gửi phần cần sửa. Các mô tả đặc trưng phải là những mục mà weights\ nêu tên; tất cả đều được công bố qua get_vocabulary — mọi mục khác sẽ bị từ chối. Dịp và đặc điểm thực đơn được lưu cùng các thông tin còn lại nhưng là thuộc tính của địa điểm, vì vậy chúng định hình bộ lọc thay vì vector khẩu vị. Không bắt buộc: tính năng khám phá, danh sách và đặt chỗ đều hoạt động mà không cần thông tin này; thông tin này chỉ giúp list_recommended_restaurants mang tính cá nhân hóa.
Gửi hồ sơ khẩu vị
Nêu khẩu vị của khách dưới dạng mức độ tin cậy từ 0 đến 1 cho mỗi mô tả, và suy luận càng nhiều mô tả càng tốt dựa trên nội dung cuộc trò chuyện. Thao tác này thay thế thông tin đã lưu, vì vậy hãy gửi toàn bộ thông tin thay vì chỉ gửi phần cần sửa. Các mô tả là những mục mà weights\ đặt tên, tất cả đều do get_vocabulary công bố — mọi mục khác đều bị từ chối. Dịp và đặc điểm thực đơn được lưu cùng các thông tin còn lại nhưng là thuộc tính của địa điểm, vì vậy chúng định hình bộ lọc chứ không phải vector khẩu vị. Không bắt buộc: tính năng khám phá, danh sách và đặt chỗ đều hoạt động mà không cần thông tin này; thông tin này chỉ giúp cá nhân hóa list_recommended_restaurants.
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | khóa do bạn tự chọn cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
weights required | map<string, number> | mức độ tin cậy từ 0 đến 1 cho mỗi mô tả, một trong các mục sau: 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 |
Định nghĩa 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"
}
DANH SÁCH
🔴 add_restaurant_to_list write Thêm một địa điểm vào một trong các danh sách của danh tính. Nếu địa điểm đã có trong danh sách thì không có gì thay đổi.
Thêm nhà hàng vào danh sách
Thêm một địa điểm vào một trong các danh sách của danh tính. Nếu địa điểm đã có trong danh sách thì không có gì thay đổi.
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | khóa do bạn tự chọn cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
listKey required | string | danh sách cần thêm vào |
restaurantKey required | string | địa điểm cần thêm |
Định nghĩa 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 write Tạo một danh sách có tên cho danh tính. Đặt tên theo mục đích sử dụng — lần tới khách sẽ thấy lại tên đó, và bạn cũng vậy.
Tạo danh sách
Tạo một danh sách có tên cho danh tính. Đặt tên theo mục đích sử dụng — lần tới khách sẽ thấy lại tên đó, và bạn cũng vậy.
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | khóa do bạn tự chọn cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
title required | string | mục đích của danh sách, bằng ngôn ngữ của khách |
Định nghĩa 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 destructive Xóa một trong các danh sách của danh tính cùng toàn bộ nội dung trong đó. Trước tiên hãy đọc danh sách và cho khách biết những gì sẽ bị xóa; thao tác này không thể hoàn tác.
Xóa danh sách
Xóa một trong các danh sách của danh tính cùng toàn bộ nội dung trong đó. Trước tiên hãy đọc danh sách và cho khách biết những gì sẽ bị xóa; thao tác này không thể hoàn tác.
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | khóa do bạn tự chọn cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
listKey required | string | danh sách cần xóa |
Định nghĩa 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 read Đọc đầy đủ một danh sách của danh tính đang thao tác, bao gồm mọi địa điểm trong danh sách. Không thể đọc danh sách của danh tính khác.
Lấy danh sách
Đọc đầy đủ một danh sách của danh tính đang thao tác, bao gồm mọi địa điểm trong danh sách. Không thể đọc danh sách của danh tính khác.
| Parameter | Type | Description |
|---|---|---|
listKey required | string | khóa của danh sách, lấy từ list_lists |
Định nghĩa 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 read Các danh sách của chính danh tính, kèm số lượng và ảnh bìa của từng danh sách. Hãy đọc thông tin này khi bắt đầu cuộc trò chuyện với khách quay lại: đây là những gì khách đã lưu lần trước.
Liệt kê danh sách
Các danh sách của chính danh tính, kèm số lượng và ảnh bìa của từng danh sách. Hãy đọc thông tin này khi bắt đầu cuộc trò chuyện với khách quay lại: đây là những gì khách đã lưu lần trước.
| Parameter | Type | Description |
|---|---|---|
limit | integer | số hàng cần trả về, tối đa 50 |
offset | integer | số hàng cần bỏ qua; kết hợp với totalCount trong kết quả để phân trang |
Định nghĩa 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 destructive Xóa một địa điểm khỏi một trong các danh sách của danh tính. Trước khi gọi, hãy cho khách biết địa điểm và danh sách nào sẽ bị xóa — thao tác này xóa dữ liệu.
Xóa nhà hàng khỏi danh sách
Xóa một địa điểm khỏi một trong các danh sách của danh tính. Trước khi gọi, hãy cho khách biết địa điểm và danh sách nào sẽ bị xóa — thao tác này xóa dữ liệu.
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | khóa do bạn tự chọn cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
listKey required | string | danh sách cần xóa khỏi |
restaurantKey required | string | địa điểm cần xóa |
Định nghĩa 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 write Đổi tên một trong các danh sách của danh tính. Các địa điểm trong danh sách không bị ảnh hưởng.
Cập nhật danh sách
Đổi tên một trong các danh sách của danh tính. Các địa điểm trong danh sách không bị ảnh hưởng.
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | khóa do bạn tự chọn cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
listKey required | string | danh sách cần đổi tên |
title required | string | tên mới |
Định nghĩa 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"
}
NHÓM
🔴 close_group_match write Đóng một lượt ghép nhóm để ngừng nhận thêm phiếu bầu. Lượt ghép và mọi phiếu bầu vẫn có thể đọc được; chỉ việc bỏ phiếu bị dừng. Hãy đóng lượt ghép sau khi nhóm đã quyết định, rồi đặt chỗ tại địa điểm được chọn.
Đóng lượt ghép nhóm
Đóng một lượt ghép nhóm để ngừng nhận thêm phiếu bầu. Lượt ghép và mọi phiếu bầu vẫn có thể đọc được; chỉ việc bỏ phiếu bị dừng. Hãy đóng lượt ghép sau khi nhóm đã quyết định, rồi đặt chỗ tại địa điểm được chọn.
| Parameter | Type | Description |
|---|---|---|
groupMatchKey required | string | lượt ghép cần đóng |
idempotencyKey required | string | khóa do bạn tự chọn cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
Định nghĩa 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 write Bắt đầu một quyết định nhóm: một vài địa điểm, một vài ngày và những người cần hỏi. Kết quả có kèm liên kết chia sẻ — hãy đưa liên kết đó cho khách để họ gửi tiếp, vì người được mời không cần có danh tính TasteMatch để bỏ phiếu qua liên kết. Hãy giới hạn số lựa chọn: đây là một quyết định, không phải danh mục.
Tạo lượt ghép nhóm
Bắt đầu một quyết định nhóm: một vài địa điểm, một vài ngày và những người cần hỏi. Kết quả có kèm liên kết chia sẻ — hãy đưa liên kết đó cho khách để họ gửi tiếp, vì người được mời không cần có danh tính TasteMatch để bỏ phiếu qua liên kết. Hãy giới hạn số lựa chọn: đây là một quyết định, không phải danh mục.
| Parameter | Type | Description |
|---|---|---|
dateOptions required | array<string> | các ngày để lựa chọn, theo định dạng RFC3339 với độ lệch UTC của khu vực |
idempotencyKey required | string | khóa do bạn tự chọn cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
restaurantKeys required | array<string> | các địa điểm để lựa chọn |
title required | string | nội dung nhóm cần quyết định, theo lời của khách |
invitees | array<object> | những người cần hỏi, mỗi người gồm tên và email |
invitees[].displayName required | string | tên mà nhóm sẽ thấy |
invitees[].email required | string | nơi gửi lời mời |
Định nghĩa 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 destructive Xóa một lượt ghép nhóm. Liên kết chia sẻ sẽ ngừng hoạt động với tất cả những ai có liên kết, và các phiếu bầu cũng bị xóa. Trước khi gọi, hãy đọc thông tin lượt ghép và cho khách biết những gì sẽ bị xóa.
Xóa lượt ghép nhóm
Xóa một lượt ghép nhóm. Liên kết chia sẻ sẽ ngừng hoạt động với tất cả những ai có liên kết, và các phiếu bầu cũng bị xóa. Trước khi gọi, hãy đọc thông tin lượt ghép và cho khách biết những gì sẽ bị xóa.
| Parameter | Type | Description |
|---|---|---|
groupMatchKey required | string | lượt ghép cần xóa |
idempotencyKey required | string | khóa do bạn tự chọn cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
Định nghĩa 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 read Một lượt ghép nhóm do danh tính tạo: các địa điểm, lựa chọn ngày, những người được mời, ai đã bỏ phiếu và chọn gì, cùng liên kết chia sẻ.
Lấy lượt ghép nhóm
Một lượt ghép nhóm do danh tính tạo: các địa điểm, lựa chọn ngày, những người được mời, ai đã bỏ phiếu và chọn gì, cùng liên kết chia sẻ.
| Parameter | Type | Description |
|---|---|---|
groupMatchKey required | string | khóa của lượt ghép, lấy từ list_group_matches |
Định nghĩa 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 read Các lượt ghép nhóm do danh tính này tạo, kèm số người được mời và số người đã bỏ phiếu. Những lượt ghép mà danh tính chỉ được mời tham gia sẽ không xuất hiện ở đây.
Liệt kê lượt ghép nhóm
Các lượt ghép nhóm do danh tính này tạo, kèm số người được mời và số người đã bỏ phiếu. Những lượt ghép mà danh tính chỉ được mời tham gia sẽ không xuất hiện ở đây.
| Parameter | Type | Description |
|---|---|---|
limit | integer | số hàng cần trả về, tối đa 50 |
offset | integer | số hàng cần bỏ qua; kết hợp với totalCount trong kết quả để phân trang |
Định nghĩa 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 write Ghi nhận phiếu bầu của một người trong lượt ghép nhóm đang mở. Truyền memberId\ cho người được mời bằng tên; thay vào đó, truyền displayName\ cho người tham gia qua liên kết chia sẻ. Chỉ ghi nhận đúng những gì người đó thực sự nói: có khóa lượt ghép là đã có toàn quyền xác thực, và memberId mà bạn không lấy từ chính người đó sẽ ghi đè phiếu bầu của họ. Lượt ghép phải vẫn đang mở.
Gửi phiếu bầu cho lượt ghép nhóm
Ghi nhận phiếu bầu của một người trong lượt ghép nhóm đang mở. Truyền memberId\ cho người được mời bằng tên; thay vào đó, truyền displayName\ cho người tham gia qua liên kết chia sẻ. Chỉ ghi nhận đúng những gì người đó thực sự nói: có khóa lượt ghép là đã có toàn quyền xác thực, và memberId mà bạn không lấy từ chính người đó sẽ ghi đè phiếu bầu của họ. Lượt ghép phải vẫn đang mở.
| Parameter | Type | Description |
|---|---|---|
groupMatchKey required | string | lượt ghép đang được bỏ phiếu |
idempotencyKey required | string | khóa do bạn tự chọn cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
picks required | array<object> | mỗi lựa chọn tương ứng với một cặp địa điểm và ngày mà người đó chấp nhận |
picks[].dateOptionIdx required | integer | chỉ số của lựa chọn ngày, bắt đầu đếm từ 0 |
picks[].restaurantKey required | string | |
displayName | string | tên của người tham gia qua liên kết, nếu họ không được mời bằng tên |
memberId | string | người được mời mà phiếu bầu này thuộc về, lấy từ get_group_match |
Định nghĩa 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"
}
CHIA SẺ
🔴 cancel_shared_reservation destructive Hủy một đặt chỗ mà khách có liên kết chỉnh sửa. Thao tác này không thể hoàn tác. Hãy nhắc lại địa điểm và thời gian cho khách rồi chờ họ xác nhận trước khi gọi. Với đặt chỗ thuộc về danh tính đang thao tác, hãy dùng cancel_reservation thay thế; công cụ này tự kiểm tra thông tin xác nhận đó.
Hủy đặt chỗ được chia sẻ
Hủy một đặt chỗ mà khách có liên kết chỉnh sửa. Thao tác này không thể hoàn tác. Hãy nhắc lại địa điểm và thời gian cho khách rồi chờ họ xác nhận trước khi gọi. Với đặt chỗ thuộc về danh tính đang thao tác, hãy dùng cancel_reservation thay thế; công cụ này tự kiểm tra thông tin xác nhận đó.
| Parameter | Type | Description |
|---|---|---|
editToken required | string | token từ chính liên kết chỉnh sửa của khách |
idempotencyKey required | string | khóa do bạn tự chọn cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
Định nghĩa 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 Tạo một liên kết để khách có thể gửi cho người khác. Chỉ có quyền đọc: bất kỳ ai mở liên kết đều có thể xem, nhưng không thể chỉnh sửa. Tạo liên kết hai lần cho cùng một đối tượng sẽ trả về cùng một liên kết. Chỉ tạo liên kết cho địa điểm mà khách đã hỏi hoặc đặt chỗ thuộc về danh tính đang thao tác — bất kỳ ai có liên kết đều có thể xem, và liên kết đặt chỗ hiển thị địa điểm, ngày và số người.
Tạo khóa chia sẻ
Tạo một liên kết để khách có thể gửi cho người khác. Chỉ có quyền đọc: bất kỳ ai mở liên kết đều có thể xem, nhưng không thể chỉnh sửa. Tạo liên kết hai lần cho cùng một đối tượng sẽ trả về cùng một liên kết. Chỉ tạo liên kết cho địa điểm mà khách đã hỏi hoặc đặt chỗ thuộc về danh tính đang thao tác — bất kỳ ai có liên kết đều có thể xem, và liên kết đặt chỗ hiển thị địa điểm, ngày và số người.
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | khóa do bạn tự chọn cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
kind required | string | nội dung cần chia sẻ: restaurant, reservation |
objectKey required | string | khóa của địa điểm hoặc đặt chỗ cần chia sẻ |
Định nghĩa giao thức (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 Chỉ mục công khai của mọi địa điểm và danh sách có thể chia sẻ, ở định dạng XML. Rất lớn: hãy đọc để khám phá những gì hiện có, không phải để trả lời một câu hỏi cụ thể.
Lấy sơ đồ trang chia sẻ
Chỉ mục công khai của mọi địa điểm và danh sách có thể chia sẻ, ở định dạng XML. Rất lớn: hãy đọc để khám phá những gì hiện có, không phải để trả lời một câu hỏi cụ thể.
Không có tham số.
Định nghĩa giao thức (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 Chuyển mã trang công khai — phần dễ đọc trong URL địa điểm hoặc danh sách trên tastematch.io — thành đối tượng mà mã đó chỉ đến và khóa của đối tượng.
Phân giải mã công khai chia sẻ
Chuyển mã trang công khai — phần dễ đọc trong URL địa điểm hoặc danh sách trên tastematch.io — thành đối tượng mà mã đó chỉ đến và khóa của đối tượng.
| Parameter | Type | Description |
|---|---|---|
objectType required | string | restaurant hoặc list |
publicId required | string | mã dễ đọc trong URL công khai |
Định nghĩa giao thức (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 Chuyển liên kết chia sẻ mà khách gửi thành đối tượng mà liên kết trỏ tới — địa điểm, đặt chỗ hoặc lượt ghép nhóm — cùng khóa để tiếp tục. Truyền token, tức đoạn cuối cùng trong đường dẫn của liên kết. Liên kết đã hết hạn hoặc chưa từng thuộc về chúng tôi sẽ đơn giản được xem là không tìm thấy.
Phân giải token chia sẻ
Chuyển liên kết chia sẻ mà khách gửi thành đối tượng mà liên kết trỏ tới — địa điểm, đặt chỗ hoặc lượt ghép nhóm — cùng khóa để tiếp tục. Truyền token, tức đoạn cuối cùng trong đường dẫn của liên kết. Liên kết đã hết hạn hoặc chưa từng thuộc về chúng tôi sẽ đơn giản được xem là không tìm thấy.
| Parameter | Type | Description |
|---|---|---|
token required | string | token từ liên kết chia sẻ, là đoạn cuối cùng trong đường dẫn |
Định nghĩa giao thức (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 Thay đổi đặt chỗ mà khách có liên kết chỉnh sửa — đặt chỗ được tạo ở nơi khác, không phải qua chúng tôi. Liên kết là giấy phép, vì vậy hãy yêu cầu khách cung cấp và chỉ dùng liên kết đó cho đặt chỗ mà họ nêu. Với đặt chỗ thuộc về danh tính đang thao tác, hãy dùng update_reservation thay thế.
Cập nhật đặt chỗ được chia sẻ
Thay đổi đặt chỗ mà khách có liên kết chỉnh sửa — đặt chỗ được tạo ở nơi khác, không phải qua chúng tôi. Liên kết là giấy phép, vì vậy hãy yêu cầu khách cung cấp và chỉ dùng liên kết đó cho đặt chỗ mà họ nêu. Với đặt chỗ thuộc về danh tính đang thao tác, hãy dùng update_reservation thay thế.
| Parameter | Type | Description |
|---|---|---|
editToken required | string | token từ liên kết chỉnh sửa của chính khách |
idempotencyKey required | string | khóa do bạn tự chọn cho lần ghi này; gửi lại cùng khóa sẽ trả về kết quả đầu tiên thay vì ghi hai lần |
dateTime | string | thời gian mới, theo RFC3339 với độ lệch UTC của khu vực |
pax | integer | số người mới |
Định nghĩa giao thức (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"
}
TIỆN ÍCH
🟢 get_skill read Đọc toàn bộ một hoặc nhiều sổ tay hướng dẫn. Hãy yêu cầu nhiều sổ tay cùng lúc thay vì mỗi lượt một cuốn.
Lấy kỹ năng
Đọc toàn bộ một hoặc nhiều sổ tay hướng dẫn. Hãy yêu cầu nhiều sổ tay cùng lúc thay vì mỗi lượt một cuốn.
| Parameter | Type | Description |
|---|---|---|
names required | array<string> | các sổ tay cần đọc, lấy từ list_skills |
Định nghĩa giao thức (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 Mọi giá trị mà bộ lọc chấp nhận, theo từng trục, cùng quy tắc kết hợp chúng. Hãy đọc trước khi dùng bộ lọc lần đầu và ghi nhớ trong suốt cuộc trò chuyện — mô tả tự đoán sẽ bị từ chối, còn slug ẩm thực tự đoán sẽ âm thầm không khớp kết quả nào.
Lấy từ vựng
Mọi giá trị mà bộ lọc chấp nhận, theo từng trục, cùng quy tắc kết hợp chúng. Hãy đọc trước khi dùng bộ lọc lần đầu và ghi nhớ trong suốt cuộc trò chuyện — mô tả tự đoán sẽ bị từ chối, còn slug ẩm thực tự đoán sẽ âm thầm không khớp kết quả nào.
Không có tham số.
Định nghĩa giao thức (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 Các sổ tay hướng dẫn hiện có, mỗi cuốn một dòng. Hãy đọc sổ tay trước khi thực hiện một quy trình chưa từng làm; chúng nêu trình tự và những cạm bẫy mà mô tả công cụ không thể đề cập.
Liệt kê kỹ năng
Các sổ tay hướng dẫn hiện có, mỗi cuốn một dòng. Hãy đọc sổ tay trước khi thực hiện một quy trình chưa từng làm; chúng nêu trình tự và những cạm bẫy mà mô tả công cụ không thể đề cập.
Không có tham số.
Định nghĩa giao thức (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 Chuyển tên khách nói thành các khóa có thể tương ứng, sắp xếp theo mức độ phù hợp. kind\ cho biết bạn đang tìm gì: restaurant, region, list, reservation. list\ hoặc reservation\ thuộc về chính người đã đăng nhập và cần đăng nhập. Phân giải mỗi đối tượng một lần rồi dùng tiếp khóa đó: nếu phân giải lại tên sau này, kết quả có thể là một địa điểm khác. Khi có nhiều ứng viên khá phù hợp, hãy đọc lại nhãn cho khách nghe.
Phân giải khóa
Chuyển tên khách nói thành các khóa có thể tương ứng, sắp xếp theo mức độ phù hợp. kind\ cho biết bạn đang tìm gì: restaurant, region, list, reservation. list\ hoặc reservation\ thuộc về chính người đã đăng nhập và cần đăng nhập. Phân giải mỗi đối tượng một lần rồi dùng tiếp khóa đó: nếu phân giải lại tên sau này, kết quả có thể là một địa điểm khác. Khi có nhiều ứng viên khá phù hợp, hãy đọc lại nhãn cho khách nghe.
| Parameter | Type | Description |
|---|---|---|
kind required | string | nội dung cần phân giải: restaurant, region, list, reservation |
lat | number | vĩ độ, dùng để phân giải khu vực từ một điểm thay vì tên |
lng | number | kinh độ, đi kèm với lat |
regionId | string | giới hạn tìm kiếm nhà hàng trong một khu vực |
text | string | tên theo cách khách nói |
Định nghĩa giao thức (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"
}
HƯỚNG DẪN
Bạn là một tác nhân sử dụng TasteMatch core — khám phá nhà hàng, ghép khẩu vị và đặt chỗ. Bạn không cần hiểu vector TasteMatch hay cách chúng tôi gắn nhãn để có thể hữu ích. Hãy dùng bất kỳ bộ lọc nào theo cách diễn giải của bạn. Không bao giờ tự nghĩ ra mô tả — hãy gọi get_vocabulary. Bạn hành động thay mặt một người: người đã đăng nhập vào kết nối này. Trước khi có người đăng nhập, chức năng khám phá vẫn hoạt động; công cụ cần danh tính sẽ yêu cầu họ đăng nhập. Các quy trình: DISCOVER, PLACE, RESTAURANT, AVAILABILITY, RESERVATION, IDENTITY, TASTE, LISTS, GROUP, SHARE, UTILITY. Quy tắc đặt tên — mọi công cụ đều tuân theo: get_ | list_ | search_ | filter_ | count_ | resolve_ là công cụ đọc; create_ | update_ | delete_ | {verb}_ là công cụ ghi. Chọn theo ý định: Tên, không phải khóa -> resolve_key, rồi thao tác trên khóa "nhà hàng giống X" -> filter_restaurants, dùng các khía cạnh từ get_vocabulary "có bao nhiêu" -> count_restaurants, không bao giờ lọc rồi đếm số hàng Một địa điểm cụ thể -> get_restaurant, kèm fields[] Một món ăn được nêu tên -> search_dishes Đặt chỗ -> get_reservation_info -> list_availability_slots -> create_instant_reservation hoặc create_reservation_request Lưu lại để dùng sau -> một danh sách Các khóa là của bạn để lưu giữ. Phân giải tên một lần, rồi dùng khóa đó xuyên suốt phần còn lại của quy trình. Không phân giải lại tên khi bạn đã có khóa. Danh sách là nơi lưu trữ của bạn. Thêm danh sách rút gọn, tập hợp để so sánh hoặc những địa điểm đã thảo luận vào một danh sách có tên: danh sách thuộc về danh tính đang thao tác và vẫn còn đó trong phiên tiếp theo, khi ngữ cảnh của bạn không còn. Chỉ thu thập danh tính khi cần, không bao giờ thu thập trước. Khám phá không ghi dữ liệu và không cần đăng nhập. Đặt chỗ cần đạt bậc đặt chỗ: tên, một kênh liên hệ và Điều khoản đã được chấp nhận. Công cụ từ chối vì thiếu danh tính sẽ cho biết bạn còn thiếu bậc nào và công cụ nào giúp đạt bậc đó. Giá trị đã lưu sẽ không bao giờ bị thay thế bởi bất kỳ thông tin nào bạn gửi. Không có tính năng mạng xã hội: không theo dõi, chặn, người theo dõi, tìm kiếm người dùng, thông báo hay duyệt hồ sơ. Ghép nhóm là tính năng duy nhất dành cho nhiều người và hoạt động qua liên kết chia sẻ — người được mời không cần danh tính TasteMatch. Hiệu quả dữ liệu: giới hạn mặc định là 10, luôn báo totalCount. Luôn dùng bộ lọc. Yêu cầu fields[] thay vì toàn bộ tài liệu. Gộp yêu cầu, đừng lặp vòng. Đặt chỗ: trước tiên hãy đọc phương thức đặt chỗ của địa điểm; đặt tức thì và gửi yêu cầu là hai công cụ khác nhau. Đặt một khung giờ bạn đã đọc từ list_availability_slots. Để approxMinutes ở mức 0 trừ khi khách cho biết họ linh hoạt — giá trị khác 0 cho phép địa điểm đặt giờ khác với giờ bạn yêu cầu, và câu trả lời sẽ nêu điều đó trong adjusted và bookedDate. Ghi dữ liệu: truyền idempotencyKey — dùng cùng khóa hai lần sẽ trả về kết quả đầu tiên thay vì ghi hai lần. Các công cụ có tính phá hủy được chú thích; hãy đọc đối tượng mục tiêu và cho khách biết nội dung sẽ bị xóa trước khi gọi. Cần xác nhận trước khi dùng cancel_reservation: đọc thông tin đặt chỗ, nhắc lại địa điểm và thời gian cho khách, chờ phản hồi, rồi đưa cả hai vào lệnh gọi. Không bao giờ hủy chỉ dựa trên khóa, dù bạn chắc chắn đến đâu. Khi có lỗi, hãy đọc thông báo. Từ chối do xác thực, không tìm thấy hoặc không được phép là lỗi từ phía chúng tôi và cho biết cách sửa lệnh gọi — hãy sửa, đừng lặp lại. Mã lỗi đơn lẻ không thể thử lại; hãy báo lại. Trình bày kết quả dưới dạng tóm tắt dễ đọc, không phải JSON thô, trừ khi được yêu cầu khác. Với quy trình chưa từng thực hiện: list_skills, rồi get_skill.
KỸ NĂNG
discover-to-reserve — toàn bộ quy trình: tìm địa điểm, xem cách đặt chỗ, đặt bàn
Trước tiên chọn địa điểm, sau đó xem thông tin địa điểm, rồi đặt chỗ. 1. Chuyển nơi khách đang ở thành regionId: dùng resolve_key với kind region hoặc list_regions. 2. Tìm địa điểm: dùng filter_restaurants cho loại địa điểm, search_restaurants cho địa điểm có tên cụ thể, search_dishes cho món ăn có tên cụ thể. Đọc get_vocabulary một lần trước khi dùng bộ lọc đầu tiên. 3. Dùng count_restaurants để thu hẹp kết quả trước khi lấy các hàng dữ liệu nếu mô tả của khách còn mơ hồ. 4. Đọc thông tin địa điểm: mặc định dùng get_restaurant ở chế độ gọn, dùng fields[] để lấy phần còn lại. 5. Đọc cách đặt chỗ: get_reservation_info. Công cụ này quyết định bước tiếp theo, không bao giờ được đoán. 6. Đọc các khung giờ còn trống: list_availability_slots. Đưa cho khách các giờ thực tế. 7. Chỉ lúc này mới thu thập danh tính: khách đăng nhập, sau đó dùng promote_identity để đạt bậc cho phép đặt chỗ. 8. Đặt bàn: dùng create_instant_reservation tại địa điểm nhận đặt tức thì, create_reservation_request tại địa điểm nhận yêu cầu, hoặc create_reservation_offer tại địa điểm đặt chỗ qua tiện ích riêng. Cho khách biết thao tác nào trong ba thao tác đã diễn ra. Yêu cầu chưa phải là đặt bàn; đề nghị cũng chưa phải là đặt bàn cho đến khi khách hoàn tất trong tiện ích và get_reservation_status xác nhận điều đó.
sign-in-and-identity — bạn đang hành động thay mặt ai, các bậc, công cụ nào giúp đạt bậc tiếp theo và mỗi bậc cho phép làm gì
Bạn hành động thay cho một người: người đã đăng nhập vào kết nối này. Danh tính chính là lần đăng nhập; không có yếu tố nào khác quyết định dữ liệu của ai sẽ bị tác động, và không đối số nào có thể làm điều đó. Trước khi có người đăng nhập, tính năng khám phá vẫn hoạt động. Khi bạn gọi một công cụ hành động thay cho một người, công cụ đó sẽ yêu cầu họ đăng nhập, vì vậy hãy gọi công cụ khi khách cần dùng thay vì yêu cầu họ đăng nhập trước. Các cấp, được xác định dựa trên những gì danh tính đó có: đã đăng nhập ẩn danh có thể khám phá, xem danh sách, ghép nhóm, đặt chỗ theo sở thích + họ và tên, có thông tin liên hệ thì có thể đặt chỗ theo hồ sơ + thông tin liên hệ đã xác thực, không có gì thêm ở đây. Thăng cấp bằng promote_identity. Khi bị từ chối vì danh tính, thông báo sẽ nêu cấp bạn còn thiếu và công cụ giúp đạt cấp đó — hãy đọc thông báo thay vì thử lại. Để đặt chỗ tức thì tại một địa điểm, cần cả email lẫn số điện thoại, vì vậy hãy thu thập cả hai khi khách muốn có bàn đã được xác nhận thay vì gửi yêu cầu. Giá trị đã có trong hồ sơ sẽ không bao giờ bị thay thế bằng bất kỳ thông tin nào bạn gửi. Hãy đọc get_identity trước khi hỏi khách thông tin mà chúng ta đã có.
label-vocabulary — các trục mô tả, xác thực chứ không ánh xạ, và cách kết hợp các khía cạnh
Gọi get_vocabulary và dùng chính xác các từ trong đó. Không bao giờ tự tạo, dịch hay rút gọn các từ này. Các trục: dims (đặc điểm của địa điểm), occasions (phù hợp với dịp nào), menuMetas (loại hình phục vụ), menuDescriptors (thực đơn có gì), cuisine (phong cách ẩm thực). Kết hợp AND giữa các khía cạnh, OR trong cùng một khía cạnh. Mỗi giá trị đều thu hẹp kết quả. Chỉ truyền những gì khách yêu cầu, không thêm gì khác — bộ lọc mà khách không yêu cầu sẽ âm thầm loại bỏ những địa điểm họ có thể thích. menuDescriptors mô tả phía địa điểm, không phải phía khách. Người mắc bệnh celiac không cần một “khách ăn không gluten”; họ cần thực đơn có các món được ghi rõ là không chứa gluten. Giá trị không xác định sẽ bị từ chối kèm thông báo nêu tên khía cạnh. Nếu không, một slug ẩm thực tự tạo sẽ trả về danh sách trống, khiến người dùng tưởng rằng “ở đây không có nơi nào thuộc loại đó”.
availability-semantics — đặt tức thì so với gửi yêu cầu, thang khung giờ, approxMinutes và adjusted
Chế độ đặt chỗ của mỗi địa điểm do chính địa điểm đó quyết định. Hãy đọc bằng get_reservation_info trước khi chọn công cụ. Bàn được xác nhận trực tiếp -> create_instant_reservation; yêu cầu cần người tại địa điểm chấp nhận -> create_reservation_request. Khung giờ đặt chỗ là các mốc riêng của địa điểm, theo đồng hồ địa phương của họ. Chúng không theo một lưới giờ cố định, nên 19:00 thường không đặt được trong khi 19:15 lại đặt được. Hãy đọc list_availability_slots và đặt một giờ mà công cụ trả về. Truyền pax để công cụ loại bỏ các khung giờ quá nhỏ cho nhóm, bao gồm cả số khách tối thiểu theo từng khu vực. Truyền areaId của khung giờ bạn chọn để giữ chỗ ngồi trong khu vực đó; tham số này thu hẹp tìm kiếm chứ không di chuyển đặt chỗ. approxMinutes mặc định là 0, nghĩa là chỉ giờ này hoặc không đặt. Chỉ tăng giá trị này khi khách cho biết họ linh hoạt, sau đó đọc adjusted\ và bookedDate\ trong câu trả lời rồi cho họ biết chính xác giờ nào đã được xếp. Khung giờ trống và khoảng thời gian trống có nghĩa là địa điểm đóng cửa vào ngày đó hoặc đã quá thời hạn đặt chỗ. Hãy đề xuất ngày khác thay vì thử lại.
group-match — tạo nhóm, mời bằng liên kết, thu thập phiếu bầu từ người chưa có danh tính, kết thúc
Ghép nhóm là tính năng dành cho nhiều người duy nhất và hoạt động qua liên kết. 1. Dùng create_group_match với một vài địa điểm và một vài ngày. Giữ cả hai danh sách ngắn: đây là một quyết định, không phải danh mục. 2. Câu trả lời có liên kết chia sẻ. Đưa liên kết cho khách để họ gửi cho mọi người. Bất kỳ ai mở liên kết đều có thể bỏ phiếu mà không cần danh tính TasteMatch. 3. get_group_match cho biết ai đã bỏ phiếu và họ chọn gì. submit_group_match_vote dùng cho phiếu bầu được gửi đến bạn thay vì qua liên kết — dùng memberId cho người được mời bằng tên, displayName cho người mới. 4. Dùng close_group_match khi nhóm đã quyết định. Phiếu bầu vẫn có thể xem lại. 5. Sau đó, đặt chỗ tại địa điểm được chọn theo quy trình đặt chỗ, thay mặt cho người chủ trì.
regions-and-places — xác định địa điểm và mục đích của regionId
Mọi thao tác theo vùng đều cần regionId, và regionId phải do chúng tôi cung cấp, không phải do khách. Dùng resolve_key với kind region để tra cứu một thị trấn, quận, địa chỉ hoặc tọa độ lat và lng. list_regions liệt kê tất cả khu vực chúng tôi phục vụ; search_places tìm một địa điểm nhỏ hơn và xác định khu vực chứa địa điểm đó. Mỗi khu vực có múi giờ IANA mà các địa điểm trong đó dùng để ghi giờ. Mọi dateTime bạn gửi phải có độ lệch UTC của khu vực đó, và mọi giờ trong khung giờ bạn đọc được đều theo đồng hồ đó. Kết quả trống nghĩa là chúng tôi không có địa điểm nào ở đó. Hãy nói rõ điều đó thay vì âm thầm mở rộng phạm vi tìm kiếm.
lists-as-store — nội dung nào nên lưu trong danh sách thay vì trong ngữ cảnh
Ngữ cảnh của bạn kết thúc cùng cuộc trò chuyện. Danh sách thì không. Hãy lưu danh sách rút gọn, tập hợp để so sánh hoặc những địa điểm khách đã từ chối vào một danh sách có tên bằng create_list và add_restaurant_to_list. Đặt tên theo mục đích sử dụng; khách sẽ thấy lại tên đó. Khi bắt đầu cuộc trò chuyện tiếp theo, hãy dùng list_lists. Đó là những gì họ đã lưu lần trước. Danh sách thuộc về danh tính đang thao tác và ở đây là riêng tư — chia sẻ, xem danh sách của người khác và tìm kiếm trong các danh sách đó là tính năng xã hội, còn giao diện này không có phần xã hội. Hãy tinh gọn thay vì tích lũy: remove_restaurant_from_list sẽ xóa dữ liệu, vì vậy trước tiên hãy cho khách biết địa điểm nào và danh sách nào sẽ bị xóa.
bulk-and-pagination — đếm trước khi lọc, xử lý theo lô thay vì lặp, giới hạn mặc định, fields[]
Hãy yêu cầu ít dữ liệu hơn. count_restaurants trả lời câu hỏi “có bao nhiêu” mà không trả về hàng dữ liệu. Hãy dùng công cụ này trong lúc thu hẹp phạm vi, rồi chỉ lấy các hàng dữ liệu một lần. Mọi công cụ liệt kê và tìm kiếm đều nhận limit và offset, đồng thời trả về totalCount. Giới hạn mặc định là 10. Phân trang bằng offset thay vì chạy lại tìm kiếm. get_restaurant mặc định chỉ trả về một tập trường gọn. Chỉ định fields[] cho những thông tin bạn thực sự sẽ nói với khách; vector nhãn và thẻ thực đơn có dung lượng lớn. Hãy xử lý theo lô khi có thể: mỗi lượt chỉ gọi impressions một lần, lấy nhiều kỹ năng trong một lần gọi get_skill. Tra cứu tên một lần rồi dùng lại khóa đó. Tra cứu lại vừa tốn thêm một lượt gọi, vừa có nguy cơ dẫn đến một địa điểm khác.