Self-hosted health data layer you own: labs, records, genome, MCP server. AGPL.
574
OwnHealth is a self-hosted health data layer you own. It keeps your lab results, medical records from any country, wearable data and genome findings in one place you run yourself. You read it in two ways: a web page, and an MCP server that lets an agent such as Claude Code answer "how is my health right now?" with a source behind every value.
There is no chat agent and no AI model inside OwnHealth. The agent is yours, and it sees only what its token allows.
You run it yourself.
Status: pre-alpha. Expect breaking changes before 1.0. Upgrades keep your data: see the changelog.
In 0.3.0:
drumsergio/ownhealth:<version>-ocr image and the ocr compose profile, on CPU; every value it reads is checked against the page. Without it, scans wait for your own agent to read them over MCPLimits in 0.3.0. Lab PDFs are read with generic table rules plus one template, for the fictional LabNorte lab. Real lab layouts come later as contributed templates. The LOINC set is a curated subset of 202 codes, so a test outside it waits in review. OCR rows go to review unless a vendor template matches.
Later: imaging (DICOM), more wearables and US patient portals. See the roadmap.
You need Docker with Compose v2. OwnHealth runs as one app container, a single Rust binary with the web UI built in (a 364 MB image), next to PostgreSQL 17. OCR is optional: the ocr profile adds a worker from the -ocr image (436 MB), see deploy/README.md.
git clone https://github.com/GeiserX/OwnHealth.git
cd OwnHealth
cp .env.example .env
openssl rand -hex 32 # paste as OWNHEALTH_DB_PASSWORD in .env
openssl rand -hex 32 # paste as OWNHEALTH_APP_DB_PASSWORD in .env
openssl rand -hex 48 # paste as OWNHEALTH_SECRET_KEY in .env
openssl rand -base64 32 # paste as OWNHEALTH_SECRETS_KEY in .env (encrypts inbox passwords and tokens)
mkdir -p inbox && sudo chown 10001:10001 inbox # the watched folder, writable by the app
docker compose up -d
Open http://localhost:8080, create your account with a passkey, and import a lab report under Import & review. To have reports arrive by themselves, add a mailbox, the folder, Paperless-ngx or a phone under Inbox; the recipes cover each one.
Connect Claude Code with a token from MCP & access:
export OWNHEALTH_PAT=oh_pat_... # the token you copied
claude mcp add --transport http ownhealth http://localhost:8080/mcp \
--header "Authorization: Bearer ${OWNHEALTH_PAT}"
The app listens on 127.0.0.1 only. For HTTPS on your network, backups and restores, see deploy/README.md. The full walk-through, with a demo family to look around first, is in docs/quickstart.md.
OwnHealth is for personal record keeping and for showing values computed from published formulas, each with its source. It is information, not diagnosis. It does not tell anyone what to take or stop; pharmacogenomic results quote the published guideline and link it.
OwnGenome produces the genome findings OwnHealth shows. It turns a whole genome or a consumer chip into drug-response, carrier and risk findings; OwnHealth ingests them and joins them with your medications and labs.
Content type
Image
Digest
sha256:107e35c1f…
Size
103.6 MB
Last updated
about 9 hours ago
docker pull drumsergio/ownhealth:0.3-ocr