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.

  1. Focus mode. "Alexa, I'm going heads-down for two hours." From then on, FrontDesk takes the calls.
  2. 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.
  3. A deterministic policy engine decides every action. The LLM only proposes actions such as share_directions, accept_substitution, share_otp and reschedule_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.
  4. 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.
  5. 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_booking and update_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-down and what-did-i-miss.
    • Elicitation: reschedule_booking asks the user for confirmation through the host.
  • The model's role. Handling a call is two steps on Amazon Bedrock (Claude Haiku 4.5, Converse API):
    1. Claude proposes structured actions.
    2. The policy engine decides each one.
    3. 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 start runs 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 allowed in 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

Share this project:

Updates

Submission history