Skip to main content

marrow-mcp

Give your AI agents read-only access to your own Apple Health data.

Marrow is a free iOS app that pulls 174 Apple Health metrics, your food diary and your workouts into one place. This repo is its self-hosted companion server: one Python file, standard library only, that keeps a SQLite mirror of your data on hardware you own and serves it over the Model Context Protocol so agents can query it 24/7, phone in your pocket.

Nothing here talks to a cloud. Data flows phone → your machine, full stop.

An agent querying Marrow over MCP: sleep and workout data answered from the phone

Run it

python3 marrow_server.py                      # prints a pairing URL
python3 marrow_server.py --port 8800 --data ./data

or

docker compose up -d

Open the pairing URL on any screen, then in Marrow: Server → Pair with a server → scan. From then on the app's background pushes keep the mirror current with the app closed.

Connect an agent

The server speaks MCP over Streamable HTTP (JSON-RPC 2.0, protocol version 2025-06-18), authenticated with a bearer token it generates on first run and prints alongside the pairing link.

Claude Code

claude mcp add --transport http marrow \
  http://<server-ip>:8800/mcp \
  --header "Authorization: Bearer <mcp token>"

Claude Desktop, one click

Download marrow.mcpb, double-click it, and Claude Desktop installs the extension and asks for the URL and token. No terminal involved. (The bundle is a tiny zero-dependency bridge in mcpb/; it forwards Claude's stdio to your Marrow URL and nothing else.)

Claude Desktop (manual), Cursor, or anything using an mcp.json

{
  "mcpServers": {
    "marrow": {
      "type": "http",
      "url": "http://<server-ip>:8800/mcp",
      "headers": { "Authorization": "Bearer <mcp token>" }
    }
  }
}

Check it by hand

curl -s http://<server-ip>:8800/mcp \
  -H "Authorization: Bearer <mcp token>" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Tools

All read-only. Nothing an agent can call writes to your health record.

Tool Returns
health_summary Recent days across activity, heart, sleep and nutrition
list_metrics Every metric in the mirror, with units and coverage
metric_daily Daily values for any metric, up to 400 days
metric_samples Raw records with timestamps and source devices
workouts Workouts, including set-by-set strength detail

Then ask your agent things like "how did my sleep change once I started training in the mornings?" and let it go and look.

The other three ways in

This server is one of four, and you do not need it to give agents access:

  1. On-device MCP. Marrow runs the same MCP surface on the iPhone itself at http://<phone-ip>:21212/mcp, answering while the app is running. Richest data, zero extra hardware.
  2. This server. Always-on mirror on your own box.
  3. Relay gateway. Serves the mirror when the phone is asleep.
  4. Manual files. CSV, JSON and GPX out of the share sheet, plus scheduled webhook pushes to any URL (Home Assistant, n8n, your own endpoint).

All four are in the free tier. Setup for all of them: https://skeletonarmy.tech/mcp.

Security

  • Both servers are built for a LAN or a tailnet. Do not port-forward this to the open internet. If you need it remotely, front it with tailscale serve, Caddy, or an equivalent so the transport is HTTPS and the device is authenticated before the bearer token is ever presented.
  • Two separate tokens live in --data: .app-token for the phone's pushes and .mcp-token for agents. Rotating one does not disturb the other.
  • Ingest is idempotent and UUID-keyed, so a replayed batch cannot double-count.

Status

Marrow is in TestFlight beta (0.2.0, build 85), iOS 17+, and requires Apple Health. Ask for an invite.

The iOS app is closed source; this server is not, because you should be able to read anything you are asked to run on your own hardware.

Registry

Listed in the official MCP registry as tech.skeletonarmy/marrow, verified by DNS on skeletonarmy.tech.

mcp-name: tech.skeletonarmy/marrow

Help and policies

Licence

MIT. See LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

marrow_mcp-0.2.3.tar.gz (11.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

marrow_mcp-0.2.3-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

Details for the file marrow_mcp-0.2.3.tar.gz.

File metadata

  • Download URL: marrow_mcp-0.2.3.tar.gz
  • Upload date:
  • Size: 11.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.3

File hashes

Hashes for marrow_mcp-0.2.3.tar.gz
Algorithm Hash digest
SHA256 1f16f52b7dd685292ef2a61076bba145d7823806cdde8af9c5f9e8651c0dd05b
MD5 026c1cfc8f66970df379ac554603f502
BLAKE2b-256 c1f5b53eb5f2d899765c0070424006db76820d22d068c8b969047ec30ccd0adf

See more details on using hashes here.

File details

Details for the file marrow_mcp-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: marrow_mcp-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 12.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.3

File hashes

Hashes for marrow_mcp-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 9099b1c7d9922d0fa3f245fe463ca73505c724d50c23576ffd22e87652a78f31
MD5 9f92a02a190eef9b78d1d2fb8e722c05
BLAKE2b-256 d91958066b8f0c8d57bd6f89945b3f8112df6ea81893f2a5c2cc7d0bbdb5b311

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.4

2 files

This release

0.2.3 This release

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page