{"ok":true,"site":{"host":"shopfront-copilot.vercel.app","url":"https://shopfront-copilot.vercel.app/","type":"live","desc":"A storefront where a shopper and their AI agent browse, compare, and buy together, with a human-only checkout confirmation.","tools":[{"name":"search_products","kind":"answer","impl":"imperative","description":"Search the product catalog by keyword. Matches product names, descriptions, categories, and spec fields. Read-only: does not change cart or page state.","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search keywords, e.g. 'wireless headphones' or 'mechanical keyboard'."}},"required":["query"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/shop"]},{"name":"apply_filters","kind":"answer","impl":"imperative","description":"Filter the product catalog by price range, category, and minimum rating. Read-only: does not change cart or page state. All fields are optional and bounded (enumerated category, numeric ranges); no free-text input.","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"minPrice":{"type":"number","minimum":0,"description":"Minimum price in USD."},"maxPrice":{"type":"number","minimum":0,"description":"Maximum price in USD."},"category":{"type":"string","enum":["headphones","keyboards","smart-home"],"description":"Restrict results to a single category."},"minRating":{"type":"number","minimum":0,"maximum":5,"description":"Minimum star rating (0-5)."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/shop"]},{"name":"check_return_policy","kind":"answer","impl":"imperative","description":"Return the return/warranty policy text for a single product, exactly as shown on its product page. First-party content, not user-generated.","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"productId":{"type":"string","description":"The product ID to look up."}},"required":["productId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/shop"]},{"name":"get_product_details","kind":"answer","impl":"imperative","description":"Return the full record for a single product by ID: specs, price, rating, return policy, stock, and description. Read-only. Use this before add_to_cart when the agent only has a product name from search results and needs the full record.","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"productId":{"type":"string","description":"The product ID to look up."}},"required":["productId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/shop"]},{"name":"get_cart","kind":"answer","impl":"imperative","description":"Read the current contents of the shared cart, the same cart the shopper sees in the page's cart drawer. Read-only.","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/shop"]},{"name":"compare_products","kind":"act","impl":"imperative","description":"Compare 2-4 products by ID, spec by spec. Renders a real comparison table inline on the storefront page (not just returned as text) so the shopper sees the same comparison the agent is reasoning about. Read-only with respect to the cart.","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"productIds":{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":4,"description":"2 to 4 product IDs to compare."}},"required":["productIds"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/shop"]},{"name":"add_to_cart","kind":"act","impl":"imperative","description":"Add a product to the shared cart. Reversible: remove_from_cart undoes this. Updates the same cart the shopper sees in the page's cart drawer; does not charge anything.","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"productId":{"type":"string","description":"The product ID to add."},"quantity":{"type":"integer","minimum":1,"description":"Quantity to add (default 1)."}},"required":["productId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/shop"]},{"name":"remove_from_cart","kind":"act","impl":"imperative","description":"Remove a product from the shared cart. Reversible: add_to_cart undoes this. Updates the same cart the shopper sees in the page's cart drawer.","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"productId":{"type":"string","description":"The product ID to remove."}},"required":["productId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/shop"]},{"name":"track_price_drop","kind":"answer","impl":"imperative","description":"Register a price-drop watch on a product. Low-stakes and reversible: the shopper can unwatch it from the product page. Does not affect the cart or complete any purchase.","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"productId":{"type":"string","description":"The product ID to watch."}},"required":["productId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/shop"]},{"name":"checkout","kind":"act","impl":"imperative","description":"Begin checkout for the current cart. This tool DOES NOT complete a purchase and DOES NOT charge anything. It opens an in-page confirmation modal that only the shopper can act on, completing the order requires the shopper's own click inside that modal. This call always returns status \"confirmation_required\"; there is no way to finalize the purchase through this or any other tool.","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/shop"]},{"name":"ask_human","kind":"act","impl":"imperative","description":"Ask the shopper a clarifying question inline on the page (e.g. \"Wired or wireless?\", \"What's your budget cap?\") and wait for their answer. Optionally provide a small set of suggested options. Does not mutate cart or session state, it only pauses for human input.","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"question":{"type":"string","description":"The question to show the shopper."},"options":{"type":"array","items":{"type":"string"},"maxItems":5,"description":"Optional short list of suggested answers to show as buttons."}},"required":["question"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/shop"]}],"category":"Commerce","favicon":"/favicons/shopfront-copilot.vercel.app.ico","apiSurface":"spec","toolCount":11}}