list_workouts
List workouts from the Health Access folder, newest first, with a one-line summary each. Read-only.
limitsincesport
io.github.CloudCorpRecords由 GitHub 帳號 CloudCorpRecords 發布v0.1.0更新於 Nov 5, 2026
Read a Health Access folder of Apple Watch workouts and vitals; write training plans back as files.
讀取本機 Health Access 資料夾中的 Apple Watch 訓練、生命徵象與心電圖,並把訓練計畫與努力評分以檔案形式寫回。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
參照 儲存庫 中的啟動說明。
Read a Health Access folder of Apple Watch workouts and vitals, and write training plans back into it — as plain files. The folder an app writes from Apple Health (workouts, day files, an index, a profile) is the whole API: this package is a local stdio MCP server plus a CLI over that folder. No account, no network, nothing leaves the machine.
First hit wins:
--dir <folder> on the command lineHEALTHACCESS_DIR environment variable (alias TIDE_DIR)dir = "..." in ~/.config/healthaccess/config.toml (the path can
be overridden with HEALTHACCESS_CONFIG; zone bounds can also be
set there as zones = [133, 146, 158, 169])~/Library/CloudStorage/*,
~/Dropbox, ~/Google Drive, ~/OneDrive*, ~/Box, then
~/Documents. A Health Access folder holds an index.json of
schema healthaccess.index.v1 and a workouts/ directory. If
discovery finds several, the server refuses to guess and lists them.Run healthfolder --check to print the resolved folder, where it came
from, and the zone bounds in effect.
Every command prints pretty JSON. Exit codes: 0 success, 1 domain or
IO error, 2 usage error. --dir works on every subcommand.
MCP client config:
Add "--dir", "<absolute path>" to args to skip the folder search.
All results are pretty-printed JSON text with floats rounded to one
decimal. Malformed arguments are JSON-RPC InvalidParams errors;
domain problems (unknown id, failed validation, a refusal) come back
as isError results with the reason in plain words.
Two safety rules are built in:
rate_workout only ever stores a number the athlete said. A workout
that already carries Apple's own rating (effort_source: "apple")
is refused unless the call passes override: true — the refusal
names the file, the existing rating, and the remedy, and nothing is
written.push_plan reports every validation violation in one message
(sport, name length, block/step shape, goal type and value, zone,
label length), so a plan can be fixed in one pass.Resources: healthaccess://index (the deduplicated index) and the
template healthaccess://workout/{id} (one workout, heart-rate series
included). MCP prompts are not implemented in this build.
profile.json: max HR =
208 − 0.7 × age, bounds at 72/79/86/92 % of it (age 34 →
[133, 146, 158, 169]). Zone seconds are computed from the heart-rate
series: each sample's time until the next sample goes to that
sample's zone, only time inside the workout counts, gaps over 60 s
count as 60 s. With no bounds known, a file's own legacy zones are
shown, marked bounds_source: "file".2026-05-14 Pool swim "S12" · 1200 m · 36:06 · avg HR 129 (max 162) · Z1–2 93% · effort 6/10 (apple) · best FR 100 2:12 → 284 beats/100 m
— each segment appears only when its data exists.On initialize, and after tool calls at most once a minute, the server
writes mcp/clients/<id>.json in the folder so the app can show
"Connected". The id is the FNV-1a 64 hash of machine name + client
name; the file carries the client name/version from the initialize
request, the machine name (HEALTHACCESS_MACHINE overrides it), call
counts carried over between writes, and the last tool name — never
arguments or results. A failed write never fails a tool call. The CLI
writes the same file, as client healthfolder-cli, only from the
commands that write into the folder anyway (rate, plan push).
Mount the Health Access folder into the container and pass --dir
(or set HEALTHACCESS_DIR) so the server can find it.
MIT — Copyright (c) 2026 Rene Turcios.
來源:README.md,提交 cf06900
List workouts from the Health Access folder, newest first, with a one-line summary each. Read-only.
limitsincesportOpen one workout in full: the workout document plus summary, parts text and cardiac cost. Read-only.
id必填include_lapsinclude_hr_seriesThe seven-metric vitals view (resting HR, HRV, body mass, sleep, steps, VO2max, blood pressure) of the last N days, oldest first, with latest values and averages. Read-only.
daysTraining summary: one entry per ISO week ending in the current week, empty weeks included. Read-only.
weeksStore the athlete's own effort rating (1 to 10) and optional feel note in a workout file. Call only with a number the athlete said; an existing Apple rating is refused unless override is true.
id必填feeleffort必填overrideValidate a healthaccess.plan.v1 training plan and write it into the folder's plans/ directory for the app to put on the Watch. Every validation violation is reported in one message.
plan必填Read a plan's status as the app recorded it: pending, scheduled, failed or cancelled. Read-only.
id必填List every plan in the folder's plans/ directory with its state, planned distance and time, newest first. Read-only.
無需輸入參數。
Read one day file (days/<date>.json) with every Health group it holds. Read-only.
date必填Read the day files in a date range (at most 366 days), oldest first, optionally reduced to named groups. Read-only.
to必填from必填groupsRead catalog.json (which Health types have data and where they were exported) plus the export-coverage check. Read-only.
無需輸入參數。
Read profile.json: age, birth year, sex, blood type and the app's other profile fields. Read-only.
無需輸入參數。
List every ECG file in the folder's ecg/ directory, newest first. Read-only.
無需輸入參數。
已滿足適用檢查項的 90%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
npx -y @reneturcios/healthfolder --checknpx -y @reneturcios/healthfolder list --sport swim --limit 5npx -y @reneturcios/healthfolder show 7A1C3E90npx -y @reneturcios/healthfolder vitals --days 14npx -y @reneturcios/healthfolder summary --weeks 4npx -y @reneturcios/healthfolder rate 7A1C3E90 7 "legs heavy, breathing fine"npx -y @reneturcios/healthfolder plan push ./s30.jsonnpx -y @reneturcios/healthfolder plan status 2026-10-24T20:22:05Z-s30npx -y @reneturcios/healthfolder plan listnpx -y @reneturcios/healthfolder day 2026-05-14npx -y @reneturcios/healthfolder days --from 2026-05-01 --to 2026-05-14 --groups heart,sleepnpx -y @reneturcios/healthfolder catalognpx -y @reneturcios/healthfolder profilenpx -y @reneturcios/healthfolder ecgsnpx -y @reneturcios/healthfolder mcp{ "mcpServers": { "healthfolder": { "command": "npx", "args": ["-y", "@reneturcios/healthfolder", "mcp"] } }}docker run -i ghcr.io/cloudcorprecords/healthfolder # stdio MCP serverdocker run --rm ghcr.io/cloudcorprecords/healthfolder list --dir /datanpm installnpm run build # tsc -> dist/npm test # tsx --test test/*.test.ts (synthetic folders, no network)npm run dev # run the CLI from source