私は週末にヒルクライムやロングライドをしているしがない自転車乗りである。FTPは3.1W/kg程度で、大して強くない。9月末の高山ヒルクライムに向けて練習している。
最近、自転車のデータ分析やトレーニングメニューの組み立てに Google Antigravity(AGY)を使い始めた。
Strava、Garmin Connect、Intervals.icu の3つのサービスから MCP(Model Context Protocol)経由で生データを取得し、AIに専属コーチをやってもらう環境を作ったので、セットアップ手順をメモしておく。
私はgoogle oneでAIつきのプランに入っている関係で、AIはGemini、インターフェースはantigravity-cliを使っている。claude codeなどでも同様のことはできると思う。

構成
全体の構成としてはこんな感じである。
- Strava: 走行中のミリ秒単位のストリームデータ(パワー、心拍、ケイデンス、GPS)を取得
- Garmin Connect: 夜間のHRV、安静時心拍(RHR)、Body Battery(回復度)、FirstbeatのTraining Effectを取得
- Intervals.icu: 長期のCTL(体力)、ATL(疲労)、Form(TSB/コンディション)を取得
これをローカルの Antigravity CLI から直接叩いて、走行直後の解析やメニュー作成、ダッシュボード生成をやらせている。
┌─────────────────────────┐
│ Google Antigravity │
│ (ローカル AI コーチ) │
└────────────┬────────────┘
│
┌───────────────────────────┼───────────────────────────┐
▼ ▼ ▼
【Strava MCP】 【Garmin Connect MCP】 【Intervals.icu API】
・ミリ秒単位パワー/心拍 ・夜間HRV / 安静時心拍(RHR) ・長期フィットネス (CTL)
・セグメントGPS/勾配 ・Body Battery (回復度) ・短期疲労蓄積 (ATL)
・ケイデンス/トルク ・Firstbeat Training Effect ・コンディション (Form/TSB)
正直Garminだけでも必要なデータは取れそうな気がするが、面白いのでStravaとIntervals.icuも連携している。
前提環境
- macOS
- Google Antigravity CLI (
agy) - Node.js
- uv(Pythonのパッケージマネージャー)
uvが入っていない場合は以下で入れておく。
curl -LsSf https://astral.sh/uv/install.sh | sh
Strava MCP のセットアップ
走行ログのパワーや心拍の推移(ストリーム)を取るための設定。
Strava API の登録
- Strava API Settings でアプリを作成する。
Client IDとClient Secretを控える。- 認可コードを取得して
Refresh Tokenを生成しておく。
1-2. Strava MCP サーバー
ローカルディレクトリ(例えば ~/src/strava-mcp)に Strava MCP サーバーを配置してビルドしておく。
Garmin Connect MCP のセットアップ
Garmin Connectからは、睡眠データやBody Battery、夜間HRV、FirstbeatのTraining Effect(有酸素/無酸素負荷)を取得する。
OSSの taxuspt/garmin_mcp を使うと楽だった。
初回ログイン認証
ターミナルで以下のコマンドを1回実行する。
uvx --python 3.12 --from git+https://github.com/Taxuspt/garmin_mcp garmin-mcp-auth
メールアドレス、パスワード、MFA(2要素認証コード)をプロンプトで入力すると、~/.garminconnect/ にOAuthトークンが保存される。設定ファイルにパスワードを平文で書かなくて済むので安心である。
Antigravity の MCP 設定(mcp_config.json)
~/.gemini/config/mcp_config.json に Strava と Garmin の設定を追加する。
{ "mcpServers": { "strava-local": { "command": "node", "args": [ "/Users/YOUR_USERNAME/src/strava-mcp/dist/server.js" ], "env": { "STRAVA_CLIENT_ID": "YOUR_CLIENT_ID", "STRAVA_CLIENT_SECRET": "YOUR_CLIENT_SECRET", "STRAVA_REFRESH_TOKEN": "YOUR_REFRESH_TOKEN" } }, "garmin": { "command": "/Users/YOUR_USERNAME/.local/bin/uvx", "args": [ "--python", "3.12", "--from", "git+https://github.com/Taxuspt/garmin_mcp", "garmin-mcp" ] } } }
Intervals.icu API の連携
疲労管理(CTL / ATL / Form)は Intervals.icu から取得している。
- Intervals.icu の設定(Settings ➔ Developer Settings)から
Athlete IDとAPI Keyを取得する。 - Antigravity から Basic認証(
API_KEY:your_key)でhttps://intervals.icu/api/v1/athlete/{athlete_id}/wellnessを叩くスクリプトを実行させる。
コーチの人格とルール設定(~/.geminirules)
Antigravity に自分の目標レースや機材設定、ペダリングの意識を記憶させておく。
~/.geminirules に以下のようなルールを書いておく。書いておくといっても、これも「あなたの人格を設定したい」などとAIにお願いすれば書いてくれる。
# 目的とミッション あなたは専属データ駆動型トレーニングコーチ「Nagano Climb & Data Coach」です。 9月末の「高山ヒルクライム(20km / +1,300m)」での目標タイム達成に向けた指導を行うこと。 # 指導方針 1. Intervals.icuの指標(CTL, ATL, Form)を監視し、Formが -20 以下の場合は完全休養を指示すること。 2. ペダリング解析では「10時からの入力(大腰筋引き上げ)」および「自重移動」を軸に、Pythonで心拍デカップリングやトルクを評価すること。 3. 機材設定: - クランク: Magene PES P505 - スマートトレーナー: Cycplus T2(内蔵パワーはP505より約9.5%低く出る) - MyWhoosh登録FTP: 『179 W』(P505実測 198W と同期させるための値)
実際に使ってみてどうなのか
練習から帰ってきて「練習してきました」と伝えるだけで、以下を勝手にやってくれる。
- マルチデータの突合
- Stravaから区間ごとの平均パワー、心拍数、デカップリング(有酸素ドリフト率)を算出
- Garminから本日のTraining Effect(有酸素4.2/VO2MAX刺激など)やBody Batteryを確認
- Intervals.icuから最新のFitness(CTL)とForm(TSB)を更新
- HTMLダッシュボード(
cycling_dashboard.html)の自動更新- パワー・心拍プロットやケイデンス・トルクのSVGグラフをローカルHTMLにインラインで自動描画してくれる。
- スマートトレーナー用ワークアウト(
.zwo)の生成- 雨の日に室内ローラーをやる際、指定したメニュー(30分SST ➔ ラスト10分200Wビルドアップ等)の
.zwoファイルを日本語メッセージ付きで生成してくれるので、MyWhooshにインポートしてすぐ走れる。
- 雨の日に室内ローラーをやる際、指定したメニュー(30分SST ➔ ラスト10分200Wビルドアップ等)の
市販のAIアプリ(RestOrTrain等)との違い
RestOrTrainなどのスマホ向けAIコーチアプリもあるが、2026年9月からStravaの規約改定でサードパーティAIへのデータ提供が遮断されたりしている。
ローカルMCP環境なら自分のAPIキーで直接生データを取れるし、何より「スマートトレーナーとクランクの9.5%の出力差を自動補正したワークアウトを作る」とか「目標コースの勾配と下り区間を物理シミュレーションする」といった、自分専用の細かいコード処理ができるのが便利である。
非常に快適に使っている。AIにお願いすればだいたい環境構築してくれるはずだが、そうはいってもある程度コンピュータに明るくないと厳しいかもしれない。。。参考になれば幸いです。
で、脚力はついたのか?
指導内容が適切なのかは、知識がなく正直分からない。しかし明らかに脚力はついている。同じパワーを出すのに必要な心拍数がこれまでは160bpmだったのが150bpmで済むようになっている。
知識のある人にコーチしてもらえば、さらにもっと脚力はついていたかもしれないが、「アベレージを狙ってくる」のがLLMの特徴である。知識の無い者が使うには十分価値があると感じる。
また、提案してくるメニューが具体的なのでやる気になる。さらに、garmin connectなどでできた従来の練習計画は、計画に変更が出たときのリスケが面倒だったのが、このAIコーチであれば「今日は乗る時間を取れませんでした。明日以降のメニューを作って」と言うだけでリスケしてくれる。非常に柔軟である。
もうちょっと引いた視点の話
AI全盛の今、人間がやることは「ゴールを決めること」だ。今回であれば「高山ヒルクライムで前年より良いタイムを出す」だ。そのあとはAIにお任せだ。
「メニューを考えるのが楽しいんだ、おれの楽しみを奪わないでくれ」という人もいるかもしれない。しかし人間に残された仕事は「ゴールを決めること」「成果物の価値を検証すること」なのだ。


![[藤田光学] evais サングラス 偏光 運転 ドライブ ウェリントン UV400 紫外線カット 乱反射防止 超軽量 TR90 釣り ゴルフ メンズ レディース ケース付き (ブラック2, ウェリントン) [藤田光学] evais サングラス 偏光 運転 ドライブ ウェリントン UV400 紫外線カット 乱反射防止 超軽量 TR90 釣り ゴルフ メンズ レディース ケース付き (ブラック2, ウェリントン)](https://m.media-amazon.com/images/I/31QFSde9pLL._SL500_.jpg)










