Inspiration
63 million Americans are family caregivers, and many live hours away from the parent they worry about. Amazon's Alexa Together used to help; it was retired in 2024, and Alexa+ rightly forbids add-ons from collecting device or usage data. So we asked: what's the honest version? Care Circle only knows what someone tells it.
What it does
- For the person living alone: "Alexa, tell Care Circle I'm up." A two-second check-in, an optional mood and a short note, in whatever words come naturally ("ugh, rough night, but I'm up"). "What pills do I have this morning?" "I had the diabetes one." "Tell my family I'm off to the library." "Pause sharing."
- For family: "Alexa, ask Care Circle how Mom's doing." Check-in time, mood and how many medicines are logged, but never her private note (that's only on the dashboard). "How was her week?"
- Family can write back: Sarah says "Tell Mom I'll call at 6," and the next time Margaret checks in, Alexa adds: "Sarah left you a message: 'I'll call at 6.'" No new tool, no push notification.
- When something's missing: no check-in by the end of the window plus grace, or a medicine not logged an hour after its time → an email to the family (and an all-clear if she checks in late).
- When something's wrong: words like "I fell" or "chest pain" get "If you're hurt or need help now, call 911" first (988 for self-harm wording), then an immediate email to the family.
- On an Echo Show: an MCP App card shows today's check-in and medicine checklist in large, high-contrast type, with a Log it button that calls the same tool as the voice command.
- A caregiver dashboard to set the window, medicines (names and times only), invite family with 6-digit codes, choose alerts, and read notes and messages.
How we built it
- A self-hosted MCP server (TypeScript, official MCP SDK v2) implementing spec 2025-11-25 over Streamable HTTP, stateless, with JSON responses, also accepting
2025-03-26as Amazon's sample sends. - Exactly 9 tools, each with a zod input and output schema, voice-first descriptions with real phrasings, and one response envelope (speech, then JSON, plus
structuredContent; business errors asisError). - An auth gate that reads the JSON-RPC body before the transport, so a protected tool without a token gets a real HTTP 401 with no
WWW-Authenticate, as Alexa expects; PRM and RFC 8414 metadata; OAuth 2.1 + PKCE +resource+ refresh tokens through Amazon Cognito. - DynamoDB single-table design: every tool needs at most 3 single-partition calls. Measured inside AWS (API Gateway's own metrics): p50 36 ms, p95 62 ms, p99 85 ms one call at a time, and p95 65 ms at 10 at a time, with zero errors. Also: an EventBridge Scheduler sweep and materializer, an SQS + SES notifier with claim-once alerts, and KMS field-level encryption for notes and messages.
- Because the Alexa+ developer tools aren't open to entrants, we built our own Alexa+ simulator that follows Alexa's rules: 401 → protected resource metadata → authorization server metadata (S256) → PKCE with
resource→ retry. It hosts the MCP App card with the ext-apps AppBridge (including tap-to-log) and shows every MCP and OAuth request with status and latency. - In the simulator, an AWS Strands Agents agent plays Alexa+, with the Agent Skill (
SKILL.md) as its prompt and Care Circle's MCP tools. The model is a setting: a local Qwen 3 8B in LM Studio today (our new AWS account is still waiting on Bedrock access), Amazon Bedrock with one switch. Care Circle's deterministic crisis matcher runs before the model, so the 911/988 redirect never depends on what a model decides. - AWS CDK for everything; the API runs in Lambda through the AWS Lambda Web Adapter, so local and cloud run the same server.
Challenges we ran into
- Small models and safety. Qwen answered 12 of 20 crisis phrases ("I have chest pain") itself instead of calling Care Circle, which would have skipped the family email. Once it said "I'll let your family know" without doing it. We put the crisis matcher before the model, made the agent speak Care Circle's own reply, gave the model only the context a pending question needs, and added a 22-phrase "loose wording" test set.
- Cognito's session cookie outlived the app's sign-out, so linking a second persona silently reused the first account. Every link now clears the Cognito session first.
- A brand-new AWS account couldn't call Bedrock or open CloudShell while verification was pending. We measured latency from API Gateway's CloudWatch metrics instead, and logged every friction point.
- The SDK's stateless fallback answered 2025-era clients with SSE, so we route those to a stateless JSON transport. SDK validation errors would have been read aloud, so we validate inside each tool and answer with speakable copy.
- Writing copy that is short and honest ("logged", not "took"; "hasn't checked in", not "is unwell"), and never claims to keep anyone safe.
Accomplishments that we're proud of
- 315 unit tests and 36 MCP contract tests (both protocol versions, every tool, 401 behavior), an auth lifecycle test, and MCP Inspector checks (4/4 against the live AWS endpoint).
- Voice routing: 59/60 standard and 22/22 loose phrasings with the Strands agent; crisis 20/20 redirected, 0/20 false alarms.
- DST tests for both 2026 US changes, a privacy test proving logs never contain notes or tokens, and zero serious accessibility issues on the card, dashboard and simulator.
- Live on AWS with real Cognito account linking and real SES emails.
What we learned
Voice-first design is mostly about saying less, and an honest scope is a feature. With a model in the loop, the safety-critical path has to be deterministic.
What's next for Care Circle
Bedrock as the agent's model once the account clears verification; opt-in reading of messages aloud to family; SMS alerts, a daily digest and vacation mode; and real Alexa+ certification once the developer tools open up.
Care Circle is not an emergency service; in an emergency, call 911. It is not a substitute for professional medical advice.
Built With
- alexa
- amazon-api-gateway
- amazon-bedrock
- amazon-cognito
- amazon-dynamodb
- amazon-eventbridge
- amazon-ses
- amazon-sqs
- aws-cdk
- aws-kms
- aws-lambda
- hono
- lm-studio
- mcp-apps
- model-context-protocol
- node.js
- oauth
- playwright
- qwen
- react
- strands-agents
- typescript
- vite
- vitest
- zod
Log in or sign up for Devpost to join the conversation.