Kitchen Table
Built for the Alexa+ track: lets the Alexa+ voice assistant act as a household helper by remembering what each member needs (with optional due dates), briefing a speaker on others' open needs with a single yes/no suggestion, listing upcoming errand runs, previewing and confirming proposals to add a need to a run, nudging the other parent, and marking needs done — with nothing written until the user confirms, and results returned as speakable text plus structured content for an MCP Apps board card.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Kitchen TableRemember I need poster board for the science fair on Sunday"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Kitchen Table
One Alexa+ helper for the whole household. It remembers what each person needs, across days and across people, follows up on its own, and confirms before acting.
Built for the Alexa+ track of the Amazon Developer Hackathon "Build, Ship, Shape". An MCP server on Cloudflare Workers with a Durable Object per household, plus an MCP Apps board card.
Watch (2 minutes): https://youtu.be/vGV_YJFv-p8 · Live board: https://kitchen-table-mcp.wolfejam2020.workers.dev/demo · Judges' testing steps: TESTING.md
Before | After Sam says yes |
|
|
The story it satisfies
Thursday, Maya (10): "Tell Kitchen Table I need poster board for the science fair on Sunday."
Friday evening, Sam: "Ask Kitchen Table if there's anything I should know." → "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: "Yes." Nothing is written until this confirmation, in its own turn.
The card updates; the errand list shows poster board "from Maya".
Priya gets a nudge: "Sam added poster board for Maya (Sunday's science fair) to Saturday's 11:30 errand run after soccer."
No purchases are made.
Deed of the week (the opposite of a timeout)
The board names the household member who did the most for someone else this week: "★ Deed of the week · Sam — got Maya's poster board on the run". It is awarded by the server, never claimed or voted on:
No tool gives or claims a deed (a test checks the tool list).
Only helping someone else's need counts, so scheduling your own earns nothing.
One credit per need, so the same need cannot be farmed, and a repeat confirm adds nothing.
The last 7 days count; most deeds wins; a tie goes to whoever reached the count first.
Limit: speaker is simulated in this build, so someone could pass another person's name. With real Alexa voice identification the same rules would hold per person.
Related MCP server: otsukai-mcp
Architecture
Alexa+ (voice simulated in the demo) ─▶ an MCP client
│ MCP Streamable HTTP POST /mcp
▼
Cloudflare Worker src/index.ts
├─ MCP JSON-RPC (src/mcp.ts)
├─ Durable Object "Household" (src/household.ts, SQLite-backed)
├─ domain + six tools (src/domain.ts)
├─ ui://kitchen-table/board card (src/card.ts)
└─ /demo, /demo/state, /demo/log, /admin/resetNo LLM calls inside tools. Every call logs duration_ms; tool-side latency is typically about 25 to 30 ms against the 500 ms Alexa+ limit; an occasional call takes a few hundred ms, and all stay under 500 ms. This build has not been run through a real Alexa+ account or device.
Tools
Tool | What it does | Writes? |
| Remember something a member needs, with an optional due date | yes (own list) |
| Brief the speaker on others' open needs; offers one yes/no suggestion | marks items heard |
| Upcoming errand runs and what's on each (max 5) | no |
| Preview adding a need to a run | no |
| Carry out a confirmed proposal and nudge the other parent | yes |
| Mark a need handled | yes |
Every result has structuredContent plus a speakable content[].text. Errors are isError: true with a short spoken message. Card tools also return _meta.ui.resourceUri = ui://kitchen-table/board.
confirm_proposal refuses to act within 1 s of the question it answers ("Let me check with you first."), so an agent can't ask and confirm in one turn. turn_gap_ms is logged.
For judges: see TESTING.md for a 1-minute, a 5-minute and a test-suite way to check it.
Run locally
npm install
cp .dev.vars.example .dev.vars # set MCP_TOKEN and ADMIN_SECRET
npm run dev # http://127.0.0.1:8787
npm test # starts wrangler dev itself and calls the live /mcpBoard:
http://127.0.0.1:8787/demoInspector:
npx @modelcontextprotocol/inspector→ Streamable HTTP →http://127.0.0.1:8787/mcp, headerAuthorization: Bearer <MCP_TOKEN>Reset between takes:
curl -X POST -H "x-admin-secret: $ADMIN_SECRET" localhost:8787/admin/reset(demo clock). Body{"now":null}uses the real clock;{"now":"<ISO>"}pins a time.
Demo clock
The seed is relative to a pinned clock, Fri 2026-10-23 6:30 PM ET, so "tomorrow" is Saturday whenever you record. Dates resolve in America/New_York.
Deploy
npx wrangler secret put MCP_TOKEN
npx wrangler secret put ADMIN_SECRET
npx wrangler deployDeployed at https://kitchen-table-mcp.wolfejam2020.workers.dev. addon.json points at it; only the icon and carousel image URLs are still placeholders (assets not made yet).
Connecting a client
Any MCP client that speaks Streamable HTTP can use https://<worker-host>/mcp with Authorization: Bearer <token>. The alexa-skill-mcp-bridge is a route to testing through Alexa; we did not run it for this entry (it needs an AWS account with Bedrock access, which was still being verified).
Auth
Simple mode (implemented): a static bearer token from a Worker secret. Demo only.
Unauthenticated
/mcpreturns HTTP 401 with noWWW-Authenticateheader, as the Alexa+ quickstart requires. There is a test.OAuth 2.1 + PKCE S256 (not implemented): the Alexa+ quickstart requires it for real account linking. The hackathon rules ask for a self-hosted MCP server on spec 2025-11-25 over Streamable HTTP, which this is, but this build cannot be linked to a real Alexa+ account. The Worker serves no OAuth endpoints.
Speaker identity is simulated.
speakeris whatever the caller passes. Real Alexa+ voice ID is out of scope, andspeakeris not an authentication boundary.
Limitations
One fictional household (
hh_patel), seeded data, seeded calendar (not a live calendar).No purchases, ever.
The MCP Apps card follows the MCP Apps convention (
text/html;profile=mcp-app, postMessage tool-result) but the quickstart doesn't document the Alexa+ rendering contract. Unverified.Email is not sent. Nudges go to Priya's inbox view on
/demo, and toNOTIFY_WEBHOOK_URLif you set it.
What's new since Aug 31
The whole project.
AI tools used
Claude Code: wrote the server, tests, board card, docs, deploy scripts, the demo helper and the video tooling.
Grok Voice: the synthetic voices in the video: the narrator, Maya, Sam and Alexa. Labelled as simulated on screen.
Kiro CLI: a read-only review of the code and two regression tests it wrote (Accept negotiation, notification 202 with an empty body). Sign-in only worked late on the last night (see the friction log). Its review findings were checked and none was a defect.
Kiro Crew: installed and used for a stranger test of this repo (a fresh clone, then
TESTING.mdfollowed step by step: 26 of 26 tests passed) and for one suggested test, which we discarded as a duplicate of an existing test.Not used: Amazon Bedrock, AgentCore, Strands and Nova. The server makes no model calls at runtime.
Links
Live: https://kitchen-table-mcp.wolfejam2020.workers.dev/demo · Video: https://youtu.be/vGV_YJFv-p8 · Friction log
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
- reefOAuthme.reefwith
Shared, living memory for you and your people — coves your AI assistant can read and write.
Evidence-backed follow-through memory for what you owe, await, and need to remember.
A self-improving memory layer. Your memory, notes, tasks and goals, remembered everywhere.
- NysaOAuthcom.usenysa
Shared memory for teams that work with AI agents: meetings, email and calendar in one brain.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables a household to give a shared Alexa+ assistant consent-scoped memory, where each member's bearer token determines which private, household-shared, and list memories they can read, write, or delete, with an audit log and SQLite+FTS5 search. Identity is enforced by the transport rather than by the model, so a speaker can never leak or alter another member's data regardless of the prompt.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceAllows users to ask family members to pick up items through Alexa+, sending push notifications, and later check whether those errands were completed.MIT
- AlicenseNot gradedqualityCmaintenanceEnables voice agents such as Alexa+ to keep a shared household list and reminders that record who added what and when, apply precise quantity changes instead of wiping lines, flag implausible misheard items for confirmation, keep one-shot reminders separate from open tasks, undo any change, and give each person a digest of what others modified since they last asked.MIT
- AlicenseNot gradedqualityBmaintenanceEnables Alexa+ and other MCP clients to manage a household's shared shopping list, bills, chores, and pantry expiry through natural-language voice interactions. It provides read-only briefings and confirmation-gated updates for recurring household logistics.MIT

