Inspiration
Households run on small asks that never reach the right person. A kid mentions poster board for the science fair on Thursday. By Friday evening, the parent heading out on the weekend errand run has no idea. We wanted one Alexa+ helper that remembers what each person needs, across days and across people, and tells the right person at the right time.
What it does
Kitchen Table is an Alexa+ add-on with one shared memory for the household. Maya says she needs poster board for Sunday's science fair. On Friday evening her dad, Sam, asks, "Anything I should know?" and hears: "Soccer AM is at 9 AM tomorrow. One more thing: Maya needs poster board for Sunday's science fair. Want me to add it to the 11:30 errand run after soccer?" Sam says yes. Only then does anything change: the errand list gets the poster board tagged "from Maya", and Priya, the other parent, is nudged.
It is more than a to-do list. State persists across days and people. It speaks only to what the listener has not heard yet, ranks by due date, ties a need to the calendar, and asks before it acts. The confirm step is enforced in the server: a confirm that arrives within a second of the question it answers is refused, so an agent cannot ask and approve in the same turn.
The board also names a "Deed of the week": whoever did the most for someone else this week. The server awards it from confirmed actions. It cannot be claimed or voted for. Helping yourself earns nothing, and each need counts once.
How we built it
- A remote MCP server on Cloudflare Workers, implementing MCP spec 2025-11-25 over Streamable HTTP (it also answers the 2025-06-18 and 2025-03-26 handshakes).
- One SQLite-backed Durable Object per household holds needs, errands, the calendar and history, so a confirm can never apply twice.
- Six tools, each with one intent: add_need, whats_new_for_me, list_errands, propose_add_to_errand, confirm_proposal, mark_done.
- Every result carries structuredContent plus a speakable text copy; errors are short spoken messages.
- An MCP Apps board card is served as a ui:// resource and at a live /demo page.
- Unauthenticated requests get 401 with no WWW-Authenticate header, as the Alexa+ quickstart requires.
- 26 tests start a local server and call its /mcp: protocol versions, auth, the full story, idempotent confirm, the confirm guard, the Deed rules and latency.
- Tool calls typically take about 25 to 30 ms against the 500 ms limit; an occasional call takes a few hundred ms, and all stay under it.
Challenges we ran into
- The quickstart is clear on transport and auth but silent on the tool-result shape, MCP Apps rendering and speech limits, and it lists WWW-Authenticate as "not supported yet" while still requiring OAuth discovery. We logged each gap in the friction log.
- Making "confirm before acting" a property of the server, not a hope about the agent.
- Voices: our first narration was recorded line by line and varied from line to line. Generating every voice in one batch with fixed settings (Grok Voice) fixed the consistency.
- AWS account identity verification and the Kiro sign-in blocked the AWS tools for most of a one-day build. Kiro CLI only worked late on the last night, so our Kiro use is small.
Accomplishments that we're proud of
A spec-conformant, tested, live MCP server; a confirm guard that holds under test; and a demo that is honest about what is real and what is simulated.
What we learned
Document the tool-result shape early. A small server can carry a surprising amount of household state if the memory is strongly consistent. And plain labels ("voice simulated, server real") are worth more than polish.
What's next
OAuth 2.1 with PKCE for real account linking, real voice identification from the platform, a live calendar, and notifications beyond the in-app inbox.
What is real and what is simulated
Real: the server, the household state, the confirm guard, the board card and the tests. Simulated: the voices (all synthetic, made with Grok Voice) and the speaker identity. This build has not been run through a real Alexa+ account or device. The two working-software segments in the video replay real output captured from the live server, timed to the narration.
Built With
- alexa
- claude-code
- cloudflare-workers
- durable-objects
- grok-voice
- kiro
- mcp
- mcp-apps
- model-context-protocol
- typescript

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