DISCOVER
๐
count_restaurants
read
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.
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.
| Parameter | Type | Description |
|---|---|---|
drinkOptions | object | what the drinks list must carry |
drinkOptions.beerSelection | boolean | true narrows to venues carrying it; omit it to not narrow on it |
drinkOptions.cocktailSelection | boolean | true narrows to venues carrying it; omit it to not narrow on it |
drinkOptions.natureWineSelection | boolean | true narrows to venues carrying it; omit it to not narrow on it |
drinkOptions.wineSelection | boolean | true narrows to venues carrying it; omit it to not narrow on it |
kitchen | object | the kitchen it cooks |
kitchen.cuisine | array<string> | cuisine slugs, any one of which satisfies it; the list is in get_vocabulary |
location | object | where to search: a regionId, or a point with a radius |
location.lat | number | latitude of the search centre, paired with lng |
location.lng | number | longitude of the search centre |
location.radiusMeters | integer | how far around the point to look |
location.regionId | string | the region to search in, from list_regions or resolve_key |
menuOptions | object | what the menu must carry |
menuOptions.fishDishes | boolean | true narrows to venues carrying it; omit it to not narrow on it |
menuOptions.glutenFreeDishes | boolean | true narrows to venues carrying it; omit it to not narrow on it |
menuOptions.halalDishes | boolean | true narrows to venues carrying it; omit it to not narrow on it |
menuOptions.lactoseFreeDishes | boolean | true narrows to venues carrying it; omit it to not narrow on it |
menuOptions.meatDishes | boolean | true narrows to venues carrying it; omit it to not narrow on it |
menuOptions.veganDishes | boolean | true narrows to venues carrying it; omit it to not narrow on it |
menuOptions.vegetarianDishes | boolean | true narrows to venues carrying it; omit it to not narrow on it |
nutrition | object | what the venue is as a whole |
nutrition.veganRestaurants | boolean | true narrows to venues carrying it; omit it to not narrow on it |
nutrition.vegetarianRestaurants | boolean | true narrows to venues carrying it; omit it to not narrow on it |
opening | object | when the venue is open |
opening.daytime | string | the service to be open for: lunch or dinner |
opening.openOn | array<integer> | weekdays it must be open on, Sunday is 0 |
reservation | object | how it can be booked |
reservation.hasWidget | boolean | true narrows to venues carrying it; omit it to not narrow on it |
reservation.liveAvailability | boolean | true narrows to venues carrying it; omit it to not narrow on it |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
๐
filter_restaurants
read
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.
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.
| Parameter | Type | Description |
|---|---|---|
drinkOptions | object | what the drinks list must carry |
drinkOptions.beerSelection | boolean | true narrows to venues carrying it; omit it to not narrow on it |
drinkOptions.cocktailSelection | boolean | true narrows to venues carrying it; omit it to not narrow on it |
drinkOptions.natureWineSelection | boolean | true narrows to venues carrying it; omit it to not narrow on it |
drinkOptions.wineSelection | boolean | true narrows to venues carrying it; omit it to not narrow on it |
kitchen | object | the kitchen it cooks |
kitchen.cuisine | array<string> | cuisine slugs, any one of which satisfies it; the list is in get_vocabulary |
limit | integer | rows to return, at most 50 |
location | object | where to search: a regionId, or a point with a radius |
location.lat | number | latitude of the search centre, paired with lng |
location.lng | number | longitude of the search centre |
location.radiusMeters | integer | how far around the point to look |
location.regionId | string | the region to search in, from list_regions or resolve_key |
menuOptions | object | what the menu must carry |
menuOptions.fishDishes | boolean | true narrows to venues carrying it; omit it to not narrow on it |
menuOptions.glutenFreeDishes | boolean | true narrows to venues carrying it; omit it to not narrow on it |
menuOptions.halalDishes | boolean | true narrows to venues carrying it; omit it to not narrow on it |
menuOptions.lactoseFreeDishes | boolean | true narrows to venues carrying it; omit it to not narrow on it |
menuOptions.meatDishes | boolean | true narrows to venues carrying it; omit it to not narrow on it |
menuOptions.veganDishes | boolean | true narrows to venues carrying it; omit it to not narrow on it |
menuOptions.vegetarianDishes | boolean | true narrows to venues carrying it; omit it to not narrow on it |
nutrition | object | what the venue is as a whole |
nutrition.veganRestaurants | boolean | true narrows to venues carrying it; omit it to not narrow on it |
nutrition.vegetarianRestaurants | boolean | true narrows to venues carrying it; omit it to not narrow on it |
offset | integer | rows to skip; with totalCount in the result this pages through them |
opening | object | when the venue is open |
opening.daytime | string | the service to be open for: lunch or dinner |
opening.openOn | array<integer> | weekdays it must be open on, Sunday is 0 |
reservation | object | how it can be booked |
reservation.hasWidget | boolean | true narrows to venues carrying it; omit it to not narrow on it |
reservation.liveAvailability | boolean | true narrows to venues carrying it; omit it to not narrow on it |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
๐
list_popular_restaurants
read
The most-liked venues of one region. A region is required: without one this reads every venue we hold.
The most-liked venues of one region. A region is required: without one this reads every venue we hold.
| Parameter | Type | Description |
|---|---|---|
regionIdrequired | string | the region to read, from list_regions |
limit | integer | rows to return, at most 50 |
offset | integer | rows to skip; with totalCount in the result this pages through them |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
๐
list_recommended_restaurants
read
Venues recommended for the acting identity, closest in taste first. Needs an actAs grant to be personal at all; without one it is not. `bookableOnly` keeps only venues with a table free, which is a much smaller set and needs a grant.
Venues recommended for the acting identity, closest in taste first. Needs an actAs grant to be personal at all; without one it is not. `bookableOnly` keeps only venues with a table free, which is a much smaller set and needs a grant.
| Parameter | Type | Description |
|---|---|---|
bookableOnly | boolean | keep only venues with live availability |
interDiem | integer | with bookableOnly, how many days ahead a free table may lie |
limit | integer | rows to return, at most 50 |
offset | integer | rows to skip; with totalCount in the result this pages through them |
regionId | string | the region to recommend in; the identity's own region when omitted |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Venues recommended for the acting identity, closest in taste first. Needs an actAs grant to be personal at all; without one it is not. `bookableOnly` keeps only venues with a table free, which is a much smaller set and needs a grant.",
"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"
}
๐
list_similar_restaurants
read
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.
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.
| Parameter | Type | Description |
|---|---|---|
restaurantKeyrequired | string | the venue to find neighbours of |
limit | integer | rows to return, at most 50 |
offset | integer | rows to skip; with totalCount in the result this pages through them |
sameCategory | boolean | keep to the same kitchen family; true when omitted |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
๐
search_dishes
read
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.
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.
| Parameter | Type | Description |
|---|---|---|
qrequired | string | the dish as the guest named it |
lat | number | latitude to search around, paired with lng |
limit | integer | rows to return, at most 50 |
lng | number | longitude to search around |
offset | integer | rows to skip; with totalCount in the result this pages through them |
radiusMeters | integer | how far around the point to look |
regionId | string | bound the search to one region |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
๐
search_restaurants
read
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.
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.
| Parameter | Type | Description |
|---|---|---|
textrequired | string | what to search for, three characters or more |
limit | integer | rows to return, at most 50 |
offset | integer | rows to skip; with totalCount in the result this pages through them |
regionId | string | bound the search to one region; omitted it searches every region we cover |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
PLACE
๐
list_regions
read
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.
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.
| Parameter | Type | Description |
|---|---|---|
lat | number | latitude to sort by distance from, paired with lng |
limit | integer | rows to return, at most 50 |
lng | number | longitude to sort by distance from |
offset | integer | rows to skip; with totalCount in the result this pages through them |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
๐
search_places
read
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.
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.
| Parameter | Type | Description |
|---|---|---|
qrequired | string | the place as the guest named it |
countryCode | string | ISO 3166-1 alpha-2 code to restrict the match to |
limit | integer | rows to return, at most 50 |
offset | integer | rows to skip; with totalCount in the result this pages through them |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
RESTAURANT
๐
get_restaurant
read
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.
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.
| Parameter | Type | Description |
|---|---|---|
restaurantKeyrequired | string | the venue's key |
accessType | string | 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. |
fields | array<string> | the fields to return; the default projection is lean, and keys are always included |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
๐
like_restaurant
write
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.
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.
| Parameter | Type | Description |
|---|---|---|
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
restaurantKeyrequired | string | the venue's key |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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"
}
๐
submit_restaurant_impressions
write
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.
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.
| Parameter | Type | Description |
|---|---|---|
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
impressionsrequired | array<object> | what was shown or acted on |
impressions[].accessTyperequired | string | one of filtered, searched, recommended, similar, popular, spotlight |
impressions[].restaurantKeyrequired | string | |
sessionIdrequired | string | a UUID of your own, the same for every batch in one conversation |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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"
}
๐
unlike_restaurant
write
Take back a like. The venue stays in the catalogue; only the identity's opinion of it is removed.
Take back a like. The venue stays in the catalogue; only the identity's opinion of it is removed.
| Parameter | Type | Description |
|---|---|---|
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
restaurantKeyrequired | string | the venue's key |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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"
}
AVAILABILITY
๐
get_reservation_info
read
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.
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.
| Parameter | Type | Description |
|---|---|---|
restaurantKeyrequired | string | the venue's key |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
๐
list_availability_slots
read
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.
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.
| Parameter | Type | Description |
|---|---|---|
daterequired | string | the day to read, RFC3339 with the region's UTC offset |
restaurantKeyrequired | string | the venue's key |
pax | integer | party size, to drop slots too small for it |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
RESERVATION
๐
cancel_reservation
destructive
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.
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.
| Parameter | Type | Description |
|---|---|---|
confirmDateTimerequired | string | the reservation's time as you said it to the guest, RFC3339 |
confirmRestaurantNamerequired | string | the venue's name as you said it to the guest |
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
reservationKeyrequired | string | the reservation to cancel, from the owned set of list_reservations |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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"
}
๐
create_instant_reservation
write
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.
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.
| Parameter | Type | Description |
|---|---|---|
dateTimerequired | string | the slot to take, RFC3339 with the region's UTC offset, as read from list_availability_slots |
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
paxrequired | integer | party size |
restaurantKeyrequired | string | the venue's key |
approxMinutes | integer | how far from dateTime the venue may book instead; 0 means this time or nothing |
areaId | string | the area to seat in, from the slot you chose; it narrows the search and never moves the booking |
comment | string | a note for the venue, in the guest's words |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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"
}
๐
create_reservation_offer
write
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.
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.
| Parameter | Type | Description |
|---|---|---|
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
restaurantKeyrequired | string | the venue's key |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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"
}
๐
create_reservation_request
write
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.
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.
| Parameter | Type | Description |
|---|---|---|
dateTimerequired | string | the time asked for, RFC3339 with the region's UTC offset |
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
paxrequired | integer | party size |
restaurantKeyrequired | string | the venue's key |
comment | string | a note for the venue, in the guest's words |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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"
}
๐
get_reservation_status
read
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.
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.
| Parameter | Type | Description |
|---|---|---|
reservationKeyrequired | string | the reservation's key, from list_reservations |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
๐
list_reservation_slots
read
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.
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.
| Parameter | Type | Description |
|---|---|---|
reservationKeyrequired | string | the reservation to move, from list_reservations |
fromDate | string | the first day to look at, RFC3339; the reservation's own day when omitted |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
๐
list_reservations
read
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.
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.
No parameters.
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
๐
update_reservation
write
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.
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.
| Parameter | Type | Description |
|---|---|---|
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
reservationKeyrequired | string | the reservation to change, from the owned set of list_reservations |
dateTime | string | the new time, RFC3339 with the region's UTC offset |
pax | integer | the new party size |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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"
}
IDENTITY
๐
create_identity
write
Mint the identity you will act for, and get the actAs grant that names it. Pass only what the guest has given you: accepted terms alone is enough to start, and a name plus an email or a phone reaches the rung that can reserve. The guest must have accepted the Terms at https://www.tastematch.io/agb โ set acceptTerms true only when they actually did. Pass an email this credential has used before and you get that identity back rather than a second one, so a returning guest keeps their lists.
Mint the identity you will act for, and get the actAs grant that names it. Pass only what the guest has given you: accepted terms alone is enough to start, and a name plus an email or a phone reaches the rung that can reserve. The guest must have accepted the Terms at https://www.tastematch.io/agb โ set acceptTerms true only when they actually did. Pass an email this credential has used before and you get that identity back rather than a second one, so a returning guest keeps their lists.
| Parameter | Type | Description |
|---|---|---|
acceptTermsrequired | boolean | true only when the guest has accepted the Terms |
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
email | string | contact email; also how a returning guest is recognised |
firstName | string | the guest's first name, when they have given it |
language | string | the identity's language as a two-letter code, e.g. de; the request's own language when omitted |
lastName | string | the guest's last name, when they have given it |
phone | string | contact phone in international format |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Mint the identity you will act for, and get the actAs grant that names it. Pass only what the guest has given you: accepted terms alone is enough to start, and a name plus an email or a phone reaches the rung that can reserve. The guest must have accepted the Terms at https://www.tastematch.io/agb โ set acceptTerms true only when they actually did. Pass an email this credential has used before and you get that identity back rather than a second one, so a returning guest keeps their lists.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"acceptTerms": {
"description": "true only when the guest has accepted the Terms",
"type": "boolean"
},
"email": {
"description": "contact email; also how a returning guest is recognised",
"type": "string"
},
"firstName": {
"description": "the guest's first name, when they have given it",
"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"
},
"language": {
"description": "the identity's language as a two-letter code, e.g. de; the request's own language when omitted",
"type": "string"
},
"lastName": {
"description": "the guest's last name, when they have given it",
"type": "string"
},
"phone": {
"description": "contact phone in international format",
"type": "string"
}
},
"required": [
"acceptTerms",
"idempotencyKey"
],
"type": "object"
},
"name": "create_identity"
}
๐
get_identity
read
The identity the current grant names. 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.
The identity the current grant names. 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.
No parameters.
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "The identity the current grant names. 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"
}
๐
get_session
read
What this connection is: the integration you are calling as, the scopes it carries, the journeys they reach, and the identity you are currently acting for. Call it first when unsure whether you hold a grant, and read `climbWith` for the tool that collects whatever the current rung is missing.
What this connection is: the integration you are calling as, the scopes it carries, the journeys they reach, and the identity you are currently acting for. Call it first when unsure whether you hold a grant, and read `climbWith` for the tool that collects whatever the current rung is missing.
No parameters.
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "What this connection is: the integration you are calling as, the scopes it carries, the journeys they reach, and the identity you are currently acting for. Call it first when unsure whether you hold a grant, and read `climbWith` for the tool that collects whatever the current rung is missing.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "get_session"
}
๐
list_identities
read
The end-users this credential has minted, newest first, each with a masked email. Use it to find a returning guest rather than minting a second identity for them โ their lists and reservations are on the first one. To act for one of them, mint a grant with create_identity and the address the guest gave you. The full record is get_identity, under that grant.
The end-users this credential has minted, newest first, each with a masked email. Use it to find a returning guest rather than minting a second identity for them โ their lists and reservations are on the first one. To act for one of them, mint a grant with create_identity and the address the guest gave you. The full record is get_identity, under that grant.
| Parameter | Type | Description |
|---|---|---|
limit | integer | rows to return, at most 50 |
offset | integer | rows to skip; with totalCount in the result this pages through them |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "The end-users this credential has minted, newest first, each with a masked email. Use it to find a returning guest rather than minting a second identity for them โ their lists and reservations are on the first one. To act for one of them, mint a grant with create_identity and the address the guest gave you. The full record is get_identity, under that grant.",
"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_identities"
}
๐
promote_identity
write
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.
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.
| Parameter | Type | Description |
|---|---|---|
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
acceptTerms | boolean | true when the guest accepts the Terms at https://www.tastematch.io/agb |
email | string | contact email |
firstName | string | the guest's first name |
lastName | string | the guest's last name |
phone | string | contact phone in international format |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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"
}
๐
revoke_grant
destructive
End the grant you are holding. The identity, its lists and its reservations are untouched โ only this connection's access to them stops, and a later grant for the same guest reaches the same records. Call it when a conversation ends. There is no way to delete an end-user from this surface.
End the grant you are holding. The identity, its lists and its reservations are untouched โ only this connection's access to them stops, and a later grant for the same guest reaches the same records. Call it when a conversation ends. There is no way to delete an end-user from this surface.
| Parameter | Type | Description |
|---|---|---|
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "End the grant you are holding. The identity, its lists and its reservations are untouched โ only this connection's access to them stops, and a later grant for the same guest reaches the same records. Call it when a conversation ends. There is no way to delete an end-user from this surface.",
"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"
}
},
"required": [
"idempotencyKey"
],
"type": "object"
},
"name": "revoke_grant"
}
๐
update_identity
write
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.
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.
| Parameter | Type | Description |
|---|---|---|
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
acceptTerms | boolean | true when the guest accepts the Terms at https://www.tastematch.io/agb |
email | string | contact email |
firstName | string | the guest's first name |
lastName | string | the guest's last name |
phone | string | contact phone in international format |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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"
}
TASTE
๐
get_taste_profile
read
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.
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.
No parameters.
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
๐
submit_taste_profile
write
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. Descriptors come from get_vocabulary โ an invented one 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.
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. Descriptors come from get_vocabulary โ an invented one 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.
| Parameter | Type | Description |
|---|---|---|
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
weightsrequired | map<string, number> | confidence 0 to 1 per descriptor, from get_vocabulary |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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. Descriptors come from get_vocabulary โ an invented one 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, from get_vocabulary",
"type": "object"
}
},
"required": [
"idempotencyKey",
"weights"
],
"type": "object"
},
"name": "submit_taste_profile"
}
LISTS
๐
add_restaurant_to_list
write
Put a venue on one of the identity's lists. Adding one that is already there changes nothing.
Put a venue on one of the identity's lists. Adding one that is already there changes nothing.
| Parameter | Type | Description |
|---|---|---|
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
listKeyrequired | string | the list to add to |
restaurantKeyrequired | string | the venue to add |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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"
}
๐
create_list
write
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.
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.
| Parameter | Type | Description |
|---|---|---|
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
titlerequired | string | what the list is for, in the guest's language |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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"
}
๐
delete_list
destructive
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.
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.
| Parameter | Type | Description |
|---|---|---|
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
listKeyrequired | string | the list to delete |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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"
}
๐
get_list
read
Read one of the acting identity's lists in full, with every venue on it. Another identity's list is not readable, even through the same credential.
Read one of the acting identity's lists in full, with every venue on it. Another identity's list is not readable, even through the same credential.
| Parameter | Type | Description |
|---|---|---|
listKeyrequired | string | the list's key, from list_lists |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Read one of the acting identity's lists in full, with every venue on it. Another identity's list is not readable, even through the same credential.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"listKey": {
"description": "the list's key, from list_lists",
"type": "string"
}
},
"required": [
"listKey"
],
"type": "object"
},
"name": "get_list"
}
๐
list_lists
read
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.
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.
| Parameter | Type | Description |
|---|---|---|
limit | integer | rows to return, at most 50 |
offset | integer | rows to skip; with totalCount in the result this pages through them |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
๐
remove_restaurant_from_list
destructive
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.
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.
| Parameter | Type | Description |
|---|---|---|
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
listKeyrequired | string | the list to remove from |
restaurantKeyrequired | string | the venue to remove |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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"
}
๐
update_list
write
Rename one of the identity's lists. The venues on it are untouched.
Rename one of the identity's lists. The venues on it are untouched.
| Parameter | Type | Description |
|---|---|---|
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
listKeyrequired | string | the list to rename |
titlerequired | string | the new name |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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"
}
GROUP
๐
close_group_match
write
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.
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.
| Parameter | Type | Description |
|---|---|---|
groupMatchKeyrequired | string | the match to close |
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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"
}
๐
create_group_match
write
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.
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.
| Parameter | Type | Description |
|---|---|---|
dateOptionsrequired | array<string> | the dates to choose between, RFC3339 with the region's UTC offset |
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
restaurantKeysrequired | array<string> | the venues to choose between |
titlerequired | string | what the group is deciding, in the guest's words |
invitees | array<object> | the people to ask, each by name and email |
invitees[].displayNamerequired | string | the name the group will see |
invitees[].emailrequired | string | where the invitation goes |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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"
}
๐
delete_group_match
destructive
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.
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.
| Parameter | Type | Description |
|---|---|---|
groupMatchKeyrequired | string | the match to delete |
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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"
}
๐
get_group_match
read
One group match the identity created: the venues, the date options, who was invited, who has voted and for what, and the share link.
One group match the identity created: the venues, the date options, who was invited, who has voted and for what, and the share link.
| Parameter | Type | Description |
|---|---|---|
groupMatchKeyrequired | string | the match's key, from list_group_matches |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
๐
list_group_matches
read
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.
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.
| Parameter | Type | Description |
|---|---|---|
limit | integer | rows to return, at most 50 |
offset | integer | rows to skip; with totalCount in the result this pages through them |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
๐
submit_group_match_vote
write
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.
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.
| Parameter | Type | Description |
|---|---|---|
groupMatchKeyrequired | string | the match being voted in |
idempotencyKeyrequired | string | a key of your own for this one write; sending the same key again returns the first result instead of writing twice |
picksrequired | array<object> | one pick per venue and date pair the person accepts |
picks[].dateOptionIdxrequired | integer | the index of the date option, counting from zero |
picks[].restaurantKeyrequired | string | |
displayName | string | the name of someone joining off the link, when they were not invited by name |
memberId | string | the invitee this vote belongs to, from get_group_match |
Wire definition (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false
},
"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"
}
SHARE
UTILITY
๐
get_skill
read
Read one or more playbooks in full. Ask for several at once rather than one per turn.
Read one or more playbooks in full. Ask for several at once rather than one per turn.
| Parameter | Type | Description |
|---|---|---|
namesrequired | array<string> | the playbooks to read, from list_skills |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
๐
get_vocabulary
read
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.
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.
No parameters.
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
๐
list_skills
read
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.
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.
No parameters.
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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"
}
๐
resolve_key
read
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. 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.
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. 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.
| Parameter | Type | Description |
|---|---|---|
kindrequired | string | what to resolve: restaurant, region, list, reservation |
lat | number | latitude, to resolve a region from a point instead of a name |
lng | number | longitude, paired with lat |
regionId | string | bound a restaurant search to one region |
text | string | the name as the guest said it |
Wire definition (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"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. 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"
}