Inspiration

Picture someone saying, out loud and to no one in particular: "I've been more tired than usual." A week later, the family hears about it in a phone call.

Families who care for someone they love live between two fears. The caregiver fears "something is wrong and nobody told me." The person fears "if I say anything, I'll be watched all the time." Dashboards and cameras get switched off. Logging apps get abandoned. The small signals that matter are said once, out loud, and forgotten.

We made a different bet: one spoken sentence to Alexa, and nothing leaves the conversation unless the person says yes, for one caregiver, one signal and one check-in, for a limited time.


What it does

CarePulse is a voice-first family wellness skill for Alexa, backed by a self-hosted MCP server that holds the logic, the data and the consent rules.

Elena: I feel more tired than usual. Alexa: I found similar tiredness reports and sleep below your usual routine. That's a change worth following up on, not a diagnosis. Would you like to check in again at 6 PM? Elena: Yes. Alexa: Do you authorize Laura to receive a brief alert if you report tiredness as the same or worse at this follow-up? Permission lasts up to 36 hours and can be withdrawn. Elena: Yes. (Later, Elena opens CarePulse again) Alexa: How are you feeling now: better, the same, or worse? Elena: The same. Alexa: I recorded the follow-up. The notification service accepted the alert for Laura. I cannot confirm delivery or that it was read.

Behind that exchange:

  1. Records the signal (tiredness, sleep, mood, appetite, dizziness, discomfort) with no app and no form.
  2. Compares it with the person's own routine and recent history, so "tired" is judged against their baseline.
  3. Schedules a follow-up so a passing complaint doesn't disappear.
  4. Asks for narrow consent, spoken in their own words: which caregiver, which signal, which follow-up.
  5. Alerts only if every condition holds: the answer is same or worse, and an unexpired consent record matches the member, caregiver, signal and follow-up. Otherwise the loop closes and nothing is shared. The alert itself is generic ("please check in") and contains no wellness details.

The AI never decides who gets told. Amazon Bedrock only chooses among approved voice wordings. Alerting is a deterministic policy that is re-checked at send time, even for direct MCP calls.


How we built it

  • One brain, two doors: An Alexa custom skill (ASK SDK v2, Node.js 22 on Lambda) handles the conversation. A self-hosted MCP server (API Gateway + Lambda, spec 2025-11-25, Streamable HTTP) exposes the same logic and DynamoDB records through 12 tools: context, wellness events, baseline comparison, follow-ups, consent records, caregiver alerts, and Bee ingestion. For Alexa+, the gateway publishes OAuth 2.1 + PKCE metadata backed by an Amazon Cognito user pool.
  • Consent is data, not a prompt: Each record binds a member, caregiver, signal, and follow-up, expiring in at most 36 hours. Expiry is checked in code on every read.
  • Wearable context without surveillance: With a spoken "yes," users can link their Bee. CarePulse analyzes only wearer speech and confirmed facts, ignores other speakers, stores derived signals instead of raw transcripts, and deletes everything upon an unlink command.
  • AWS Cloud Stack: Amazon Bedrock (Converse API), Lambda, API Gateway, DynamoDB (encrypted, PITR), SNS (customer-managed KMS key), Cognito, CloudWatch, and Serverless Framework. Every tool call leaves a structured trace for complete auditability.

Challenges we ran into

  1. Keeping the model out of the consent decision: Moving logic from the LLM to a deterministic policy ensured safety and testability.
  2. Safety across direct tool calls: We removed the external authorized argument from send_caregiver_alert and made the shared service revalidate stored consent and follow-up states, adding an outbox claim to prevent duplicate publishes.
  3. The 500 ms budget for Alexa+: Optimized cold starts (1024 MB, lazy loading of SNS SDK, provisioned concurrency), alarm on p95 handler time at 400 ms, and automated latency testing.
  4. OAuth details and PKCE: Configured the gateway to publish custom authorization-server metadata to support Cognito's PKCE integration seamlessly.
  5. Bee data filtering: Designed robust parsing rules to analyze wearer-only speech, discard negated symptoms or discussions about others, and handle unknown payload shapes safely.

Accomplishments that we're proud of

  • A complete, deployable loop: voice report → baseline → follow-up → scoped consent → alert.
  • A standalone MCP server with OAuth 2.1 + PKCE, latency alarms, and measurement scripts.
  • Model-independent safety: alerts are strictly bound to valid consent regardless of model behavior.
  • Full revocation capability: unlinking Bee removes all derived signals completely.
  • A transparent privacy policy matching code behaviors (36-hour consent, 30-day Bee permission, 90-day retention).

What we learned

  • Separating reasoning from tools is a privacy feature: Trust relies on deterministic code enforcement, not probabilistic models.
  • Design through principled refusals: Deciding what not to do (no diagnosis, no unconsented sharing) created a safer architecture.
  • Honest documentation builds trust: Outlining demo constraints and limitations made the system design much more robust.

Open source contribution

For the Open Source mini challenge, we contributed to bee-computer/bee-cli#32: a documented example (wellness-signal-minimizer) that reads Bee context over bee mcp serve and outputs aggregated signal counts without exposing raw transcripts. Built under the Apache-2.0 license.


What's next for CarePulse MCP

  • Transitioning from user-opened check-ins to truly proactive notifications via Alexa Proactive Events.
  • Moving from a local Bee bridge to a fully hosted connector.
  • Production account linking, multi-caregiver circles with permission tiers, and longitudinal pattern reports for physicians.

Built with

Alexa Skills Kit (ASK SDK v2) · Alexa+ MCP add-on path (OAuth 2.1 + PKCE) · Model Context Protocol (2025-11-25, Streamable HTTP) · Node.js 22 · AWS Lambda · Amazon API Gateway · Amazon DynamoDB · Amazon SNS · AWS KMS · Amazon Bedrock (Converse) · Amazon Cognito · Amazon CloudWatch · Serverless Framework · Bee CLI


Try it out

Built With

Share this project:

Updates

Submission history