Inspiration
Margaret is 78, lives alone, and has early memory loss. Her daughter Priya lives an hour away and phones every day to ask the same things: did Mum take her pills, did she eat, is anything off? Voice assistants can set reminders, but they don't know whether a step actually happened, what got missed, or how her days really go. DailyAnchor gives Alexa+ that memory, so Alexa+ can be the patient voice.
What it does
DailyAnchor is an MCP server with 11 tools that Alexa+ (or any agent) can call:
- For Margaret: what's next in her routine, checking a step off, "did I already take my pill?", and gentle re-prompts for missed steps that she can snooze instead of being nagged.
- For Priya: a summary of the day (done, missed, still to come), setting up new routines by voice, and changing step times.
- Adapts over time: it looks at completion history and suggests a better time when a step is regularly done late, e.g. moving medication to when she actually takes it.
A live caregiver dashboard shows the same data, and a web simulator plays the Alexa+ role. It has scripted demo beats and a live chat mode where a model connects to the deployed /mcp endpoint over MCP itself, the way Alexa+ would.
How I built it
- Python + MCP SDK (Streamable HTTP), with SQLite for routines and completion history.
- An Agent Skill that tells the assistant how to speak to Margaret (short, calm, one step at a time) and to Priya, and when to confirm before changing anything.
- Bearer-token auth on
/mcp, plus host allow-listing for the public hostname. - Docker on AWS EC2, with Caddy for automatic HTTPS.
- The web simulator is a small JavaScript MCP client in the page. Its tool-call log shows that every fact Alexa+ says comes from a real tool result.
- 63 pytest tests, and validated with a second MCP client (Claude Code).
Challenges I ran into
- No way to connect a self-hosted server to the real Alexa+, so I built a simulation that stays faithful to it: real MCP calls against the live server.
- MCP SDK surprises: a bare
-> dictreturn type silently dropped structured output, and DNS-rebinding protection returned421 Invalid Host headerbehind a public hostname. - AWS App Runner is closed to new customers, so I redid the deployment on EC2 close to the deadline.
What I learned
Designing tools for a voice agent is mostly about what not to return: short, unambiguous facts the assistant can say in one breath, and clear rules for when to ask before acting. For someone with memory loss, the tone matters as much as the data.
What's next
Connecting to real Alexa+ once access opens, notifying Priya when an important step is missed, and supporting many households on one server, each with their own routines and login.
Built With
- alexa
- amazon-ec2
- amazon-web-services
- caddy
- css
- docker
- html
- javascript
- mcp
- model-context-protocol
- openai
- pytest
- python
- sqlite
- starlette
- uvicorn
- web-speech-api
Log in or sign up for Devpost to join the conversation.