Health Access MCP / About / Privacy

About

Where does my data go?

Into the folder you picked, and nowhere else. There is no server to send it to and no account to tie it to. The app has a screen called "What left this phone", and it is always empty, because nothing does, unless you turn usage statistics on. Then exactly the events listed below leave, and they never contain a health value.

What there is not

What leaves the phone

1. Your files, to your own storage

The folder you picked syncs through the provider you chose: iCloud Drive, Dropbox, Google Drive, OneDrive, Proton Drive, your NAS. That is your account with them, under their terms, and the same place your photos or documents already go. Choose "On My iPhone" and nothing leaves the phone at all, but then your AI on the computer cannot reach the folder either. The files are plain JSON; encrypt the folder if your provider offers it. The MCP server on your computer writes one small file into the same folder, mcp/clients/<id>.json: the client's name and version, your computer's name, a call count and the name of the last tool, so the app can show that an AI is connected. Never tool arguments, never results.

2. Usage statistics, only if you turn them on

Off by default. When on, the app sends these events to PostHog, an analytics service, from the phone:

EventProperties
app_openednone
export_completedworkout_count, duration_ms, trigger (observer, background task, foreground or manual)
export_failederror_domain, code
plan_schedulednone
plan_put_on_watchmethod (schedule or preview)
setup_message_copiednone

Each event also carries the app version and build, the OS name and version, the device type (iPhone), the analytics SDK's name and version, and a random id created at install that is not your Apple ID and not your name. An allowlist strips everything else the SDK would normally attach: locale, time zone, network, screen size. Never a health value, never a file name, never a folder path. The event helpers in the code accept only numbers and fixed words, so a health value cannot get in by accident.

3. The MCP server's own statistics, only if you turn them on

The server you get with npx -y healthaccess-mcp has none: the binaries on npm are built without the HTTP client, so they contain no network code at all. None of the binaries we publish can send statistics: npm and the release archives are all built without the HTTP client. Only a build you make yourself from source with the default features can, and even then it stays off unless you set both telemetry = true and a PostHog key in ~/.config/healthaccess/config.toml (or pass --telemetry). When on, two events go to the configured PostHog host from your computer:

EventProperties
mcp_startedversion
mcp_tool_calledtool, duration_ms, ok, and on failure error_kind, one of io, json, schema, not_found, ambiguous, validation, refused, codec, config

Plus the server's name and version, the OS name, and an anonymous random id written to the config file on first use. Never tool arguments, never results, never workout contents, file names or paths. To build from source without network code too: cargo install --path mcp --no-default-features.

4. Whatever you ask your AI to read

This one is yours to decide, and it is the big one. When you ask Claude, ChatGPT or Cursor about your swim, the session data the AI reads becomes part of that conversation and goes to that company's servers under their terms. That is the AI you chose, not something this app does. If you want the data to stay on your Mac, use a local model; the MCP does not care which.

Where to check

Apple's part

Apple keeps Health data encrypted while the phone is locked, which is why the app can only export once the phone has been unlocked. The app declares in its privacy manifest that it does no tracking, and it has no entitlement to write to Health. Health records never go to iCloud through this app; only the files you asked it to write go to the folder you chose.