How to connect Apple Health to Cursor

What do you get?

Cursor can read selected Apple Health data through your local Syncky agent and request permitted write-back with source and undo. This registration does not disable syncky_send or syncky_ack; review tool requests deliberately. 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 Cursor locally on the machine holding the agent home, Syncky Health on your iPhone, npm and Node.js 22.15 or newer available to Cursor's process. The first npm run may download the agent. Choose your data and model deliberately. Package availability and acceptance by your installed client remain prerequisites.

The configuration and approval instructions below preserve the observations recorded in the public Cursor recipe as of November 2026, without fresh client verification. Setup, receiver and MCP must use the same paired SYNCKY_AGENT_HOME and matching saved relay; agent setup explains relay selection for each app build.

How do you set up Cursor?

  1. 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.

  2. Request a private QR and code:

    npx -y @syncky/agent pair
    

    Pair your iPhone: scan in Syncky Health and pick the code on the iPhone. Scanning alone does not confirm trust. Select read types, allowed write types and Health permissions deliberately. Keep pairing credentials, 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 600
    
  3. For ongoing receipt, deliberately start:

    npx -y @syncky/agent receive
    

    Keep one receiver per home and reuse an existing receiver. For on-demand use, run npx -y @syncky/agent receive --once when you want updates. MCP reads the agent's inbox files and neither pairs nor starts a receiver. Services and schedules require a separate choice.

  4. Use Add to Cursor, or manually merge this server into global ~/.cursor/mcp.json or project .cursor/mcp.json, preserving other servers:

    {"mcpServers":{"syncky":{"command":"npx","args":["-y","@syncky/agent","mcp"]}}}
    

    The HTTPS install page is an observed route to Cursor, not a vendor guarantee. The default home is ~/.syncky-agent; add env.SYNCKY_AGENT_HOME only for a custom home, using the absolute path of the same initialized/paired home used by your receiver, for example /home/you/.syncky-agent. JSON environment values do not expand $HOME or ~; use your actual path, including on Windows.

  5. Review the configured server and run the scope-only prompt below before reading selected data. Cursor enables MCP tool approval by default. Do not auto-allow syncky_send or syncky_ack; approve only writes, sync report requests and access requests you intend. Cursor's mcp.json cannot disable individual tools, so this recipe leaves both tools that change things available and is not a read-only setup. You can toggle the whole server in Customize. Writes apply only to the types the owner allowed for writing in the app, with iOS Health write permission.

    The canonical npm command is npx -y @syncky/agent mcp. A generic alternative for compatible clients is the matching release's checksum-verified syncky-health.mcpb; verify its .sha256 sidecar and SHA256SUMS from 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 Cursor 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 registration does not disable syncky_send or syncky_ack.

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.

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 Cursor: 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?

What are the frequently asked questions?

Both use the same default-home server command and arguments. The link carries the inner server object and the name syncky; custom-home settings need your own absolute paired-home path.

Does this JSON make Cursor read-only?

No. Keep tool approval enabled and approve only intended actions. The write types you allowed in the iPhone app, agent scope and Health permissions still bound what can be written.

Does enabling the server start receiving updates?

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.

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. 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.