Inspiration
For many older adults living alone, the front door is the biggest daily worry. Is that a delivery or a stranger? Should I open it? A knock at the wrong time can be frightening, and the people who care about them, family or a hired carer, often can't be there. Doorbell apps help, but they assume you can pick up a phone, find an app and interpret a video clip. We wanted something an elderly person can simply ask out loud, with a caregiver one sentence away.
What it does
Guardian is a voice-first front-door companion for Alexa+, built as a self-hosted MCP server.
- Ask, don't check. "Alexa, who's at the door?" Guardian looks at the front-door camera and answers in plain spoken language, such as "A delivery person is leaving a package on the porch."
- Offers help when it matters. If the visitor looks unfamiliar or unclear, Alexa asks: "Would you like me to send a message to your caregiver?" One "yes" sends it.
- Notices when home goes quiet. Guardian learns the household's normal door activity hour by hour. If a normally busy period is unusually quiet, it can flag that to the caregiver too. Quiet hours (like overnight) are respected, so it doesn't raise false alarms.
- Reaches the right person. The caregiver can be a family member or an appointed carer. They receive a real push notification, with no app account required.
How I built it
- MCP server (TypeScript): a Streamable HTTP server exposing six tools:
get_latest_doorbell_event,describe_door_snapshot,list_recent_door_events,check_household_activity_pattern,notify_caregiver, andguardian_status. It runs statelessly, with a fresh server and transport per request. - Agent gateway: a genuine MCP client that discovers the tools at runtime and runs a Gemini tool-calling loop, with retries and model fallbacks for the free tier.
- Vision: Gemini describes the scene and classifies the visit as delivery, visitor, vehicle or unclear, with a suggested action.
- Anomaly detection: a per-hour baseline of door activity, with thresholds separating "quiet" from "unusually quiet".
- Notifications: ntfy.sh push notifications to the caregiver.
- Voice: a simulated Alexa+ device in the browser, using the Web Speech API for both speaking and listening.
- Open source: MIT licensed, with a README, demo script and friction log.
Challenges I ran into
- Ring access. Ring has no open public API, and its official Partner API needs a verified developer registration. The Ring integration is built behind a switch, but the demo runs on a realistic simulated door-event generator because i had no camera. This is stated openly in the README.
- Model churn on the free tier. Planned Gemini models were retired for new users partway through, and busy periods returned 503 errors. I added a fallback chain so the agent keeps answering.
- Thought signatures. Gemini 3 tool calls must have their reasoning signatures replayed exactly, or the next request fails with a 400. Fixing it meant changing how the agent loop stores each turn.
- Honesty with vulnerable users. For an elderly person, a wrong confident answer is worse than "I'm not sure." Guardian never invents a description of footage it couldn't analyze, and tells the user when the camera couldn't be read.
- Browser voice quirks. Chrome loads voices asynchronously and cuts off long speech, so replies are spoken sentence by sentence.
What we learned
MCP draws a clean line between the assistant and what it can do. Guardian's six tools can be audited at a glance, and any MCP-capable agent can use them. We also learned that designing for older users changes the priorities: short answers, a single yes/no question, a clear spoken confirmation, and never overstating what the camera saw.
What's next
- Connect a real Ring camera through the live integration.
- Replace the simulated device with a native Alexa+ skill.
- Let the caregiver reply by voice message, and add escalation rules if the first caregiver doesn't respond.
Built With
- alexa
- css3
- express.js
- gemini
- google-gemini-api
- html5
- javascript
- mcp
- model-context-protocol
- node.js
- npm
- ntfy
- ring
- typescript
- web-speech-api
- zod
Log in or sign up for Devpost to join the conversation.