Inspiration
In August 2025 a parent wrote in Tom's Guide that Alexa+ read her 10-year-old his own birthday presents when he asked to "show recent orders." That's the problem in one sentence: Alexa+ can now spend money, book rides and unlock doors, but a whole household shares one account, so a child, a guest and a parent all have the same power.
Amazon has paid for this before. In 2017 it agreed to refund up to $70 million in in-app purchases children made without permission, because one parent password unlocked 15 more minutes of buying. Today, 31% of US parents say their kids made online purchases without permission (Talker Research for Achieve, 2025, 2,000 parents).
What it does
Household Guard is an Alexa+ add-on (an MCP server) that puts one family rulebook in front of every action:
- Three answers, never a guess: do it, hold for an adult, or no, each with a plain-English reason.
- Phone taps only where they matter: lights and music are instant. Money and doors need a tap on your own phone, matching a 2-digit number Alexa says.
- A yes that fits: "A $38 ride is over Maya's limit. A shared ride for $14 fits. Want that one?" Savings are tracked every week.
- Approvals locked to one exact item and price that expire in 10 minutes. If the price changes, it asks again.
- A plain-language history: "Maya asked for a $14 ride at 5:02 PM. Allowed: under her weekly limit."
- Rules anyone can edit, with undo.
- ⚠️ Guests: an on/off switch for everyday things, and named guests with an end date.
- ⚠️ Private things stay private: gifts are never read out to kids.
- ⚠️ Try it first: before saving a rule, it shows what would have changed last week.
How I built it
- MCP server in TypeScript (
@modelcontextprotocol/sdk), stateless Streamable HTTP, accepting protocol versions 2025-11-25 and 2025-03-26. - AWS Lambda behind a Function URL, deployed with AWS CDK.
- Cedar (the language behind AWS's own agent policies) makes every decision in well under the 500 ms Alexa+ reply limit. Deny is the default and "forbid" beats "permit".
- DynamoDB conditional transactions reserve spending, so two $15 requests against a $20 limit can't both pass.
- SQS workers handle the slow parts.
- Amazon Bedrock (Claude) runs a risk check that can only tighten a decision, never loosen it. Replies from outside services are treated as data, so a hostile service saying "approved" changes nothing.
- A hash-chained audit log catches any edited history.
- A web MCP client demos it, as the hackathon FAQ allows, alongside MCP Apps screens for approvals.
Challenges
- Alexa doesn't tell add-ons who is speaking, and tokens are per Amazon account, so identity had to come from our side: a phone tap with a matching number, or a PIN for people without phones.
- The 500 ms limit: anything slow returns a job id right away and finishes in the background.
- Rule conflicts: with two "allow" rules, the looser one wins. So limits are single settings that get replaced, never stacked.
What I learned
Most of an agent's safety is boring engineering (fail-closed errors, idempotency, exact-price approvals), not the AI. The AI is most useful where it can only say "wait."
What's next
Our ask to Amazon: let a household attach one rulebook that Alexa checks before calling any add-on. AWS already does this for business agents with AgentCore Policy, in the same Cedar language.
Note: my GitHub account is temporarily restricted, so the code is hosted on a friend's public account: https://github.com/ma0766/household-guard. All code is mine and the commit history is preserved.
Built With
- alexa
- amazon-bedrock
- amazon-dynamodb
- amazon-sqs
- aws-cdk
- aws-lambda
- cedar
- claude
- mcp
- node.js
- playwright
- typescript
- vite
- vitest
Log in or sign up for Devpost to join the conversation.