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

Share this project:

Updates

Submission history