WaitApp
Find venues, book tables, rooms and services, buy event tickets and order food delivery.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"waitapp": {
"url": "https://waitapp.online/api/mcp"
}
}
}远程端点
https://waitapp.online/api/mcpstreamable-httphttps://waitapp.online/api/mcp/streamable-http它能做什么
工具清单
工具(30)
🟢search_venues(query, city, countryCode, takesDelivery, venueType, ...)
Search WaitApp venues (restaurants, hotels, lodges) by name, city and/or country, and filter them: takesDelivery, venueType (restaurant, hotel, event_organizer, ...) and openNow. Empty query lists venues. Name matching is forgiving (case, '&' vs 'and', small typos); if nothing matches closely, the closest names come back as didYouMean. Each venue says what it supports (delivery, table reservations, stays), whether it is open now and on what basis (openNowBasis: the venue's own switch, its opening hours, or no hours set so assumed open), when it next opens if closed (opensAt), and its hours in words (hoursSummary) and per day (openingHours). Give a saved location (savedLocationId) or coordinates (nearLat and nearLng) to get each venue's straight-line distance and nearest-first order; for the delivery fee to an address use quote_delivery. Each venue includes its city and countryCode: venue names repeat across countries, and this is the tool that tells them apart before a venue id is used elsewhere. To find who sells a dish, use search_menu.
输入模式
{
"type": "object",
"properties": {
"query": {
"description": "Name to search for. Forgiving: ignores case and punctuation, treats '&' as 'and', tolerates small typos",
"type": "string"
},
"city": {
"description": "City to filter by, case-insensitive exact match",
"type": "string"
},
"countryCode": {
"description": "ISO 3166-1 alpha-2, e.g. ZM for Zambia — filter to a single country",
"type": "string",
"minLength": 2,
"maxLength": 2
},
"takesDelivery": {
"description": "true: only venues that deliver",
"type": "boolean"
},
"venueType": {
"description": "e.g. restaurant, hotel, event_organizer",
"type": "string"
},
"openNow": {
"description": "true: only venues open right now",
"type": "boolean"
},
"savedLocationId": {
"description": "A saved location of the connected person (list_saved_locations): adds distance from it",
"type": "string"
},
"nearLat": {
"description": "With nearLng: adds distance from this point",
"type": "number",
"minimum": -90,
"maximum": 90
},
"nearLng": {
"type": "number",
"minimum": -180,
"maximum": 180
},
"limit": {
"default": 20,
"type": "integer",
"minimum": 1,
"maximum": 50
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢search_menu(query, city, countryCode, takesDelivery, openNow, ...)
Finds which venues sell a dish or cuisine, such as pizza or biryani, by searching the menus of live venues in a city or country (never event organisers). Returns, for each venue that has a match, the venue (with whether it delivers and whether it is open now) and up to a few matching items with price and whether they have required choices. Use list_menu_items with the venue id for the full item and its options. Matches marked soldAheadOnly are sold only for a scheduled date and can't be ordered through the assistant yet. Uses a search index, so it covers every live venue quickly: venues come back best match first, at most maxVenues of them, and the result says how many venues had a match. A city or countryCode narrows it and is recommended, because dish names are the same everywhere.
输入模式
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 2,
"description": "A dish or cuisine, e.g. pizza, biryani, burger. Every word must appear in the item's name, category or description"
},
"city": {
"description": "City, case-insensitive exact match",
"type": "string"
},
"countryCode": {
"description": "ISO 3166-1 alpha-2, e.g. ZM",
"type": "string",
"minLength": 2,
"maxLength": 2
},
"takesDelivery": {
"description": "true: only venues that deliver",
"type": "boolean"
},
"openNow": {
"description": "true: only venues open right now",
"type": "boolean"
},
"maxVenues": {
"default": 10,
"type": "integer",
"minimum": 1,
"maximum": 25
},
"perVenue": {
"default": 3,
"type": "integer",
"minimum": 1,
"maximum": 5
}
},
"required": [
"query"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢quote_delivery(restaurantId, deliveryAddress, savedLocationId)
The delivery fee, distance and estimated delivery time from one venue to an address or a saved location, with no cart: a quick way to compare venues before building an order. The figure is the same one a draft order then shows. Also says whether the address is inside the venue's delivery area and whether the venue is open now. Needs a connected WaitApp account.
输入模式
{
"type": "object",
"properties": {
"restaurantId": {
"type": "string"
},
"deliveryAddress": {
"description": "Full delivery address. Not needed when savedLocationId is given",
"type": "string"
},
"savedLocationId": {
"description": "The id of one of the person's saved locations (list_saved_locations)",
"type": "string"
}
},
"required": [
"restaurantId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_room_types(restaurantId)
List a venue's bookable room/facility catalog (only entries visible to customers). Use search_venues first to find the restaurantId.
输入模式
{
"type": "object",
"properties": {
"restaurantId": {
"type": "string"
}
},
"required": [
"restaurantId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢check_room_availability(restaurantId, roomFacilityTypeId, checkIn, checkOut)
Check which physical rooms/facilities of a given catalog type are actually free for a date range — real availability, not just that the type exists. Use list_room_types first to get roomFacilityTypeId.
输入模式
{
"type": "object",
"properties": {
"restaurantId": {
"type": "string"
},
"roomFacilityTypeId": {
"type": "string"
},
"checkIn": {
"type": "string",
"description": "YYYY-MM-DD"
},
"checkOut": {
"type": "string",
"description": "YYYY-MM-DD, must be after checkIn"
}
},
"required": [
"restaurantId",
"roomFacilityTypeId",
"checkIn",
"checkOut"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡book_room(restaurantId, roomFacilityTypeId, checkIn, checkOut, guestName, ...)
Submit a stay booking request on behalf of a real guest — check_room_availability shows whether the dates are free; the venue's city/countryCode come from search_venues. This is a REQUEST the venue reviews and confirms (same as a guest booking on the website), not an instant confirmation. No payment is collected by this tool. If the venue takes a deposit, it is requested after the venue confirms the room.
输入模式
{
"type": "object",
"properties": {
"restaurantId": {
"type": "string"
},
"roomFacilityTypeId": {
"type": "string"
},
"checkIn": {
"type": "string",
"description": "YYYY-MM-DD"
},
"checkOut": {
"type": "string",
"description": "YYYY-MM-DD"
},
"guestName": {
"type": "string"
},
"guestPhone": {
"type": "string"
},
"guestEmail": {
"type": "string"
},
"guestCount": {
"default": 1,
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"notes": {
"type": "string"
}
},
"required": [
"restaurantId",
"roomFacilityTypeId",
"checkIn",
"checkOut",
"guestName",
"guestPhone"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_events(restaurantId, limit)
List upcoming, published events (ticketed or free) for a venue, or across all venues if restaurantId is omitted.
输入模式
{
"type": "object",
"properties": {
"restaurantId": {
"type": "string"
},
"limit": {
"default": 20,
"type": "integer",
"minimum": 1,
"maximum": 50
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢check_event_availability(eventId)
Check remaining capacity for a specific event.
输入模式
{
"type": "object",
"properties": {
"eventId": {
"type": "string"
}
},
"required": [
"eventId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢buy_ticket(eventId, quantity, tierId, customerName, customerEmail, ...)
Buy event ticket(s) via mobile money on behalf of a real guest — check_event_availability shows what is left. Initiates a real charge; the guest approves it on their own phone (a prompt appears on the mobileNumber given), the ticket issues once payment confirms. Card payment isn't supported here; check_event_availability returns a cardCheckoutUrl for that.
输入模式
{
"type": "object",
"properties": {
"eventId": {
"type": "string"
},
"quantity": {
"default": 1,
"type": "integer",
"minimum": 1,
"maximum": 20
},
"tierId": {
"type": "string"
},
"customerName": {
"type": "string"
},
"customerEmail": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"mobileNumber": {
"type": "string",
"description": "The guest's own mobile money number — they will need to approve the charge on this phone"
},
"billingCountry": {
"description": "ISO 3166-1 alpha-2, e.g. ZM",
"type": "string",
"minLength": 2,
"maxLength": 2
}
},
"required": [
"eventId",
"customerName",
"customerEmail",
"mobileNumber"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢draft_delivery_order(restaurantId, items, guestName, guestPhone, deliveryAddress, ...)
Drafts a food/drink DELIVERY order without placing it: prices the order from the venue's menu (choices and sides included), finds the delivery address, and returns the items, delivery fee, total, distance and estimated delivery time, WITHOUT placing anything. It returns a draftId, which confirm_delivery_order places; place_delivery_order does both steps and follows the connection's permission setting. Requires the WaitApp account to be connected (the person signs in when adding WaitApp to their AI app). Confirm this venue's city/countryCode (from search_venues) matches where the guest is. Use list_menu_items for item ids and for each item's optionGroups: pass picked choices as selectedOptions (group name + choice name); a group with required=true must be chosen. Give the fullest address you have (street or estate, area, city). Fails clearly if the venue is closed, doesn't deliver, or the address is out of its delivery area.
输入模式
{
"type": "object",
"properties": {
"restaurantId": {
"type": "string"
},
"items": {
"minItems": 1,
"maxItems": 30,
"type": "array",
"items": {
"type": "object",
"properties": {
"menuItemId": {
"type": "string"
},
"quantity": {
"default": 1,
"type": "integer",
"minimum": 1,
"maximum": 50
},
"selectedOptions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"category": {
"type": "string",
"description": "optionGroups name"
},
"choice": {
"type": "string",
"description": "choice name"
}
},
"required": [
"category",
"choice"
]
}
}
},
"required": [
"menuItemId"
]
}
},
"guestName": {
"type": "string"
},
"guestPhone": {
"type": "string",
"description": "The recipient's phone; the rider calls it on arrival"
},
"deliveryAddress": {
"description": "Full delivery address, e.g. 'Plot 12, Foxtale Court, Kawanda Road, Rhodes Park, Lusaka'. Not needed when savedLocationId is given",
"type": "string"
},
"savedLocationId": {
"description": "The id of one of the person's saved locations (see list_saved_locations), used instead of deliveryAddress",
"type": "string"
},
"payment": {
"description": "How the guest pays for the meal. pay_on_delivery: nothing is charged here; they pay the venue/rider on delivery (default where the venue allows it). mobile_money: when the order is confirmed, a payment prompt is sent to mobileMoneyNumber and the guest approves it on their own phone. Some venues require mobile_money. The delivery fee is always paid to the rider on delivery.",
"type": "string",
"enum": [
"pay_on_delivery",
"mobile_money"
]
},
"mobileMoneyNumber": {
"description": "Required for mobile_money: the guest's own mobile money number",
"type": "string"
}
},
"required": [
"restaurantId",
"items",
"guestName",
"guestPhone"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡place_delivery_order(idempotencyKey, restaurantId, items, guestName, guestPhone, ...)
Orders food for delivery in one call. It prices the order, quotes the delivery fee and then either places it or returns a draft, according to the permission the person chose when connecting (get_connection_permissions shows it). With full control it places the order immediately, within the spending limits they set. If they chose to confirm each decision, it places nothing and returns a draft summary with a draftId, which confirm_delivery_order places. Same rules and fields as draft_delivery_order (connected WaitApp account, optionGroups choices as selectedOptions, payment pay_on_delivery or mobile_money). idempotencyKey is required: generate one unique value per order and reuse the SAME value if you retry, so a retry can never create a second order. The venue must still accept the order; follow it with track_order using the returned orderCode.
输入模式
{
"type": "object",
"properties": {
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 100,
"description": "A unique value you generate for this order; reuse it on any retry"
},
"restaurantId": {
"type": "string"
},
"items": {
"minItems": 1,
"maxItems": 30,
"type": "array",
"items": {
"type": "object",
"properties": {
"menuItemId": {
"type": "string"
},
"quantity": {
"default": 1,
"type": "integer",
"minimum": 1,
"maximum": 50
},
"selectedOptions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"category": {
"type": "string"
},
"choice": {
"type": "string"
}
},
"required": [
"category",
"choice"
]
}
}
},
"required": [
"menuItemId"
]
}
},
"guestName": {
"type": "string"
},
"guestPhone": {
"type": "string"
},
"deliveryAddress": {
"description": "Full delivery address. Not needed when savedLocationId is given",
"type": "string"
},
"savedLocationId": {
"description": "The id of one of the person's saved locations (see list_saved_locations), used instead of deliveryAddress",
"type": "string"
},
"payment": {
"type": "string",
"enum": [
"pay_on_delivery",
"mobile_money"
]
},
"mobileMoneyNumber": {
"description": "Required for mobile_money: the guest's own mobile money number; they approve the payment prompt on that phone",
"type": "string"
}
},
"required": [
"idempotencyKey",
"restaurantId",
"items",
"guestName",
"guestPhone"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡confirm_delivery_order(draftId)
Places a drafted delivery order exactly as drafted. A draftId comes from place_delivery_order (when the connection is set to confirm each decision) or from draft_delivery_order. Safe to retry: the same draftId never creates a second order. The venue must accept the order before delivery starts; follow it with track_order using the returned orderCode.
输入模式
{
"type": "object",
"properties": {
"draftId": {
"type": "string"
}
},
"required": [
"draftId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴start_order_payment(draftId, mobileMoneyNumber)
Sends the mobile money payment prompt for a delivery order that has been placed but is not paid yet (the order result says payment is required and gives its draftId). The prompt goes to the guest's own phone and nothing is charged until they approve it there. A prompt already sent is not sent twice. Optional mobileMoneyNumber sends it to a different number than the one given when the order was drafted.
输入模式
{
"type": "object",
"properties": {
"draftId": {
"type": "string",
"description": "The draftId from the order result"
},
"mobileMoneyNumber": {
"description": "Only to use a different mobile money number than the one on the order",
"type": "string"
}
},
"required": [
"draftId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢book_reservation(restaurantId, datetime, guestCount, guestName, guestPhone, ...)
Book a table reservation (not a room/stay — use book_room for that) on behalf of a real guest. The venue's city/countryCode come from search_venues. This is a REQUEST the venue reviews and confirms, not an instant confirmation.
输入模式
{
"type": "object",
"properties": {
"restaurantId": {
"type": "string"
},
"datetime": {
"type": "string",
"description": "Date and time of the reservation, ISO format, e.g. 2026-10-18T12:30. With no timezone offset it is read as the venue's local time. Must be in the future, at least the venue's minimum notice (default 2 hours) ahead, and inside its opening hours (see search_venues openingHours)."
},
"guestCount": {
"default": 2,
"type": "integer",
"minimum": 1,
"maximum": 50
},
"guestName": {
"type": "string"
},
"guestPhone": {
"type": "string"
},
"guestEmail": {
"type": "string"
},
"notes": {
"type": "string"
}
},
"required": [
"restaurantId",
"datetime",
"guestName",
"guestPhone"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢check_service_availability(restaurantId, serviceTypeId, startIso)
Check whether a bookable SERVICE (spa, massage, etc. — a list_room_types entry with kind "service") has a free slot at a specific start time. Real time-slot availability, not date-range like rooms. Use list_room_types first to get the service's id.
输入模式
{
"type": "object",
"properties": {
"restaurantId": {
"type": "string"
},
"serviceTypeId": {
"type": "string"
},
"startIso": {
"type": "string",
"description": "ISO datetime the appointment would start"
}
},
"required": [
"restaurantId",
"serviceTypeId",
"startIso"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢book_service(restaurantId, serviceTypeId, startIso, guestName, guestPhone, ...)
Book a spa/massage-style SERVICE slot on behalf of a real guest — check_service_availability shows free slots; the venue's city/countryCode come from search_venues. Unlike book_room this is an INSTANT confirmation (a real slot is atomically reserved). No payment is collected by this tool — the guest pays at the venue.
输入模式
{
"type": "object",
"properties": {
"restaurantId": {
"type": "string"
},
"serviceTypeId": {
"type": "string"
},
"startIso": {
"type": "string",
"description": "ISO datetime the appointment starts"
},
"guestName": {
"type": "string"
},
"guestPhone": {
"type": "string"
},
"guestEmail": {
"type": "string"
},
"notes": {
"type": "string"
},
"practitionerId": {
"description": "Optional: a specific person from check_service_availability's availablePractitioners. Omit for whoever is free.",
"type": "string"
}
},
"required": [
"restaurantId",
"serviceTypeId",
"startIso",
"guestName",
"guestPhone"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢check_booking_status(restaurantId, bookingCode, phone)
Check the status of a previously submitted booking or order by its code (the bookingCode returned when it was placed, e.g. WA-K4M2, for a table, stay, service or delivery request; a pre-order's code also works). Needs the same restaurantId used to place it and the phone number it was made with (ask the person; no sign-in needed). status 'pending' means the venue hasn't responded yet.
输入模式
{
"type": "object",
"properties": {
"restaurantId": {
"type": "string"
},
"bookingCode": {
"type": "string"
},
"phone": {
"type": "string",
"description": "The phone number the booking or order was made with. Ask the person for it; it is checked together with the code. No sign-in is needed."
}
},
"required": [
"restaurantId",
"bookingCode",
"phone"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_my_orders(limit, before, since, restaurantId, status, ...)
The connected person's own order history at WaitApp venues, newest first. Each order has its venue, code, status, total, type, when it was placed and what was ordered: every item with its quantity, price and chosen choices. Items carry menuItemId and selectedOptions in the form draft_delivery_order accepts, so a past order can be repeated; prices and availability are checked again against the current menu. Deliveries also show the address, delivery fee and stage. A kitchen and a bar order placed together are one entry. Filter by venue, status, text (an item or venue name) or date, and page back with nextBefore. Only ever shows this person's own orders.
输入模式
{
"type": "object",
"properties": {
"limit": {
"default": 10,
"type": "integer",
"minimum": 1,
"maximum": 25
},
"before": {
"description": "Only orders placed before this time. Pass nextBefore from the previous page",
"type": "string"
},
"since": {
"description": "Only orders placed on or after this date, e.g. 2026-09-01",
"type": "string"
},
"restaurantId": {
"description": "Only orders at this venue",
"type": "string"
},
"status": {
"description": "e.g. pending, accepted, preparing, ready, served, cancelled",
"type": "string"
},
"query": {
"description": "An item name or venue name, e.g. burger or Social",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢track_order(orderCode, restaurantId, orderId)
How a delivery is going, for the connected person's own order: the stage, minutes remaining, how far the rider is from the drop-off (km), and the rider's first name. Use it to answer 'where is my food' and 'how far is it'. For non-delivery orders it returns the status only. Never shows the rider's phone or exact location.
输入模式
{
"type": "object",
"properties": {
"orderCode": {
"description": "The order code returned when the order was placed, e.g. WA-K4M2",
"type": "string"
},
"restaurantId": {
"description": "The venue the order was placed at (needed with orderCode if the person has the same code at two venues)",
"type": "string"
},
"orderId": {
"description": "The orderId from list_my_orders",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴cancel_order(orderCode, restaurantId, orderId, reason, confirmed)
Cancel the connected person's own order, under the same rules as the WaitApp website: free while the venue or a rider hasn't started; refused once the rider is collecting or has the food. A paid order is flagged for the venue to review a refund; refunds are never instant or automatic. If the connection is set to confirm each decision, the first call returns what would be cancelled and cancels nothing until a call with confirmed: true. With full control it cancels immediately (at most 3 a day).
输入模式
{
"type": "object",
"properties": {
"orderCode": {
"description": "The order code returned when the order was placed, e.g. WA-K4M2",
"type": "string"
},
"restaurantId": {
"description": "The venue the order was placed at (needed with orderCode if the person has the same code at two venues)",
"type": "string"
},
"orderId": {
"description": "The orderId from list_my_orders",
"type": "string"
},
"reason": {
"type": "string",
"maxLength": 200
},
"confirmed": {
"description": "True records that the person agreed to cancel this order",
"type": "boolean"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡rate_order(orderCode, restaurantId, orderId, food, deliverySpeed, ...)
Leave a rating for the connected person's own DELIVERED order: food quality, delivery speed and packaging, each 1 to 5, an optional short comment, and optionally a rating for the rider. One rating per order; a repeat returns the existing one. The scores are the person's own. If the connection is set to confirm each decision, the first call returns the scores and submits nothing until a call with confirmed: true.
输入模式
{
"type": "object",
"properties": {
"orderCode": {
"description": "The order code returned when the order was placed, e.g. WA-K4M2",
"type": "string"
},
"restaurantId": {
"description": "The venue the order was placed at (needed with orderCode if the person has the same code at two venues)",
"type": "string"
},
"orderId": {
"description": "The orderId from list_my_orders",
"type": "string"
},
"food": {
"type": "integer",
"minimum": 1,
"maximum": 5
},
"deliverySpeed": {
"type": "integer",
"minimum": 1,
"maximum": 5
},
"packaging": {
"type": "integer",
"minimum": 1,
"maximum": 5
},
"comment": {
"type": "string",
"maxLength": 500
},
"riderRating": {
"type": "integer",
"minimum": 1,
"maximum": 5
},
"confirmed": {
"description": "True records that the person agreed to submit these scores",
"type": "boolean"
}
},
"required": [
"food",
"deliverySpeed",
"packaging"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_saved_locations
The connected person's saved delivery locations, such as Home and Work: label, address, notes for the rider, and which one is their default. Pass a location's id as savedLocationId to draft_delivery_order or place_delivery_order instead of typing an address. Only ever shows this person's own.
输入模式
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡save_location(label, address, notes, makeDefault)
Saves a delivery location to the connected person's WaitApp account under a label such as Home or Work, so later orders can use it. Saving a label the person already has updates that location. Up to 10 can be saved. Notes are for the rider, for example a gate code, floor or landmark.
输入模式
{
"type": "object",
"properties": {
"label": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"description": "A short name, e.g. Home, Work, Mum's place"
},
"address": {
"type": "string",
"minLength": 5,
"maxLength": 300,
"description": "Full address: street or estate, area, city"
},
"notes": {
"description": "Gate code, floor, landmark",
"type": "string",
"maxLength": 200
},
"makeDefault": {
"description": "Make this the person's default location",
"type": "boolean"
}
},
"required": [
"label",
"address"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴delete_saved_location(id)
Removes one of the connected person's saved delivery locations. Orders already placed to it are not affected. Use the id from list_saved_locations.
输入模式
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The location id from list_saved_locations"
}
},
"required": [
"id"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_connection_permissions
What the person allowed this connection to do on their behalf: whether delivery orders, cancellations and ratings go through immediately (full control, within the limits they set) or are returned for their agreement first (confirm each decision), plus the limits and what is left today. Also says whether a WaitApp account is connected.
输入模式
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢view_photos(kind, id, maxPhotos)
OPTIONAL. Fetch a small version of the actual photo(s) of a menu item, room/facility type, event or venue so you can look at them and describe them to the guest. Meant for when the guest asks what something looks like. To just show a picture, the imageUrl / photos / coverImageUrl links in the other tools are enough. Returns up to 3 images (resized small) or a note that none exist. Use the id from list_menu_items, list_room_types, list_events or search_venues.
输入模式
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"menu_item",
"room_type",
"event",
"venue"
]
},
"id": {
"type": "string"
},
"maxPhotos": {
"default": 2,
"type": "integer",
"minimum": 1,
"maximum": 3
}
},
"required": [
"kind",
"id"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_preorder_slots(restaurantId, items, method)
For venues that take scheduled pre-orders (bakeries, caterers; list_menu_items marks their items soldAheadOnly): the dates and times an order can be booked for. Pass the items the guest wants (menuItemId and quantity) so each slot is checked against them: lead time (a cake may need days of notice), items not sold on some days, per-slot limits and capacity. First states the venue's schedule in plain words (schedule: e.g. weekdays, order by 08:00, ready at 11:00; weekends only; every day), so you can describe the pattern to the guest, then lists bookable slots soonest first, each with slotInstanceId, when it will be ready (readyAtLocal), the last moment to order (orderByLocal), places left, and payment terms where a deposit or full payment is required; plus unavailable slots with the reason. method is pickup or delivery.
输入模式
{
"type": "object",
"properties": {
"restaurantId": {
"type": "string"
},
"items": {
"default": [],
"description": "The items to book; leave empty to just see the venue's slots",
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"menuItemId": {
"type": "string"
},
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"required": [
"menuItemId",
"quantity"
]
}
},
"method": {
"description": "How the guest will receive it; slots that don't offer it are marked unavailable",
"type": "string",
"enum": [
"pickup",
"delivery"
]
}
},
"required": [
"restaurantId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢draft_preorder(restaurantId, slotInstanceId, items, method, deliveryAddress, ...)
Drafts a pre-order for a time slot, for PICKUP (default) or courier DELIVERY (method: delivery, with deliveryAddress or savedLocationId; the slot must offer delivery and the venue must deliver, and the delivery fee is paid to the rider on delivery) (bakeries, caterers; items marked soldAheadOnly) . Nothing is placed or reserved: it checks the slot against the items (lead time, capacity, items sold that day), prices the order with choices, and returns the summary: slot and ready time, items, total, what is due now and what on collection. Choose the slot with list_preorder_slots (slotInstanceId). Returns a draftId for place_preorder. Requires the connected WaitApp account. payment: on_collection (default; pay the venue when collecting) or mobile_money (the amount due now is paid by a prompt on the guest's own phone); some venues require mobile_money. guestPhone is required: the guest and venue use it to find the order. One slot per order; for different dates make separate orders.
输入模式
{
"type": "object",
"properties": {
"restaurantId": {
"type": "string"
},
"slotInstanceId": {
"type": "string",
"description": "From list_preorder_slots"
},
"items": {
"minItems": 1,
"maxItems": 30,
"type": "array",
"items": {
"type": "object",
"properties": {
"menuItemId": {
"type": "string"
},
"quantity": {
"default": 1,
"type": "integer",
"minimum": 1,
"maximum": 50
},
"selectedOptions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"category": {
"type": "string",
"description": "optionGroups name"
},
"choice": {
"type": "string",
"description": "choice name"
}
},
"required": [
"category",
"choice"
]
}
}
},
"required": [
"menuItemId"
]
}
},
"method": {
"default": "pickup",
"type": "string",
"enum": [
"pickup",
"delivery"
]
},
"deliveryAddress": {
"description": "For delivery: the full address. Not needed when savedLocationId is given",
"type": "string"
},
"savedLocationId": {
"description": "For delivery: one of the person's saved locations (see list_saved_locations)",
"type": "string"
},
"guestName": {
"type": "string",
"description": "Who collects, or receives, the order"
},
"guestPhone": {
"type": "string"
},
"payment": {
"type": "string",
"enum": [
"on_collection",
"mobile_money"
]
},
"mobileMoneyNumber": {
"description": "Required for mobile_money: the guest's own mobile money number",
"type": "string"
}
},
"required": [
"restaurantId",
"slotInstanceId",
"items",
"guestName",
"guestPhone"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪place_preorder(draftId, sendPaymentPrompt)
Places a pre-order drafted with draft_preorder, exactly as drafted: holds the time slot, creates the order and, for a pay-now order, sends the mobile money prompt to the guest's phone. Call it only after the guest has agreed to the draft summary. If the order needs payment now, the guest must also have agreed to the payment prompt: pass sendPaymentPrompt: true then (unless their connection already allows prompts without asking); without that nothing is placed, held or charged and the reply says what to ask. Safe to retry: the same draftId never creates a second order. If anything fails part-way, the slot is released and nothing is charged. Follow the order with track_order using the returned orderCode.
输入模式
{
"type": "object",
"properties": {
"draftId": {
"type": "string"
},
"sendPaymentPrompt": {
"description": "true only if the guest agreed to receive the payment prompt on their phone now",
"type": "boolean"
}
},
"required": [
"draftId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_menu_items(restaurantId, category, query, limit, offset)
List a restaurant's menu items. Call with just restaurantId first to see the category names (and counts), then filter with category and/or query rather than reading the whole menu. Items with choices (sides, sizes, add-ons) list them under optionGroups: when ordering, pass the chosen group and choice names as selectedOptions; a group with required=true must be chosen. Unavailable items are left out. Items marked soldAheadOnly are sold only for a scheduled date (a pre-order with a time slot): they can't be ordered for immediate delivery; use list_preorder_slots to pick a time, then draft_preorder and place_preorder (pickup). Paginate with limit and offset.
输入模式
{
"type": "object",
"properties": {
"restaurantId": {
"type": "string"
},
"category": {
"description": "Only items in this category (case-insensitive), e.g. 'drinks'",
"type": "string"
},
"query": {
"description": "Only items whose name or description contains this text, e.g. 'burger'",
"type": "string"
},
"limit": {
"default": 30,
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"default": 0,
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"restaurantId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}社区
证据