garmin-mcp
garmin-mcp
ローカルMCPサーバーで、Garmin Connectのアクティビティ、健康、トレーニングデータ(アクティビティ、HRV、睡眠、心拍数、ストレス、Body Battery、トレーニングレディネス、心拍数/パワーゾーン、乳酸閾値、FTP、VO2max、自己ベスト、ワークアウト、予定されたワークアウト、トレーニングプラン)をClaude Desktop内のツールとして公開します。
garminconnectライブラリを介して、Garmin ConnectのライブAPIと直接通信します。データは読み取り専用です。Garminに書き戻されることは一切ありません。
認証の仕組み
Garminのログインは、意図的に2つの別々の場所で行われます:
scripts/setup_auth.py— ターミナルで自分で実行する対話型スクリプト。メールアドレスとパスワードでログインし、Garminから要求された場合はMFAコードを求め、その結果のセッショントークンを~/.garmin_mcp/tokensに保存します。MCPサーバー(
src/garmin_mcp/server.py)はClaude Desktopによってヘッドレスで起動され、キャッシュされたトークンを読み込んで静かに更新するだけです。MFAのプロンプトを表示することはありません。Claude Desktopにはプロンプトを表示するターミナルがないため、そこでstdinをブロックするとツール呼び出しがハングします。キャッシュされたセッションがないか期限切れの場合は、setup_auth.pyを再実行するように指示するエラーでツール呼び出しが失敗します。
GarminパスワードはmacOSキーチェーン(項目/サービスgarmin-mcp、キーチェーンアクセスで表示可能)に保存され、ファイルに書き込まれることはありません。保存されるのはGarminのログインメールアドレス(機密ではありません)だけで、~/.garmin_mcp/config.jsonに保存されます。
セットアップ
依存関係をインストールします:
cd garmin_mcp uv sync一度だけの対話型ログインを実行します:
uv run python scripts/setup_auth.pyGarmin Connectのメールアドレスとパスワードを入力します(パスワードは次回のためにキーチェーンに保存されます)。プロンプトが表示されたらMFAコードを入力します。成功すると、確認メッセージとトークンキャッシュのパスが表示されます。
Claude Desktopにサーバーを登録するには、
~/Library/Application Support/Claude/claude_desktop_config.jsonを編集し、(他のmcpServersエントリに加えて)以下を追加します:{ "mcpServers": { "garmin": { "command": "uv", "args": ["run", "--project", "/Users/felix.guiony/Code/Perso/garmin_mcp", "garmin-mcp"] } } }Claude Desktopを完全に終了し(ウィンドウを閉じるだけでなくCmd+Q)、再度開きます。ツール/ハンマーアイコンに
garminツールが表示されるはずです。
ツール
ツール | 説明 |
| 最近のアクティビティ(新しい順、ページングあり、タイプフィルタ任意) |
| 1件のアクティビティの完全な詳細:サマリー + メトリックごとの時系列 |
| 1件のアクティビティのラップ/スプリットデータ |
| 毎日の安静時心拍数 + 日内心拍数のタイムライン |
| 歩数、消費カロリー、安静時心拍数、距離、フロア、運動強度時間 |
| 睡眠ステージ、睡眠時間、睡眠スコア |
| 心拍変動(HRV) |
| 指定期間のBody Batteryエネルギーレベル |
| 終日のストレスレベル |
| トレーニングレディネスのスコアと関連要因 |
| 個人情報、単位の設定、個人設定(最大心拍数、安静時心拍数、体重、身長、VO2max)、スポーツごとの心拍数ゾーンとパワーゾーン |
| ランニングの乳酸閾値:心拍数、パワー、スピード |
| 最新のサイクリングFTP(機能的閾値パワー) |
| 指定期間におけるスポーツ別の過去のFTP |
| 指定期間の最大値メトリックデータ(例:VO2max) |
| 指定期間の毎日の安静時心拍数の推移 |
| 指定日のGarminフィットネス年齢 |
| 自己ベスト記録 |
| 保存済みワークアウトテンプレート(新しい順、ページングあり) |
| 1件のワークアウトの完全な構造:セグメント、ターゲット、インターバル |
| 指定月に予定されているワークアウトのカレンダー |
| 予定されたワークアウト1件の詳細 |
| トレーニングプラン |
| 特定のトレーニングプランの詳細 |
| 特定のアダプティブトレーニングプランの詳細 |
すべての日付パラメータはYYYY-MM-DD形式で、デフォルトは今日です。
トラブルシューティング
ツール呼び出しで "Garmin session error" / "run setup_auth.py" というメッセージが返される。 キャッシュされたリフレッシュトークンの有効期限が切れたか、失効しています(これはまれに発生します。たとえばパスワード変更後や長期間の未使用後など)。再実行してください:
uv run python scripts/setup_auth.pyレート制限。 Garmin Connectはまれに短時間の大量リクエストをレート制限することがあります。基盤となるライブラリは一時的な障害を自動的に再試行しますが、レート制限エラーが表示される場合は、少し待ってから再試行してください。
Claude Desktopの外部でサーバーを直接検証する:
uv run mcp dev src/garmin_mcp/server.pyを実行するとMCP Inspectorが開き、各ツールを手動で呼び出して、その出力/スキーマを確認できます。
プロジェクト構成
garmin_mcp/
pyproject.toml
src/garmin_mcp/
auth.py # keychain + token-cache helpers
server.py # FastMCP server and tool definitions
scripts/
setup_auth.py # interactive one-time/occasional loginThis server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
Garmin data in Claude: 135 tools — activities, sleep, HRV, training, workouts. Free, open source.
MCP server for Withings health data — sleep, activity, heart, and body metrics.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sovnheim/garmin-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server