-
-
The simulated Alexa+ experience: an Echo Show for Maya and a phone for Sam, both real MCP clients
-
One change ripples into a ride, a refill and dinner
-
Resolved only on evidence: Sam arrives, and only then does the tournament resolve
-
Context Receipt: Sam gets only what he needs; Maya’s reasons, other events and private notes are withheld
-
The official MCP Inspector against the same server: protocol 2025-11-25, exactly 8 tools
-
Real vs simulated, stated plainly: the server, OAuth and engine are real; the device and connectors are simulated
-
THREAD for Alexa+: don’t lose the thread
-
“What does this change affect?” The tournament and the refill are HIGH; dinner is not affected. Best option: Sam
-
Something changes. THREAD knows what it affects, moves the responsibility, and stays until it’s done. Built with Kiro
-
OAuth enforced: no token gets 401, a service token can’t call tools, and Maya can’t answer Sam’s handoff
-
Sam accepts on his own device with his own OAuth token: the plan is secured, not done
-
Nobody is free for the refill: THREAD offers a pharmacy delivery (simulated), and nothing is ordered until Maya approves
-
Architecture: simulator → MCP server with OAuth → thread-core (open source) → simulated connectors
-
In the code: the official MCP SDK with Streamable HTTP
-
Under the hood: a real JSON-RPC tools/call to /mcp (report_change, 200 in 162 ms)
Inspiration
Life runs on shared commitments: a ride, a refill, a shift, a visit, a delivery. They span people, devices, services and, increasingly, AI agents. When one thing changes, someone has to work out what breaks, who can take over, what that person needs to know, and whether it actually happened. Today that "someone" is a person carrying it all in their head.
Assistants are great at single tasks. Nothing looks after the commitment until it is really kept. We wanted Alexa+ to do that follow-through.
What it does
THREAD is the commitment layer for Alexa+. Ask it the signature question, "What does this change affect?", and it:
- Finds the ripple. It shows which commitments are now at risk and how badly, and also which are fine, so a change doesn't become a household-wide alarm.
- Proposes who should take over, with reasons. It can propose a person, or a service (for example pharmacy delivery) when no one is free.
- Hands off with the least context. The new owner gets only what they need; everything else is withheld and labelled, never leaked. A Context Receipt shows both lists.
- Never confuses "accepted" with "done". Status goes Accepted → Plan secured → Resolved, and only evidence marks something resolved. Anything that spends money waits for an explicit "yes".
- Keeps watching. New signals (rain moves the departure) update the plan and notify the right person.
The demo is a family weekend. Maya can't drive Saturday, so Leo's tournament and Rosa's refill are at risk and dinner is fine. Sam takes the ride on his own phone, a pharmacy delivery covers the refill once Maya approves, and the tournament resolves only when Sam arrives.
But the engine is domain-agnostic. A commitment is just an objective, its responsibilities, and what counts as done. The same engine serves caregivers sharing medication and visits, small teams covering shifts, Alexa+ brands offered at the exact moment a plan breaks, and AI agents handing work to each other without oversharing. The open-source engine already ships examples for a household, a caregiver rota and an agent-to-agent handoff.
How we built it
- A real, self-hosted MCP server. It is built on the official
@modelcontextprotocol/sdk: MCP spec 2025-11-25 over stateless Streamable HTTP, served by Hono.- 8 single-intent tools:
create_thread,list_threads,get_thread,report_change,request_handoff,respond_to_handoff,record_evidence,confirm_action. Each is a 1:1 adapter whose schemas come straight from the engine. - No LLM on the server, so tools are deterministic:
report_changep95 is about 23 ms locally, well under the 500 ms budget.
- 8 single-intent tools:
- Alexa+ auth. An embedded OAuth 2.1 server (ES256, PKCE S256, resource indicators).
- Tier 1 service tokens can only list tools. Tier 2 tokens act as a person.
- Identity always comes from the token, never from what's said, so Maya can't accept Sam's handoff.
- 21 conformance tests cover the Alexa+ auth checklist.
- Thread Lens: an MCP App (
ui://thread/lens) with 10 glanceable views for the Echo Show, plus an Agent Skill that says when to call each tool. - A simulated Alexa+ experience built from real MCP clients: an Echo Show for Maya and a phone for Sam, each signed in with its own OAuth token. An "Under the hood" drawer shows the live JSON-RPC traffic.
- An open-source engine,
thread-core(Apache-2.0, v0.1.0): impact graph, ranking, least-context policy, evidence-based resolution and an event log. It is pure, deterministic and property-tested. The Alexa+ server installs it from the public release. - AWS-ready.
- A CDK stack with Lambda + Function URL (the same MCP server), DynamoDB, SSM and a budget alarm.
- An optional Amazon Bedrock live agent that uses the same 8 tools, with the Agent Skill as its instructions.
npm run synthpasses offline. Not deployed: no AWS account was available before the deadline.
- Built spec-first with Kiro and Kiro Crew.
- Every component started as a Kiro spec (requirements → design → tasks), with steering files and guard hooks: one protects contract files, another refuses to stop while tests are red.
- Kiro Crew ran the build phases unattended overnight, committing and opening pull requests while keeping every gate green.
- Proven, not claimed.
npm run verify(contract checksums, dependency allowlist, secret scan, typecheck, 68 tests) runs in CI on Ubuntu and Windows.- A Playwright test plays the whole story in a browser.
- Official MCP Inspector transcripts are committed in the repo.
npm install && npm run demoworks on a fresh clone with no credentials.
Challenges we ran into
- Errors vs output schemas. The MCP SDK client validates
structuredContentagainstoutputSchemaeven whenisErroris true. Our errors returnisErrorplus text, with nostructuredContent. - No Alexa+ device to test on. We built a simulator that is itself an MCP client, and proved the server independently with the MCP Inspector.
- Autonomous builds need guardrails. Parallel Kiro Crew phases shared one worktree and broke each other's checks. Scoped commits and hard gates kept
maingreen. - Bugs only a real recording exposed. Recording the demo found three UI bugs that the API-level tests missed: the sign-in redirect, an inbox field, and a missing Context Receipt. All are fixed.
- No AWS account in time. The stack is honestly synthesized, not deployed.
Accomplishments that we're proud of
- A new primitive for assistants, the commitment, with privacy by construction (least context) and honest completion (evidence, not a button).
- A spec-current MCP server with OAuth, an MCP App and an Agent Skill, verified by the official Inspector.
- A clean split: a reusable open-source engine plus a thin Alexa+ adapter.
What we learned
- Stateless Streamable HTTP makes an MCP server portable: the same app runs locally and on Lambda.
- Treating schemas as the contract (one zod object for validation and both MCP schemas) removes a whole class of drift.
- Voice needs calm: saying what's not affected matters as much as raising what is.
- Spec-first agentic development works when the gates are mechanical: checksums, allowlists, and hooks that refuse to stop on red.
What's next
- Deploy the stack and submit THREAD as an Alexa+ add-on with live calendars.
- Partner services (pharmacy, grocery, rides) as first-class options behind the same confirm-before-spend and evidence rules.
- More templates on thread-core: caregiving, school logistics, team shifts, agent workflows.
Built With
- alexa
- amazon-bedrock
- amazon-dynamodb
- aws-cdk
- aws-lambda
- aws-ssm
- fast-check
- github-actions
- hono
- jose
- kiro
- kiro-crew
- mcp-apps
- model-context-protocol
- node.js
- oauth2
- playwright
- react
- typescript
- vite
- vitest
- zod
Log in or sign up for Devpost to join the conversation.