{"ok":true,"site":{"host":"handrail-fawn.vercel.app","url":"https://handrail-fawn.vercel.app/","type":"live","desc":"An accessible errands app for people with low vision or limited mobility. The agent runs the whole shopping flow through WebMCP tools; the person just says yes.","tools":[{"name":"get_profile","kind":"answer","impl":"imperative","description":"Read the shopper's profile: name, delivery address, accessibility needs, diet, delivery preferences, payment on file, and their 'usuals' (item ids they buy every week). Call this first.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"search_catalog","kind":"answer","impl":"imperative","description":"Search the store by words or tags (e.g. 'sore throat', 'low sodium', 'cat') and optional category (grocery, pharmacy, household). Returns id, name, price, unit, tags.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"query":{"type":"string"},"category":{"type":"string","enum":["grocery","pharmacy","household"]}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_to_cart","kind":"act","impl":"imperative","description":"Add an item (by id or name) with a quantity. Adds to any existing quantity.","inputSchema":{"type":"object","properties":{"item":{"type":"string"},"quantity":{"type":"integer","minimum":1}},"required":["item"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_quantity","kind":"act","impl":"imperative","description":"Set the exact quantity of an item already in the cart (0 removes it).","inputSchema":{"type":"object","properties":{"item":{"type":"string"},"quantity":{"type":"integer","minimum":0}},"required":["item","quantity"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_from_cart","kind":"act","impl":"imperative","description":"Remove an item from the cart.","inputSchema":{"type":"object","properties":{"item":{"type":"string"}},"required":["item"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_cart","kind":"answer","impl":"imperative","description":"Read the cart: every line with quantity and price, subtotal, delivery fee, total, and the chosen delivery slot.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_delivery_slot","kind":"act","impl":"imperative","description":"Choose a delivery window. Accepts a slot id from list_delivery_slots or plain words like 'Tuesday morning'. Windows are morning (9–11), afternoon (1–3), evening (5–7).","inputSchema":{"type":"object","properties":{"slot":{"type":"string"}},"required":["slot"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_delivery_slots","kind":"answer","impl":"imperative","description":"List the available delivery windows for the next six days.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"confirm_with_person","kind":"act","impl":"imperative","description":"REQUIRED before place_order. Shows the person a large on-screen summary (also read aloud) and waits for them to tap or say Yes or No. Pass a short spoken-style summary: items, total, delivery time. Returns 'confirmed' or 'declined'. Do not place the order if declined; ask what to change.","inputSchema":{"type":"object","properties":{"summary":{"type":"string"}},"required":["summary"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"place_order","kind":"transact","impl":"imperative","description":"Place the order for the current cart and delivery slot using the payment on file. Only after confirm_with_person returned 'confirmed'.","annotations":{"destructiveHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_orders","kind":"answer","impl":"imperative","description":"Read recent orders with status (placed, packing, on the way, delivered), items, total and delivery window.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reorder_last","kind":"act","impl":"imperative","description":"Put everything from the most recent order back into the cart.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Commerce","favicon":"/favicons/handrail-fawn.vercel.app.ico","apiSurface":"spec","toolCount":12}}