-
-
"What did I miss?" One digest on the Echo Show (an MCP App) with a one-tap approval
-
An unknown "courier" asks for the OTP. The policy engine denies it and flags the call.
-
A verified rider gets directions in Hindi.
-
Approved with one tap. Every action is in the consent ledger.
-
"Alexa, I'm going heads-down for two hours."
-
How it works.
Inspiration
Alexa+ can already order dinner. That isn't where the pain is. The pain starts after checkout.
In an Indian apartment society, one dinner order and two parcels add up to a stream of phone calls. The rider is lost at the gate and asks which tower. The kitchen is out of an item and wants to swap it. The salon is running late and wants to move your appointment. Then a stranger calls, claiming to be a courier, and asks for "the OTP you just got."
Each call is small, but together they wreck an afternoon of deep work, and the last one is a real scam pattern. We wanted Alexa+ to handle all of this the way a good front desk would: answer the calls, follow the household's rules, refuse anything risky, and give one summary at the end instead of nine interruptions.
What it does
FrontDesk is a self-hosted MCP server that turns Alexa+ into the home's front desk.
- Focus mode. "Alexa, I'm going heads-down for two hours." From then on, FrontDesk takes the calls.
- Answers inbound contacts using the household's house rules and the orders and bookings it knows about. It matches the caller's number to an active order and replies in the caller's language; the demo rider speaks Hindi.
- A deterministic policy engine decides every action. The LLM only proposes actions such as
share_directions,accept_substitution,share_otpandreschedule_booking. Code classifies each one as AUTO, NOTIFY, ASK or DENY. An unknown number asking for an OTP is denied and flagged, and the model can't override that. Spending money or moving a booking outside the household's rules is held for approval. - One Focus Digest. "Alexa, what did I miss?" gives one spoken summary plus an MCP App card on the Echo Show, and one tap approves the pending change.
- Consent ledger. Every word FrontDesk says and every action it takes is written to a ledger the household can read.
For brands. handle_inbound_contact is a public MCP tool, so a courier or restaurant can send its message straight to the household's FrontDesk over MCP instead of placing a phone call. This fits the track's "brand experiences via MCP" category.
How we built it
- MCP server in TypeScript on Node 22 with the official
@modelcontextprotocol/sdk, spec 2025-11-25 over Streamable HTTP. It exposes:- 9 tools:
set_focus_mode,get_focus_digest,resolve_approval,handle_inbound_contact,list_expected_deliveries,list_bookings,create_booking,reschedule_bookingandupdate_house_rules. - Resources: the household brief, the consent ledger and
ui://frontdesk/digest.html, an MCP App that renders the digest card on the Echo Show. - Prompts:
heads-downandwhat-did-i-miss. - Elicitation:
reschedule_bookingasks the user for confirmation through the host.
- 9 tools:
- The model's role. Handling a call is two steps on Amazon Bedrock (Claude Haiku 4.5, Converse API):
- Claude proposes structured actions.
- The policy engine decides each one.
- Claude writes the reply in the caller's language, constrained by those decisions.
Because the model writes the reply only after the decisions are made, it can't promise something the policy refused.
- The guardrails are plain functions covered by unit tests: caller verification, OTP and secret rules, a substitution price cap, and a booking time window.
- Alexa+ host simulator. The Alexa+ developer tools are gated for participants, so we built a web simulator with an Echo Show screen, a call panel and a live ledger. The Alexa side is a real MCP client over Streamable HTTP, with SigV4 signing for AgentCore, driven by a Bedrock tool-use loop. It renders MCP Apps through the
ui/*postMessage bridge. - Voices come from Amazon Polly generative voices: Kajal speaks Hindi and English for FrontDesk, and each caller has a distinct voice. Clips are cached on disk.
- State is one DynamoDB item per household, with an in-memory store for local runs.
- Deployment: Terraform builds an ARM64 image, pushes it to ECR and deploys it to Amazon Bedrock AgentCore Runtime with the MCP server protocol, along with a least-privilege IAM role and a $100 budget.
- Judges can run it with no AWS account.
npm install && npm startruns the full demo, with seeded data and an offline mock mode. - The demo video is automated: Playwright drives the simulator like a person would, with a visible cursor and typing, and ffmpeg mixes every Polly clip at the moment it played.
Challenges we ran into
- The Alexa+ developer tools are gated, so there was no way to test against real Alexa+. We built a simulator whose Alexa side is a real MCP client, so the server is exercised exactly as a host would use it, and it works with any MCP host.
- ⟨AWS⟩ Our AWS account was held in verification for most of the build. Every Bedrock model, Amazon's own Nova included, returned
ValidationException: Operation not allowedin every region, and the AgentCore Runtime quota was 0. We spent time debugging IAM, model IDs and SCPs before realising it was the account itself. That pushed us to make offline mock mode a first-class path, and it is what judges run. All of this is in our friction log. (If AWS unblocks, keep the story but end it with: "Once verification cleared, Claude on Bedrock and AgentCore ran on the first try.") - Keeping the LLM out of the decisions. If one prompt both decides and phrases the reply, a polite answer can imply that a refused action was approved. So we split the flow: the model proposes, code decides, and only then does the model write the reply, constrained by those decisions.
- Fitting the demo into 3 minutes. The first take ran 4:35. We tightened the spoken output itself: Alexa now gives the headline and the one question, and the Echo Show card shows the detail.
Accomplishments that we're proud of
- An OTP scam call is refused by code, not by hoping the model behaves, and that rule is unit-tested.
- A natural Hindi conversation with a delivery rider, in a voice that sounds like a person.
- A spec-current MCP server that uses more than tools: resources, prompts, elicitation and an MCP App UI.
- Judges can run the whole thing with one command and no cloud account.
What we learned
- MCP Apps are a natural fit for screen devices: the same server answers by voice and draws the Echo Show card.
- For agents that act on someone's behalf, an approval flow and a readable ledger matter as much as the model's quality.
- Plan for account and quota delays on a new cloud account from day one, and keep an offline path.
What's next for FrontDesk
- A real phone line through Amazon Connect, so calls reach FrontDesk without the simulator.
- A brand-side SDK so couriers and restaurants can message FrontDesk over MCP instead of calling.
- Doorbell and camera events, so FrontDesk can open a smart lock or speak to a courier.
- Running against real Alexa+ once the MCP toolkit opens to developers.
Built With
- amazon-bedrock
- amazon-bedrock-agentcore
- amazon-dynamodb
- amazon-ecr
- amazon-polly
- aws-iam
- claude
- docker
- express.js
- ffmpeg
- html
- javascript
- mcp-apps
- model-context-protocol
- node.js
- playwright
- terraform
- typescript
- vitest
- zod


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