Claude can order pizza — including payment authorization.
Riviera turns a restaurant's menu, prices, delivery rules, and order flow into an agent-readable storefront, so AI assistants can quote, authorize payment, and submit real order requests.
This is a technical demo, not a live food delivery service. It is live at riviera-lime.vercel.app.
The pizza moment
The core thing Riviera proves: an AI assistant can go from a customer's request all the way to a captured payment on a restaurant-accepted order, with a real human at the restaurant confirming it before anything is final and a real payment authorization step the customer completes themselves.
Important disclaimers
- This is a technical demo, not a live food delivery service.
- Stripe is running in test mode — no real card is ever charged.
- Merchant approval is still required before any payment is captured.
- Riviera never handles card details directly; Stripe Checkout does.
- MCP never exposes merchant accept/reject links, on either transport.
Live demo endpoints
/openapi.json— riviera-lime.vercel.app/openapi.json/.well-known/agent-commerce.json— riviera-lime.vercel.app/.well-known/agent-commerce.json/llms.txt— riviera-lime.vercel.app/llms.txt- Remote MCP endpoint (Streamable HTTP) — use the full URL including
https://when adding it as a connector: https://riviera-lime.vercel.app/mcp
- Demo restaurants:
tonys-pizza(authorization-first Stripe payment, test mode) andriviera-pizza(pay on delivery). - Merchant acceptance is required before an order is confirmed.
MCP demo
Riviera exposes a customer-agent MCP server with seven tools, over two transports that share the same tool implementations:
- Remote (Streamable HTTP) —
https://riviera-lime.vercel.app/mcp. Any MCP-compatible host that can reach a URL can connect directly, no local process required. - Local (stdio) — for Claude Desktop or Claude Code, run via a local script. See
docs/engineering/mcp-server.mdfor setup.
submit_orderrequires explicit customer confirmation.create_payment_authorizationreturns a Stripe Checkout URL the customer opens themselves — Riviera never asks for card details through MCP.- Merchant action links are not exposed through MCP, on either transport.
- Restaurant acceptance happens separately, through signed merchant links.
Example prompt
Try this with an MCP-connected assistant pointed at Riviera:
See docs/demo/claude-pizza-payment-demo.md for the full step-by-step demo script, including the reject/void path.
For restaurant operators
Riviera sends a clean order request to the restaurant by email — only once payment has been authorized, for restaurants that require it. The restaurant opens a signed link, reviews the order, and accepts or rejects it — no app to install, no dashboard login. Accepting captures the authorized payment; rejecting voids it.
What this is not
- Not a food delivery marketplace.
- Not replacing Deliveroo, Uber Eats, or Just Eat.
- Not live payments — Stripe test mode only.
- Not production-ready for real customer orders yet.
Technical status
- Next.js
- Supabase Postgres persistence
- OpenAPI
- Agent-commerce manifest
- MCP adapter (local stdio + remote Streamable HTTP)
- Signed merchant action links
- Resend email notifications
- Stripe Checkout, authorization-first (test mode)