Local-first personal health record exposed over MCP. Labs, meds, diagnoses, wearables and food log in your own Postgres, with deterministic safety checks. Works with any MCP client.
- ✓Open-source license (AGPL-3.0)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Topics declared
- ✓Documented (README)
claude mcp add health-os -- python -m -e{
"mcpServers": {
"health-os": {
"command": "python",
"args": ["-m", "seed.load"],
"env": {
"DATABASE_URL": "<database_url>"
}
}
}
}DATABASE_URLMCP Servers overview
# health-os
[](https://github.com/andronaft/health-os/actions/workflows/tests.yml)
[](https://mcpservers.org/servers/andronaft/health-os)
**Local-first personal health record, exposed over [MCP](https://modelcontextprotocol.io).**
Your labs, diagnoses, medications, wearable data and food log live in your own Postgres; any
MCP client — one running a local model or a cloud assistant — can read and update them through
guarded tools. Critical values, drug-safety rules and screening
schedules are deterministic code, not LLM judgement.
<p align="center"><img src="docs/demo.svg" alt="An MCP session with the demo patient: LDL trend and the pending-review queue" width="820"></p>
> **Medical disclaimer.** This is not a medical device and does not give medical advice.
> Critical-value alerts and screening reminders are only a signal to contact a doctor —
> never a diagnosis and never a reason to delay care. Use at your own risk.
## What it does
- **Lab results** — drop a PDF or photo into your MCP client; the model extracts the values,
health-os normalizes names (uk/ru/en/Latin synonyms) and units, and stages the panel as
*pending*. Nothing counts as fact until you approve it.
- **Safety net in code** — critical values alert immediately (log, macOS notification,
optional Telegram); critical findings in narrative reports are flagged; drug-interaction
questions are refused and redirected to a doctor/pharmacist (only deterministic checks run:
total daily paracetamol across products, biotin before lab tests); a crisis tool returns a
fixed response with hotlines, independent of the model.
- **Trends and analytics** — Mann-Kendall trends, personal baselines and anomalies,
age-gated risk calculators, a screening calendar, a weekly report, a doctor-visit brief.
- **Food log** — meals with a 41-nutrient profile, %RDA, deficiency/excess flags, meal templates.
- **Devices** — Apple Health export and Garmin import.
- **28 MCP tools + server instructions** — the safety rules are sent to every client on connect;
see [mcp_server/README.md](mcp_server/README.md).
## Try it in one command
Only Docker needed. Starts a throwaway database with a fictional patient — two years of labs
(LDL creeping up), blood pressure, medications, a food log and a lab panel awaiting approval:
```bash
git clone https://github.com/andronaft/health-os && cd health-os/demo
docker compose up -d --build
```
Point your MCP client at it:
```json
{
"mcpServers": {
"health-os-demo": {
"command": "docker",
"args": ["run", "-i", "--rm", "--network", "health-os-demo",
"-e", "DATABASE_URL=postgresql+psycopg://health:demo@db:5432/health_os",
"health-os:local"]
}
}
}
```
Ask *"show my health summary"*, *"is my LDL trending up?"*, *"what's pending review?"*,
*"what am I short on nutritionally?"*. Remove it all with `docker compose down -v`.
## Install for your own data
Requires Docker and Python 3.12+.
```bash
git clone https://github.com/andronaft/health-os && cd health-os
cp .env.example .env # set the passwords
docker compose up -d db # Postgres 16 + pgvector
python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/alembic upgrade head # schema
.venv/bin/python -m seed.load # marker catalog, synonyms, units, nutrients
.venv/bin/python -m seed.demo # optional: a fictional demo patient to play with
```
Then connect an MCP client — config for LM Studio, Open WebUI, Ollama CLI and Claude is in
[mcp_server/README.md](mcp_server/README.md). Try: *"show my health summary"*,
*"LDL trend"*, *"what am I short on nutritionally this week?"*.
**Local models:** the server speaks standard MCP over stdio, so any MCP client that runs a
local model can use it. Verified so far: the server itself with the official MCP Python client
(CI + the Docker demo). Not yet verified end-to-end with a local model — see
[#9](https://github.com/andronaft/health-os/issues/9); reports welcome.
## How it works
```
MCP client (local or cloud model)
│ stdio
mcp_server/ ── read tools ──▶ approved views (read-only role, 5s timeout, row limits)
│ ── write tools ─▶ core/services: normalize → status → critical rules → pending
│
safety/ critical values, narrative flags, interactions, crisis, alerts
analytics/ trends, baselines, calculators, screening, nutrition, weekly report
│
PostgreSQL 16 + pgvector ◀── ingestion/ (Apple Health, Garmin, embeddings)
```
| Directory | What's inside |
|---|---|
| `core/` | config, DB, normalization, services, dedup, health summary |
| `mcp_server/` | MCP server, read and write tools |
| `safety/` | deterministic safety rules and alert delivery |
| `analytics/` | trends, baselines, calculators, screening, nutrition, reports |
| `ingestion/` | extraction schema, confidence scoring, device importers, embeddings |
| `migrations/` | Alembic schema |
| `seed/` | reference catalog + the demo patient |
| `evals/` | red-team scenarios (injections, hidden critical values, unit tricks) |
| `scripts/` | backup/restore (restic; `install_launchd.sh` schedules them on macOS), read-only role setup, importers |
## Privacy / local-first
- **Your data stays in your own database.** Postgres runs locally in Docker; `data/` and `.env`
are outside git. Nothing is sent anywhere by health-os itself.
- **What leaves the machine depends on the MCP client you connect.** With a local model
(LM Studio, Open WebUI + Ollama, …) nothing does. With a cloud assistant, whatever the tools
return is sent to that provider — use one whose terms fit medical data (no training on your
data, zero/short retention).
- **The goal is fully local:** local models for chat and extraction, local embeddings for search
(already supported via fastembed). Cloud clients remain optional.
- Optional alert channel (Telegram) sends only a generic "check your health system" text, never values.
- Encrypt the disk (FileVault / LUKS / BitLocker) — the database files are plaintext at rest.
- Never put real medical data in issues, PRs or tests — synthetic data only.
## Tests
```bash
make test # everything (needs Postgres for the integration part)
make test-unit # pure unit tests — no database needed
make test-integration # only tests marked `integration`
```
Integration tests never touch the working database: `tests/conftest.py` drops and recreates
`<POSTGRES_DB>_test` on the same server (migrations + seed) on every run. Override with
`TEST_DATABASE_URL` (the name must end in `_test`). Without Postgres, integration tests are
skipped locally; CI sets `REQUIRE_DB=1` so they fail instead.
Development history: [PROGRESS.md](PROGRESS.md).
## License
[AGPL-3.0-or-later](LICENSE). You may use, modify and fork health-os; if you distribute it or
run a modified version as a network service, you must publish your source under the same license.
Want to use it in a closed-source or commercial product without those obligations? A separate
commercial license is available from the author — reach out via GitHub
([@andronaft](https://github.com/andronaft)).
Contributions are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md) (includes a short CLA).
What people ask about health-os
What is andronaft/health-os?
+
andronaft/health-os is mcp servers for the Claude AI ecosystem. Local-first personal health record exposed over MCP. Labs, meds, diagnoses, wearables and food log in your own Postgres, with deterministic safety checks. Works with any MCP client. It has 3 GitHub stars and its last recorded update is dated 2026-10-01.
How do I install health-os?
+
You can install health-os by cloning the repository (https://github.com/andronaft/health-os) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is andronaft/health-os safe to use?
+
Our security agent has analyzed andronaft/health-os and assigned a Trust Score of 95/100 (tier: Verified). See the full breakdown of passed checks and flags on this page.
Who maintains andronaft/health-os?
+
andronaft/health-os is maintained by andronaft. The last recorded GitHub activity is dated 2026-10-01, with 6 open issues.
Are there alternatives to health-os?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy health-os to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/andronaft-health-os)<a href="https://claudewave.com/repo/andronaft-health-os"><img src="https://claudewave.com/api/badge/andronaft-health-os" alt="Featured on ClaudeWave: andronaft/health-os" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
The fastest path to AI-powered full stack observability, even for lean teams.