Inspiration

What it does

How we built it

Challenges we ran into

Accomplishments that we're proud of

Inspiration

Caring for a parent usually means several people, one pill box and a lot of memory. When two siblings each assume the other gave the morning tablet, nobody can answer a simple question at 9 pm, and a double dose can be dangerous. Caregivers' hands are full at exactly the moments that matter, so a phone app is the wrong tool. We wanted a shared, voice-first record on the speaker already in the home.

What it does

CareThread is a self-hosted MCP server that turns Alexa+ into a shared care log for families looking after a vulnerable relative. Caregivers talk to Alexa+ to:

  • log doses, observations and vitals ("I gave Dad his morning pills")
  • ask "did anyone give Dad his metformin?" and hear who gave it and when
  • get a warning before a repeat dose
  • get an instant escalation for urgent symptoms
  • ask "what needs doing now?"
  • get a spoken shift handoff and a clinician-ready visit report

It never diagnoses, reassures or suggests doses. All demo data is synthetic.

Safety is never left to the model. It is deterministic, tested code:

  • Dose Guard warns before a repeat dose inside the caregiver-set interval or above the daily limit, and asks for explicit confirmation.
  • Red-flag Engine matches urgent symptom descriptions (stroke signs, chest pain...) with negation handling and returns a fixed escalation instruction ("Call 112 now...").
  • Output Guard blocks reassurance, diagnosis and dosing language in anything spoken, including model output, and says "not logged", never "not taken".

How we built it

  • A TypeScript MCP server on the official @modelcontextprotocol/sdk, protocol version 2025-11-25, over Streamable HTTP (/mcp, with Mcp-Session-Id sessions or a stateless mode).
  • 16 tools, 3 resources plus a resource template, 3 prompts, and server instructions. Every tool declares a title, behavior annotations, an input schema generated from its Zod validator, and an output schema. Every result carries a short spoken text block plus structuredContent.
  • A followUp field in every result gives the agent the exact next call for confirm/choose turns, so a spoken "yes" never depends on the model rebuilding arguments.
  • Amazon Bedrock (Converse API) is called inside the ask_care_log tool handler to answer free-form questions about the log. Emergency descriptions never reach the model, the model's answer still passes the Output Guard, and a deterministic keyword search takes over if Bedrock is off, slow, throttled or in privacy mode.
  • SQLite storage, and a React voice simulator with a live MCP trace panel that drives the same server, so the whole flow can be demoed without a device.
  • Docker Compose for local runs, and an automated test suite (unit, safety, multi-turn, Bedrock path and end-to-end Streamable HTTP tests).

Challenges we ran into

Interval math across midnight and daylight-saving changes, attributing logs to the right family member on a shared device, writing escalation language that is clear without sounding like a diagnosis, and treating stored notes as untrusted data.

What we learned

Models are fluent and can be wrong, so anything safety-critical belongs in deterministic code with tests, and the model's job is to extract fields and phrase non-critical text. MCP's structured results and followUp contract make multi-turn voice flows much more reliable.

What's next

Clinical review of every red-flag rule with a nurse or pharmacist, OAuth 2.1 instead of the demo-grade bearer token, real household voice profiles on Alexa+, aide shift workflows, and PDF or FHIR-style export for clinicians.

CareThread records and retrieves what the family says. It is not a medical device.

What we learned

What's next for CareThread

Built With

Share this project:

Updates

Submission history