mcpField
D
durely insights MCP for Garmin

durely insights MCP for Garmin

ローカル
github.comヘルスケア26 日前に更新

durely insights MCP for Garmin について

durely insights MCP for Garmin は Garmin Connect を AI アシスタントに接続し、同期した運動・健康履歴をローカルに保存して詳しく分析します。

主な機能

  1. 01Garmin Personal API 接続
  2. 02履歴の同期とローカル保存
  3. 03秒単位のアクティビティデータ
  4. 04トレーニングと回復の分析
  5. 05読み取り専用 SQL クエリ

活用シーン

  1. 01ランニングや自転車の詳細確認
  2. 02長期的なトレーニング傾向の追跡
  3. 03睡眠、HRV、負荷の比較

MCP 対応

MCP クライアントに Garmin データと分析ツールを提供する MCP サーバーです。Garmin の公式 Personal API を使用し、同期データをローカルに保存します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"app-durely-garmin-insights": {
"command": "npx",
"args": [
"-y",
"@durely/garmin-insights-mcp"
],
"env": {
"GARMIN_PERSONAL_API_KEY": "<GARMIN_PERSONAL_API_KEY>",
"GARMIN_MCP_TIMEZONE": "<GARMIN_MCP_TIMEZONE>",
"GARMIN_API_KEY_EXPIRES": "<GARMIN_API_KEY_EXPIRES>"
}
}
}
}
起動コマンドnpx -y @durely/garmin-insights-mcp
設定が必要な環境変数
GARMIN_PERSONAL_API_KEYシークレットYour Garmin Personal API key. Leave empty if you saved it with `npx -y @durely/garmin-insights-mcp auth` (recommended): the server then reads it from ~/.config/garmin/connect-personal-api-key.
GARMIN_MCP_TIMEZONEYour time zone, e.g. Europe/Brussels. Defaults to your computer's time zone.
GARMIN_API_KEY_EXPIRESシークレットThe date your key expires, e.g. 2027-10-24, so the server can warn you in time.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@durely/garmin-insights-mcp0.5.2
ocighcr.io/durely/garmin-insights-mcp:0.5.2

ツール

21

掲載時のツール一覧 · 5 日前に更新

パラメーター型必須説明
response_formatenumいいえ読みやすいテキストには 'markdown'(デフォルト)、完全な構造化データには 'json' を指定します。markdown | json

詳細

durely garmin-insights-mcp

npm Node Docker CI License

Garmin の自分のデータについて AI アシスタントに質問できます。トレーニング履歴全体、健康状態、回復状況を分析します。

durely insights は、Garmin の公式 Personal API を通じて、Garmin Connect アカウントを AI アシスタント(Claude、Cursor、GitHub Copilot、Gemini CLI、Codex など、あらゆる MCP クライアント)に接続するMCP サーバーです。履歴のコピーを自分のマシンに保存するため、1 回のランニングから何年分ものトレーニングまで、すぐに質問して回答を得られます。

開発初期段階です。 以下の機能はすべて動作しますが、バージョン 1.0 までにツールやオプションが変更される可能性があります。

非公式プロジェクトです。Garmin との提携や、Garmin による推奨を受けていません。

質問できること

アクティビティ

  • 「今週は何をしましたか?」/「直近のランニングを 10 件表示して」
  • 「昨日のランニングについて教えて」:スプリット、心拍数、トレーニング効果、負荷
  • 「火曜日のライドのインターバル中に、パワーと心拍数はどのように変化しましたか?」
  • 「直近 2 回のトライアスロンのバイク区間を、ラップごとに比較して」
  • 「いつもの火曜日のランニングで、体力は向上していますか?」

トレーニング

  • 「過去 3 か月間で、トレーニング負荷とフィットネスはどのように変化しましたか?」
  • 「土曜日のライドを分析して」:ゾーン別の時間、デカップリング、ベストエフォート
  • 「年ごとのランニング、ライド、スイムの距離を教えて」

健康と回復

  • 「今週の睡眠と HRV はどうでしたか?」
  • 「ハードなトレーニングをした翌朝は、HRV に影響がありますか?」
  • 「今年の月ごとの安静時心拍数と睡眠スコアを比較して」
  • 「昨日の心拍数と Body Battery を表示して」

特長

  • 公式 API を使用し、パスワードは不要です。 Garmin Connect で作成でき、いつでも無効にできる Personal API キーを使用します。スクレイピングは行わないため、Garmin のログイン方法が変わっても動作に影響しません。
  • 履歴全体をすぐに利用できます。 すべてのデータを一度ローカルデータベースに同期し、その後も最新の状態に保つため、数か月から数年にわたる傾向についての質問にも待たずに回答できます。
  • 秒単位の詳細データに対応しています。 ラップ、スイムの距離、心拍数、パワー、ケイデンスなどは、各アクティビティの元の FIT ファイルから取得します。デバイスで記録されている場合は、VO2max、回復時間、乳酸閾値も含まれます。
  • 分析機能を内蔵しています。 ゾーン別の時間、トレーニング負荷、フィットネス/疲労/フォーム、有酸素デカップリング、ベストエフォート、回復の傾向、類似セッションの比較に対応しています。それ以外の質問には、アシスタントがデータに対して読み取り専用の SQL を実行できます。
  • デフォルトでプライバシーを保護します。 データは自分のマシンに保存されます。名前、アカウント ID、GPS 位置情報は、ルートを尋ねない限り回答に含まれません。
  • 読み取り専用です。 Garmin アカウントの情報を変更することはできません。

クイックスタート

Garmin Connect、MCP クライアント(Claude Code、Claude Desktop、Cursor など)、そして Node.js 24 以降またはDockerが必要です。

1. Personal API キーを作成する
  1. Web 版の Garmin Connect で、設定 → Personal API Token を開きます。

  2. キーを作成し、有効期間(30 日から 1 年)を選択します。Garmin がキーを表示するのは一度だけなので、コピーしてください。

  3. 自分のターミナルで次のコマンドを実行して保存します。

    npx -y @durely/garmin-insights-mcp auth
    

    キーの入力を求められます(入力内容は表示されません)。Garmin による確認後、~/.config/garmin/connect-personal-api-key に保存されます。このファイルを読み取れるのは自分だけです。Garmin がキーを拒否した場合、何も保存されません。サーバーはこのファイルからキーを読み込むため、クライアントの設定にキーを記載する必要はありません。

    Docker を使う場合(Node.js 不要)は、次のファイルに自分で保存してください。

    mkdir -p ~/.config/garmin && chmod 700 ~/.config/garmin
    pbpaste > ~/.config/garmin/connect-personal-api-key    # macOS; elsewhere, paste it into this file with an editor
    chmod 600 ~/.config/garmin/connect-personal-api-key
    

AI アシスタントとのチャットにキーを貼り付けないでください。

2. 実行方法を選択する

**Node.js を使う場合(npx):**インストールは不要です。サーバーのコマンドは次のとおりです。

npx -y @durely/garmin-insights-mcp

初回実行時に npx が npm パッケージ をダウンロードし、その後は新しいリリースを自動的に取得します。npx -y @durely/garmin-insights-mcp auth --check でキーを確認できます。固定のインストールを希望する場合は、npm install -g @durely/garmin-insights-mcp を実行すると、garmin-insights コマンドを使えるようになります。

または Docker を使う場合(Node.js は不要ですが、Docker の起動が必要です)。サーバーのコマンドは次のとおりです。

docker run -i --rm \
  -v ~/.config/garmin/connect-personal-api-key:/run/secrets/garmin_api_key:ro \
  -v garmin-mcp-data:/data \
  -e GARMIN_MCP_TIMEZONE=Europe/Brussels \
  ghcr.io/durely/garmin-insights-mcp

Europe/Brussels を自分のタイムゾーンに置き換えてください。キーを確認するには、同じコマンドの末尾に auth --check を付けて実行します。イメージは Intel と ARM(Apple シリコン、Raspberry Pi)で動作します。Docker のヒントについては、仕組みをご覧ください。

**またはソースから実行する場合:**リポジトリをクローンし、npm または Docker でビルドします。仕組みをご覧ください。

**更新:**npx の場合は、クライアントを再起動してください。Docker の場合は、docker pull ghcr.io/durely/garmin-insights-mcp を実行します。同期済みのデータは保持されます。

3. AI クライアントに追加する

Claude Code:

claude mcp add garmin --scope user -- npx -y @durely/garmin-insights-mcp

Docker の場合:

claude mcp add garmin --scope user -- docker run -i --rm \
  -v ~/.config/garmin/connect-personal-api-key:/run/secrets/garmin_api_key:ro \
  -v garmin-mcp-data:/data \
  -e GARMIN_MCP_TIMEZONE=Europe/Brussels \
  ghcr.io/durely/garmin-insights-mcp

--scope user を指定すると、すべてのプロジェクトで利用できるようになります。

Claude Desktop:[設定 → 開発者 → 設定を編集]を開き、次の内容を追加して Claude Desktop を再起動します。

{
  "mcpServers": {
    "garmin": {
      "command": "/opt/homebrew/bin/npx",
      "args": ["-y", "@durely/garmin-insights-mcp"]
    }
  }
}

デスクトップアプリからはシェルの PATH が見えないため、npx のフルパスを指定してください(which npx で確認できます)。ログに node が見つからないと表示される場合は、"env": { "PATH": "/opt/homebrew/bin:/usr/bin:/bin" } を追加し、which node で確認したフォルダーを先頭に指定してください。

Docker を使った Claude Desktop、Cursor、VS Code、Gemini CLI、Codex CLI

Docker を使った Claude Desktop:

{
  "mcpServers": {
    "garmin": {
      "command": "/usr/local/bin/docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-v",
        "/Users/you/.config/garmin/connect-personal-api-key:/run/secrets/garmin_api_key:ro",
        "-v",
        "garmin-mcp-data:/data",
        "-e",
        "GARMIN_MCP_TIMEZONE=Europe/Brussels",
        "ghcr.io/durely/garmin-insights-mcp"
      ]
    }
  }
}

ここではフルパスを使用してください。JSON の設定では ~ は展開されません。

**Cursor:**Claude Desktop と同じ JSON を、~/.cursor/mcp.json(グローバル)または .cursor/mcp.json(プロジェクト)に追加します。

VS Code(GitHub Copilot エージェントモード):.vscode/mcp.json に追加するか、コマンドパレットから → MCP: Add Server を選択します。

{
  "servers": {
    "garmin": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@durely/garmin-insights-mcp"]
    }
  }
}

Gemini CLI:

gemini mcp add garmin npx -- -y @durely/garmin-insights-mcp

OpenAI Codex CLI:

codex mcp add garmin -- npx -y @durely/garmin-insights-mcp

その他(Windsurf、Cline、Zed、…):設定で「MCP サーバー」を探してください。stdio サーバーに対応しているクライアントであれば、どれでも動作します。

4. 試してみる

新しいセッションを開始して、 「Garmin への接続を確認して。」 と尋ねます。connected と報告されるはずです。

最初の質問をすると、バックグラウンドで同期が始まります。数秒以内にアクティビティが表示され、残りの履歴も数分以内に反映されます。その後、データが 1 時間以上古くなると自動的に更新されます。

知っておくとよいこと

  • キーの有効期限に注意してください。 Garmin の API は、キーの有効期限をサーバーに通知しません。クライアント設定で GARMIN_API_KEY_EXPIRES(例:2027-10-24)を設定すると、garmin_status が期限前に通知します。Docker の場合は、代わりにコンテナに渡してください。docker run の引数に -e GARMIN_API_KEY_EXPIRES=2027-10-24 を追加します。キーのファイルを置き換えるだけで十分です。再起動は必要ありません。
  • 少なくとも数か月ごとに同期してください。 Garmin は約 4~5 か月後に、日中の心拍数や夜間の HRV 測定値などの詳細な日中データを削除します。サーバーが同期したデータは、ローカルコピーに残ります。
  • 現時点ではデスクトップクライアントとコマンドラインクライアントのみです。 サーバーはお使いのマシン上で動作するため、現時点ではウェブ版やモバイル版の claude.ai では動作しません。
  • データは AI クライアントに送信されます。 サーバーが通信するのは Garmin のみですが、サーバーが返す回答は、使用する MCP クライアントとモデルに送られます。

トラブルシューティング

問題解決方法
ツールが表示されない新しいセッションを開始するか、クライアントを再起動してください。Claude Code では、/mcp を確認してください。
spawn npx ENOENT / サーバーが起動しない(デスクトップアプリ)設定で npx または docker のフルパスを指定してください。
"No Garmin Personal API key configured"キーファイルがないか、マウントされていません。パス(および Docker の -v マウント)を確認してください。
"Garmin rejected the Personal API key"キーの有効期限が切れているか、取り消されています。新しいキーを作成してファイルを置き換えるか、auth を再実行してください。auth --check でテストできます。
日付が1日ずれているGARMIN_MCP_TIMEZONE をタイムゾーンに設定してください(特に Docker の場合)。Garmin と異なる場合は、garmin_status が警告します。
AI クライアントなしでツールを確認したいnpx @modelcontextprotocol/inspector npx -y @durely/garmin-insights-mcp

ツール

これらを自分で呼び出す必要はありません。アシスタントが選択します。参考までに:

ツール機能
garmin_status接続確認:キー、トークン、タイムゾーン、キーの有効期限
garmin_get_profileプロフィール設定、スポーツごとの心拍ゾーン、フィットネス年齢
garmin_list_activities日付、スポーツ、名前、距離、または時間でアクティビティを検索
garmin_get_activity1件のアクティビティの全情報:概要指標、スプリット、構造化ワークアウト
garmin_get_activity_lapsFIT ファイルのラップ情報:ペース、心拍数、パワー、ケイデンス、スイムの距離、VO2max、回復時間
garmin_get_activity_streams1秒ごとの心拍数、パワー、速度、ケイデンス、高度など。任意の区間を拡大表示
garmin_analyze_activityゾーン滞在時間、NP/IF/TSS、有酸素デカップリング、ベストエフォート、インターバル
garmin_compare_activities2~6件のアクティビティを並べて比較
garmin_training_summary週または月ごとのスポーツ別運動量、負荷、強度、フィットネス/疲労/フォーム
garmin_recovery_trends睡眠、HRV、安静時心拍数、Body Battery、ストレスを基準値と比較し、負荷との関連も確認
garmin_get_daily_health日、週、月ごとの歩数、安静時心拍数、ストレス、Body Battery、カロリー、睡眠、HRV
garmin_get_sleep毎晩の睡眠ステージ、時間、睡眠スコア
garmin_get_hrv毎晩のHRV、7日間の平均、基準値、ステータス
garmin_get_intraday1日を1時間ごとに表示:心拍数、Body Battery、夜間のHRV、SpO2
garmin_get_body_composition体重測定、体組成、体重目標
garmin_get_nutritionGarmin Connect または連携アプリに記録した食事と水分補給
garmin_get_womens_health月経周期の追跡
garmin_query同期済みデータに対する読み取り専用SQL
garmin_download_activity_fitアクティビティの元のFITファイルを保存します。別の場所へのインポートなどに利用できます
garmin_sync今すぐ同期、過去のデータまで同期、またはすべてのFITファイルをダウンロード
garmin_sync_status同期済みの内容と同期の進行状況

プロンプトに対応したクライアント(多くの場合、スラッシュコマンドとして対応)では、weekly_review、activity_deep_dive、recovery_check を使ってガイド付き分析を開始できます。

設定

すべて任意です。クライアント設定で環境変数として設定してください。

変数デフォルト用途
GARMIN_API_KEY_EXPIRESキーの有効期限(yyyy-MM-dd)。リマインダーに使用します
GARMIN_MCP_TIMEZONEシステムのタイムゾーンタイムゾーン(IANA 名。例:Europe/Brussels)
GARMIN_PERSONAL_API_KEYキーファイルの代わりに使用するキー本体
GARMIN_PERSONAL_API_KEY_FILE~/.config/garmin/connect-personal-api-keyキーファイルの保存場所
GARMIN_MCP_DATA_DIR~/.garmin-insights-mcp同期データの保存場所
GARMIN_MCP_AUTO_SYNCtrueデータが1時間以上古い場合に自動で更新します
GARMIN_MCP_DETAIL_DAYS150同期を維持する日中の詳細データ(HR、夜間のHRV、SpO2)の日数
GARMIN_MCP_REQUESTS_PER_SECOND4リクエストの頻度制限。Garmin は制限を公開していません
GARMIN_MCP_LOG_LEVELinfodebug、info、warn、error のいずれか(ログは stderr に出力)

Docker では、キーファイルとデータディレクトリはそれぞれ /run/secrets/garmin_api_key と /data です。

プライバシーとセキュリティ

  • キーはお使いのマシンから外に出ません。 キーは24時間有効なトークンに交換され、所有者のみがアクセスできる権限でキャッシュされます。サーバーがキー自体を書き込むことはありません。アクセスを取り消すには、Garmin Connect でキーを削除してください。
  • テレメトリーはありません。 サーバーは Garmin の Personal API とのみ通信します。
  • 同期データは機密情報です。 ローカルデータベースと FIT ファイルには、GPS トラックを含む健康およびアクティビティの履歴が保存されます。データディレクトリを読み取れるのはお客様のみです(Docker では garmin-mcp-data ボリューム内に保存されます)。
  • 回答に個人情報や位置情報が含まれることはありません。 保存前に、名前、プロフィール画像、アカウント ID が削除されます。GPS 位置情報は、ルートや位置の分析を依頼した場合、または SQL でアクティビティの開始地点と終了地点を照会した場合にのみ返されます。

詳細

  • 仕組み:ローカルキャッシュと同期、FIT ファイル、数値の計算方法、Docker の詳細、開発

ライセンス

Apache-2.0。LICENSE と NOTICE を参照してください。

データは Garmin デバイスから Garmin Connect を通じて提供されます。分析結果は、Garmin デバイス由来のデータに基づく分析情報です。Garmin および Garmin Connect は、Garmin Ltd. またはその子会社の商標です。本プロジェクトは Garmin と提携しておらず、Garmin による推奨も受けていません。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。