{"ok":true,"site":{"host":"greatwallflorence.com","url":"https://greatwallflorence.com/","desc":"Great Wall Restaurant in Florence, MA — freshly prepared Chinese classics, sushi, and an extensive gluten-free menu. Dine in, take out, or order online.","type":"live","category":"Travel & Events","favicon":"/favicons/greatwallflorence.com.png","tools":[{"name":"get_restaurant_info","kind":"answer","impl":"imperative","description":"Get this restaurant's name, address, phone, whether it is open now, whether online ordering is available, which of pickup/delivery it offers with estimated wait times, and what the customer pays by. Call this first.","title":"Restaurant info","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/menu","/hours","/find-us","/order","/menu/appetizers"]},{"name":"list_menu_categories","kind":"answer","impl":"imperative","description":"List the menu categories available right now, with how many dishes each has.","title":"Menu categories","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/menu","/hours","/find-us","/order","/menu/appetizers"]},{"name":"search_menu","kind":"answer","impl":"imperative","description":"Find dishes by name, description or category, optionally within one category. Returns item ids, prices (per size/variation) and whether the dish has options. Use get_item_details before adding a dish that has options. If the restaurant offers Express (see get_restaurant_info), pass expressOnly to list only Express-eligible dishes.","title":"Search the menu","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Words to match, e.g. 'general tso chicken' or 'spicy'. Omit to list a category."},"categoryId":{"type":"string","description":"Restrict to one category (from list_menu_categories)."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":20},"expressOnly":{"type":"boolean","description":"Only Express-eligible dishes (shorter wait). Only for restaurants that offer Express."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/menu","/hours","/find-us","/order","/menu/appetizers"]},{"name":"get_item_details","kind":"answer","impl":"imperative","description":"Get one dish's sizes/variations and its option groups (which are required, how many choices are allowed, the default, and each option's extra price). Required groups without a default must be answered in add_to_cart.","title":"Dish details","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"itemId":{"type":"string"}},"required":["itemId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/menu","/hours","/find-us","/order","/menu/appetizers"]},{"name":"add_to_cart","kind":"act","impl":"imperative","description":"Add a dish to the customer's cart. If the dish has more than one size, pass variationId. Pass selections for option groups ([{ groupId, optionIds }]); groups you don't mention keep their default. Required groups without a default must be answered. Prices are computed by the restaurant's server. Returns the updated cart.","title":"Add to cart","inputSchema":{"type":"object","properties":{"itemId":{"type":"string"},"variationId":{"type":"string","description":"Required when the dish has more than one size/variation."},"quantity":{"type":"integer","minimum":1,"maximum":50,"default":1},"selections":{"type":"array","items":{"type":"object","properties":{"groupId":{"type":"string"},"optionIds":{"type":"array","items":{"type":"string"}}},"required":["groupId","optionIds"],"additionalProperties":false}},"note":{"type":"string","maxLength":200,"description":"Special request for the kitchen, e.g. 'no onions'."}},"required":["itemId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/menu","/hours","/find-us","/order","/menu/appetizers"]},{"name":"get_cart","kind":"answer","impl":"imperative","description":"Get the current cart: each line (with its lineIndex), quantities, chosen options, notes, line totals and the subtotal.","title":"View cart","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/menu","/hours","/find-us","/order","/menu/appetizers"]},{"name":"update_cart_item","kind":"act","impl":"imperative","description":"Change the quantity of a cart line (lineIndex from get_cart). Quantity 0 removes the line.","title":"Change quantity","inputSchema":{"type":"object","properties":{"lineIndex":{"type":"integer","minimum":0},"quantity":{"type":"integer","minimum":0,"maximum":50}},"required":["lineIndex","quantity"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/menu","/hours","/find-us","/order","/menu/appetizers"]},{"name":"remove_cart_item","kind":"act","impl":"imperative","description":"Remove a line from the cart (lineIndex from get_cart).","title":"Remove from cart","inputSchema":{"type":"object","properties":{"lineIndex":{"type":"integer","minimum":0}},"required":["lineIndex"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/menu","/hours","/find-us","/order","/menu/appetizers"]},{"name":"set_fulfillment_method","kind":"act","impl":"imperative","description":"Choose pickup or delivery (only methods the restaurant offers; see get_restaurant_info). The delivery address is entered by the customer at checkout.","title":"Pickup or delivery","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["pickup","delivery"]}},"required":["method"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/menu","/hours","/find-us","/order","/menu/appetizers"]},{"name":"start_checkout","kind":"transact","impl":"imperative","description":"Open the checkout screen with the current cart. Then use the checkout tools (set_contact_details, set_delivery_address, send_verification_code / verify_phone_code, set_payment_method, place_order), or let the customer finish on screen. Card payment is always entered by the customer.","title":"Go to checkout","annotations":{"consequentialHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/menu","/hours","/find-us","/order","/menu/appetizers"]},{"name":"get_checkout_status","kind":"answer","impl":"imperative","description":"What the open checkout still needs before the order can be placed: contact fields, delivery address state, phone verification, payment method, total, and the blocking reason shown on the Place order button.","title":"Checkout status","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/menu","/hours","/find-us","/order","/menu/appetizers"]},{"name":"set_contact_details","kind":"act","impl":"imperative","description":"Fill the customer's name, phone and email on the open checkout (only what you pass changes). Use the customer's real details, with their permission. The email gets the receipt.","title":"Contact details","inputSchema":{"type":"object","properties":{"name":{"type":"string","maxLength":80},"phone":{"type":"string","description":"US phone number, e.g. 413-555-0123."},"email":{"type":"string","format":"email"}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/menu","/hours","/find-us","/order","/menu/appetizers"]},{"name":"set_delivery_address","kind":"act","impl":"imperative","description":"For delivery orders: fill the address and run the same check the customer's Confirm button does (address lookup, delivery zone, distance). Returns status valid, outside (with distance and max), unavailable, or unverifiable (the address couldn't be verified; only call confirm_unverified_address if the customer says to deliver there anyway).","title":"Delivery address","inputSchema":{"type":"object","properties":{"street":{"type":"string"},"apt":{"type":"string","description":"Apartment / suite, if any."},"city":{"type":"string"},"state":{"type":"string","description":"Two-letter state, e.g. MA."},"zip":{"type":"string"},"notes":{"type":"string","description":"Instructions for the driver."}},"required":["street","city","state","zip"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/menu","/hours","/find-us","/order","/menu/appetizers"]},{"name":"confirm_unverified_address","kind":"act","impl":"imperative","description":"Only after set_delivery_address returned unverifiable AND the customer confirmed the address is right: accept it as typed (the same as the customer tapping 'Deliver here anyway').","title":"Deliver here anyway","annotations":{"consequentialHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/menu","/hours","/find-us","/order","/menu/appetizers"]},{"name":"send_verification_code","kind":"transact","impl":"imperative","description":"Pay-in-person pickup orders need the phone verified: this texts a code to the phone on the checkout. Ask the customer to read you the code, then call verify_phone_code. Returns not_required when no verification is needed.","title":"Text a verification code","annotations":{"consequentialHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/menu","/hours","/find-us","/order","/menu/appetizers"]},{"name":"verify_phone_code","kind":"act","impl":"imperative","description":"Enter the code the customer received by text message.","title":"Enter verification code","inputSchema":{"type":"object","properties":{"code":{"type":"string","minLength":3,"maxLength":10}},"required":["code"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/menu","/hours","/find-us","/order","/menu/appetizers"]},{"name":"set_payment_method","kind":"act","impl":"imperative","description":"Choose pay in person (pay at pickup or to the driver). Agents can't choose or enter card payment; for card, the customer completes payment in the card form on screen.","title":"Pay in person","inputSchema":{"type":"object","properties":{"method":{"type":"string","enum":["pay_in_person"]}},"required":["method"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/menu","/hours","/find-us","/order","/menu/appetizers"]},{"name":"place_order","kind":"transact","impl":"imperative","description":"Place the order (pay in person only). Before calling, confirm the cart, pickup/delivery and total with the customer. Fails with the same reason the Place order button shows if anything is still missing. Returns the order id on success.","title":"Place order","annotations":{"consequentialHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/menu","/hours","/find-us","/order","/menu/appetizers"]}],"apiSurface":"spec","toolCount":18}}