A single order tool with a confirm parameter would be a flag the model fills; a preview that must be read first at least puts the total and the delivery window in front of someone before the irreversible call. Whether an agent should hold this at all is a separate decision, and the login flow handing a URL to the user rather than taking credentials is the right side of that line. The price comparison across stores is the genuinely useful capability here — the same basket varies meaningfully between stores and nobody checks, because checking means repeating the search five times.
An Instacart shopping client covering the whole path from session to placed order: login, search, cart building, store comparison, preview and checkout.
- instacart_place_order states in its own description that confirm should be set true only with explicit user agreement — the guard is in the tool text rather than assumed.
- instacart_preview_order shows the cart summary and delivery window before anything is committed, which is the step that makes the confirmation meaningful.
- instacart_compare_prices checks a product across all available stores near you, which is the comparison nobody does by hand.
- Cart operations are complete: add a product by search, view contents with quantities and totals, and clear it.
- Session handling as its own group — check status, initiate a login flow that returns a URL for the user to complete, and log out clearing cookies.
- instacart_set_address sets the delivery location, and instacart_stores lists what serves it.
An Instacart account, authenticated through a login flow the user completes in a browser. Placing an order spends real money on a saved payment method.
One command — npx -y @striderlabs/mcp-instacart
