-
-
Barrio: every small business gets its own MCP server, all behind one Alexa+ add-on.
-
The Echo Show cards (MCP Apps): free times you can tap, the menu, allergens and the booking confirmation.
-
The same cards switch to a phone layout on mobile.
-
Onboarding from a photo: snap the paper menu, review the dishes, publish. Allergens are always declared by the owner.
-
The owner's dashboard: bookings made through the assistant arrive tagged "via Alexa+", with a calendar feed for their phone.
Inspiration
In my town, Écija (Spain), my barber takes bookings on his phone between haircuts, and my dad answers the phone at his Tex-Mex restaurant during the dinner rush. They'll never hire a developer — and they'll certainly never get an Alexa+ add-on through a store listing and certification. I wanted the smallest possible step between "a business with a phone number" and "a business Alexa+ can talk to".
What it does
The owner fills in a short form — or takes a photo of the paper menu — and Barrio gives the business its own MCP server. Customers ask Alexa+ about prices and dishes, check free times and book or cancel by voice; on an Echo Show they see the business's own cards (free times they can tap, dish details with clear gluten/allergen notes, the booking confirmation). Bookings appear in the owner's dashboard and in the calendar on their phone.
And because no small business will certify its own add-on, Barrio also exposes a directory endpoint: one MCP server — one Alexa+ add-on — in front of every business on the platform. "Alexa, ask Barrio for a haircut at La Familia tomorrow."
It's seeded with the published services, menu and prices of two real businesses in Écija, used with their owners' permission — Restaurante El Rancho, my dad's restaurant, and Peluquería La Familia, the barber I go to (I built his website). It's a demo: bookings made here aren't sent to them.
How I built it
- Following the Alexa+ MCP Toolkit docs: Streamable HTTP (2025-11-25; also negotiates 2025-06-18 and 2025-03-26, which Alexa+'s client sends),
outputSchema+structuredContenton every tool, "still working" messages, tool annotations, ~5–10 ms server time with a read-through cache and region pinning, optional OAuth 2.1 with RFC 8414/9728 metadata, privacy/terms pages, and every store asset at Amazon's sizes — generated from code. - A real MCP client in the simulator: the simulated Alexa+ (a Claude agent) connects to the business's public endpoint over Streamable HTTP —
initialize,tools/list,tools/call,resources/read— exactly as the track's FAQ describes for the simulated path. Every reply shows its MCP calls. - MCP Apps for Echo Show: a ~26 KB self-contained card (768×480 base canvas, Amazon's card tokens, light/dark, English or Spanish from the host locale, fitted to Echo Show 8 and 15) linked from every tool. When a question could mean two things, the card shows the options to tap. The simulator and a public "screens" page render it with the official MCP Apps host, so judges can see exactly what an Echo Show would show.
- Designed for voice: "tomorrow", "el próximo viernes", "5:30pm", "half past five"; "anything free after five?" narrowed on the server, so the model never filters a long list of times itself; English aliases for Spanish services ("beard trim" → Arreglo de barba); ambiguous requests ("ensalada", "tacos with guacamole") ask instead of guessing; references without look-alike characters; alternatives on both sides of a lunch break; a retried request never books twice.
- No double bookings: a Postgres function with a per-business advisory lock re-checks capacity (the peak number of tables in use), the per-phone limit and an hourly ceiling against booking floods.
- Honest about allergens: gluten-free only when the restaurant says so; undeclared allergens → "ask the staff". Menu photo import never extracts allergens.
- Owner tools: photo/text menu import with review, split-shift hours, calendar subscription, email alerts, customer confirmation emails with a self-cancel link, 12-month data retention.
Challenges
- Finding the real Alexa+ requirements (they're in the toolkit docs, not the hackathon page) and rebuilding against them.
- Getting the MCP Apps view from 520 KB to ~26 KB without breaking compatibility with the official host.
- Things that only break against the real world: the current Sonnet model rejects a forced tool choice (the menu import had to move to structured outputs), Supabase returns at most 1,000 rows per request, and a US evening is already tomorrow in Spain.
- Stateless Streamable HTTP on serverless, and booking rules that survive real life: lunch breaks, closing time, DST, 100 people asking for the same slot.
Accomplishments
- 335 automated tests + a real-Postgres concurrency test (21 checks) + 71 browser checks in CI, plus 11 Supabase integration tests: protocol compliance, 100-customer races, 3,000 fuzzed calls with hostile input (zero 5xx).
- Three review rounds — the last one split by area (protocol, security, database, AI integration, Echo Show design, Amazon's docs). Findings like "tacos with guacamole" getting the guacamole's gluten-free answer, or a visitor's test business named "La Familia" receiving the real shop's bookings; every one fixed with a regression test.
- Live deployment, measured from Spain: sequential MCP round trips p50 150 ms / p95 222 ms (well under the 500 ms budget Alexa+ sets for its strictest add-on category); 2,000 calls with 100 concurrent clients, 0 errors. Locally: p50 6 ms.
What I learned
MCP turns "integrate with a voice assistant" into "describe your business well". Most of the work was making tool descriptions, errors and cards useful to a model talking to a person — and making sure it never makes things up.
What's next
Text-message confirmations, staff-level availability (several barbers with their own schedules), Google Business Profile import, and onboarding more businesses in Écija.
Built With
- claude
- mcp-apps
- model-context-protocol
- next.js
- oauth
- playwright
- postgresql
- react
- streamable-http
- supabase
- tailwindcss
- typescript
- vercel
- vitest
- web-speech-api

Log in or sign up for Devpost to join the conversation.