Marrow

tech.skeletonarmy由 skeletonarmy.tech 發布v0.4.1更新於 Oct 30, 2026

Marrow Health: your Apple Health data over MCP, from the free iOS app. Reads, and writes on demand.

發布方自己的服務:Marrow

概覽

AI 產生的概覽

自架式的配套伺服器,把免費 Marrow iOS 應用程式中的 Apple 健康資料鏡像到本機 SQLite,並透過 MCP 提供 AI 助理查詢。

可以做什麼
  • 讀取每日簡報、個人基準、變化對比與資料品質報告,皆以你自己的近期常態為基準評分
  • 讀取原始健康資料:摘要、指標清單、每日數值、原始紀錄、運動、睡眠、飲食日記、重量訓練紀錄、症狀與情緒
  • 使用四個內建提示詞(近況如何、每週回顧、就診準備、從文字記錄)與四個資源(今日、指標、目標、品質)
  • 依回溯天數或日期區間查詢任一指標,原始紀錄支援分頁
適用情境
適合希望在自己機器上執行的助理全天候回答 Apple 健康歷史問題、即使手機放在口袋裡也能查詢,且希望健康資料留在自有硬體而非廠商雲端的場合。
執行需求
自有機器上的本機 Python 執行環境(以 pip 安裝 marrow-mcp,或直接執行單一腳本,或使用 Docker);iOS 17+ 上安裝免費 Marrow 應用程式並啟用 Apple 健康;透過應用程式掃描 QR 碼或配對連結完成配對;首次執行產生的 bearer 權杖,需放在 Authorization 標頭中;手機需透過私有或 tailnet 位址連線伺服器,公開位址則需 HTTPS。
安裝前請注意
伺服器保存完整的健康資料鏡像,資料目錄中還有兩個權杖(.app-token 供手機推送、.mcp-token 供助理),需妥善保護該目錄,外洩時輪換權杖。它面向區域網路或 tailnet,不要把連接埠轉送到公開網際網路。自架配對只會暴露唯讀工具,但託管版 Marrow Connect 路徑存在寫入工具,請確認用戶端實際列出的工具。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Marrow,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[Marrow Health]

Marrow Health MCP server (marrow-mcp)

Let your AI agents read your own Apple Health data.

Marrow is a free iOS app that tracks 178 health data series - 172 Apple Health types plus its own meal diary and set-by-set weightlifting log. 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

sh
pip install "marrow-mcp[qr]"                  # [qr] adds segno, which draws the pairing QRmarrow-server --port 8800 --data ./data       # prints a pairing URL

Without [qr] the pairing page shows the pairing JSON instead of a code.

or from a clone

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

or with Docker

sh
docker compose up -d

Open the pairing URL on any screen, then in Marrow: Export, Server MCP, Pair with a server, and scan. From then on the app's background pushes keep the mirror current with the app closed. The app pairs over plain http only on your own networks (a private or tailnet IPv4 address, a .local or .ts.net name, a short LAN name). A public address needs https (--url https://...).

Upgrading to 0.3.0

Stop the old server and start the new one on the same --data directory. An existing mirror.sqlite gains the new columns on first start, and the tokens in --data carry over, so the phone stays paired. Sets logged by Marrow 1.4 carry a set_type (work, warmup, failure or drop). Warm-ups are still listed but no longer count toward volume or records, and rows mirrored before the upgrade read as work sets.

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

sh
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

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

Check it by hand

sh
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

Thirteen tools, all of them reads. The server also carries write tools (log a meal, a workout and so on), but it lists them only after a phone registers it for write-back, and today only Marrow Connect does that. A self-hosted server paired from the app serves the thirteen reads and nothing an agent can call writes to your health record.

Four of them answer in the app's own terms, scored against your own trailing normal with the same math the app's Home page uses (the day itself excluded), so an agent starts from a read that is already true for you instead of judging a number against the population:

ToolReturns
daily_briefOne day: each key metric with its value and a phrase (normal for you, above your normal, well below your normal), food and water against your targets, last night's sleep, training done, mood and symptoms, and flags worth mentioning
baselinesYour own normal per metric: mean and spread over the window, the latest value's z and phrase, the 7-day mean and the 90-day trend per month
what_changedThe recent days against the period before them: what moved and how notable it is for you, food, training, sleep and bedtime shifts, and streams that started or stopped arriving
data_qualityWhat the mirror holds and how fresh it is: per metric the latest day, coverage, cadence, sources and whether it has gone stale, plus diary, sleep and training coverage and when the phone last synced

The nine raw reads:

ToolReturns
health_summaryRecent days across activity, heart, sleep and nutrition
list_metricsEvery metric in the mirror, with units and coverage
metric_dailyDaily values for any metric, up to 400 days
metric_samplesRaw records with timestamps and source devices
workoutsWorkouts from every source: activity, start, end, duration and source
nutrition_logThe meal diary: every logged food with full nutrient detail, by day
strength_logEvery lifting set with its set type and estimated 1RM, per-exercise progression, and volume per muscle group (warm-ups left out)
sleep_logOne night per wake day: bedtime, wake time, hours asleep, minutes per stage
symptoms_and_moodSymptoms with their severity, and State of Mind entries with valence, feelings and what they were about

Every read takes days back from the phone's today, or from and to on the phone's calendar. metric_samples pages with before (the start of the last record you have). Tools with an output schema also answer with structuredContent.

Four prompts come with the server (how_am_i_doing, weekly_review, doctor_prep, log_from_text) and four resources (marrow://today, marrow://metrics, marrow://targets, marrow://quality), for the clients that show them.

Metric keys: list_metrics shows Apple's short names (active_energy_burned), and the tools also accept the app's own keys (active_energy, heart_rate_variability), so an agent moved over from the phone keeps its vocabulary.

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

Kits, recipes and the Claude Code plugin

  • kits/: copy-and-paste setup for Claude Code, Claude Desktop, Cursor, OpenClaw and Hermes Agent.
  • recipes/: receivers for Marrow's Automations (the app POSTs your data to any URL on a schedule, with the app closed): Home Assistant, n8n, Google Sheets through Apps Script, InfluxDB.
  • Built with Marrow: complete projects people run on these connections, starting with Body Ops, a Grafana dashboard for every kind of data Marrow sends. Submit yours there.
  • The Claude Code plugin: /plugin marketplace add MarrowHealth/marrow-mcp then /plugin install marrow-health@marrow. It adds the Marrow Connect server and four commands (/marrow-health:how-am-i-doing, weekly-review, doctor-prep, log) plus a skill that knows which tool answers what.

Why not the built-in Claude or ChatGPT connector?

Both Claude (Pro/Max, US) and ChatGPT now read Apple Health natively. Use them if that is all you need. They stop where this server starts:

Claude / ChatGPT connectorMarrow + this server
Where it worksThe iOS app onlyClaude Code, Claude Desktop, Cursor, OpenClaw, Hermes, any MCP client, on any machine
When it worksWhile you are in the chat on the phone24/7, phone in your pocket, from your own box
What the model seesRaw HealthKit numbersDaily values reconciled against Apple's own totals, meal diary, set-by-set lifts
Where the data livesTheir cloud, per conversationSQLite on hardware you own
CostSubscriptionFree, MIT

OpenClaw / Hermes / any agent on a home machine. Point the agent's MCP config at the server URL with the bearer token, exactly as in the mcp.json block above. Reach it from outside the LAN with tailscale serve --bg --https=8800 http://127.0.0.1:8800 and use the tailnet URL.

The other ways in

This server is one of the doors on Marrow's Export tab, and you do not need it to give agents access:

  1. Local MCP. Marrow runs an MCP server on the iPhone itself at http://<phone-ip>:21212/mcp, answering while the app is running. Seven of the raw reads above, zero extra hardware.
  2. Server MCP. This package: an always-on mirror on your own box.
  3. Automated. Scheduled pushes to any URL (Home Assistant, n8n, your own endpoint).
  4. Manual. CSV, JSON and GPX files out of the share sheet.

All four are in the free tier. Setup for all of them: https://marrowhealthapp.com/guides.

Marrow Connect is the hosted Pro path: Marrow runs the mirror, and ChatGPT, Claude or Gemini read it with the phone asleep and nothing to run. It is the only door that can log for you, once you turn on Allow AI write in the app. https://marrowhealthapp.com/connect

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 on the App Store, iOS 17+, and requires Apple Health. Get it on the App Store.

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.

來源:README.md,提交 7aad60a

工具

0
SourceWeft 曾在隔離沙箱中以無憑證方式啟動該軟體包一次,以列出其工具,但未能完成:該軟體包類型無法在沙箱中執行。

版本歷史

6
  1. v0.4.1最新Oct 22, 2026
  2. v0.3.4Oct 19, 2026
  3. v0.3.2Oct 18, 2026
  4. v0.3.0Oct 14, 2026
  5. v0.2.5Oct 6, 2026
  6. v0.2.4Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Marrow 整合