What there is not
- No server. Nothing of ours runs anywhere but on your phone and your computer. The MCP server is a program on your Mac that reads a folder; it listens on nothing.
- No account. Nothing to sign up for, so nothing to leak, sell or lose.
- No write access to Apple Health. The app asks only to read, and only the types you tick. Plans go to the Watch through WorkoutKit, which is a separate permission and does not touch your health records.
- No analytics by default. Usage statistics are off until you flip the switch in Settings. There is no tracking SDK configured to track, no advertising identifier, no crash reporting that carries data.
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:
| Event | Properties |
|---|---|
| app_opened | none |
| export_completed | workout_count, duration_ms, trigger (observer, background task, foreground or manual) |
| export_failed | error_domain, code |
| plan_scheduled | none |
| plan_put_on_watch | method (schedule or preview) |
| setup_message_copied | none |
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:
| Event | Properties |
|---|---|
| mcp_started | version |
| mcp_tool_called | tool, 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
- In the app: Settings, Trust, "What left this phone". And the sync log, which lists every background wake and what it wrote.
- On the computer:
npx -y healthaccess-mcp --checkprints the telemetry state. The event lists above are inTelemetry.swiftandmcp/src/telemetry.rs; the repository goes public soon. - This site sets no cookies, runs no analytics and loads nothing from anyone but its host; even the typefaces are served from here.
- The formal version of all this, with the legal bases and your rights: the privacy policy.
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.