Garmin Personal MCP について
個人のGarmin ConnectアカウントにGarmin Personal API経由で接続する読み取り専用のMCPサーバーです。パスワードログインやスクレイピングを使わず、取り消し可能なAPIキーで健康・アクティビティデータを取得します。
主な機能
- 01睡眠、HRV、Body Batteryデータの取得
- 02健康サマリーと日付範囲の検索
- 03アクティビティの検索と詳細取得
- 04長い期間をAPI上限内の区間に分割
- 05高密度サンプルの既定での省略
活用シーン
- 01睡眠やHRVの傾向確認
- 02最近のランやワークアウトの比較
- 03日々の健康・トレーニングデータの確認
MCP 対応
stdioまたはstreamable HTTP経由で、MCPクライアントにGarmin Personal APIのデータ取得ツールを提供します。健康指標、睡眠、アクティビティを読み取り専用で照会できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx garmin-personal-mcpGARMIN_PERSONAL_API_KEYシークレットGarmin Connect Personal API key (optional; 'garmin-personal-mcp auth' saves one instead)GARMIN_MCP_DOWNLOAD_DIRWhere garmin_download_activity saves activity filesローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
26掲載時のツール一覧 · 今日に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| date | any | いいえ |
詳細
Garmin Connect を Claude や任意の MCP クライアントに接続できます。昨夜の睡眠、 HRV の傾向、Body Battery、トレーニング負荷、特定のランニングについて、実際の Garmin アカウントのデータをもとに質問できます。
PyPI では garmin-personal-mcp として公開されています。
非公式プロジェクト、公式 API を使用。 Garmin が開発したものではありませんが、 Garmin の公式 Python クライアントを通じて、Garmin のドキュメント化された Personal API のみを利用します。
このツールを選ぶ理由
多くの Garmin MCP サーバーは、非公式の garminconnect ライブラリを使って Garmin のパスワードでログインします。そのため、Garmin がログイン方法を変更するたびに動かなくなります。2026 年 10 月、Garmin は個人向けの Personal
API を公開しました。このサーバーはこれを利用します。
- パスワード不要、スクレイピングなし:Garmin Connect で作成できる、いつでも無効化可能な Personal API キーを、短期間有効なトークンと交換します
- Personal API 全体に対応:リファレンスに記載された動作するすべてのエンドポイントにツールがあり、ドキュメント化されたフィルターにもすべて対応しています
- 任意の日付範囲に対応:エンドポイントで許可される範囲(ステップ数は 28 日、睡眠は 31 日など)を超える場合、リクエストを分割して実行します
- モデルに適した応答:終日分のサンプル配列は、要求されない限り含めません
- 読み取り専用:Personal API ではアカウントを変更できず、このサーバーでも変更できません
クイックスタート
-
Personal API キーを保存します(初回のみ。詳しくは認証をご覧ください)。
uvx garmin-personal-mcp auth -
サーバーをクライアントに追加します。上部のインストールボタンを使うと、Cursor と VS Code にはワンクリックで追加できます。
Claude Code
claude mcp add garmin -- uvx garmin-personal-mcpまたは、プラグインとしてインストールすることもできます。その場合、手順 1 の代わりにキーの入力を求められます。
/plugin install garmin-personal-mcp --marketplace Mason-Levyy/garmin-personal-mcpClaude Desktop(
claude_desktop_config.json)、Cursor (~/.cursor/mcp.json)、Windsurf(~/.codeium/windsurf/mcp_config.json)、 Cline(cline_mcp_settings.json)では、すべて同じエントリーを使用します。{ "mcpServers": { "garmin": { "command": "uvx", "args": ["garmin-personal-mcp"] } } }VS Code、Codex CLI、Gemini CLI
VS Code(または上のボタンを使用してください):
code --add-mcp '{"name":"garmin","command":"uvx","args":["garmin-personal-mcp"]}'Codex CLI:
codex mcp add garmin -- uvx garmin-personal-mcpGemini CLI:
gemini mcp add garmin uvx garmin-personal-mcp -
質問してみましょう。「昨夜の睡眠はどうだった?」、「今月、HRV は低下傾向にある?」、*「直近 3 回のロングランを比較して」*などです。
uv が必要です。Claude に限らず、stdio またはストリーミング可能な HTTP に対応した MCP クライアントであれば利用できます。
役に立ちましたか? GitHub に ⭐ を付けると、ほかの Garmin ユーザーが見つけやすくなります。
認証
- ウェブで Garmin Connect にサインインし、設定 → Personal API を開きます。
- キーを作成し、有効期間(30 日から 1 年)を選びます。Garmin がキーを表示するのは一度だけです。
garmin-personal-mcp authを実行し、非表示の入力プロンプトでキーを貼り付けます。サーバーは Garmin でキーを確認してから、所有者のみがアクセスできる権限で~/.config/garmin/connect-personal-api-keyに保存します。
スクリプトやエージェントが実行するシェルなど、入力プロンプトを表示する端末がない場合は、代わりにキーをパイプで渡します。例:pbpaste | garmin-personal-mcp auth。
garmin-personal-mcp auth --check を実行すると、プロンプトを表示せずに、保存したキーが引き続き使用できるか確認できます。キーの有効期限が切れる約 1 週間前に Garmin からメールが届きます。新しいキーを作成し、再度 auth を実行してください。再起動は不要です。サーバーは呼び出しのたびにキーを読み込みます。
キーのファイルの代わりに GARMIN_PERSONAL_API_KEY を設定できます。この環境変数が優先されます。キーのファイルとベアラートークンのキャッシュは、Garmin の gc-personal CLI と共通のため、どちらかで保存したキーを両方で使用できます。
ツール
すべてのツールで日付は YYYY-MM-DD 形式で指定します。期間を指定するツールは、デフォルトで今日までの 7 日間を対象とします。リストを返すツールは、結果を {"results": [...]} でラップします。
| ツール | 返される内容 |
|---|---|
garmin_get_day | 1 日の概要:サマリー、睡眠、HRV、Body Battery、ストレス、アクティビティ |
garmin_get_daily_summary | 指定日のすべての終日ウェルネス合計 |
garmin_get_daily_summaries | 期間内の日次サマリー(週または月単位の傾向) |
garmin_get_steps | 1 日の歩数、距離、目標 |
garmin_get_stress | 1 日のストレスレベルと、各ストレス帯で過ごした時間 |
garmin_get_hydration | 1 日の摂取量、目標、発汗による損失 |
garmin_get_body_battery | 1 日の充電・消耗とその要因となったイベント。chunks で日中の最低値・最高値を取得 |
garmin_get_heart_rate | 安静時/最小/最大 HR、7 日間の安静時平均、異常 HR アラート。リクエストに応じて測定値を取得 |
garmin_get_spo2 | パルスオキシメーターの平均値、時間ごとの平均値、順応状況。リクエストに応じて測定値を取得 |
garmin_get_wellness_activities | サマリー値と各ゾーンでの時間を含むウェルネスアクティビティ |
garmin_get_sleep | 1 晩分の詳細:スコア、睡眠ステージ、時刻、夜間のバイタル |
garmin_get_sleep_summaries | 期間内の夜ごとの睡眠記録 |
garmin_get_hrv | 1 晩分の HRV とすべての測定値 |
garmin_get_hrv_summaries | 期間内の夜ごとの HRV、週間平均、ベースライン、ステータス |
garmin_get_weight | 日次の体重サマリー、期間平均、前後の計測値。include_all で全計測値を取得 |
garmin_get_weight_goals | 適用中の体重目標とその目標範囲 |
garmin_get_food_log | Garmin Connect の栄養ログ:食品、栄養素、目標、食事 |
garmin_search_activities | Garmin がサポートするすべてのフィルター(種類、日付、距離、パワー、エリア、ダイビングなど)に対応したアクティビティ |
garmin_get_activity | 1 件のアクティビティの詳細(スプリットを含む) |
garmin_get_activity_workouts | アクティビティ中に実施した構成済みワークアウト |
garmin_download_activity | アクティビティの元ファイル(.fit を含む ZIP)をサーバーのマシンに保存 |
garmin_get_profile | 単位、形式、タイムゾーン、トレーニング日の設定 |
garmin_get_heart_rate_zones | スポーツごとのゾーン下限値と、それらの基準となる HR |
garmin_get_fitness_age | フィットネス年齢、達成可能なフィットネス年齢、およびその構成要素 |
garmin_get_menstrual_cycle | 周期の段階、日数、妊娠可能期間、予測 |
garmin_get_menstrual_day | 1 日分の記録された症状、経血量、周期の詳細 |
重量はグラム、距離はメートル、時間は秒単位で返されます。これは Garmin の返却形式に準じています。
リモート/HTTP モード
デフォルトのトランスポートは stdio です。ネットワーククライアントを使う場合:
garmin-personal-mcp --http --host 127.0.0.1 --port 8491
これにより、/mcp でストリーミング可能な HTTP を提供します。認証機能は組み込まれていません。インターネットに公開しないでください。 localhost にバインドし、認証を代行するもの(VPN または tailnet(例:tailscale serve)、認証対応リバースプロキシ、OAuth 対応 MCP ゲートウェイ)を前段に配置してください。プロキシの背後で使用する場合は、--allowed-host <proxy hostname> を指定してください(複数回指定可能)。これにより、DNS リバインディングチェックで Host ヘッダーが許可されます。
設定
| 変数 | 用途 | デフォルト |
|---|---|---|
GARMIN_PERSONAL_API_KEY | Personal API key。保存済みのキー ファイルより優先されます | – |
GARMIN_MCP_DOWNLOAD_DIR | garmin_download_activity がファイルを保存する場所 | ~/Downloads/garmin(プラットフォームのダウンロードディレクトリ) |
トラブルシューティング
- 「Garmin rejected the Personal API key」:キーの有効期限が切れたか、削除されています。
新しいキーを作成し、
garmin-personal-mcp authを実行してください。 - 「No usable Garmin Personal API key was found」:
garmin-personal-mcp authを実行するか、 クライアント設定でGARMIN_PERSONAL_API_KEYを設定してください。 {"no_data": ...}:Garmin にその日付のデータがまだない(たとえば、睡眠前の今日の HRV)か、 お使いのデバイスがその指標を記録していません。- 長い期間を指定した際の HTTP 400:上限が文書化されていないエンドポイントで、指定した期間が拒否されました。 より短い期間を指定してください。
FAQ
これはGarminの公式APIですか? はい。Garmin Connectアカウントを持っていれば誰でも申請なしで有効にできるGarminのPersonal APIを、GarminのApacheライセンスのPythonクライアントを通じて使用しています。このプロジェクト自体は独立したものです。
Garminのデータを変更できますか? いいえ。Personal APIは読み取り専用です。何かを書き込む唯一のツールであるgarmin_download_activityは、お使いのマシンにファイルを保存します。
どのMCPクライアントで使えますか? Claude Desktop、Claude Code、Cursor、Windsurf、Cline、VS Codeなど、stdioまたはストリーミング可能なHTTPサーバーを実行できる任意のクライアントで使えます。AIコーディングエージェントはllms-install.mdに従ってセットアップできます。
データはどこに送られますか? サーバーはGarminとのみ通信します。キーとベアラートークンは~/.config/garmin/に保存されます。ツールの結果は、接続先のMCPクライアントとモデルに送られます。
他の人のアカウントにも使えますか? いいえ。GarminのPersonal APIはご自身のデータを対象としています。他のユーザーにサービスを提供するアプリには、Garminのビジネス開発者プログラムが必要です。
仕組み
garmin-personal-mcp authでキーを保存します。各呼び出しでは、GarminのPersonalApiAuthenticatorを通じてキーをベアラートークンに交換します。トークンは有効期限の1時間前までキャッシュされます。トークンが期限前に拒否された場合は、新しいトークンに交換して1回再試行します。- 各ツールは
personal.connectapi.garmin.com上の1つのエンドポイントに対応します(garmin_get_dayは複数のエンドポイントを組み合わせます)。エンドポイントにドキュメント化された最大値を超える範囲は、連続する期間に分けて取得し、結合します。 - モデルが読みやすいレスポンスを保てるよう、分単位の大量のサンプル配列はデフォルトで除外されます。
include_samplesまたはchunksを指定すると、サンプル配列を含められます。
開発
git clone https://github.com/Mason-Levyy/garmin-personal-mcp
cd garmin-personal-mcp
uv sync
uv run pytest
テストは合成フィクスチャを使用して実行するため、アカウントは必要ありません。Lintとフォーマットはruff(uv run ruff check .、uv run ruff format .)で適用されます。
コントリビューション
課題の報告やプルリクエストを歓迎します。特にGarminがPersonal APIにエンドポイントを追加した場合はぜひお知らせください。セットアップ、スタイル、PRチェックリストについてはCONTRIBUTING.mdを、脆弱性を非公開で報告する方法についてはSECURITY.mdをご覧ください。リリース履歴はCHANGELOG.mdにあります。
プロジェクトを支援する
このサーバーが時間の節約に役立った場合は、ぜひリポジトリにスターを付けてください。スターを通じて、他のGarminユーザーがGitHub検索やMCPディレクトリでこのプロジェクトを見つけやすくなります。不具合の報告やエンドポイントのリクエストも、課題で歓迎します。
ライセンス
MIT。GarminおよびGarmin ConnectはGarmin Ltd.またはその子会社の商標です。このプロジェクトはGarminと提携しておらず、Garminから承認も受けていません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。