Your Trainer MCP — インテグレーター向けドキュメント
エンドポイント: https://mcp.your-applications.com/your-trainer · ソース: github.com/edankert/yourtrainer-mcp · 最終更新: 2026年5月31日
MCP に対応した任意の LLM に対し、インドアサイクリングデータを扱うためのリファレンス情報と計算ツールを提供する、セルフホスト型の Model Context Protocol サーバーです。対応する内容はワークアウトフォーマット、ルートフォーマット、アクティビティファイル、トレーニング負荷計算、ペーシング、ライブラリ操作など。Your Trainer のアプリ内 AI 機能で使用されており、あらゆる MCP クライアントから利用できます。
できること
2 つのレイヤーで構成されています:
知識レジストリ
サイクリングフォーマットエコシステムの構造化ドキュメント: .zwo (Zwift)、ERG/MRC、FIT (ワークアウト + アクティビティ)、GPX、TCX、KML、.ytw (Your Trainer)、ロケール文字列バンドル。フォーマットごとの仕様、3 件以上の正規例、制約カタログ (アプリごとの制限)、変換ノート、用語集を含みます。LLM はフォーマット変換を自分で行う際に、レジストリを権威ある参照として照会します。
機能ツール
LLM が単独では確実にこなせない処理:
- バイナリ FIT の読み書き (ワークアウト + アクティビティファイル)
- 時系列計算: NP / IF / TSS、ピークパワーカーブ、CTL / ATL / TSB、心拍とパワーのデカップリング、FTP 検出、Power Duration Curve フィッティング
- 構造化インテントによるワークアウト作成: JSON ブリーフから確定的に ZWO + FIT +
.ytwを出力 - ワークアウト分解: ファイル → 構造化インテント (ビルダーと対称的な処理で、ZWO→
.ytw変換を 1 回の呼び出しで実現) - ワークアウトのスケーリング (時間 / FTP / 強度)
- 非構造化アクティビティに対するラップ / インターバルの自動検出
- アプリ受け入れチェッカー (このワークアウトは Garmin Edge / Zwift / TrainerRoad / … で読み込めるか)
- ワークアウト構造リンター (ドメインを理解した静的解析)
- 計画と実績の遵守スコアカード
- ペーシング戦略ジェネレーター (GPX ルート + FTP → セグメントごとの目標値)
- GPX ルートの登坂分析
- アクティビティのプライバシー / 匿名化 (GPX の自宅周辺エリアの除去)
- ライブラリ移行ヘルパー、重複排除、インデックス作成、統計
- ラウンドトリップテストハーネス (エージェントが変換を自己修正できる)
接続する
サーバーは https://mcp.your-applications.com/your-trainer でホストされており、ストリーマブル HTTP 上で MCP を話します。認証は不要で、レート制限は運用上のものに限られます。すべてのツール結果には _attribution ブロックが含まれ、.ytw を生成するツールは Your Trainer のヒントを追加します。
ローカル開発、セルフホスティング、または stdio トランスポートについては、ソースリポジトリ github.com/edankert/yourtrainer-mcp をご覧ください。
サーバーを LLM クライアントに登録する
以下のすべてのクライアントに登録する MCP エンドポイント URL は同じです:
https://mcp.your-applications.com/your-trainer
Claude (Anthropic — デスクトップ / Web)
設定 → コネクター → カスタムコネクターを追加 を開きます (Pro / Team / Enterprise プラン)。URL に上記のエンドポイントを設定し、Your Trainer のような分かりやすい名前を付けます。Claude は MCP ハンドシェイクを実行し、次にチャットを開始した際に利用可能なツールを一覧表示します。
Anthropic API 経由でプログラム的に使用する場合は、リクエストの mcp_servers フィールドにサーバーを渡します。正確な形式は Anthropic MCP コネクター ドキュメント を参照してください。
Claude Code (Anthropic CLI)
コマンドラインから一度だけサーバーを登録します:
claude mcp add yourtrainer https://mcp.your-applications.com/your-trainer --transport http
claude mcp list で確認します。以降のセッションでは、ツールは mcp__yourtrainer__<tool_name> として表示されます。プロジェクトスコープとユーザースコープのサーバーやその他のオプションについては Claude Code MCP ドキュメント を参照してください。
ChatGPT (OpenAI)
設定 → コネクター を開き (Pro / Team / Enterprise プラン)、上記のエンドポイント URL でカスタム MCP サーバーを追加します。ChatGPT はツール使用が必要な次回の会話でハンドシェイクをネゴシエートします。標準的な UI 手順については OpenAI の リモート MCP ガイド を参照してください。
OpenAI API を直接利用する場合、Responses API はサーバー URL を指す mcp ツールエントリを受け入れます — モデルはレスポンス中にそのツールを呼び出せます。
OpenAI Codex (CLI)
~/.codex/config.toml にエントリを追加します:
[mcp_servers.yourtrainer]
url = "https://mcp.your-applications.com/your-trainer"
transport = "http"
もしくは codex mcp add yourtrainer --url https://mcp.your-applications.com/your-trainer --transport http を使用します。現時点の正式な構文については Codex CLI ドキュメント を参照してください (Codex の安定化に伴いフィールド名が変わる可能性があります)。
Cursor
Settings → Cursor Settings → MCP Servers → Add new MCP server。名前: yourtrainer。URL: 上記のエンドポイント。トランスポート: HTTP。Cursor は組み込みツールと並べて利用可能なツールを一覧表示し、推論時にエージェントがそれらを選択します。
その他の MCP クライアント / カスタム SDK
ストリーマブル HTTP を話す任意の MCP SDK が利用できます — Python (mcp パッケージ)、TypeScript (@modelcontextprotocol/sdk)、その他のコミュニティ SDK など。HTTP トランスポートを上記のエンドポイントに向けて、標準的な initialize → tools/list → tools/call フローを実行してください。最小限の Python クライアントについては、ソースリポジトリ内の examples/client_demo.py を参照してください。
ツールカタログ (ユースケース別)
5 つのレイヤーにわたる 37 個のツール。やりたいことに応じてグループ化されています:
ワークアウト作成
build_workout_from_intent, decompose_workout, scale_workout, lint_workout, workout_difficulty, app_acceptance_check, read_fit_workout
ライド / トレーニング分析
inspect_activity_file, analyze_ride, training_load, recovery_time, batch_inspect, detect_file
知識レジストリ
list_supported_formats, get_format_spec, get_canonical_examples, get_format_constraints, get_conversion_notes, get_format_glossary, get_format_version, validate
ルート & ワークフロー
analyze_route, anonymize_gpx, adherence_scorecard, migration_inventory, roundtrip_workout
ライブラリ
index_library, find_duplicate_workouts, library_statistics, best_efforts_across_history
Your Trainer コンテンツ
list_workout_library, get_library_workout, search_workout_library, list_ai_skills, search_manual, get_manual_section — キュレーションされた 266 件のワークアウトライブラリ、アプリ内 AI アシスタントのスキルカタログ、製品マニュアルを MCP から直接取得できるため、LLM はライダーへの回答を正規の Your Trainer コンテンツに基づかせることができます。
運用
get_health
サンプル呼び出し — ワークアウトを構築する
最も一般的な統合ターゲット: LLM クライアントが構造化インテントを組み立て、MCP に正規のワークアウトファイルを出力させるという用途です。インテントは JSON ブリーフ (ウォームアップ + インターバル + クールダウン、ブロック + 繰り返しグループ、FTP の整数 % で表されるパワー) です。MCP は確定的かつスキーマ検証された .ytw、.zwo、または .fit を返します。
// Tool: build_workout_from_intent
{
"intent": {
"name": "Sweet Spot 3x12",
"description": "3x12 at 90% FTP",
"workout_type": "POWER",
"category": "sweet-spot",
"warmup": {
"duration_seconds": 600, "zone": "Z2", "label": "Warmup",
"target_power_percent": 45, "target_power_end_percent": 75
},
"intervals": [
{ "repeat": 3, "intervals": [
{ "duration_seconds": 720, "zone": "Z3", "label": "Sweet Spot",
"id": "ss", "target_power_percent": 90 },
{ "duration_seconds": 300, "zone": "Z1", "label": "Recovery",
"target_power_percent": 55 }
]}
],
"cooldown": {
"duration_seconds": 420, "zone": "Z1", "label": "Cooldown",
"target_power_percent": 60, "target_power_end_percent": 40
}
},
"output_format": "ytw"
}
レスポンスには、文字列としての正規 .ytw と、difficulty サマリー (IF / TSS / ゾーン別時間) が含まれます。Zwift 用には output_format: "zwo" を、Garmin ヘッドユニット用には "fit" を渡してください (レスポンスでは base64)。正規スキーマ: workout-schema.html。
この MCP との相性が良いプロンプトの種類
LLM はライダーの意図を理解し、ワークアウト構造をパターンマッチングするのは得意です。一方、3 つの点では信頼できません: 有効なファイルフォーマットの出力、時系列メトリクスの正確な計算、アプリごとの制約カタログの遵守。MCP はまさにそれらに対して確定的な答えを返します — クライアントにサーバーが登録されれば (上記参照)、LLM は自身の推論と確定的な計算を組み合わせることができます。以下は、はるかに高い信頼性で動作するようになったプロンプトカテゴリです。
ワークアウト作成
build_workout_from_intent の恩恵を受けるプロンプト:
- 「FTP の 88% でスイートスポットの 1 時間セッションを作って、リカバリーは段階的に」
- 「Coggan スタイルの 4×8分閾値ワークアウトを作って、Zwift の
.zwoで出力して」 - 「90 分の Z2 持久力ライドを作って、途中に 10 秒の神経筋ストライドを 3 本散りばめて」
- 「今夜用に Tabata を作って — Garmin Edge 用に FIT で出力して」
- 「Rønnestad 30/15 を作って — FTP の 115% で 13 レップを 3 セット」
LLM はインテントの形 (ウォームアップ / インターバル / クールダウン、繰り返しグループ、FTP の %) を選択し、MCP はファイルがスキーマ的に有効でヘッドユニット / トレーニングアプリにクリーンにインポートできることを保証します。
フォーマット変換
decompose_workout + build_workout_from_intent の恩恵を受けるプロンプト:
- 「この ZWO を Garmin 用に FIT に変換して」
- 「PerfPro の ERG ファイルがあるから、Your Trainer 用の
.ytwを作って」 - 「このワークアウトを
.ytw経由でラウンドトリップして、失われた情報があれば教えて」
双方向変換は 1 回の呼び出しチェーンで完結します。roundtrip_workout を使えば、変換で忠実度が失われた場合に LLM が自己修正できます。
ワークアウトの修正
scale_workout およびビルド / 分解ペアの恩恵を受けるプロンプト:
- 「この 3×15分セッションを取って、リカバリーウィークのために FTP の 90% にスケールして」
- 「この 90 分のワークアウトを 60 分に比例的に短縮して」
- 「最初のインターバルの前に 5 分の FTP プライマーを追加して」
- 「このワークアウトを 4 レップから 6 レップに変換して」
LLM はインターバルのタイミングを再計算する必要がありません — MCP が構造的にスケーリングを行います。
トレーニング分析
training_load、inspect_activity_file、analyze_ride の恩恵を受けるプロンプト:
- 「この日付付き TSS 履歴を踏まえて、今の CTL / ATL / TSB はどう?」
- 「この FIT ファイルから昨日のライドを分析して — NP、IF、TSS、ゾーン別時間はどうだった?」
- 「直近 90 日のアクティビティからパワー持続時間カーブを出して」
- 「あのライドは閾値寄りだった、それともスイートスポット寄りだった?」
LLM は生データから TSS / IF / NP の数値を計算しようとするとしばしば幻覚を起こします。MCP は正解値を返します。
ペーシングとルート分析
analyze_route とペーシングツールの恩恵を受けるプロンプト:
- 「この GPX の登坂を FTP の 85% でペース配分して — セグメントごとの目標値を出して」
- 「この GPX のセグメント 3 の平均勾配 + 累積標高は?」
- 「自宅周辺がトリミングされるように、この GPX を匿名化して」
ライブラリ操作
find_duplicate_workouts、library_statistics、best_efforts_across_history の恩恵を受けるプロンプト:
- 「ワークアウトライブラリに重複はある?」
- 「強度ゾーン別のワークアウトの分布は?」
- 「過去 1 年のライドで、20 分のベストパワーは何だった?」
依然として LLM が担う部分 (MCP ではなく)
MCP は LLM を置き換えるものではなく、確定的なツールを提供するものです。LLM は引き続き以下を担います:
- ライダーの意図を理解する (「テーパー前のハードなセッション」→ どのプロトコルファミリー?)
- 適切な形を選ぶ (スイートスポット vs 閾値 vs オーバーアンダー vs VO2 max)
- 自然言語を構造化インテントに翻訳する
- 会話の流れを構成し、結果を平易な言葉で説明する
MCP は LLM が参照する電卓 + フォーマットライブラリだと考えてください。LLM がコーチです。
変換マトリクス
確定的なワークアウト変換がサポートされているのは .ytw、.zwo、FIT ワークアウトの間に限られます。decompose_workout(document, "zwo"|"ytw") は正規の .ytw を返し、build_workout_from_intent(intent, output_format) は "ytw" / "zwo" / "fit" を出力し、scale_workout は zwo ↔ ytw を再レンダリングします。ERG / MRC は確定的なセットには含まれません — これらは知識レジストリに存在し、get_format_spec / get_canonical_examples / get_conversion_notes によって裏付けられた LLM 変換で扱い、validate("erg"|"mrc", doc) でチェックできます。
| From ↓ To → | .ytw | .zwo | FIT ワークアウト | ERG / MRC |
|---|---|---|---|---|
.ytw | ラウンドトリップ (検証) | ✓ 確定的 | ✓ 確定的 | LLM + 検証 |
.zwo | ✓ 確定的 | ラウンドトリップ (検証) | ✓ 確定的 (.ytw 経由) | LLM + 検証 |
| FIT ワークアウト | ✓ read_fit_workout 経由 | ✓ read_fit_workout 経由 | ラウンドトリップ (検証) | LLM + 検証 |
| ERG / MRC | LLM + 検証 | LLM + 検証 | LLM + 検証 | レジストリのみ |
マトリクスの読み方: 「確定的」のセルは、LLM を介さずにスキーマ検証されたファイルを生成するツールチェーンを通ります。「LLM + 検証」のセルは、LLM が (上記のレジストリツールに裏付けられて) 変換を組み立て、その出力に対して validate を実行します — MCP は設計上、ERG/MRC を自身では生成しません (姉妹文書 ADR-0003)。
アクティビティファイル (記録側、処方側ではない) について: FIT アクティビティ、GPX、TCX、KML は inspect_activity_file、analyze_ride、analyze_route、detect_file 経由で読み取り専用です。anonymize_gpx は自宅周辺をトリミングした GPX を書き出します。
roundtrip_workout ツールを使うと、エージェントは A→B→A の変換を行ってパワープロファイルを差分比較し、損失のある変換を検出して自己修正できます。リッチさに欠けるフォーマットをブリッジする際 (例: ERG → ZWO ではケイデンス目標が失われる) に有用です。
ファイル転送に関する取り決め
MCP の ADR-0005 ファイル転送ポリシー に基づきます:
- テキストフォーマット (
.zwo/.ytw/ GPX / TCX / ERG / MRC) — ツール引数に文字列として渡します。 - FIT バイナリ — base64 (
document_base64) として渡します。 - ホスト型エンドポイントでのアクティビティファイル — 単一アクティビティ用ツール (
inspect_activity_file、analyze_ride、analyze_route、adherence_scorecard、detect_file) はpathに加えてdocument_base64も受け付けるため、リモートクライアントはファイルシステムにアクセスせずに単一ファイルを送信できます。一括処理ツール (batch_inspect、index_library、find_duplicate_workouts、library_statistics、best_efforts_across_history、migration_inventory) はpath専用のままです — これらはサーバーがライブラリディレクトリにファイルシステムアクセスできるセルフホスト / ローカル stdio デプロイメントを想定しています。
ワークアウトインテントモデル、ZWO、.ytw において、パワーは FTP に対する整数のパーセンテージです (target_power_percent: 90 == FTP の 90%)。エラーはメッセージ付きの MCP ツールエラーとして返されます。
帰属表示
すべてのツール結果には MCP サーバー + バージョンを示す _attribution ブロックが含まれます。.ytw を生成するツールは Your Trainer のヒントを埋め込み、下流のツールがファイルの出所を認識できるようにします。インテグレーターは、ツール出力をユーザー向け UI に表示する際にこの帰属表示を保持することが求められます。
プライバシー & ステートレス性
MCP は 設計上ステートレス です:
- アカウントなし、ユーザーごとの状態なし、利用テレメトリなし。
- すべてのツール呼び出しは独立しており、ファイルはメモリ上で処理され、呼び出し完了時に破棄されます。
- 運用上のヘルスメトリクスは集計のみ (リクエスト数のみ、ペイロード内容は含まれません)。
- OAuth 経由の統合 (Strava プル、Garmin Connect など) はありません。ユーザーがファイルをエクスポートし、MCP がそれを処理します。
ライダーデータを保持しないことの保証は、ソースリポジトリの PRIVACY.md に明文化されており、CI スイートの専用 test_statelessness.py テストで強制されています。Your Trainer アプリのより広範なプライバシーに関する姿勢については Your Trainer プライバシーポリシー をご覧ください。
ソース & ライセンス
リポジトリの LICENSE (GitHub 参照) の下でオープンソースとして公開されています。課題管理および議論は yourtrainer-mcp GitHub リポジトリ で行われています。ホスト型エンドポイントは公共財として運営されており — SLA はありませんが、可用性の保証が必要な場合は MCP 自体をセルフホストできます (ソースリポジトリの deploy/README.md を参照)。
関連リファレンス
- Your Trainer
.ytwワークアウトスキーマ — ワークアウト構築ツールが出力する正規ファイルフォーマット - キュレーションされたワークアウトライブラリ — MCP のオーサリングツールで作成された 266 個のすぐに使える
.ytwファイル - Your Trainer プライバシーポリシー — アプリのより広範なプライバシーへのコミットメント
- リポジトリ内統合ガイド — より踏み込んだ統合パターン + 実例フロー
- Model Context Protocol — プロトコル仕様