Hevy2whoop

io.github.mselcukozturk由 GitHub 帳號 mselcukozturk 發布v1.1.0更新於 Nov 6, 2026

Copy Hevy strength workouts into WHOOP Strength Trainer sets with reps and weight

已驗證STDIO僅桌面位置與生活效率與工作流

概覽

AI 產生的概覽

把 Hevy 的力量訓練紀錄(含次數與重量)複製到 WHOOP Strength Trainer,支援先預覽後寫入,並提供動作 ID 目錄。

可以做什麼
  • 同步 Hevy 訓練到 WHOOP Strength Trainer:預覽最近一次訓練或指定日期區間,明確開啟後才寫入
  • 回報未對應與被略過的動作,並略過 WHOOP 中已存在的訓練
  • 列出 WHOOP Strength Trainer 的動作 ID 與名稱,可依搜尋字詞篩選,用來建立動作對應
適用情境
適合在 Hevy 記錄力量訓練、又希望這些組數直接出現在 WHOOP Strength Trainer 而不必在 WHOOP 應用程式裡手動重輸的人,可讓助理依需求執行,也可用排程自動同步。
執行需求
以 stdio 在本機執行,需要 Node.js 24 或更新版本。需要 Hevy Pro 帳號及其 API 金鑰(環境變數 HEVY_API_KEY)、WHOOP 帳號,以及另外安裝並已登入的 totem MCP 伺服器(需在 PATH 中,其 WHOOP 登入約 30 天後過期)。可選設定 HEVY2WHOOP_MAPPING 指向自訂對應檔。
安裝前請注意
寫入 WHOOP 依賴 totem,而 totem 使用 WHOOP 的私有 iOS API;專案說明 WHOOP 條款不允許這樣做,且該介面可能隨時變更,請只用自己帳號並自行承擔風險。同步工具只有在 write: true 時才寫入 WHOOP,但助理可以自行帶入該參數,建議先查看預覽。HEVY_API_KEY 是密鑰;專案稱該金鑰與 WHOOP 權杖只會傳送給 Hevy 和 WHOOP。內建動作對應中有不少是近似對應。

安裝

在 SourceWeft 中

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

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

其他 MCP 客戶端

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

README

hevy2whoop

Copies strength workouts you log in Hevy into WHOOP Strength Trainer: every exercise and every working set, with reps and weight. WHOOP has no Hevy integration, so without this tool the sets have to be entered in the WHOOP app by hand after each session.

hevy2whoop handles the Hevy side and the exercise mapping. Writing to WHOOP is done by totem, an MCP server by Brian Gao.

Read before use. This project is not affiliated with Hevy or WHOOP. WHOOP does not offer a public API for writing Strength Trainer workouts. totem uses WHOOP's private iOS API, which WHOOP's terms do not permit and which can change without notice. Use it at your own risk and with your own account only. hevy2whoop runs on your computer; your Hevy key and WHOOP tokens are sent only to Hevy and WHOOP.

Setting up with an AI agent

Give your agent (Claude Code, Codex, Cursor, ...) this message:

Install hevy2whoop for me by following https://raw.githubusercontent.com/mselcukozturk/hevy2whoop/main/AGENT_INSTALLATION.md

AGENT_INSTALLATION.md takes the agent through each step with a check, maps your unmapped exercises with you, and registers the MCP server in your client. It tells the agent to leave the WHOOP sign-in to you and to write to WHOOP only after you approve a preview.

What it does

  1. Reads your latest Hevy workout, or every workout in a date range, from the official Hevy API.
  2. Converts each exercise to a WHOOP exercise ID using mapping.json. Warm-up sets are left out. Exercises without a mapping entry are reported and not written.
  3. Checks whether WHOOP already has a Strength Trainer activity that starts and ends within 2 minutes of the Hevy workout. If so, the workout is not written again, so repeated runs are safe.
  4. Shows a preview. With --write, it logs the workout to WHOOP.

It runs as a command-line tool, or as an MCP server so that Claude or another MCP client can run the sync on request ("copy yesterday's workout to WHOOP").

Requirements

  • Node.js 24 or later
  • Hevy Pro (the Hevy API key is available only on Pro): hevy.com/settings?developer
  • A WHOOP account
  • totem, installed and signed in

Installation

bash
git clone https://github.com/mselcukozturk/hevy2whoop.gitcd hevy2whoopnpm install -g @thebriangao/totemtotem auth                      # sign in to WHOOP onceexport HEVY_API_KEY=your-hevy-api-key

hevy2whoop has no npm dependencies. It starts totem start from your PATH. totem's WHOOP sign-in lasts about 30 days; when it expires, run totem auth again.

Usage

bash
node hevy2whoop.mjs sync                                      # preview the latest workoutnode hevy2whoop.mjs sync --write                              # write it to WHOOPnode hevy2whoop.mjs sync --from 2026-09-01 --to 2026-09-30    # preview a date rangenode hevy2whoop.mjs sync --from 2026-09-01 --to 2026-09-30 --writenode hevy2whoop.mjs catalog "lateral raise"                   # find WHOOP exercise IDs

Dates are in your local time zone and both ends are included. Example output:

2026-09-06 13:34–14:27  Upper Body  unmapped: Wide Grip Row (template 0b7e5c2a-4d1f-4e8a-9c3b-6f2a1d8e7b90)  skipped by mapping: Warm Up  preview: would write 10 exercises, 20 sets (run with --write to write)

To sync automatically, run node hevy2whoop.mjs sync --write from cron or a systemd timer some time after your workout ends.

MCP server

node hevy2whoop.mjs mcp runs an MCP server over stdio with two tools:

ToolArgumentsEffect
hevy2whoop_syncfrom, to (YYYY-MM-DD, optional), write (default false)Same as sync. Returns one result per workout: preview, written, already_in_whoop, nothing_to_write or error, with unmapped and skipped exercises.
hevy2whoop_catalogsearch (optional)Same as catalog.

The sync tool writes to WHOOP only when it is called with write: true.

Claude Code:

bash
claude mcp add hevy2whoop -e HEVY_API_KEY=your-hevy-api-key -- node /path/to/hevy2whoop/hevy2whoop.mjs mcp

After the npm release, no local clone is needed:

bash
claude mcp add hevy2whoop -e HEVY_API_KEY=your-hevy-api-key -- npx -y hevy2whoop mcp

Claude Desktop, Cursor and other clients (claude_desktop_config.json or the client's MCP settings):

json
{  "mcpServers": {    "hevy2whoop": {      "command": "node",      "args": ["/path/to/hevy2whoop/hevy2whoop.mjs", "mcp"],      "env": { "HEVY_API_KEY": "your-hevy-api-key" }    }  }}

totem must be on the PATH the client gives to the server. If the client cannot find it, add "PATH" to env.

Exercise mapping

mapping.json is keyed by the Hevy exercise_template_id:

json
"DE68C825": {  "hevy": "Single Arm Lateral Raise (Cable)",  "whoop": ["LATERALRAISELEFT_PULLEYMACHINE", "LATERALRAISERIGHT_PULLEYMACHINE"],  "approximate": false,  "note": "the catalog has no two-sided cable lateral raise; every set is written to both sides"}
FieldMeaning
hevyHevy exercise title, for readers of the file
whoopWHOOP exercise IDs. Each working set is written to every ID in the list. An empty list means the exercise is never logged.
approximatetrue when the WHOOP catalog has no exact equivalent and the closest exercise was chosen
noteReason for an approximate or unusual choice

The WHOOP catalog has 372 exercises and Hevy has many more, so a number of entries are approximate. Check the notes and change entries you disagree with.

Adding an exercise

  1. Run sync. Unmapped exercises are listed with their template ID.
  2. Find the WHOOP ID with node hevy2whoop.mjs catalog <search>.
  3. Add an entry to your own mapping file (below), or to mapping.json if the exercise is one of Hevy's built-in exercises and you want to contribute it.

Your own mapping file

Set HEVY2WHOOP_MAPPING to the path of a JSON file in the same format. Its entries are added to mapping.json, and an entry with the same template ID replaces the bundled one. Use it for your custom Hevy exercises and for choices that differ from the bundled mapping; updating the repository then never conflicts with your changes.

bash
export HEVY2WHOOP_MAPPING=~/.config/hevy2whoop/mapping.json

Custom Hevy exercises have UUID template IDs (for example 0b7e5c2a-4d1f-...). They exist only in your account, so keep them in your own file and do not submit them.

Contributing

Pull requests that add or correct entries for Hevy's built-in exercises (8-character template IDs) are welcome. Please set approximate and explain the choice in note when the match is not exact.

Limitations

  • WHOOP stores a duration for each set; Hevy does not. The workout duration is divided equally across the working sets.
  • Drop sets and failure sets are written as ordinary sets.
  • Only workouts WHOOP records as Strength Trainer activities count as already logged. A separate activity recorded by the strap during the same session is left untouched.
  • For one-sided exercises, Hevy counts reps per side, while some WHOOP entries may count the total. See the notes in mapping.json.

Testing

bash
node test/e2e.mjs

Runs the command-line tool and the MCP server end to end against a fake Hevy API and a fake totem server, covering the cases in docs/failure-scenarios.md, and writes the result to artifacts/e2e-result.json. No real account is used.

Credits

  • totem by Brian Gao (MIT) does all communication with WHOOP.
  • hevy2garmin does the same job for Garmin Connect and was a reference for this project.

License

MIT

來源:README.md,提交 bccf837

工具

2

hevy2whoop_sync

Copy Hevy strength workouts into WHOOP Strength Trainer. Without from/to, takes the latest Hevy workout. Without write: true, only previews. With write: true, WRITES the workouts to WHOOP; workouts already in WHOOP are not written again. Reports exercises that have no entry in the exercise mapping.

輸入參數tofromwrite

hevy2whoop_catalog

List WHOOP Strength Trainer exercise IDs and names, optionally filtered by a search text. Use it to find IDs for the exercise mapping.

輸入參數search

版本歷史

1
  1. v1.1.0最新Nov 5, 2026

評分

已滿足適用檢查項的 90%

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

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

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

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分