-
-
The auto shop's day as an MCP App on a large screen, right after the voice demo
-
The setup draft Nova 2 Lite wrote for the flower shop, shown as an MCP App before the owner says yes
-
Last week's sales against the week before, as an MCP App
-
A new flower shop set up and used by voice in the Alexa simulator, against the deployed server
Inspiration
A mechanic under a car and a florist with an armful of roses have the same problem: the system that runs their shop is on a computer across the room. Their businesses look nothing alike, but they share a shape: orders that move through steps, items that get used up, a payment at the end. If one engine understood that shape, Alexa+ could run any of them by voice.
What it does
Try it live, nothing to install: the judges' demo (Chrome for the microphone).
Counterpart is a self-hosted MCP server for any small business that runs on orders: an auto repair shop, a bakery, a flower shop. The owner talks to Alexa: "What's waiting on parts?", "Add front brake pads to the blue sedan", "Close out the silver crossover, they paid by card". Each business gets nine tools named in its own vocabulary (open_work_order for the shop, take_cake_order for the bakery), plus MCP Apps that show the day, the sales report and a new business's draft on screen devices.
A new business doesn't need code. It can be a data package (a profile and a catalog), or it can be set up by voice: "I run a flower shop. We take orders for bouquets and centerpieces…". Counterpart drafts the order steps and a catalog with Amazon Nova 2 Lite on Bedrock, reads back a summary, shows the draft on screen, and turns it on only after the owner says yes. From the next sentence on, the same conversation uses the new business's tools: "Take an order for Maria Lopez, a dozen roses for Friday."
How we built it
- MCP server in TypeScript (MCP 2025-11-25, Streamable HTTP), one McpServer per session bound to the business behind its bearer token. Deployed on Amazon ECS Express Mode with Amazon DynamoDB (one table, atomic multi-item writes), per-business tokens in AWS Secrets Manager, logs in CloudWatch.
- Voice-first tools: every reply is one or two sentences meant to be spoken; tools accept spoken references ("the blue sedan", "Dana's") and ask "which one?" on ties; writes that a retry could repeat are idempotent.
- Setup assistant: Nova 2 Lite with forced tool use; the tool's JSON schema comes from the same zod schemas the server validates with. Layered validation, one repair pass, deterministic fixes for what the model keeps getting wrong, background generation (a draft takes longer than an Alexa turn), and a server-side rule that nothing is activated without a human "yes".
- MCP Apps for the snapshot, the sales report and the setup draft, with a large-screen layout for Echo Show-class devices.
- Voice path: the Alexa+ MCP toolkit isn't public yet, so we used the open-source
alexa-skill-mcp-bridge(an Alexa Skill plus a Strands agent on Amazon Bedrock AgentCore, Nova 2 Lite picking the tool). Our fork refreshes the agent's tools ontools/list_changed, starts each Alexa session with a clean history, reconnects when the server forgets a session, and can keep the session open after statements. - Agent Skill:
skills/counterpart/SKILL.mdteaches any agent how to use the tools by voice (pass the owner's words as said, ask "which one?", charge only with the payment method the owner gave, one setup step per turn). A test fails if it names a tool the server doesn't expose. - Live demo for judges: a page shaped like an Echo Show where you talk or type to your own copy of the businesses. A Nova 2 Lite agent reads the Agent Skill as its instructions and calls the real MCP tools on AWS, and Amazon Polly speaks the replies; each visitor gets a 24-hour sandbox, with caps that bound the spend.
- Quality and evidence: 385 automated tests; golden phrases score 22/22 (auto shop) and 23/23 (bakery) on Nova 2 Lite. Measured on AWS: business tools answer in 48 ms median and 294 ms p95, and a voice turn costs about $0.0027 of Nova 2 Lite. The demo video was recorded end to end by voice in the Alexa developer console simulator against the deployed system.
Challenges we ran into
- The bridge built its agent once per warm AgentCore container, keyed by user, so a business that changed its tools mid-conversation kept offering the old ones, even after reopening the skill. Fixed in the fork.
- Nova sometimes activated a setup on its own, a second after showing it. The server now refuses an activation nobody had time to confirm.
- The bridge hands the model the tool's structured JSON, not its text, so spoken instructions had to live in the JSON too.
- Recording by voice: the developer console simulator sent Alexa silence from any microphone, because its recorder keeps references to a reused audio buffer. A small page script works around it. The full list is in our friction log.
What we learned
- Design tools for how people talk, not for how databases store things: spoken references, short answers, safe retries.
- When a model keeps making the same mistake, fix it deterministically in code instead of fighting it in the prompt.
- A human "yes" belongs on the server, not in the prompt.
What's next
Publish Counterpart as a real Alexa+ add-on as soon as the Alexa+ MCP toolkit is public (one skill for every business instead of one per business), and let owners edit an active business by voice: new steps, new prices.
Built With
- alexa
- amazon-bedrock
- amazon-cloudwatch
- amazon-dynamodb
- amazon-ecs
- amazon-nova
- aws-lambda
- aws-secrets-manager
- bedrock-agentcore
- mcp-apps
- model-context-protocol
- node.js
- strands-agents
- typescript
- vitest
- zod
Log in or sign up for Devpost to join the conversation.