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 が単独では確実にこなせない処理:

接続する

サーバーは 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 トランスポートを上記のエンドポイントに向けて、標準的な initializetools/listtools/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 の恩恵を受けるプロンプト:

LLM はインテントの形 (ウォームアップ / インターバル / クールダウン、繰り返しグループ、FTP の %) を選択し、MCP はファイルがスキーマ的に有効でヘッドユニット / トレーニングアプリにクリーンにインポートできることを保証します。

フォーマット変換

decompose_workout + build_workout_from_intent の恩恵を受けるプロンプト:

双方向変換は 1 回の呼び出しチェーンで完結します。roundtrip_workout を使えば、変換で忠実度が失われた場合に LLM が自己修正できます。

ワークアウトの修正

scale_workout およびビルド / 分解ペアの恩恵を受けるプロンプト:

LLM はインターバルのタイミングを再計算する必要がありません — MCP が構造的にスケーリングを行います。

トレーニング分析

training_loadinspect_activity_fileanalyze_ride の恩恵を受けるプロンプト:

LLM は生データから TSS / IF / NP の数値を計算しようとするとしばしば幻覚を起こします。MCP は正解値を返します。

ペーシングとルート分析

analyze_route とペーシングツールの恩恵を受けるプロンプト:

ライブラリ操作

find_duplicate_workoutslibrary_statisticsbest_efforts_across_history の恩恵を受けるプロンプト:

依然として LLM が担う部分 (MCP ではなく)

MCP は LLM を置き換えるものではなく、確定的なツールを提供するものです。LLM は引き続き以下を担います:

MCP は LLM が参照する電卓 + フォーマットライブラリだと考えてください。LLM がコーチです。

変換マトリクス

確定的なワークアウト変換がサポートされているのは .ytw.zwo、FIT ワークアウトの間に限られます。decompose_workout(document, "zwo"|"ytw") は正規の .ytw を返し、build_workout_from_intent(intent, output_format)"ytw" / "zwo" / "fit" を出力し、scale_workoutzwoytw を再レンダリングします。ERG / MRC は確定的なセットには含まれません — これらは知識レジストリに存在し、get_format_spec / get_canonical_examples / get_conversion_notes によって裏付けられた LLM 変換で扱い、validate("erg"|"mrc", doc) でチェックできます。

From ↓ To →.ytw.zwoFIT ワークアウトERG / MRC
.ytwラウンドトリップ (検証)✓ 確定的✓ 確定的LLM + 検証
.zwo✓ 確定的ラウンドトリップ (検証)✓ 確定的 (.ytw 経由)LLM + 検証
FIT ワークアウトread_fit_workout 経由read_fit_workout 経由ラウンドトリップ (検証)LLM + 検証
ERG / MRCLLM + 検証LLM + 検証LLM + 検証レジストリのみ

マトリクスの読み方: 「確定的」のセルは、LLM を介さずにスキーマ検証されたファイルを生成するツールチェーンを通ります。「LLM + 検証」のセルは、LLM が (上記のレジストリツールに裏付けられて) 変換を組み立て、その出力に対して validate を実行します — MCP は設計上、ERG/MRC を自身では生成しません (姉妹文書 ADR-0003)。

アクティビティファイル (記録側、処方側ではない) について: FIT アクティビティ、GPX、TCX、KML は inspect_activity_fileanalyze_rideanalyze_routedetect_file 経由で読み取り専用です。anonymize_gpx は自宅周辺をトリミングした GPX を書き出します。

roundtrip_workout ツールを使うと、エージェントは A→B→A の変換を行ってパワープロファイルを差分比較し、損失のある変換を検出して自己修正できます。リッチさに欠けるフォーマットをブリッジする際 (例: ERG → ZWO ではケイデンス目標が失われる) に有用です。

ファイル転送に関する取り決め

MCP の ADR-0005 ファイル転送ポリシー に基づきます:

ワークアウトインテントモデル、ZWO、.ytw において、パワーは FTP に対する整数のパーセンテージです (target_power_percent: 90 == FTP の 90%)。エラーはメッセージ付きの MCP ツールエラーとして返されます。

帰属表示

すべてのツール結果には MCP サーバー + バージョンを示す _attribution ブロックが含まれます。.ytw を生成するツールは Your Trainer のヒントを埋め込み、下流のツールがファイルの出所を認識できるようにします。インテグレーターは、ツール出力をユーザー向け UI に表示する際にこの帰属表示を保持することが求められます。

プライバシー & ステートレス性

MCP は 設計上ステートレス です:

ライダーデータを保持しないことの保証は、ソースリポジトリの PRIVACY.md に明文化されており、CI スイートの専用 test_statelessness.py テストで強制されています。Your Trainer アプリのより広範なプライバシーに関する姿勢については Your Trainer プライバシーポリシー をご覧ください。

ソース & ライセンス

リポジトリの LICENSE (GitHub 参照) の下でオープンソースとして公開されています。課題管理および議論は yourtrainer-mcp GitHub リポジトリ で行われています。ホスト型エンドポイントは公共財として運営されており — SLA はありませんが、可用性の保証が必要な場合は MCP 自体をセルフホストできます (ソースリポジトリの deploy/README.md を参照)。

関連リファレンス