mcpField
G
garmin-mcp

garmin-mcp

ローカル
github.com/endurancetoolsヘルスケア0今日更新

garmin-mcp について

アスリートやコーチ向けに、Garmin Connect のトレーニング、アクティビティ、健康、睡眠データを扱う非公式の MCP サーバーです。引用元を示す負荷・レディネス指標をローカルで計算し、SQLite にキャッシュします。確認後の構造化ワークアウトを Garmin のカレンダーやウォッチに送れます。

主な機能

  1. 01トレーニングや健康に関する20種類のツール
  2. 02根拠を示すローカルの負荷・レディネス計算
  3. 03必要なデータを取得して SQLite にキャッシュ
  4. 04ワークアウトの作成とカレンダー登録
  5. 05アクティビティ、睡眠、健康、デバイスのデータ

活用シーン

  1. 01トレーニング負荷と週間アクティビティの振り返り
  2. 02個人の基準値に基づく朝のレディネス確認
  3. 03構造化ワークアウトの計画と登録
  4. 04睡眠、HRV、健康傾向の確認

MCP 対応

Garmin Connect のデータ、分析ツール、リソース、プロンプトを MCP クライアントに公開します。stdio と streamable HTTP のトランスポートに対応しています。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"endurancetools-garmin": {
"command": "npx",
"args": [
"-y",
"garmin-mcp-server"
],
"env": {
"GARMIN_DATA_DIR": "<GARMIN_DATA_DIR>",
"GARMIN_REGION": "<GARMIN_REGION>",
"GARMIN_ENABLE_DESTRUCTIVE": "<GARMIN_ENABLE_DESTRUCTIVE>"
}
}
}
}
起動コマンドnpx -y garmin-mcp-server
設定が必要な環境変数
GARMIN_DATA_DIRTokens and database directory (default ~/.garmin-mcp)
GARMIN_REGIONglobal or cn
GARMIN_ENABLE_DESTRUCTIVEtrue registers delete tools

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

パッケージ
npmgarmin-mcp-server0.4.1

ツール

20

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
tostringいいえ終了日。デフォルト:今日
fromstringいいえ開始日。既定値:`to` の 7 日前
forcebooleanいいえ保存済みの日付を再ダウンロードします
scopeenumいいえall | activities | health(毎日のサマリー、睡眠、HRV、体重)| training(ステータス、準備度、VO2max)| reference(プロフィール、ギア、デバイス、アクティビティタイプ、ワークアウト、from..to の範囲内のカレンダー月。将来の月も含む)all | activities | health | training | reference

詳細

Garmin MCP

npm CI MCP registry

トレーニングの本当の調子を、AI アシスタントに尋ねてみましょう。 Garmin MCP は、Garmin Connect のデータを扱う非公式のオープンソース MCP サーバーです。公開されているスポーツ科学文献の手法と引用をもとに、トレーニング負荷、コンディション、朝の準備状態をお使いのマシン上で算出します。Garmin の API をそのまま映すのではなく、アスリートが尋ねる質問を想定した 20 個のツールを備えています。質問に必要なデータだけをダウンロードするローカル SQLite キャッシュや、回答から Garmin のカレンダーとウォッチへ送れる構造化ワークアウトも利用できます。また、アクティビティ、健康、睡眠、トレーニングステータス、体組成、ギア、デバイス、ワークアウトライブラリも読み取ります。

Claude Code、Claude Desktop、Codex、Antigravity CLI、opencode、およびその他すべての MCP クライアント(stdio または streamable HTTP)で動作します。

ドキュメント:endurancetools.github.io/garmin-mcp(クライアントごとの導入方法、質問例、設定、トラブルシューティング)。貢献と開発については、DEVELOPMENT.md をご覧ください。

非公式プロジェクトです。Garmin および Garmin Connect は Garmin Ltd. またはその子会社の商標です。このプロジェクトは Garmin と提携しておらず、Garmin による承認も受けていません。トレーニング分析(get_load、get_readiness)はトレーニングに関する情報であり、医療上の助言ではありません。

Garmin MCP を選ぶ理由

  • 確認できる回答。 パワー、ペース、心拍数、セッション RPE に基づくトレーニング負荷(TSS)、フィットネス、疲労、コンディション(CTL/ATL/TSB)、ACWR、強度分布、そしてご自身の基準値と比較した HRV、安静時心拍数、睡眠、負荷に基づく朝の準備状態を、公開されているスポーツ科学文献の手法と引用を用いて算出します。すべての回答には、使用した値とルールが示され、変更することもできます。手法とエビデンス
  • API のミラーではなく、設計されたツール。 「今週のトレーニングを振り返って」や「今日は強度の高いトレーニングをしてもいい?」といった質問を想定した 20 個のツールを備えており、1 回の呼び出しで 1 つの質問に答えます。ツール一覧全体がモデルのコンテキストで消費するトークンは約 7,800 個で、42 件のツール選択シナリオすべてで、最初のツール呼び出しが適切でした。設計されたツール
  • ローカルでプライベート。 Garmin の公式ページでサインインするため、パスワードがツールを経由することはありません。ダウンロードされたデータはお使いのコンピューター上のローカルデータベースに保存され、回答は数ミリ秒で返されます。Garmin に負荷をかけないようダウンロード頻度を調整し、ツールの回答は接続先の AI クライアントにのみ送信されます。データの保存場所
  • 回答からウォッチへ。 「木曜日に 400 m を 6 本、レスト 90 秒」と尋ねると、まず手順と推定所要時間が表示されます。承認するまで保存されず、承認後に Garmin のカレンダーへ追加され、ウォッチと同期されます。ワークアウトとカレンダー

はじめに

必要条件:Node.js 22 以降、Garmin Connect アカウント、およびサインイン画面用の Chrome、Edge、Brave、または Chromium(ターミナルでの代替手段もあります)。

1. 一度サインインします。 ブラウザーで Garmin 独自のサインインページが開きます。パスワードがツールを経由することはありません。保存されるのは Garmin が発行するトークンのみで、保存先は ~/.garmin-mcp です。

npx -y garmin-mcp-cli login

2. MCP サーバーをクライアントに追加します。

クライアント設定
Claude Codeclaude mcp add garmin -- npx -y garmin-mcp-server
Claude DesktopGitHub リリースから garmin-mcp-<version>.mcpb をインストールするか、claude_desktop_config.json に追加します:{"mcpServers":{"garmin":{"command":"npx","args":["-y","garmin-mcp-server"]}}}
Codex~/.codex/config.toml:[mcp_servers.garmin] command = "npx" args = ["-y", "garmin-mcp-server"]
Antigravity CLIagy mcp add garmin npx -y garmin-mcp-server
opencodeopencode.json:{"mcp":{"garmin":{"type":"local","command":["npx","-y","garmin-mcp-server"],"enabled":true}}}
その他のクライアントコマンド npx、引数 -y garmin-mcp-server、トランスポート stdio

3. 質問します。 質問に必要になるまで、データはダウンロードされません。たとえば:

  • 「今週の睡眠はどうでしたか?」または「夏の間、HRV はどのように推移しましたか?」
  • 「今週のトレーニングを振り返って」または「2026-08-04 から 2026-09-28 までのトレーニング期間を要約して」
  • 「疲労していますか?今のコンディションはどうですか?」
  • 「次のレースはいつですか?」または「今週の予定は何ですか?」
  • 「木曜日に、90 秒休憩を挟む 400 m を 6 本のメニューを作って」(まずステップが表示され、同意するまで保存されません)
  • 「アクティビティ 21001 の名前を Parkrun PB に変更して」

任意:範囲を事前に読み込むと、最初の質問にもすぐに回答できます。

npx -y garmin-mcp-cli sync --scope all --from 2026-07-01 --to 2026-09-30

データの取得方法

ログイン時にもサーバーの起動時にも、データはダウンロードされません。質問に必要な日付がローカルデータベースにない場合、ツールは該当範囲だけをダウンロードし、最大 20 秒待ってから回答します。残りのダウンロードはバックグラウンドで続行され、回答にはその旨が示されます(meta.source は partial です)。ダウンロードしたデータはすべてローカルデータベースに保存されるため、保存済みの日付は --force を指定しない限り再ダウンロードされず、同じ質問を繰り返しても費用はかかりません。

Garmin への負荷を抑えるため、長い期間は 7 日単位のチャンクに分け、新しい順に取得します。実際にデータをダウンロードしたチャンクの後にはランダムな 1~11 秒の間隔を設け、リクエスト数は 1 日あたり最大 600 件です。429 エラーまたは Cloudflare チャレンジが発生すると、すべてのダウンロードが 6 時間停止します。同期が中断された場合は、中断した箇所から再開します。

GARMIN_AUTO_FETCH=false の場合、garmin sync または garmin_sync ツールを実行しない限り、データはダウンロードされません。この場合、読み取りツールは不足している範囲を meta.sync_hint に返し、モデルが先に確認します。

実際のアカウントで 90 日間同期した後の測定結果(約 1 時間で 433 件のリクエスト):回答はローカルデータベースから 1~110 ms で取得されます。

ツール

ツール目的
get_activitiesカーソルページングに対応した詳細なアクティビティ一覧です。type には Garmin のタイプキー(garmin://activity-types にあるすべてのキー)を指定します
get_activity1 件のアクティビティを取得します。summary、splits、hr_zones、power_zones、weather、exercise_sets(筋力トレーニングのセット)、または full(すべてのセクションと、生データストリーム。50 KB 単位のページ)を指定できます
update_activity名前、タイプ、説明、RPE、体感を更新します
download_activity_fileFIT(解凍済み)、GPX、TCX、KML、CSV をダウンロードディレクトリ(GARMIN_FIT_DOWNLOAD_DIR)にダウンロードします
query_health歩数(1 日の距離を含む)、安静時心拍数(1 日の最小/最大心拍数を含む)、HRV(ステータスとベースラインを含む)、睡眠、ストレス、ボディバッテリー、呼吸数、SpO2、運動強度時間、カロリー(消費量、および食事ログがリンクされている場合は摂取量)、階数を取得します。日単位または週単位で、7 日/28 日の傾向も取得できます
get_sleep1 晩分の睡眠ステージ、または平均値を含む期間を取得します
get_training_statusVO2max、トレーニング準備度、回復時間、Garmin ステータス、負荷と負荷の重点、garmin_load_model(Garmin のトレーニング負荷から算出した CTL/ATL/TSB。日別データも指定可能)、レース予測、持久力/登坂スコア、フィットネス年齢、自己記録、順化を取得します
get_body_composition体重測定値を kg 単位で取得し、傾向を表示します
get_period_summary週、月、または最大 366 日間の任意の from..to 範囲について、スポーツ別の運動量、心拍ゾーン、休息日、最長/最も負荷の高いアクティビティ、期間末の garmin_load_model、健康とエネルギーの平均値を取得します
list_workouts, get_workoutワークアウトライブラリ、予定されているワークアウト、カレンダーのレースやイベントを任意の日付範囲で取得します(デフォルトは今後 60 日間)。手順も確認できます
create_workout, schedule_workoutsプリセット(ランニングのインターバル、ウォーキング/ランニング、イージー Z2、筋力トレーニングのサーキット)または入力した定義(入れ子にできる反復、心拍数/ペース/パワーの目標)からワークアウトを作成します。create_workout に dry_run: true を指定すると、保存せずに手順と推定所要時間を表示します。schedule_workouts はワークアウトをカレンダーに登録し、登録を解除します
get_gear, get_devices距離を含むギアと、最終同期日時および設定を含むデバイスを取得します
garmin_sync進捗通知を表示しながら、対象範囲(all/activities/health/training/reference)と日付範囲を指定して明示的にダウンロードします
get_load独自の負荷モデルを取得します(日付ごとに有効な閾値を使い、パワー、ペース、心拍数、または RPE からアクティビティごとの TSS を算出)。CTL/ATL/TSB、ACWR 7:28、単調性と負担、上書き可能な閾値によるフラグ、スポーツ別の ISO 週、3 ゾーンの強度配分を取得します。日別データ、アクティビティごとの TSS/IF/負荷の算出元/EF、月別 EF の傾向も指定できます
get_readinessHRV、安静時心拍数、睡眠時間、負荷から朝の GO/MODIFY/REST を判定します。Garmin のトレーニング準備度、ボディバッテリー、ストレス、睡眠スコアも表示されますが、判定には加算されません。rules は上書き可能で、各シグナルの値、基準、評価を確認できます
get_thresholds, set_threshold日付ごとの閾値履歴(スポーツ別の LTHR、LT1、HRmax、FTP、VO2max など。Garmin プロフィールの変更は自動記録)、Garmin プロフィールに基づくスポーツ別の心拍ゾーンとパワーゾーンを取得し、テスト結果をローカルにのみ記録します

delete_activity、delete_workout、delete_weigh_in、および保存済みワークアウトの上書き(workout_id を指定した create_workout)は、GARMIN_ENABLE_DESTRUCTIVE=true の場合にのみ利用できます。

リソース:garmin://profile、garmin://gear、garmin://devices、garmin://activity-types、garmin://sync-status、および ID 補完に対応したテンプレート garmin://activity/{id} と garmin://workout/{id}。プロンプト:weekly_review、plan_next_week。

すべてのレスポンスは JSON テキストおよび outputSchema に一致する structuredContent として、{ data, meta: { source: cache|live|partial|local, fetched_at, coverage?, sync_hint? } } の形式で返されます。失敗時は { error: { code, message, hint } } の形式で返されます。

分析ツールの数式、デフォルト値、制限については、docs/analytics.md を参照してください。対象となる Garmin Connect データと、未対応のデータについては、docs/coverage.md を参照してください。

CLI

garmin-mcp-cli はサーバーとコアを共有しており、セットアップや確認に便利です。

garmin login [--strategy auto|browser|curl|fetch] [--email] [--token-path]
garmin import-tokens <file>          # garmin_tokens.json from python-garminconnect 0.3.x
garmin status [--json]
garmin sync [--scope ...] [--from --to] [--force] [--pause <s>]   # default: last 7 days
garmin activities [--from --to --type --limit --json]
garmin health <metric> [--from --to --week --json]
garmin load [--from --to] [--source auto|hrtss|garmin_load] [--flags <file.json>] [--series] [--activities] [--efficiency] [--by-sport] [--json]
garmin readiness [date] [--rules <file.json>] [--json]          # GO / MODIFY / REST for the morning
garmin thresholds [--date --param --history --json]             # LTHR, LT1, HRmax ... in effect, per sport
garmin thresholds add <date> <param> <value> [--source test|manual] [--note]
garmin thresholds export [--out <file.csv>]                     # date,param,value,source,note
garmin thresholds import <file.csv>
garmin import-activities <file.csv...>                          # Garmin Connect "Activities" CSV exports
garmin doctor                        # TLS strategy, hosts, permissions, tokens, SQLite driver
garmin serve [--transport stdio|streamable-http] [--port]
garmin logout

load、readiness、thresholds は、get_load、get_readiness、get_thresholds ツールと同じ結果を出力します。デフォルトでは Markdown テーブルを、--json を指定するとツールの { data, meta } エンベロープを出力します。ローカルデータベースのみを読み取り、ダウンロードは行いません。データがない日については、そのデータを補完する garmin sync コマンドを記載した注記を返します。import-activities は、同期済みのアクティビティではカバーされていない日付のアクティビティを、Garmin Connect の CSV エクスポート(英語またはポーランド語のヘッダー)から追加します。また、thresholds export/import を使うと、閾値の履歴を CSV ファイルに保存できます。

npx -y garmin-mcp-cli <command> で実行するか、グローバルにインストールします(npm i -g garmin-mcp-cli)。

サインイン

garmin login は、インストール済みの Chrome、Edge、Brave、Chromium で Garmin の正式なサインインページを開きます(一時プロファイルを使用し、終了後に削除します)。そこでサインインします。Garmin から求められた場合は、MFA または CAPTCHA にも対応してください。このツールが取得するのは、サインイン後に Garmin がリダイレクトするワンタイムチケットのみで、そのチケットをトークンに交換します。Cloudflare からは実際のブラウザーとして認識されます。ブラウザーが見つからない場合は、GARMIN_BROWSER_PATH を設定してください。

ブラウザーを使えない環境(ヘッドレスサーバー、Docker)や、--strategy curl|fetch を指定した場合は、ターミナルでメールアドレス、パスワード、MFA の入力を求め、Garmin のモバイルログイン API に接続します。まず curl-impersonate(オプションの cuimp パッケージを使用し、初回実行時にバイナリーをダウンロード)を試し、次に通常の fetch を試します。こちらもブロックされる場合は、Python でログインしてトークンをインポートしてください。正確なコマンドは garmin doctor が表示します。

uvx --with "garminconnect>=0.3" python <path>/python-login.py ~/.garmin-mcp/garmin_tokens.json
garmin import-tokens ~/.garmin-mcp/garmin_tokens.json

トークンとデータベースは、アクセス許可が 0700 のディレクトリ内に 0600 で保存されます。アクセス許可がこれより緩い場合、サーバーは起動を拒否します。

リモート接続と Docker

Streamable HTTP:GARMIN_MCP_TRANSPORT=streamable-http GARMIN_MCP_HTTP_TOKEN=<secret> npx -y garmin-mcp-server を実行すると、Authorization: Bearer <secret> を指定した POST /mcp を提供します。トークンを指定しない場合は、127.0.0.1 のみで待ち受けます。Host または Origin が localhost、127.0.0.1、[::1] 以外のリクエストには 403 を返します(DNS リバインディング対策)。パブリックホスト名の背後で実行する場合は、GARMIN_HTTP_ALLOWED_HOSTS=mcp.example.com で追加してください。

このサーバーは、stdio と HTTP の両方で、通常の initialize ハンドシェイクを通じて MCP 2026-07-28(server/discover、一覧結果は 1 時間キャッシュ)および 2025 年の各リビジョンに対応しています。そのため、古い MCP SDK を使うクライアントも変更せずに接続できます。

Docker:docker build -t garmin-mcp . && docker run -i -v garmin-data:/data garmin-mcp(docker run -it -v garmin-data:/data garmin-mcp login でログインします)。

設定

優先順位:CLI フラグ > 環境変数 > <data dir>/config.json > デフォルト。~、$HOME、${HOME} は常に展開されます。

変数デフォルト
GARMIN_DATA_DIR~/.garmin-mcpトークン、データベース、config.json
GARMIN_TOKENS_FILE$GARMIN_DATA_DIR/tokens.json
GARMIN_EMAIL、GARMIN_PASSWORD初回ログイン時のみ
GARMIN_REGIONglobalcn にすると、3 つすべてのホストが切り替わります
GARMIN_SSO_STRATEGYautoauto(インストール済みならブラウザー、そうでなければターミナル)、browser、curl、fetch、import
GARMIN_BROWSER_PATH検出されたパスサインインウィンドウに使用する Chrome/Edge/Brave/Chromium
GARMIN_ENABLED_TOOLS、GARMIN_DISABLED_TOOLSカンマ区切りの許可/拒否リスト
GARMIN_ENABLE_DESTRUCTIVEfalse削除ツールとワークアウトの上書き
GARMIN_AUTO_FETCHtrue読み取りツールが不足データを自動でダウンロードします。false の場合:明示的な同期のみ
GARMIN_FIT_DOWNLOAD_DIR$GARMIN_DATA_DIR/downloads
GARMIN_MCP_TRANSPORT、GARMIN_MCP_PORT、GARMIN_MCP_HOST、GARMIN_MCP_HTTP_TOKENstdio、8000、127.0.0.1、
GARMIN_HTTP_ALLOWED_HOSTSカンマ区切りのホスト名(ポートなし、IPv6 は角括弧で囲む)。localhost、127.0.0.1、[::1] に加えて、Host/Origin で許可するホスト名を指定します。それ以外は 403 が返されます
GARMIN_LOG_LEVELinfostderr に出力する pino JSON
GARMIN_TIMEZONEシステム「今日」に使用する IANA タイムゾーン
GARMIN_CONCURRENCY4並列の connectapi リクエスト数
GARMIN_MIN_REQUEST_INTERVAL_MS250リクエスト開始間隔(ジッター ±25 %)
GARMIN_SYNC_CHUNK_DAYS / GARMIN_SYNC_PAUSE_S / GARMIN_SYNC_MAX_REQUESTS_PER_DAY7 / 1-11 / 600同期のペース設定。休止時間は秒単位で、ランダムな範囲または固定値を指定します
GARMIN_DI_CLIENT_IDS、GARMIN_APP_VERSION、GARMIN_APP_USER_AGENT組み込み値Garmin がモバイルアプリの識別情報を変更した場合に使用します

詳細

コメント

MCP は初めてですか?

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

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