Your health data. Your agent’s intake.

A self-hosted Model Context Protocol server for your own body’s data. One process on your VPS receives Apple Health, pulls Oura and Hevy, stores every sample in SQLite, and answers your agent with briefs, sleep queries and strength routines. You own the host, the database and the OAuth client — and there is no dashboard: your MCP client is the operator surface.


Processes on the box — ingest HTTP, MCP, pollers1

Source adapters — Watch-only runs with two off3

Public paths on the host4

Postgres required0


What it does

Connect one, two or three sources. Your agent checks setup, walks you through each connection, then reads the ledger: compact briefs, normalized sleep sessions, metric queries with tight windows, and — with Hevy enabled — routines it can plan and write.

source_*
Connect from the agent seat: list adapters, store secrets in the server vault (never echoed back), start Oura’s browser consent, check status, disconnect. Tokens never pass through the chat.
health_brief / health_status
One compact card for the day — sleep, readiness, activity, last session under the bar. Roles pick a winner per domain and every row names its source; two instruments are never averaged into one score.
health_sleep / health_metric / health_workouts
Normalized sessions and daily rows without dumping megabytes of time series into the model. Over 500 points, it aggregates by day and says so.
gym_*
Search Hevy’s exercise catalog, read routines and recent sets, and upsert a plan — dry-run by default, so every write returns the exact payload and touches nothing until you say commit.
Built for your agent

healthtake is aimed at agent seats — GrokBot, Claude, Cursor and similar. The HTTP transport speaks Streamable MCP behind a bearer token; stdio works over SSH. Consent for Oura starts from the agent and finishes in your browser via a public HTTPS callback, and the honest caveats are printed, not hidden: HAE Premium for the webhook, an Oura membership, Hevy Pro for its API — and the iPhone does not sync while locked.

What it is instead of

A dashboard you have to click

Garmin’s web, Oura’s app, Apple Fitness — surfaces you visit. healthtake is agent-native: the data comes to the conversation you already have open.

Pasting API keys into chat forever

Secrets go once into the vault by source_set_secret and stay on the server. Tools never return a secret value, and OAuth tokens never pass through the chat at all.

Three apps with no joint brief

Watch, ring and gym log each tell part of the morning. Roles pick the sleep, recovery and strength winners so one card answers the question the three apps split.

A hosted “health MCP” SaaS

You own the host, the database and the OAuth client. Nothing about your body is registered with a middleman, and the whole thing runs on a $5 box.

Run it yourself
git clone https://github.com/iXanadu/healthtake.git
cd healthtake
pip install -e .
cp healthtake.toml.example healthtake.toml
# secrets live on the box, never in git
healthtake http --port 8790

Python 3.12+, SQLite WAL, one process behind your reverse proxy. Phones and OAuth need real HTTPS — the $5-VPS on-ramp is on Your own server, and the human flow is on How it works.

The intake is open

Point an agent at /mcp with a bearer token and ask for this morning’s brief. The connect JSON and the first-session tool loop are one page over.