Skip to main content
Glama

Nova

Medication safety and care coordination for Alexa+

Nova catches medication mistakes before they happen and connects the signals a family would miss, for an older adult who lives alone and the people who care for her.

Tests License: MIT MCP 2026-07-28 Python 3.12+

Live demo · Story page · Lite (no 3D) · Architecture · Submission notes

Nova's story page: "Care that speaks first."


Contents

Related MCP server: CareCircle MCP Server

Overview

More than 53 million Americans are unpaid family caregivers (AARP, Caregiving in the U.S., 2020), many of them far from the person they look after. The risky moments are predictable: a new dose after a doctor's visit, an old bottle still in the cabinet, a missed evening pill. The early warning signs are small and scattered: "I felt a bit woozy getting up", an aide's blood pressure reading, a quiet morning. Nobody sees them together until something goes wrong.

Nova brings them together on the devices the household already uses. It connects three places on Alexa+:

Place

Device

Role

The living room

Rose's Echo Show 8

Reminders, pill checks, daily check-ins, consent

The front door

Rose's Ring doorbell

Visits, deliveries, a quiet morning, a door opening at night

The cloud

Maya's Echo Show 15, and Nova

Briefings, escalations, plan changes, the visit brief

Nova is a self-hosted Model Context Protocol (MCP) server, the open standard Alexa+ uses for third-party experiences. This repository also includes a simulated Alexa+ (two Echo Shows and a Ring doorbell in the browser) whose agent runs on Amazon Nova in Amazon Bedrock, because Alexa+ developer preview access isn't generally available.

What Nova does

It speaks first. A care engine runs on the household clock and turns the care plan into announcements on the right device.

When

What happens

6:00 PM, a dose is due

Rose's Echo: "It's 6 PM, Rose. Time for your Metformin with your meal."

6:30 PM, not yet taken

A gentle follow-up on Rose's Echo

7:30 PM, still not taken

Maya's Echo: "Mom hasn't taken her 6 PM Metformin. I reminded her at 6 PM and 6:30 PM."

9:00 AM

The morning check-in: "How are you feeling today?"

11:00 AM, a quiet home

No pills logged and no movement at the door: a wellness check, then an urgent alert to the family

A bottle running low

A refill nudge, sent to the pharmacy with a pickup plan

It sees. Rose holds a bottle up to the Echo Show camera. Amazon Nova reads the label and Nova checks it against her plan: the right pill at the right time, a pill already taken, an outdated strength, or a medicine her doctor said to avoid ("Please don't take ibuprofen, Rose…"). Nova says take it only when it is sure: the exact product (not a combination or extended-release version), the strength read and matching the plan, and a confident read. Otherwise it asks her to check with the pharmacist, and it refuses outright when it can't read the label. Maya photographs an after-visit summary, and Nova proposes the plan changes (change, start, stop, continue, with the doctor's reasons). Nothing changes until she approves.

It connects the dots, with evidence. "How's Mom doing?" gets a one-sentence answer and a card that fits one screen:

Dizziness began after her lisinopril change. Home BP averaged 152/91 before the change and 110/66 since. Rose has mentioned dizziness four times since Oct 15. Grace saw her unsteady. Dr. Patel's notes say to call about dizziness.

Insights come from deterministic, tested rules, and each one carries its evidence. Amazon Nova writes the words. Nova never diagnoses.

It reads the front door. Nova calls the Ring Partner API for the linked doorbell's status and event history, and takes Ring's signed webhooks in real time. A doorbell press at the time of a scheduled visit tells Nova the home aide has arrived, and she gets her visit checklist.

It stays respectful. Spoken replies are one or two sentences, with the details one "tell me more" away. Rose is asked before her family hears about a symptom, and she decides what the circle can see. Emergencies skip every question.

Rose is asked before her family is told, while Maya sees the evidence

A doctor-visit brief, one request away

The live demo: a consent question on Rose's Echo Show and the briefing card on Maya's

A visit brief on Maya's Echo Show

Architecture

flowchart LR
  subgraph Browser["Simulated Alexa+ (browser)"]
    R["Rose's Echo Show 8<br/>voice · camera"]
    D["Ring doorbell"]
    M["Maya's Echo Show 15"]
    I["Inspector: live MCP trace"]
  end
  subgraph Sim["simulator/ (FastAPI)"]
    A["Alexa+ agent<br/>Amazon Nova · Converse tool use"]
    H["MCP Apps host"]
    P["Announcement poller"]
    V["Amazon Polly voice"]
  end
  subgraph Nova["nova_server/ (MCP server)"]
    T["25 tools · 8 resources · 2 prompts<br/>5 MCP Apps views"]
    E["Care engine<br/>(household clock)"]
    X["Insight engine"]
    S["Vision: pill check,<br/>reconciliation"]
    G["Ring: API client + webhook"]
    DB[("SQLite")]
  end
  R & M <-->|HTTP + SSE| Sim
  A <-->|"Streamable HTTP · OAuth 2.1 token per person"| T
  P <-->|resources/read| T
  D -->|signed webhook| G
  G <-->|Ring Partner API| RING["api.amazonvision.com"]
  T --> X & S --> DB
  E --> DB
  G --> E
  X -.->|language| BR["Amazon Bedrock<br/>Amazon Nova"]
  S -.->|images| BR
  A -.-> BR

Component

Description

nova_server/

The Alexa+ integration. An MCP server on the official Python SDK (mcp 2.3) with Streamable HTTP at /mcp, an OAuth 2.1 authorization server, the care engine, the insight engine, vision, and the Ring Partner API client and webhook.

simulator/

A simulated Alexa+: two Echo Shows and a Ring doorbell. Each Echo has its own MCP session and per-person token, an agent loop on Amazon Nova, an MCP Apps host, live announcement delivery, and a protocol inspector.

simulator/static/site/

The story page, with Three.js scenes.

samples/

Demo images (prescription bottles, an over-the-counter bottle, an after-visit summary) and their generator.

skills/nova-care/

An Agent Skill that teaches agents how to run Nova conversations.

How it works: the Echo Show and the layers behind it

Sequence diagrams for a voice turn, the escalation ladder, consent by elicitation, photo-to-plan reconciliation, account linking and the Ring integration are in docs/ARCHITECTURE.md.

Integrations

Alexa+ (Model Context Protocol)

  • Streamable HTTP, negotiating MCP 2026-07-28 and serving 2025-11-25 clients.

  • Account linking with OAuth 2.1: protected-resource metadata (RFC 9728), authorization-server metadata (RFC 8414), dynamic client registration (RFC 7591), PKCE, refresh-token rotation and revocation. Identity comes from the token, so the same tool answers differently for Rose and for Maya.

  • MCP Apps (io.modelcontextprotocol/ui): five ui:// views (today, briefing, visit brief, pill check, reconciliation) render on the Echo Show screens and call tools back through the host. Camera-only tools are hidden from the model with _meta.ui.visibility: ["app"].

  • Elicitation for consent, through SDK resolvers, and only when the client supports it.

  • Structured output with an outputSchema on every tool, a short speech line for voice and more for "tell me more".

  • Resources as a delivery queue: nova://announcements is how Nova speaks first (proactive notifications on Alexa+).

Amazon Nova on Amazon Bedrock

  • Agent loop (simulator/agent.py): tool use through the Bedrock Converse API (Amazon Nova 2 Lite by default, with region-aware inference profiles and Nova Lite and Micro as fallbacks). When a tool returns a ready-to-speak line, the agent speaks it without a second model call.

  • Vision (nova_server/vision.py): Amazon Nova reads pill-bottle labels and after-visit summaries. The reconciliation that follows is deterministic.

  • Language (nova_server/insights.py): the caregiver briefing, structured check-in extraction, answers grounded only in the care notes, and visit briefs.

  • Resilience: a throttled or unavailable Bedrock falls back per turn (a local Ollama model, then a deterministic router) and is retried in the background, so Amazon Nova takes over again without a restart.

  • Status on our hackathon account: every Amazon Nova model still answers ThrottlingException: Too many tokens per day, even after the daily reset, so the hosted demo and the video run on the offline router. The Bedrock path is in the code, its request shapes are tested against the botocore model, and it takes over by itself as soon as the quota allows (see the friction log).

Ring Partner API

  • API client (nova_server/ring_api.py): GET /v1/users/me, /v1/devices, /v1/devices/{id}/status, /v1/devices/{id}/capabilities and /v1/history/devices/{id}/events?event_types=ding,motion.human, following the page[key] cursor. Nova asks only for doorbell presses and people at the door, and stores no Ring email or address.

  • Webhooks (/integrations/ring/webhook): Webhook v1.1 events, with the X-Signature HMAC-SHA256 verified over the raw body before parsing, deduplication by meta.request_id, and an immediate 200.

  • In the live demo, Front door → Sync from Ring shows each Ring API call with its status, labelled Live or Recorded.

Amazon Polly

Generative voices speak every reply and announcement in the simulator, and narrate the demo video.

Getting started

Requirements: Python 3.12+, uv, and Chrome (for the microphone and camera). AWS credentials are optional.

git clone https://github.com/Dakshhhhh-ops/nova && cd nova
uv sync
cp .env.example .env

uv run python run.py          # MCP server + simulator; opens the browser

Or run the two processes separately:

uv run python -m nova_server  # MCP server   http://127.0.0.1:8765/mcp
uv run python -m simulator    # simulator    http://127.0.0.1:8080  (story at /, live demo at /live)

A five-minute walkthrough

  1. Open /live and press Reset.

  2. Rose: Show Alexa → Ibuprofen. Nova reads the label and stops her, citing her doctor's notes.

  3. Maya: "How's Mom doing?", then "Tell me more."

  4. Front door → Grace arrives. The aide gets her checklist and the family is told.

  5. Maya: Scan paperwork → after-visit summary → Approve. Then Rose shows the old lisinopril bottle.

  6. Drag the sun to just before 6 PM and press Fast-forward to watch the reminder escalate to Maya.

Connect an MCP client

  • MCP Inspector: npx @modelcontextprotocol/inspector, URL http://127.0.0.1:8765/mcp. Use its OAuth flow (Nova's account-linking page opens), or send the header Authorization: Bearer nova-demo-maya (also nova-demo-rose, nova-demo-leo and nova-demo-grace).

  • stdio clients: uv run python -m nova_server --stdio --as rose.

Deploy

  • Render: render.yaml is a one-click Blueprint. serve.py serves the story page, the live demo and the MCP server on one port.

  • Containers: docker build -t nova ., then run with PORT and NOVA_PUBLIC_URL=https://your.host. Add AWS credentials or an instance role for Amazon Nova and Polly.

Configuration

All settings are environment variables (see .env.example).

Variable

Default

Purpose

NOVA_LLM

auto

Agent brain: auto (Bedrock, then Ollama, then rules), bedrock, ollama or rules

AWS_REGION

us-east-1

Region for Amazon Bedrock and Polly (standard AWS credential chain)

NOVA_MODEL_ID

Pin a specific Amazon Nova model or inference profile

NOVA_LLM_RETRY_SECONDS

600

How often an unavailable Bedrock is retried in the background

RING_ACCESS_TOKEN

Ring Developer Playground token (about 30 minutes)

RING_REFRESH_TOKEN, RING_CLIENT_ID, RING_CLIENT_SECRET

Production Ring account linking

RING_POLL_SECONDS

300

Event-history backfill interval when Ring is linked

NOVA_RING_SIGNING_KEY

Key Ring signs webhooks with

NOVA_PUBLIC_URL

Public base URL (OAuth metadata and allowed hosts)

NOVA_CLOCK

Start the household clock at a given time, e.g. 08:20

NOVA_DEMO

1

Demo-only routes (/demo/reset, /demo/clock); set 0 in production

SIMULATOR_PORT

8080

Simulator port

MCP reference

Tools (25)

Tool

Who

What

get_today (UI)

both

Today's doses, appointments and unread messages

log_medication

both

Log a dose by name, purpose or appearance, with a double-dose guard

check_medication

both

"Did I take…?", "What's the pink pill for?"

daily_checkin

Rose

Free-form check-in → structured signals, red flags, consent

log_vitals / get_vitals

both

Blood pressure by voice, checked against the doctor's limits

list_appointments

both

Upcoming visits, with who's driving and where

visit_checklist

aide, family

What to do at Rose's today; sent to the aide when she arrives

request_refill

both

Refill to the pharmacy with a pickup plan

send_message / read_messages

both

Messages within the circle, delivered live

read_notifications / snooze_reminder

both

"What are my notifications?", "Remind me in 10 minutes"

ask_care_notes

both

Answers grounded in the doctors' notes, with sources

get_help

Rose

Alert the whole circle now

care_briefing (UI)

family

Status, adherence, trends, insights with evidence, alerts

prepare_visit (UI)

both

Doctor-visit brief with questions to ask

recent_activity

family

Front door (Ring), doses and check-ins

check_pill_photo (UI, camera)

Rose

Amazon Nova reads the bottle and Nova checks it

read_care_document (UI, camera)

family

Amazon Nova reads the paperwork; reconciliation proposal

apply_care_changes

family

Approve or discard proposed plan changes

list_alerts / resolve_alert

family

Open alerts; mark one handled

set_sharing

Rose

What the circle can see

acknowledge_notification (app only)

both

Device screens acknowledge announcements

Resources: nova://announcements, nova://circle, nova://timeline, and the five ui://nova/* views. Prompts: morning_checkin, caregiver_briefing.

Testing

uv run pytest -q

81 tests run in CI on every push. They cover:

  • the care engine (the escalation ladder, snooze, check-ins and wellness checks);

  • pill checks, including the safety rules for unreadable labels, low-confidence reads, missing strengths and look-alike products, and reconciliation;

  • the dizziness insight and its evidence, BP limits, privacy, grounded answers and red flags;

  • a real Streamable HTTP session with bearer auth and elicitation, and the full OAuth 2.1 account-linking flow;

  • the Ring API client against recorded responses, and the Ring webhooks (signature, dedupe, event mapping);

  • Bedrock request shapes against the botocore model, and Amazon Nova recovering by itself after throttling;

  • the simulator's HTTP API end to end.

Security, privacy and compliance

  • No diagnosis. Answers about medications and symptoms come from the care team's own notes, with sources. Plan changes need a person's approval.

  • The older adult is in charge. Rose is asked before her family hears about a symptom, and only she can change what's shared.

  • Emergencies are never gated. Falls, chest pain, breathing trouble and stroke signs alert everyone and tell her to call 911.

  • Identity comes from the token, never from speech. Ring webhooks are verified before they're parsed.

  • Minimum necessary. Nova requests only the Ring events it needs, keeps spoken replies general, and puts details on screen or behind "tell me more".

Running Nova with real health data makes it a HIPAA project. The operator (a home-care agency, health plan or pharmacy) runs Nova in its own AWS account under a Business Associate Addendum and uses HIPAA-eligible services only: Amazon Bedrock, Amazon Polly, Amazon ECS and Amazon RDS encrypted with AWS KMS, with TLS on every hop and an access log. Unlinking an account revokes Nova's tokens. The demo household, people, pharmacy and clinic are fictional, and this repository is not a HIPAA deployment as it stands.

Project structure

nova/
├── nova_server/        MCP server: tools, OAuth, care engine, insights, vision, Ring
│   └── views/          MCP Apps views (ui://nova/*)
├── simulator/          Simulated Alexa+: agent loop, MCP Apps host, devices
│   └── static/         Live demo (/live) and story page (site/)
├── samples/            Demo images and fixtures
├── skills/nova-care/   Agent Skill
├── scripts/            Demo-video recorder, UI checks
├── tests/              pytest suite (81 tests)
├── docs/               Architecture, design, demo script, submission notes
├── serve.py            Single-port server for deployment
└── run.py              Local launcher

Roadmap

  • Production account linking with Login with Amazon or Amazon Cognito, and deployment on Amazon Bedrock AgentCore Runtime.

  • Per-household Ring account linking and a registered webhook endpoint.

  • Alexa proactive notifications for announcements.

  • Amazon Nova Sonic for full-duplex voice, and ambient cards on Fire TV.

License

MIT. Built for the Amazon Developer Build, Ship, Shape hackathon. The open-source MCP Apps host used by the simulator is published separately as mcp-apps-lite-host.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables eldercare coordination through medication reminders with safety guardrails, daily voice check-ins with symptom escalation, and a family caregiver dashboard.
    8
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables older adults to log medication doses by voice, receive double-dose and safety alerts, record mood check-ins, request help, and exchange family messages, while giving caregivers multilingual AI digests, adherence reports, refill forecasts, and proactive notifications.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables voice-driven morning check-ins for older adults living alone through Alexa+, capturing sleep, mood and pain, logging medication doses and appointments, and answering medication questions from official FDA labels. Keeps family members informed with household status updates and automatic alerts when a check-in or dose is missed.
    1 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables older adults to manage their medicines by voice — adding prescriptions, hearing what is due, logging doses and symptoms, and getting refill and adherence reports — with built-in double-dose and emergency safeguards. It also keeps distant family informed through Bedrock-written daily summaries and SMS or email alerts for urgent events.
    MIT