How to connect Apple Health to ChatGPT desktop
What do you get?
ChatGPT desktop can read selected Apple Health data from your local Syncky agent. The setup below disables the two tools that change things in the client; deliberate opt-in permits write-back with source and undo. Free during launch; plans are coming later. See launch access and pricing.
Client health-data envelopes are sealed end to end. Relay sees delivery metadata and plaintext hub notices, but no health values. The local agent keeps plaintext JSON in its inbox; your chosen model sees what the agent supplies. iOS decides background timing and Health reads need an unlocked iPhone. Data can be hours old and writes wait for sync; undelivered envelopes leave Relay on acknowledgment or expiry, at most 7 days.
What do you need before setup?
Use ChatGPT desktop on Mac or Windows, Syncky Health on your iPhone, npm and Node.js 22.15 or newer available to the desktop process. The first npm run may download the agent. Choose your data and model deliberately. This guide uses desktop observations as of November 2026 and the shared operator guide; these are dated instructions, without fresh client verification.
ChatGPT desktop works locally; ChatGPT web and mobile cannot reach a local agent. Setup, receiver and MCP must use the same paired SYNCKY_AGENT_HOME and matching saved relay. The default agent home is ~/.syncky-agent; agent setup explains the relay for each app build. Package availability and acceptance by your installed client remain prerequisites.
How do you set up ChatGPT desktop?
Check the runtime and initialize only a fresh home:
npx -y @syncky/agent selftest npx -y @syncky/agent init --name "My agent"Reuse an existing initialized home instead of initializing again.
Request a private QR and code:
npx -y @syncky/agent pairPair your iPhone: scan in Syncky Health and pick the code on the iPhone. Scanning alone does not confirm trust. Choose read types, allowed write types and Health permissions deliberately. Keep the QR, code, invites and home files out of chat and logs. Let an existing receiver collect the proof; otherwise wait for it after the code pick:
npx -y @syncky/agent wait --timeout 600For ongoing receipt, deliberately start the receiver:
npx -y @syncky/agent receiveKeep one receiver per home; reuse an existing receiver. For on-demand use, run
npx -y @syncky/agent receive --oncewhen you want updates. MCP reads the agent's inbox files and neither pairs nor starts a receiver. Service installation and schedules are separate choices.In the desktop app, open Settings → MCP servers → Add server. Name it
syncky, select STDIO, set commandnpxand arguments-y,@syncky/agent,mcp, then Save. These UI steps are as of November 2026. Before restarting or using tools, edit the matching server block in the shared home-folder~/.codex/config.toml:[mcp_servers.syncky] command = "npx" args = ["-y", "@syncky/agent", "mcp"] disabled_tools = ["syncky_send", "syncky_ack"]Preserve unrelated configuration and update an existing block instead of creating a duplicate. If you used another name, use it in the table header. UI registration alone does not disable any tool. On Windows, the file is
.codex\config.tomlinside your user home, for exampleC:\Users\you\.codex\config.toml. ChatGPT desktop, Codex CLI and IDE extension share this configuration.Only for a custom paired home, add this separate environment table and replace its illustrative path:
[mcp_servers.syncky.env] SYNCKY_AGENT_HOME = "/home/you/.syncky-agent"Use the actual absolute paired-home path used by setup and the receiver; literal TOML paths do not expand
$HOMEor~. On Windows use a single-quoted TOML literal string, for example'C:\Users\you\.syncky-agent', to preserve backslashes. Normally the relay is saved in that home; if setup deliberately usedSYNCKY_RELAY_URL, pass the same override in this environment table.Save the final configuration, Restart the desktop app and run the scope-only prompt below. The canonical npm server is
npx -y @syncky/agent mcp. For compatible clients, an alternative is the matching release's checksum-verifiedsyncky-health.mcpb; verify its.sha256sidecar andSHA256SUMSfrom releases before importing. Node.js is still required. Checksums detect damage, not a compromised release; local packaging tests do not establish client acceptance.
What can ChatGPT desktop read and write?
The MCP server offers five tools. syncky_status shows pairing, scope and relay progress from local state. syncky_inbox returns what the iPhone sent, as raw JSON kept 30 days on your computer. syncky_skill returns the signed instructions that describe every message format. syncky_send sends a message to the iPhone: a Health write, applied at the next sync when the owner has allowed writing for that type and iOS Health permits it, or a sync report or access request, which the owner approves on the phone. syncky_ack marks inbox entries as handled. Status, inbox and skill only read; send and ack change things. An empty result is not a measured zero.
This is a read-only setup: the default TOML disables syncky_send and syncky_ack in the client, without changing the server's default. The model can then read status, the inbox and the skill, but cannot write to Health, request a report or more access, or mark inbox entries as handled; you acknowledge entries from the CLI instead.
The agent keeps what the iPhone sent as daily JSON files in its home (inbox/), prunes them after 30 days, and keeps the last 100 send receipts. There is no database and no built-in summaries: your AI agent reads the files it needs.
Every write to Apple Health, every sync report request and every request for more Health types is a message the agent sends to the iPhone. Writes apply only to the types the owner allowed for writing in the app; a sync report or more Health types need the owner's tap on the phone. The signed skill (syncky_skill) carries the exact formats and limits. A report arrives only after you Review and Confirm on the iPhone; you can decline instead. The phone permits at most one sync report per rolling 24 hours per agent pairing, and a request expires after 24 hours.
To opt in deliberately, remove syncky_send (and, if you want the model to acknowledge entries, syncky_ack) from disabled_tools, save and restart. Write only owner-requested entries or entries covered by explicit standing approval. A write is applied only when its type is in the app's write allowance, within the agent's write scope, and authorized by HealthKit (iOS write permission). Entries identify the requesting agent as their source. A queued or sent write is not an applied write: read the phone's result in the inbox after the next sync. To undo, use the iPhone's remove-written-entries control or have the agent send a delete command for its own entry. Follow the operator security rules.
How do you test the connection?
Ask ChatGPT desktop: Use syncky_status to check the paired iPhone and its read/write scope. Do not read sample values or write anything. Expect a confirmed iPhone and its last reported scope. This reads local state without contacting Relay; it does not establish fresh delivery or complete data.
How do you troubleshoot this setup?
- Server fails to start: make Node.js and npm available to the desktop process and run setup's selftest. If the first npm download exceeds the default 10-second startup timeout, set
startup_timeout_secto60in the server block and restart. - Tools or configuration missing: check the shared home-folder file, matching server name and duplicate blocks. Save the final edit and restart the desktop app.
- Wrong or empty inbox: match the paired home and saved relay across setup, receiver and MCP. Do not initialize over existing state.
- Phone unconfirmed or data old: pick the phone's code and receive its proof. Check the receiver, selected categories, unlocked iPhone and Health permissions, then use Sync now. iOS decides later background timing.
What are the frequently asked questions?
Is desktop UI registration enough for read-only access?
No. Add both disabled tools to the matching shared TOML block before restarting or using tools. The setting is client policy; the stdio server itself can send messages to the iPhone.
Can the web or mobile app use this configuration?
ChatGPT desktop works locally; ChatGPT web and mobile cannot reach a local agent. This recipe requires the local desktop process and the paired agent home.
Does restarting ChatGPT start a receiver?
No. Keep the chosen receiver on the same paired home. Review Privacy and the public security policy before sharing data with a model.
Agent setup · MCP comparison · All guides · Codex CLI and IDE.
How can an agent ask for more Health access?
Only with your explicit approval: the agent sends an access request with syncky_send, naming the read and write types it needs and an optional plain-text reason. In this read-only setup, enable syncky_send first or send it from the CLI. A queued request grants nothing. The owner reviews each type on the phone and taps Allow or Decline; the reply arrives in the inbox and the next ordinary sync confirms the new scope. Asking for access is separate from permission to write Health values. The phone keeps one pending request per agent, admits one per rolling 24 hours, lets a request expire after 24 hours and waits seven days before a declined type can be asked again.