Suunto MCP について
Suunto MCP は、ワークアウト、睡眠、リカバリー、日常アクティビティなど Suunto ウォッチのデータを Claude などの AI アシスタントに接続するプロジェクトです。トレーニング履歴を自然な言葉で照会したい個人ユーザー向けです。ガイド付きワークアウトやルートをウォッチへ送信することもできます。
主な機能
- 01ワークアウト、睡眠、リカバリー、日常アクティビティの読み取り
- 02距離、心拍数、標高に関する自然言語での質問応答
- 03指標条件によるワークアウトの絞り込み
- 04ガイド付きワークアウトのウォッチへのアップロード
- 05ルートの GPX エクスポート
活用シーン
- 01直近の長距離ランにおける心拍ドリフトの比較
- 022週間の安静時心拍数の推移の確認
- 03ジムでのセッションを計画しウォッチへ送信
MCP 対応
本プロジェクトは MCP サーバーとして、Suunto のワークアウト、睡眠、リカバリーデータを Claude Desktop などの MCP クライアント向けツールとして公開します。ワークアウト内容のウォッチへの送信にも対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y suunto-mcpSUUNTO_CLIENT_IDSuunto API zone OAuth client IDSUUNTO_CLIENT_SECRETシークレットSuunto API zone OAuth client secretSUUNTO_SUBSCRIPTION_KEYシークレットSuunto API zone subscription keyローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
26掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| limit | integer | いいえ | 返すワークアウトの最大数(1~1000)。デフォルトは 25 です。API ページを自動的にページネーションします。最新のワークアウトのみを取得するには 1 を指定してください。 |
| since | string | いいえ | startTime の ISO 8601 下限(包含)。ワークアウトの開始時刻で絞り込みます。省略すると全期間が対象です。ページネーションは自動のため、since はページサイズに影響しません。 |
| until | string | いいえ | startTime の ISO 8601 上限(包含)。省略すると現在までのワークアウトが対象です。since と組み合わせて特定の期間を指定できます。 |
詳細
Suunto MCP
Claude にトレーニングについて何でも聞けます。 Suunto MCP は Suunto ウォッチのデータを Claude に接続するので、ダッシュボードをあれこれクリックする代わりに、データに直接話しかけることができます。
「先週のロング走はどうだった?」と聞いて、数字を伴う本当の答えを得たい、そしてライブのトレーニングデータをパーソナル AI コーチに取り込みたいと考えた、一人の Suunto ユーザーによって作られました。
🏃 一般の Suunto ユーザーの方へ: Suunto の API ドキュメントには、アクセスは商用パートナー限定と書かれていますが、それが全てではありません。 個人ユーザーもアクセスできます。申請後に承認されるまで 3〜4 週間 かかるだけです。申請して、待って、楽しんでください。その免責事項に足を止められないでください。✅
できること
セットアップが完了したら、あとは聞くだけです:
- 「今月は何キロ走りましたか?」
- 「直近のロング走 3 回を比較して — 心拍ドリフトは改善していますか?」
- 「昨夜のジムのセッションで、セットごとに心拍数はどう持ちこたえましたか?」
- 「過去 2 週間の平均安静時心拍数のトレンドは?」
- 「トレーニングの 1 週間をコーチングレポート風にまとめてください。」
- 「最近調子が良くないのですが、回復スコアは先月と比べてどうですか?」
- 「平均心拍数が 160 bpm を超えたワークアウトをすべて見つけてください。」
- 「今年のランのうち、獲得標高が最も多かったのはどれですか?」
どのデータを取得すべきかは Claude が判断します。あなたはただ聞くだけです。
読み取り専用というわけでもありません — Claude はウォッチにデータを送ることもできます:
- 「今夜のジムのセッションを計画して、ウォッチに送ってください。」
- 「昨日の Garmin のエクスポートを Suunto のワークアウトとしてアップロードしてください。」
- 「直近のルートを GPX としてエクスポートして、共有できるようにしてください。」
以下で詳しく説明します: ウォッチに送れるもの。
🤖 自分でやりたくない場合? Claude Code にインストールさせましょう
すでに Claude Code をお持ちなら、ターミナルコマンドを 1 つも実行する必要はありません。開いてこう言うだけです:
「https://github.com/googlarz/suunto-mcp から suunto-mcp をインストールしてセットアップしてください」
Claude Code がリポジトリをクローンし、すべてのインストールコマンドを実行し、すべてを Claude Desktop の設定に追加します — 自力で。まさにこのプロジェクトの作者がそうやってセットアップしました。手動のターミナル作業は一切ありません。
次の 3 つは、何があってもあなた自身の作業として残ります。ツールが足りないからではなく、意図的にそうなっています:
- apizone.suunto.com のアカウント作成 — Claude はあなたに代わってアカウントを作成できません。
- apizone の Web フォーム(アプリの命名、サブスクリプションキーの表示) — これはあなたのアカウントセッションです。Claude はどこをクリックすべきかを正確に伝えますが、あなたの代わりにそこをクリックすることはできません。
- ログイン時の「Authorize」のクリック — これは OAuth が意図どおりに動作しているということです。自分自身のアクセスを承認できるアプリは安全ではありません。
これらのそれぞれについて、Claude が何をいつ行うべきかを正確に伝えます。
手動でやりたい場合は、読み続けてください。
必要なもの
始める前に、以下を用意してください:
- Suunto ウォッチ — Suunto アプリと同期済み(最新モデルならどれでも — Race、Vertical、9 Peak、5 Peak、Ocean など)
- Claude Desktop(または他の MCP 互換 AI アプリ)
- Node.js — 無料、こちらからダウンロード、「LTS」バージョンを選択
- Git — 無料、こちらからダウンロード
- 申請に約 5 分 + Suunto の承認待ちに 3〜4 週間 + インストールに約 15 分
一度終われば、やり直す必要はありません。
セットアップ
最初にペースを選択できるガイド付きのウォークスルー(高速ルート か、ステップごとの解説付きか)と、同期の仕組みについての適切な説明をお望みですか? GETTING_STARTED.md をご覧ください。ここに書かれているのは、同じ 手順をリファレンス形式で示したものです。
セットアップは 3 つのパートで構成されています:
- Suunto の開発者ポータルに登録する — Suunto に、あなたのアプリがあなたのデータを読み取ることを許可されていると伝えます
- インストールと設定 — ソフトウェアをあなたのコンピューターで実行できるようにします
- Claude に接続する — AI がそれを見つけて使用できるようにします
パート 1: Suunto の開発者ポータルに登録する (送信までは約 5 分、その後 3〜4 週間待ちます)
Suunto には apizone という無料の開発者ポータルがあり、あなたのデータにアクセスできるアプリをここで登録します。アカウントを作成し、データプランを購読し、小さな「アプリ」を登録します — 心配しないでください、何かを作る必要はありません。ただの名前と、あなたが考えるパスワードだけです。
ステップ 1: apizone アカウントを作成する
apizone.suunto.com にアクセスして、サインアップまたはサインインします。
Suunto アプリで使用しているのと同じメールアドレスを使用してください。 Sports Tracker アカウントをお持ちの場合は、それも使えます — 同じログインシステムです。
ステップ 2: Developer API を購読する
サインイン後、How to start ガイドに従ってください — Developer API の購読手順を案内してくれます。これは無料で、あなたのワークアウト履歴にアクセスできるようになります。
ご注意: Suunto のウェブサイトには、API アクセスは商用パートナー専用であると記載されています — それは無視してください。個人ユーザーもアクセスできますが、購読が承認されるまでに 3〜4 週間 かかるだけです。申請して待ちましょう。必ず承認されます。
「Sleep API」「Recovery API」「Daily Activity API」など、他の製品が表示される場合があります。始めるには Developer API で十分です(ワークアウト)。睡眠、リカバリー、歩数、デイリースナップショット、デイリーダイジェストが必要な場合は、他の 3 つも購読してください — それらは Developer API の隣に記載されており、後から追加することもできます。
⏳ ここで止まって待ってください。 購読すると、Suunto があなたのリクエストを承認する必要があります。これには 3〜4 週間 かかります。完了するとメールが届きます。apizone プロフィールで購読が Active と表示されてから、ステップ 3〜4 に戻ってください。
ステップ 3: アプリを登録する (承認後に行ってください)
Suunto にこう伝えます:「私には小さなプログラムがあります。これがその名前と秘密のパスワードです — 私のデータを読み取れるようにしてください。」
-
apizone プロフィールページにアクセスします
-
OAuth application settings までスクロールダウンします
-
フォームに入力します:
フィールド 入力する内容 App name suunto-mcp(または好きな名前)Client secret 一意のパスワードを考えてください — あなただけが知っているもの、例えばあなた自身の名前を入れて alice-suunto-2026のように。書き留めておいてください。この例をそのまま使わないでください。Redirect URI http://localhost:8421/callback— これを正確にコピーしてください -
Save をクリックします
保存後、フォームに Client ID が表示されます — Suunto があなたのために生成した長いコードです。それをコピーしてください。
これら 3 つは何ですか? — Client ID: あなたのアプリのユーザー名で、Suunto が生成します — Client Secret: あなたのアプリのパスワードで、あなたが選びます — Redirect URI: アクセスを承認した後に Suunto があなたを戻す場所です — 正確に一致する必要があり、タイプミスがあると壊れます
Client Secret は保存後に二度と表示されません。忘れた場合は、同じフォームで新しいものを設定するだけです。
ステップ 4: サブスクリプションキーを取得する (承認後に行ってください)
サブスクリプションキーは、すべてのデータリクエストに付与される 2 つ目のパスコードです。見つけ方は次のとおりです:
- 引き続き apizone プロフィールページ で操作します
- サブスクリプション セクションまでスクロールします
- そこに Developer API サブスクリプションが表示されています。その横に プライマリキー が表示されるので、横のボタンをクリックして表示し、キーをコピーします。
続行する前に 3 つの値すべてを保存 してください — パート 2 で必要になります:
- クライアント ID(上記の OAuth アプリフォームで取得)
- クライアントシークレット(あなたが作成したパスワード)
- サブスクリプションキー(サブスクリプションセクションで取得)
パート 2: インストールと設定(約 10 分、Suunto の承認後)
上記の「Claude Code にインストールさせる」オプションを使いましたか? Claude が 以下のすべてのコマンドをすでに実行済みです — パート 3 に進んでください。 これらの手順は、手動で行う場合のものです。
ステップ 5: コードをダウンロードする
Mac では ターミナル を開き(⌘Space を押して「Terminal」と入力)、Windows では コマンドプロンプト を開きます。そして、次のコマンドを 1 つずつ実行します:
git clone https://github.com/googlarz/suunto-mcp
cd suunto-mcp
npm install
npm run build
これによりコードがダウンロードされ、必要なものがインストールされ、ビルドされます。1〜2 分かかります。エラーが表示された場合は、トラブルシューティング セクションを確認してください。
ステップ 6: 認証情報を追加する
suunto-mcp フォルダーに .env というファイルを作成し、3 つの値を記入します。残りの作業を Claude に任せる場合でも、これらの 3 つの値はチャットに貼り付けず、自分で入力してください — 会話履歴に残らないようにするためです。
Mac の場合:
cp .env.example .env
open -e .env
これはテンプレートをコピーして TextEdit で開きます。各プレースホルダーを実際の値に置き換えて、保存して閉じます。
Windows の場合:
copy .env.example .env
notepad .env
ファイルは次のようになっています — = 記号の後ろの部分を置き換えてください:
SUUNTO_CLIENT_ID=your-client-id-here
SUUNTO_CLIENT_SECRET=your-client-secret-here
SUUNTO_SUBSCRIPTION_KEY=your-subscription-key-here
ファイルを保存して閉じます。
ウォッチにガイド付きワークアウトをプッシュしたい場合のみ( ウォッチにプッシュできるもの を参照)、もう 1 行追加します:
SUUNTO_APP_NAME=your-app-name-here— これはステップ 3 で apizone.suunto.com に登録したアプリ名と完全に一致している必要があります。一致していないと、ウォッチがアップロードを拒否します。それ以外には必要ありません。
ステップ 7: Suunto アカウントをペアリングする
npm run auth
何が起こるかは、正確には次のとおりです:
① ターミナル — 長い URL が表示され、「Opening Suunto authorization in your browser…」というメッセージが表示されます。
② ブラウザーが開く — Suunto のログインページが表示されます。Suunto アプリのログインとまったく同じに見えます。上部にメールアドレスとパスワードのフィールドがあり、その下に「Sign in with Apple」と「Sign in with Facebook」があります。使用している方法でサインインしてください。
③ 権限画面 — ログイン後、「suunto-mcp」へのアクセスを承認するよう求める画面が表示されます。アプリが読み取れるもの(あなたのワークアウト)が一覧表示されます。承認 をクリックします。
④ ブラウザーでの確認 — ページに 「Suunto MCP connected. You can close this tab.」 と表示されます。
⑤ ターミナルでの確認 — 「Paired successfully. Tokens saved.」 と出力されます。
完了です — これを再度行う必要はありません。接続はアクティブなまま維持され、自動的に更新されます。
ブラウザーが自動的に開きませんでしたか? ターミナルから長い URL をコピーし、ブラウザーに手動で貼り付けてください。
ステップ 8: すべてが動作していることを確認する
npm run doctor
これでヘルスチェックが実行されます。次のような出力が表示されるはずです:
Suunto MCP — health check
✓ Node version 20.18.0 (require ≥ 20)
✓ Credentials client_id, client_secret, subscription_key set
✓ Network → cloudapi-oauth.suunto.com reachable (HTTP 200)
✓ Pairing paired (user: your-username), token expires in 47 min
✓ API probe (list_workouts) received 1 workout
正確な行は多少異なり、睡眠、回復、毎日のアクティビティの各プロダクトではさらに多くの行が表示されます。いずれかの行に ✗ が表示された場合、メッセージに修正すべき内容が正確に示されています — 次に進む前に対処してください。! は警告にすぎません(たとえば、購読していないオプションのプロダクトなど)。
パート 3: Claude Desktop に接続する(約 5 分)
「Claude Code にインストールさせる」オプションを使いましたか? このパートも完了しています — Claude が設定を直接編集しました。Claude Desktop を再起動して、 ステップ 11 に進んでください。
ここでは、Suunto MCP の場所を Claude Desktop に伝えます。
ステップ 9: Claude の設定ファイルを開く
このファイルをテキストエディタで開きます(まだ存在しない場合は作成してください):
- Mac:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Mac での簡単な方法 — ターミナルでこれを実行します:
mkdir -p ~/Library/Application\ Support/Claude && open -e ~/Library/Application\ Support/Claude/claude_desktop_config.json
Windows での簡単な方法 — コマンドプロンプトでこれを実行します:
notepad "%APPDATA%\Claude\claude_desktop_config.json"
(「ファイルが見つかりません — 作成しますか?」と表示されたら、「はい」をクリックしてください。)
ステップ 10: Suunto MCP を追加する
まず、suunto-mcp フォルダへの実際のパスを確認します。ターミナルで、そのフォルダ内にいる状態で次を実行します:
pwd
/Users/yourname/suunto-mcp のような文字列が出力されるので、それをコピーします。
次に、以下を設定ファイルに貼り付けます。/Users/yourname/suunto-mcp は pwd で取得したパスに置き換え、認証情報のプレースホルダーは実際の値に置き換えてください。
ファイルにすでに他のサーバーが設定されている場合は、ファイル全体を置き換えず、それらと並べて
"suunto"セクションを追加するだけにしてください。構造は有効な JSON である必要があるため、すべての中括弧の対応を保ってください。迷ったときは、ご自身のファイルを以下の例と比較してください。ファイルが空の場合は、ブロック全体をそのまま貼り付けてください。
{
"mcpServers": {
"suunto": {
"command": "node",
"args": ["/Users/yourname/suunto-mcp/dist/index.js"],
"env": {
"SUUNTO_CLIENT_ID": "your-client-id",
"SUUNTO_CLIENT_SECRET": "your-client-secret",
"SUUNTO_SUBSCRIPTION_KEY": "your-subscription-key"
}
}
}
}
ガイド付きワークアウトもウォッチにプッシュしたい場合は、"env" 内にもう 1 行追加します。SUUNTO_SUBSCRIPTION_KEY の行の末尾にカンマを付け、その次の新しい行に "SUUNTO_APP_NAME": "your-app-name"(apizone に登録したアプリ名と完全に同じもの)を追加してください。Claude にデータについて聞くだけの場合は、これは必要ありません。
サーバーが必要とするものはすべてこの "env" ブロックに入っている必要があります。.env ファイルが読み込まれるのは、このフォルダから実行したときのターミナルコマンド(npm run auth、npm run doctor、CLI)だけです。
ファイルを保存します。
ステップ 11: テストする
3 つのこと、この順番で — セットアップの中で、他の何も代わりにできない唯一の部分です:
- Claude Desktop を完全に終了します。 単にウィンドウを閉じるだけではなく — Mac では ⌘Q、Windows ではタスクバーのアイコンを右クリック → 終了です。 設定の変更は、新しく起動したときだけ読み込まれます。
- Claude Desktop を再度開きます。
- こう尋ねます:
「私の直近のワークアウトは何でしたか?」
Claude が実際のスポーツ、日付、距離を答えたら、完了です。 そうでなければ、推測せずに トラブルシューティング に進んでください。
会話の例
You: Compare my last three long runs. Has my heart-rate drift improved?
Claude: Looking up your workouts…
Found 3 runs over 90 minutes in the last 6 weeks:
• Apr 12 — 22.4 km, 2h09, avg HR 148, last-30min drift +6 bpm
• Apr 19 — 24.0 km, 2h21, avg HR 144, last-30min drift +4 bpm
• Apr 26 — 25.1 km, 2h28, avg HR 142, last-30min drift +2 bpm
Drift is trending down despite slightly longer runs — your aerobic
base is improving. Pace at the same HR is also ~3 s/km faster.
利用できるデータ
| カテゴリ | 何について尋ねられるか | 必要なもの |
|---|---|---|
| ワークアウト | 記録されたあらゆるアクティビティ — ランニング、ハイキング、サイクリング、スイミング、スキーツアー。距離、時間、心拍数、ペース、標高、パワー、およびガイド付きセッションのラップごとのデータ。 | 開発者 API (すでに購読済み) |
| 睡眠 | 睡眠時間、ステージ(浅い/深い/REM)、睡眠スコア。 | apizone での Sleep API の購読 |
| リカバリー | 1 日を通したリカバリーバランスとストレス状態(HRV は睡眠データに含まれます)。バランスはウォッチの リソース のパーセンテージ(0.96 = 96%)、ストレス状態は 1 = 回復中、2 = 活動中です。アプリの単一の リカバリー状態 のパーセンテージは API にはありません。 | apizone での Recovery API の購読 |
| 日々のアクティビティ | 歩数、カロリー、24 時間心拍数。 | apizone での Daily Activity API の購読 |
睡眠、リカバリー、日々のアクティビティを追加するには:apizone.suunto.com に戻り、各プロダクトを見つけて購読します。その後、npm run doctor を実行して有効になっていることを確認します。
ウォッチにプッシュできるもの
Suunto MCP は読み取り専用ではありません。Claude はあなたのアカウントにデータを送り返すこともできます:
| やりたいこと | Claude への依頼 | 必要なもの |
|---|---|---|
| ジムのプランをウォッチで確認する | 「今日のワークアウトを計画してウォッチに送って」 | SUUNTO_APP_NAME の設定(ステップ 6 を参照) |
| 別のデバイスからワークアウトをアップロードする | 「この FIT ファイルを Suunto のワークアウトとしてアップロードして」 | — |
| 保存済みのルートを GPX として取得する | 「日曜日のルートを GPX としてエクスポートして」 | — |
ガイド付きワークアウトは SuuntoPlus ガイドとして表示されます:画面上にエクササイズ名と重量/レップ数が表示され、ラップボタンで次のエクササイズに進み、エクササイズ間には次に行う内容のプレビュー付きのストップウォッチ(カウントダウンではありません)が表示され、新しいエクササイズが始まるとバイブレーションが鳴り、最後に「セッション完了」画面が表示されます。ウォッチ自体へのライブプッシュはありません — 他のウォッチデータと同様に、スマートフォンの次回の通常の Suunto アプリ同期後に表示されます。
これはコーチングのワークフローと自然に組み合わせられます:目標、使用できる器具、現在のリフト種目を Claude に伝えれば、実際の漸進的なプログラムを作成し、各セッションを直接プッシュできます — リカバリーを考慮したプログラミングについては、下記の Pairs well with health-skill を参照してください。
日次ヘルスダイジェスト
Claude に 「昨日の日次ダイジェストを生成して」 と頼むと、色分けされた Markdown サマリー — 歩数、睡眠、リカバリーバランス、HRV、トレーニング負荷モデル (フィットネス/疲労/フォーム) — を作成し、サーバーが実行されているフォルダーの SUUNTO_HISTORY.md に追記します (別のファイルを選ぶには SUUNTO_DIGEST_HISTORY_PATH を設定してください)。
フィットネス (CTL)、疲労 (ATL)、フォーム (TSB) は Suunto API のフィールドではありません — それらのエンドポイントは存在しません。これらは各ワークアウトの実際の tss.trainingStressScore から、標準的な 42 日/7 日の指数関数的減衰を用いてここで計算されます。TrainingPeaks のようなトレーニング負荷ツールが使うのと同じ計算式です。実行中の値は ~/.suunto-mcp/averages.json に保持されます (上書きするには SUUNTO_DIGEST_AVERAGES_PATH を設定してください)。他に保存できる場所がないためです。
ウォッチとの誤差はどのくらいか? ある日、Suunto アプリと比較して確認しました。疲労は一致 (11)、フォームも一致 (2)、フィットネスは約 1 低い値になりました (13.1 対 14)。フィットネスはウォッチの ±1 として扱ってください。正確な値が必要ならアプリからシードしてください。
信頼する前に知っておく価値のあることがいくつかあります:
- CTL/ATL は初回使用時に 0 から始まり、現実的な数値に収束するまで 4〜6 週間かかります — ウォッチが表示するフィットネス/疲労を読み取る API はありません。コールドスタートを避けるには、最初のダイジェストのときにウォッチの数値を Claude に伝えてください (「ウォッチはフィットネス 42、疲労 38 と表示している。その数値でダイジェストをシードして」) — またはコマンドラインで
--seed-ctl 42 --seed-atl 38を渡してください。これは初回のダイジェストでのみ機能し、それ以降は無視されます。 - TSB の色はウォッチ自体の凡例に一致します (🔵 最適 >+10、🟢 バランス 0〜+10、🟡 やや低下 −10〜0、🔴 負荷過多 <−10) — 独自に考案したスケールではありません。
- ランプレート (今週の CTL と 7 日前の比較) には独自のスケールがあります: 🔴 +8/週を超えると負荷をかけすぎています — 単なる「順調な進歩」ではなく、実際の怪我のリスクです。🟢 +3〜+8 は順調に積み上がっており、🟡 −2〜+2 は横ばい、🟠 −2 未満はフィットネスが低下していることを意味します。
- リカバリーバランス は朝 (夜間の最低値) とピーク (その日の最高値) として報告されます — ピークは夜間の最低値より自然に高いため、それぞれ異なる色スケールを使用します。
- HRV が 2 日以上連続で通常範囲を下回る場合、または朝のリカバリーが 2 日以上連続で 65% を下回る場合、血圧を確認するよう促す注記が追加されます — 持続的な低 HRV/リカバリーは、追加のデータポイントを確認する価値のある実際の生理学的シグナルです。
- ローリングベースライン は各指標を個別に追跡し、「パーティーナイト」(>20,000 歩) 用に別のバケットを設けているため、外れ値の日が通常日の平均を歪めることはありません。
- 日付は時系列順に実行してください。 ダイジェストは処理済みの最後の日付以前の日付を拒否するため、後により遅い日付が実行された後に抜けた日を埋めることはできません — 実行中の合計は 1 日ずつ前に進みます。
- これらのセクションが入力されるには apizone で Sleep および Recovery API のサブスクリプションが必要です — それらがない場合でもダイジェストは生成されますが、エラーになる代わりにこれらのセクションは「データなし」と表示されるだけです。
CLI: suunto-mcp daily-digest 2026-04-20 [--seed-ctl 42 --seed-atl 38]。MCP ツール: generate_daily_digest。
トラブルシューティング
まず必ず npm run doctor を実行してください — ほとんどの問題を自動的に特定します。
| 表示される内容 | 意味 | 解決方法 |
|---|---|---|
| Claude がエラーを返す、または何も返さない | まだ何かが接続されていません | npm run doctor を実行し、✗ が付いた行を修正してください |
| ワークアウト一覧が空 | ウォッチが最近同期されていません | スマートフォンで Suunto アプリを開き、同期が完了するまで待ってください |
| 「Not authenticated」 | ペアリング手順が完了していません | npm run auth をもう一度実行してください |
| ログインしたのに何も起こらない | Suunto が確認する前にブラウザタブが閉じられたか、タイムアウトしました | Suunto のタブをすべて閉じて npm run auth を再度実行してください — 速やかに「Authorize」をクリックしてください |
| 「Token request failed」または「400 error」 | Client Secret または Redirect URI が apizone と一致していません | apizone → プロフィール → OAuth アプリケーション設定に移動し、両方の値が完全に一致していることを確認してください |
| すべてのリクエストで「401」エラー | 通常、サブスクリプションキーが間違っているか不完全です | apizone → プロフィール → サブスクリプションに移動し、Primary Key を表示して再コピーしてください |
| 「RateLimitExceeded」を伴う「401」 | Suunto のゲートウェイはレート制限を 401 として報告します | 約 2 分待ってから再度質問してください — キーは正常です |
| 「OperationNotFound」を伴う「401」、または「currently unavailable」と表示されたツール | Suunto はそのエンドポイントを提供しなくなりました(get_workout_samples、export_workout_gpx、list_subscriptions) | こちら側で修正できることはありません。再ペアリングしても解決しません |
| ワークアウトで「403 Forbidden」 | Developer API サブスクリプションが有効になっていません | apizone にサインインし、「Active」として表示されていることを確認してください |
| 睡眠/リカバリー/アクティビティが「not found」を返す | これらには個別のサブスクリプションが必要です | apizone に移動し、Sleep、Recovery、または Daily Activity API をサブスクライブしてください |
| ガイド付きジムセッションでラップが欠落、重複、または順序が乱れている | ウォッチのボタンがロックされていた、エクササイズが再開された、またはガイド外でラップが押されました | get_workout_laps を要求し、その checks リストを読んでください — これらのどれが起きたかが示されます。checks が空でない間はセット単位の読み取りを信用しないでください |
| ワークアウトに心拍数がない | 心拍数トラッキングがオフになっていました(例:バッテリーモード Tour) | ワークアウト前に別のバッテリーモードを選択してください。データは後から復元できません |
| 1 日のカロリーが低すぎるように見える | 日次統計のエネルギーが総消費(安静時+活動)ではなく活動エネルギーに見えます — これはウォッチと照合して検証されていません | 活動 kcal として扱ってください。1 日の総消費として読まないでください |
| 数値が Suunto アプリと異なる | Balance はアプリの Resources % と等しくなります(0.96 = 96%)。アプリの単一の Recovery state % は API では利用できません。ここで計算される Fitness(CTL)はウォッチと約 1 ポイントずれることがあります | Recovery state % にはアプリを使用してください。CTL を正確にしたい場合はアプリからダイジェストをシードしてください |
| Apple サインイン後に SSL エラーが発生した | Apple ログインに関する既知の Suunto の不具合です | エラータブを閉じ、ターミナルが表示した認証 URL に戻って続行してください |
| 「State mismatch」エラー | 最初の認証フローが完了する前に 2 つ目の認証フローが開始されました | 認証関連のタブをすべて閉じ、npm run auth を新たに実行してください |
npm run build がエラーで失敗した | Node.js のバージョンが古すぎるか、インストールされていません | node --version を実行してください — 20 以上である必要があります。nodejs.org から再インストールしてください |
| ターミナルに「EADDRINUSE」またはポートが使用中と表示される | 別の何かがポート 8421 を使用しています | コンピューターを再起動するか、lsof -i :8421 を実行して何が使用しているか確認してください |
| ガイドのアップロードが「owner」エラーで失敗する | SUUNTO_APP_NAME が登録したアプリ名と完全に一致していません | apizone → あなたのアプリ → 正確な名前を確認し、環境変数を修正して Claude を再起動してください |
| ガイドをプッシュしたのにウォッチに表示されない | ウォッチがまだスマートフォンと同期していません | Suunto アプリを開いて同期させてください。特別な操作なしで表示されるはずです |
よくある質問
これは安全ですか?Suunto がアカウントをロックすることはありますか? Suunto は、ユーザーが自分のツールを接続するためにこの API を特別に構築しており、明示的に許可されています。想定されたとおりに使用しているだけです。
データが自分のコンピューターから出ていくことはありますか? データはお使いのコンピューターと Suunto のサーバーの間を直接やり取りされます。Suunto MCP は単なる橋渡しです。Claude がワークアウトについて尋ねると、Claude → Suunto MCP(お使いのマシン上)→ Suunto のサーバー → 戻る、という流れになります。第三者サービスがデータを目にすることはありません。
どの Suunto ウォッチが対応していますか? Suunto アプリに同期できるウォッチであればどれでも対応します。Race、Vertical、9 Peak Pro、9 Peak、5 Peak、Wing、Ocean、および旧モデルです。Suunto アプリに表示されるものであれば、ここでも動作します。
新しいワークアウトを記録したときに何かする必要はありますか? いいえ。Claude に尋ねるだけです — 常に Suunto からライブデータを取得します。
接続を解除して使用をやめたい場合はどうすればよいですか? 下記の接続の解除をご覧ください。1 分以内にアクセスを完全に取り消せます。
Claude 以外の AI アプリでも使用できますか? はい — MCP をサポートするものであれば何でも: Claude Code、Cursor、Windsurf などです。
Suunto アプリのユーザー名がメールアドレスと異なります — どちらを使えばよいですか? apizone へのサインインにはメールアドレスを使用してください。ユーザー名は認証後に表示されます。
プライバシー
- すべてのデータはお使いのコンピューターと Suunto のサーバーの間を直接流れます。第三者のサーバーも分析もありません。
- ログイン認証情報はローカルの
~/.suunto-mcp/tokens.jsonに保存されます — どこにもアップロードされません。 - Suunto は接続されたアプリを apizone → プロフィール → 承認済みアプリケーションに「suunto-mcp」として表示します。そこからいつでも取り消せます。
- AI は、あなたの質問に対して明示的に要求したデータのみを参照します — 履歴全体を一度に参照することはありません。
アップグレード
- npx:
npx -y suunto-mcpは新規起動時に最新バージョンを取得します。argsでバージョンを固定している場合は変更してください。その後 Claude を再起動します。 - クローンしたフォルダー:
git pull、npm install、npm run buildを実行し、その後 Claude を再起動します。
変更内容については CHANGELOG.md をご覧ください。
環境変数
これらは Claude 設定の env ブロック(またはターミナルコマンド用の .env)で設定してください。
| 変数 | 必要 | 役割 |
|---|---|---|
SUUNTO_CLIENT_ID、SUUNTO_CLIENT_SECRET、SUUNTO_SUBSCRIPTION_KEY | はい | apizone の認証情報 |
SUUNTO_APP_NAME | ガイドをプッシュする場合 | apizone に登録された正確なアプリ名 |
SUUNTO_REDIRECT_URI | いいえ | OAuth コールバック。デフォルトは http://localhost:8421/callback(apizone と一致する必要があります) |
SUUNTO_TOKEN_PATH | いいえ | トークンファイル。デフォルトは ~/.suunto-mcp/tokens.json |
SUUNTO_TOKEN_STORAGE | いいえ | keychain を指定するとトークンを OS のキーチェーンに保存します |
SUUNTO_NO_BROWSER | いいえ | ペアリング中にブラウザーを開かない。URL を自分でコピーしてください |
SUUNTO_DIGEST_HISTORY_PATH、SUUNTO_DIGEST_AVERAGES_PATH | いいえ | 日次ダイジェストの書き込み先 |
SUUNTO_WEBHOOK_SECRET、SUUNTO_WEBHOOK_HOST、SUUNTO_WEBHOOK_LOG、SUUNTO_WEBHOOK_ALLOW_UNSIGNED、PORT | Webhook のみ | Webhook のセクションをご覧ください |
接続の解除
アクセスを完全に削除するには:
- apizone.suunto.com にログイン → プロフィール → 承認済みアプリケーション → suunto-mcp を削除します。Suunto は直ちに接続の承認を停止します。
- ローカルの認証情報を削除します:
rm -f ~/.suunto-mcp/tokens.jsonSUUNTO_TOKEN_STORAGE=keychainを使用した場合は、代わりにシステムのキーチェーンにある「suunto-mcp」エントリを削除してください。日次ダイジェストは~/.suunto-mcp/averages.jsonとSUUNTO_HISTORY.mdも保持します — 健康データを完全に削除したい場合は、これらも削除してください。 - Claude 設定から
"suunto"ブロックを削除し、Claude を再起動します。
health-skill との併用
googlarz/health-skill(症状のトリアージと健康に関する Q&A を行う Claude スキル)を使用している場合、両方を Claude に接続できます。health-skill が健康面を担当し、Claude が同じ会話の中で Suunto MCP からトレーニング、睡眠、回復のデータを読み取ります。組み合わせることで、「今週の回復スコアを踏まえると、明日のインターバルトレーニングは続けるべき?」 といった質問に実際の数値で答えられます。
この組み合わせは Q&A だけでなくプランニングにも役立ちます。Claude はセッションを書く前に実際の HRV と睡眠を確認し、回復が悪い日には一般的な内容ではなく負荷を抑えたメニューに調整し、その結果を push_strength_guide(ジム)または push_interval_guide(有酸素運動)でそのまま時計にプッシュできます。「回復状態を確認して、今日のジムのセッションを計画して」 と直接頼むだけです。両方を接続していれば、追加の設定は必要ありません。
毎日の歩数を health-skill 自身の記録にも保存するには、suunto-mcp sync-to-health-skill --health-root <your health folder> を実行します(世帯メンバーの場合は --person-id を追加)。コピーされるのは歩数のみで、しかも終了した日だけです。今日の合計は明日取り込まれます。
完全版(一度きりの依頼ではなく、週をまたいで持続する本格的な漸進的過負荷プログラミング)が必要な場合は、googlarz/gym-skill をインストールしてください。最初に一度 /gym setup を実行し、以降は /gym plan//gym today//gym log//gym review を使います。
高度な設定
コードをクローンせずに npm からインストールする
このパッケージは suunto-mcp として npm で公開されているため、ステップ 5 を省略できます(git clone もビルドも不要)。Node.js 20 以降と、パート 1 の認証情報は引き続き必要です。
アカウントをペアリングする(ステップ 7 の代わり)。 ご自身の値を使って、ターミナルで以下を実行します:
export SUUNTO_CLIENT_ID=your-client-id SUUNTO_CLIENT_SECRET=your-client-secret SUUNTO_SUBSCRIPTION_KEY=your-subscription-key
npx -p suunto-mcp suunto-mcp-auth
npx -p suunto-mcp suunto-mcp-doctor
最初のコマンドはブラウザでペアリングページを開き、トークンを ~/.suunto-mcp/tokens.json に保存します。2 つ目のコマンドは、すべてが接続されているかを確認します。
Claude Desktop に接続する(ステップ 10 の代わり)。 コードへのパスの代わりに npx を使います:
{
"mcpServers": {
"suunto": {
"command": "npx",
"args": ["-y", "suunto-mcp"],
"env": {
"SUUNTO_CLIENT_ID": "your-client-id",
"SUUNTO_CLIENT_SECRET": "your-client-secret",
"SUUNTO_SUBSCRIPTION_KEY": "your-subscription-key"
}
}
}
}
初回起動時はパッケージをダウンロードするため、数秒かかることがあります。特定のバージョンに固定するには、args に "suunto-mcp@<version>" と記述します(例えば npm にある最新バージョン)。Claude Code では: claude mcp add suunto -e SUUNTO_CLIENT_ID=... -e SUUNTO_CLIENT_SECRET=... -e SUUNTO_SUBSCRIPTION_KEY=... -- npx -y suunto-mcp。
Claude Desktop ではなく Claude Code で使う
ターミナルで以下を実行し(ご自身の値と、このフォルダへの実際のパスを使用してください)、claude mcp list で読み込まれていることを確認します:
claude mcp add suunto -e SUUNTO_CLIENT_ID=your-client-id -e SUUNTO_CLIENT_SECRET=your-client-secret -e SUUNTO_SUBSCRIPTION_KEY=your-subscription-key -- node /full/path/to/suunto-mcp/dist/index.js
ガイド付きワークアウトをプッシュしたい場合は、-e SUUNTO_APP_NAME=your-app-name を追加します。
CLI — ターミナルからデータをクエリする
ビルド後は、Claude を使わずに Suunto のデータを直接クエリできます。クローンしたフォルダでは node dist/index.js <command> を使い、npm パッケージでは npx suunto-mcp <command>(グローバルにインストールしていれば suunto-mcp だけでも可)を使います:
node dist/index.js list-workouts --limit 10
node dist/index.js get-workout <workoutKey>
node dist/index.js get-workout-laps <workoutKey>
node dist/index.js get-daily-snapshot 2026-04-20
node dist/index.js get-daily-snapshot 2026-04-14 --to 2026-04-20
node dist/index.js get-sleep 2026-04-20
node dist/index.js list-recovery --from 2026-04-01 --to 2026-04-30
その他のコマンド: get-workout-fit、get-daily-activity、list-daily-activity、list-sleep、get-recovery、daily-digest、sync-to-health-skill。完全なリストとすべてのオプションは --help を付けて実行すると確認できます。出力はすべて JSON なので、jq にパイプしてフィルタリングできます。
Webhook — ワークアウトが同期された瞬間に通知を受け取る
npm run webhook
ポート 8422 で HTTP レシーバーを起動し、ワークアウトイベントが届くたびにログに記録します。127.0.0.1 のみでリッスンするため、トンネル(cloudflared、ngrok)またはリバースプロキシ経由で公開し、apizone → webhooks で URL を登録してください。
SUUNTO_WEBHOOK_SECRET を設定し、apizone の OAuth アプリケーション設定で構成した通知シークレットを指定します。すべてのリクエストは Suunto の X-HMAC-SHA256-Signature ヘッダーに照らして検証され、一致しない場合は 401 で拒否されます。シークレットを設定しない場合、受信側はすべてのリクエストを拒否します(ローカルテストでのみ SUUNTO_WEBHOOK_ALLOW_UNSIGNED=1 を設定してください)。その他のオプション:PORT、SUUNTO_WEBHOOK_HOST(デフォルトは 127.0.0.1)、SUUNTO_WEBHOOK_LOG(デフォルトは ~/.suunto-mcp/webhooks.ndjson。プライベートなファイルとして書き込まれ、上限は 100 MB です)。
ほとんどのユーザーはこのセクション全体を読み飛ばせます。必要なときに Claude に尋ねるほうが簡単です。
キーチェーン — 認証情報をより安全に保存する
Suunto のログイントークンをファイルではなく OS のキーチェーン(macOS Keychain、Windows Credential Manager)に保存するには:
SUUNTO_TOKEN_STORAGE=keychain npm install @napi-rs/keyring
SUUNTO_TOKEN_STORAGE=keychain npm run auth
利用可能なすべてのツール(リファレンス)
Claude が適切なツールを自動的に選ぶため、これらを把握する必要はありません。詳しく知りたい方は、以下をご覧ください。
ワークアウト
| Tool | What it does |
|---|---|
list_workouts | 日付で絞り込んだ最近のワークアウト |
get_workout | 1 件のワークアウトの概要データ(ラップは含まれません。get_workout_laps を使用してください) |
get_daily_snapshot | 1 日分のデータをまとめて取得します。昨夜の睡眠(メインの睡眠、昼寝)、その日の最低・最高のリカバリーバランス(起床時と就寝時の値も含む)、歩数、エネルギー、ワークアウトが対象です。1 回のリクエストで最大 14 日間を指定するには to を渡します |
get_workout_laps | 1 件のワークアウトについて、各ラップの時間、心拍数、カロリー、ガイドのステップを表形式で表示します。ガイド付きジムセッションをセットごとに振り返るのに便利です。また、表の信頼性に問題がある場合(ラップの欠落や重複、心拍数の欠如)も報告します |
get_workout_fit | 生の FIT ファイルを構造化データにデコードします(サイズは大きく、筋力トレーニングでは full: true にすると約 550 KB になります) |
get_workout_samples | 現在利用できません — Suunto のサーバーがこの呼び出しを拒否します(2026 年 9 月に 1 つのアカウントで確認済み)。get_workout_fit を使用してください |
export_workout_gpx | 現在利用できません — Suunto のサーバーがこの呼び出しを拒否します(2026 年 9 月に 1 つのアカウントで確認済み) |
24 時間ヘルスデータ (apizone の個別の製品サブスクリプションが必要です)
| Tool | What it does |
|---|---|
get_daily_activity / list_daily_activity | 歩数、カロリー、毎日の心拍数 |
get_sleep / list_sleep | 睡眠ステージ、時間、スコア |
get_recovery / list_recovery | 1 日を通したリカバリーバランスとストレス状態 |
get_daily_activity_statistics | 日付範囲にわたる日次統計の集計 |
ルート
| Tool | What it does |
|---|---|
list_routes | 最近保存したルート(Suunto が返すのは最大 5 件です) |
get_route | ID で指定した 1 件のルート。list_routes に表示されないルートも取得できます |
export_route | ルートを GPX としてエクスポートします |
アップロードとガイド付きワークアウト (書き込み — アカウントにデータを送信します)
| ツール | 機能 |
|---|---|
upload_workout | FIT ファイルを新しいワークアウトとしてアップロードします。このエンドポイントでは現在 FIT のみがサポートされていると Suunto の公式ドキュメントに記載されていますが、ほかの情報とは異なる場合があります |
upload_route | GPX ファイルをルートとしてインポートします(<rte>/<trk> ごとに 1 つのルート)。Suunto アプリのルートライブラリに表示され、ナビゲーション用にウォッチと同期されます。activities を指定します(デフォルトはランニング)。インポートは一度に 1 件ずつ実行され、各ルートは Suunto から読み戻される(check.verified)ため、複数のファイルを一度に送信しても安全です。ここから削除することはできません。アプリから削除してください |
get_upload_status | アップロードの処理が完了したかどうかを確認します |
push_workout_guide | 構造化されたワークアウト(エクササイズ、ウェイト、休憩、通知)を SuuntoPlus Guide として送信します。SUUNTO_APP_NAME が必要です |
push_interval_guide | 自動で進行するインターバル/有酸素運動ガイド(時間または距離に基づくセグメント、目標 HR 範囲)を送信します。SUUNTO_APP_NAME が必要です |
push_strength_guide | セットごとの筋力トレーニングセッション(準備用ストップウォッチ、セット/休憩のラップ記録、設定可能な休憩モード)を送信します。SUUNTO_APP_NAME が必要です |
list_guides | アカウント上のすべての SuuntoPlus Guide を一覧表示します |
delete_guide | ID を指定してガイドを完全に削除します |
その他
| ツール | 機能 |
|---|---|
list_subscriptions | 現在利用できません — Suunto のサーバーがこの呼び出しを拒否します(2026 年 9 月に 1 つのアカウントで確認) |
generate_daily_digest | 日次の健康ダイジェストを SUUNTO_HISTORY.md に書き込みます(日次の健康ダイジェストを参照)。書き込みツールです |
クレジット
- Suunto APIzone — API をすべての人に公開してくれたことに感謝します
- Model Context Protocol — このツールが準拠する標準
fit-file-parser— FIT バイナリのデコード
ライセンス
MIT — ご自由にご利用、フォーク、改善してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。