A caretaking check-in companion built for a simulated Alexa+ experience — Amazon Developer Hackathon 2026, Alexa+ track.
The one rule it never breaks: it will not tell your family anything without asking you first.
- Try it: https://askfirst-host.shaifulshabuj.workers.dev/
- MCP server: https://askfirst-mcp.shaifulshabuj.workers.dev/
A check-in companion for someone being cared for (e.g. an aging parent), and the family member who worries about them — but the care recipient is the one who talks to it, and the care recipient is the one who decides whether their family gets told anything.
- The person checks in by voice/chat whenever they want ("I'm doing fine today").
- If asked to notify a family contact, the agent never sends anything directly — it drafts the exact message first and shows it, unsent, for confirmation.
- Only on an explicit approval does anything leave the system — a real email to the family contact.
- The family member can ask for a plain-language weekly summary of check-ins, generated by AI — never raw data, never anything the care recipient didn't already choose to share.
This is not inferred from device or motion data, and it makes no health or symptom claims — purely explicit, schedule-based check-ins. Keeps it in reminder/companionship territory, not surveillance or medical-device territory.
A tool that could both draft and send in one call can't be trusted not to send. The split is what
makes "ask first" structurally true rather than a prompt-engineered promise: send_notification
only ever acts on a proposal_id an earlier propose_notify call created, and the host's agent
loop intercepts any attempted send unconditionally — regardless of what the model decides — until a
human clicks Approve. The gate is in the code, not in the prompt.
mcp-server/ the real MCP server — Streamable HTTP, MCP spec 2025-11-25
tools:
check_in WRITE, free — self-report, no confirmation needed
get_status READ — last check-in, streak, missed?
list_contacts READ — who could be notified
propose_notify WRITE, gated — drafts a message, returns it unsent with a proposal_id
send_notification WRITE — only acts on an existing proposal_id; sends real email via Resend
weekly_summary READ — Cloudflare Workers AI (free), falls back to a computed summary
storage: Cloudflare D1
simulated-host/ the "Alexa+ stand-in" — a small web chat surface
- a real LLM (Cloudflare Workers AI) decides when to call mcp-server tools from natural language
- renders the confirmation moment as an explicit approve/reject, not an auto-continue
- this is what the demo video shows running
submission/ Devpost demo video + narration
Both Workers run entirely on Cloudflare's free tier (Workers, D1, Workers AI, Rate Limiting) — no AWS services and no billing setup required.
Each subproject has its own README (mcp-server/README.md, simulated-host/README.md) with full
setup steps. Both need Node 22+ (.nvmrc pinned) and a free Cloudflare account.
cd mcp-server && npm install && npm run dev # the MCP server
cd simulated-host && npm install && npm run dev # the chat UI, in another terminalMIT — see LICENSE.