hevy2whoop について
hevy2whoopは、Hevyの筋力トレーニングを種目、ワーキングセット、回数、重量とともにWHOOP Strength Trainerへコピーします。両方のアプリで記録する人向けで、書き込み前に内容をプレビューできます。
主な機能
- 01最新または期間指定のHevyワークアウトを取得
- 02Hevyの種目をWHOOP IDに対応付け
- 03書き込み前の変更プレビュー
- 04WHOOPに記録済みの重複ワークアウトをスキップ
- 05WHOOP種目カタログの検索
活用シーン
- 01直近のHevyワークアウトをWHOOPにコピー
- 02指定期間のワークアウトを同期
- 03未対応種目の確認とWHOOP IDの検索
MCP 対応
MCPサーバーとして動作し、`hevy2whoop_sync`と`hevy2whoop_catalog`ツールを提供します。`write: true`を指定した場合のみ、同期でWHOOPに書き込みます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
2掲載時のツール一覧 · 6 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| to | string | いいえ | 範囲に含める最後のローカル日付(YYYY-MM-DD)です。from の指定が必要です。 |
| from | string | いいえ | 範囲の最初のローカル日付(YYYY-MM-DD)です。to の指定が必要です。 |
| write | boolean | いいえ | true の場合は WHOOP に書き込みます。false または未指定の場合はプレビューのみ行います。 |
詳細
hevy2whoop
Hevyに記録した筋力トレーニングのワークアウトをWHOOP Strength Trainerにコピーします。すべてのエクササイズとワーキングセットを、回数と重量も含めてコピーします。WHOOPにはHevyとの連携機能がないため、このツールを使わない場合、各セッション後にWHOOPアプリでセットを手動入力する必要があります。
hevy2whoopはHevy側の処理とエクササイズのマッピングを担当します。WHOOPへの書き込みには、Brian GaoによるMCPサーバーのtotemを使用します。
使用前にお読みください。 このプロジェクトはHevyおよびWHOOPと提携していません。 WHOOPはStrength Trainerのワークアウトを書き込むための公開APIを提供していません。 totemはWHOOPの非公開iOS APIを使用しています。これはWHOOPの利用規約で許可されておらず、 予告なく変更される可能性があります。使用は自己責任で、ご自身のアカウントのみで行ってください。 hevy2whoopはお使いのコンピューター上で動作します。HevyキーとWHOOPトークンはHevyとWHOOPにのみ送信されます。
AI エージェントを使ったセットアップ
エージェント(Claude Code、Codex、Cursorなど)に次のメッセージを渡してください。
https://raw.githubusercontent.com/mselcukozturk/hevy2whoop/main/AGENT_INSTALLATION.md に従って、hevy2whoopをインストールしてください。
AGENT_INSTALLATION.mdでは、各手順を確認しながらエージェントが進め、未マッピングのエクササイズを一緒にマッピングし、お使いのクライアントにMCPサーバーを登録します。また、WHOOPへのサインインはユーザー自身が行い、プレビューを承認した後にのみWHOOPへ書き込むよう、エージェントに指示します。
できること
- 公式Hevy APIから、最新のHevyワークアウト、または指定した期間内のすべてのワークアウトを読み取ります。
mapping.jsonを使って、各エクササイズをWHOOPのエクササイズIDに変換します。ウォームアップセットは除外されます。マッピングエントリのないエクササイズは報告され、書き込まれません。- WHOOPに、Hevyワークアウトの開始時刻と終了時刻から2分以内に始まり、終わるStrength Trainerアクティビティがすでにあるか確認します。該当する場合、ワークアウトは再度書き込まれないため、繰り返し実行しても安全です。
- プレビューを表示します。
--writeを指定すると、ワークアウトをWHOOPに記録します。
コマンドラインツールとして、またはMCPサーバーとして実行できます。MCPサーバーとして実行すると、ClaudeなどのMCPクライアントからリクエストに応じて同期できます(「昨日のワークアウトをWHOOPにコピーして」など)。
必要条件
- Node.js 24以降
- Hevy Pro(Hevy APIキーはProでのみ利用できます): hevy.com/settings?developer
- WHOOPアカウント
- インストール済みでサインイン済みのtotem
インストール
git clone https://github.com/mselcukozturk/hevy2whoop.git
cd hevy2whoop
npm install -g @thebriangao/totem
totem auth # sign in to WHOOP once
export HEVY_API_KEY=your-hevy-api-key
hevy2whoopにはnpm依存関係がありません。PATHからtotem startを起動します。totemのWHOOPサインインは約30日間有効です。有効期限が切れたら、再度totem authを実行してください。
使い方
node hevy2whoop.mjs sync # preview the latest workout
node hevy2whoop.mjs sync --write # write it to WHOOP
node hevy2whoop.mjs sync --from 2026-09-01 --to 2026-09-30 # preview a date range
node hevy2whoop.mjs sync --from 2026-09-01 --to 2026-09-30 --write
node hevy2whoop.mjs catalog "lateral raise" # find WHOOP exercise IDs
日付はローカルタイムゾーンで指定し、開始日と終了日の両方が含まれます。出力例:
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)
同期を自動化するには、ワークアウト終了後しばらくしてから、cronまたはsystemdタイマーでnode hevy2whoop.mjs sync --writeを実行してください。
MCPサーバー
node hevy2whoop.mjs mcpを実行すると、stdio経由で次の2つのツールを提供するMCPサーバーが起動します。
| ツール | 引数 | 効果 |
|---|---|---|
hevy2whoop_sync | from、to(YYYY-MM-DD、省略可)、write(デフォルトはfalse) | syncと同じです。各ワークアウトについて、未マッピングおよびスキップされたエクササイズとともに、preview、written、already_in_whoop、nothing_to_write、errorのいずれかの結果を返します。 |
hevy2whoop_catalog | search(省略可) | catalogと同じです。 |
同期ツールは、write: trueを指定して呼び出された場合にのみWHOOPに書き込みます。
Claude Code:
claude mcp add hevy2whoop -e HEVY_API_KEY=your-hevy-api-key -- node /path/to/hevy2whoop/hevy2whoop.mjs mcp
npmリリース後は、ローカルクローンは不要です。
claude mcp add hevy2whoop -e HEVY_API_KEY=your-hevy-api-key -- npx -y hevy2whoop mcp
Claude Desktop、Cursor、その他のクライアント(claude_desktop_config.jsonまたはクライアントのMCP設定):
{
"mcpServers": {
"hevy2whoop": {
"command": "node",
"args": ["/path/to/hevy2whoop/hevy2whoop.mjs", "mcp"],
"env": { "HEVY_API_KEY": "your-hevy-api-key" }
}
}
}
クライアントからサーバーに渡されるPATHにtotemが含まれている必要があります。クライアントが見つけられない場合は、"PATH"をenvに追加してください。
エクササイズのマッピング
mapping.json は Hevy の exercise_template_id をキーにしています。
"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"
}
| フィールド | 意味 |
|---|---|
hevy | ファイルを読む人向けの Hevy エクササイズ名 |
whoop | WHOOP のエクササイズ ID。各ワーキングセットは、リスト内のすべての ID に記録されます。空のリストは、そのエクササイズが記録されないことを意味します。 |
approximate | WHOOP のカタログに完全一致するものがなく、最も近いエクササイズを選んだ場合は true |
note | 近似または通常とは異なる選択をした理由 |
WHOOP のカタログには 372 種類のエクササイズがあり、Hevy にはそれよりもはるかに多くのエクササイズがあるため、近似となる項目がいくつかあります。注記を確認し、納得できない項目があれば変更してください。
エクササイズの追加
syncを実行します。マッピングされていないエクササイズがテンプレート ID とともに一覧表示されます。node hevy2whoop.mjs catalog <search>で WHOOP の ID を探します。- 独自のマッピングファイル(下記)に項目を追加するか、Hevy に組み込みのエクササイズで、その内容を共有したい場合は
mapping.jsonに追加します。
独自のマッピングファイル
HEVY2WHOOP_MAPPING に、同じ形式の JSON ファイルのパスを設定します。そのファイルの項目は mapping.json に追加され、同じテンプレート ID の項目がある場合は、バンドル版の項目を置き換えます。カスタム Hevy エクササイズや、バンドル版のマッピングとは異なる選択に使用してください。そうすれば、リポジトリを更新しても変更内容と競合しません。
export HEVY2WHOOP_MAPPING=~/.config/hevy2whoop/mapping.json
カスタム Hevy エクササイズのテンプレート ID は UUID です(例:0b7e5c2a-4d1f-...)。これらは自分のアカウント内にしか存在しないため、独自のファイルに保存し、提出しないでください。
コントリビューション
Hevy の組み込みエクササイズ(8 文字のテンプレート ID)の項目を追加または修正するプルリクエストを歓迎します。一致が完全ではない場合は、approximate を設定し、選択理由を note に記載してください。
制限事項
- WHOOP は各セットの時間を保存しますが、Hevy は保存しません。ワークアウトの時間はワーキングセット間で均等に分割されます。
- ドロップセットと限界まで行ったセットは、通常のセットとして記録されます。
- すでに記録済みとして扱われるのは、WHOOP が Strength Trainer アクティビティとして記録したワークアウトのみです。同じセッション中にストラップが別途記録したアクティビティには手を加えません。
- 片側ずつ行うエクササイズでは、Hevy は片側ごとにレップ数を数えますが、WHOOP の項目によっては合計数を数える場合があります。
mapping.jsonの注記を参照してください。
テスト
node test/e2e.mjs
偽の Hevy API と偽の totem サーバーを使用して、コマンドラインツールと MCP サーバーをエンドツーエンドで実行し、docs/failure-scenarios.md に記載されたケースをテストして、結果を artifacts/e2e-result.json に書き込みます。実際のアカウントは使用しません。
クレジット
- totem は Brian Gao によるもので(MIT)、WHOOP との通信をすべて担当します。
- hevy2garmin は Garmin Connect 向けに同じ処理を行うもので、このプロジェクトの参考にしました。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。