Health Access MCP / Connect an AI / Local models

Connect an AI

Apple Health with local models

Any MCP host that can launch a program on your computer works: give it the command npx -y healthaccess-mcp. A bare model runner like Ollama has no MCP host built in, so there you use the files or the command line instead. Either way nothing leaves your Mac, which is the point of running locally.

The one command every host needs

npx -y healthaccess-mcp

Transport: stdio. No environment variables required. The server finds your Health Access folder on its own (iCloud Drive, then the other file providers, then ~/Documents); add --dir "/absolute/path" to name it. Needs Node.js 18 or newer for npx; a GUI app that does not see your shell's PATH needs the full path from which npx. From source instead: cargo install --path mcp --locked in the repository.

LM Studio

LM Studio hosts MCP servers from version 0.3.17 on and uses the same mcp.json notation as Cursor. In the right sidebar, open the Program tab, then Install, then Edit mcp.json, and add:

{
  "mcpServers": {
    "healthaccess": {
      "command": "npx",
      "args": ["-y", "healthaccess-mcp"]
    }
  }
}

Pick a model that handles tool calls well; small models often call list_workouts fine and then struggle with the longer get_workout result. Ask for one session at a time and leave the heart-rate series out (it is off by default).

Goose

Goose, Block's open-source agent, adds stdio servers as extensions. Interactive: goose configure, then Add Extension, then Command-line Extension, and paste the command above when asked. Or edit ~/.config/goose/config.yaml: to confirm

extensions:
  healthaccess:
    name: Health Access
    type: stdio
    cmd: npx
    args:
      - -y
      - healthaccess-mcp
    enabled: true
    timeout: 300

Any other host

If the host has a config file with mcpServers, the Claude Desktop snippet is the one to copy. If it asks for a command and arguments, the command is npx and the arguments are -y and healthaccess-mcp. The server announces itself as healthaccess-mcp and lists thirteen tools.

Ollama and other plain runners: no MCP, still works

The folder is the API, so a model that can read text can read your training data. Two ways:

  1. The briefing. briefing.md, one page the app writes after every sync, fits any context window.
  2. The command line. healthaccess prints the same views the MCP serves, as tables or as JSON with --json. It comes in the same npm package (npm install -g healthaccess-mcp puts both on your PATH). Pipe them in:
    healthaccess summary --weeks 4 --json \
      | ollama run llama3.2 "This is my swimming and rowing training summary by week. In five sentences, what changed over the four weeks, and what would you ask me before suggesting anything?"
    
    healthaccess show 7A1C3E90 --json \
      | ollama run llama3.2 "Explain this swim session to me in plain words: the parts, where the heart rate went, anything odd."

A plan back to the Watch works the same way without the MCP: have the model write the plan JSON, then healthaccess plan push session.json validates it and drops it into plans/. The app shows "Put on Watch" within a minute.

Then say to it

List my last 5 workouts, one line each. Pick the one you would most want to know more about and tell me why, in two sentences. Then ask me how it felt.