RunCoach
RunCoach
公開中: runcoach-ruby.vercel.app · MCPエンドポイント https://runcoach-ruby.vercel.app/mcp
ランナー自身のトレーニングデータ(計算されたトレーニング負荷、レースタイム予測、生成されたプラン)を、LLMが呼び出せるツールとして公開するMCPサーバーです。
ポイントは根拠(grounding)です。「今週は負荷を減らすべきですか?」とアシスタントに尋ねると、何もないところからもっともらしいコーチングアドバイスが返ってきます。RunCoachは同じ質問をアスリートの実際の記録されたアクティビティに基づいて解決し、回答にはその根拠となった具体的なランの情報が含まれます。
あなた: トレーニングの調子はどうですか?ハーフマラソンはどのくらいで走れそうですか?
Claude (
analyze_training_statusを呼び出し、次にpredict_race_timeを呼び出す): トレーニングは一貫しており、負荷は安定しています。過去28日間で17回のラン、週間走行距離46.8km、急性:慢性比1.00、3日以上の休養期間はありません。フィットネスは維持されており、構築されているわけではありません。これは目標と目標の間にある適切な状態であり、レースが近づいている場合は変更する価値があります。ハーフマラソンについては:1:38:49、最も可能性の高い範囲は1:36:50から1:40:48です。これはあなた自身の距離/タイム曲線に基づいて、5K(21:30、7月8日)、10K(44:50、6月3日)、ハーフ(1:38:48、4月29日)の記録からフィッティングされています。疲労指数は1.059で、母集団平均の1.06に対して、距離が伸びてもペースを維持する能力は平均的です。1つのアクティビティは除外されました:7月28日の3kmランで、その距離の世界記録よりも速いペースで記録されており、ほぼ確実にGPSエラーです。
上記の数値はすべてnpm testのフィクスチャアスリートからの実際の出力であり、例示ではありません。正確な文字列はtest/readme.test.tsにあり、科学が進歩してREADMEが更新されない場合にテストが失敗します。すべてのツールは信頼度とその数値の導出方法の説明を返し、サーバーの指示はモデルにその両方を伝えるよう指示します。根拠なしに述べられた予測は、推測と区別がつきません。
ツール
ツール | 回答内容 |
| 「トレーニングの調子はどうですか?」— 負荷の傾向、一貫性、ボリュームから読み取った複合的な準備状態(明示的な注意点付き) |
| フィットネス(CTL)、疲労(ATL)、フォーム(TSB)、および急性:慢性比を指定期間で取得 |
| 「Xの距離はどのくらいで走れそうですか?」— 使用した参考努力と除外した非現実的なものを含む |
| 最近のラン(ペース、心拍数、アクティビティごとの計算負荷) |
| 測定されたボリュームに基づく周期化されたプラン、または安全でない理由を説明する拒否 |
Related MCP server: livetrack-mcp
数値の出典
RunCoachは何も再実装していません。すべての計算は@runman/coreを使用しています。これはフィクスチャテスト済みの科学パッケージであり、Runmanウェブアプリのバックエンドでもあります。Claudeに質問して対応するページを読み込むと、同じコードが同じデータベースに対して実行されます。
このパッケージはgitサブモジュールとしてここにベンダリングされており、RunCoachのテストはRunmanのテストと同じフィクスチャファイルをインポートしています。つまり、「このデータが何を生成すべきか」という定義が両方のリポジトリで1つになり、ずれることがありません。
git clone --recursive https://github.com/varun-gangadharan/runcoach
npm install
npm test # 31 tests, no database or credentials required説明に値する設計上の決定
ツールはアスリートIDを受け取りません。 APIキーは正確に1人のアスリートに解決され、そのIDがツールのコンテキストになります。モデルがアスリートIDを渡せるようにすると、アクティビティタイトルに注入されたプロンプトインストラクションがそれを要求する可能性があります。そしてここでのペイロードは誰かの個人健康データです。あるアスリートのキーが別のアスリートのデータを読み取れるという議論はまったくありません。テストでこれが維持されることを確認しています。
拒否は有効な回答です。 予測をサポートするデータがない場合、ツールはその旨を伝え、モデルに推定値を代用しないよう指示します。プラン生成も同様です。アスリートに最近のトレーニングがない場合、またはレースが3週間先の場合、推測されたベースラインに基づくプランを生成する代わりに、理由を添えて拒否します。モデルはデフォルトでギャップを埋めます。ツールの出力は積極的に反発する必要があります。
出力は散文(prose)であり、JSONではありません。 モデルはネストされたオブジェクトを読むよりも、文をより忠実に言い換えます。また、存在しないフィールドをでっち上げる可能性もはるかに低くなります。正確な数値は依然として文中に現れます。
各HTTPリクエストは独自のサーバーインスタンスを構築します。 サーバーレス環境で呼び出し間で1つのインスタンスを共有すると、ウォームコンテナ内で2人のアスリートのセッションが混在するリスクがあります。これは許容できない障害モードです。
デプロイ
HTTPトランスポートは単一のVercel関数です。認証はベアラートークンです。アスリートがRunmanプロフィールページから発行するAPIキーで、SHA-256ハッシュとしてのみ保存されます。
vercel env add SUPABASE_URL
vercel env add SUPABASE_SERVICE_ROLE_KEY
vercel deploy --prodVercelのエントリポイント(api/mcp.js)は、src/からTypeScriptをインポートするのではなく、dist/からコンパイルされたハンドラを再エクスポートするプレーンなJavaScriptであることに注意してください。Vercelは.ts関数をその場でコンパイルしますが、相対インポート指定子はそのまま残すため、.ts指定子がデプロイされたバンドルに残り、出荷されなかったファイルを探して実行時に失敗します。
デプロイ後、実際のMCPクライアントでエンドツーエンドを確認します:
node --experimental-strip-types scripts/verify-deployment.ts \
https://runcoach-ruby.vercel.app/mcp rc_live_...これはClaudeとまったく同じようにネットワーク経由で接続します(ハンドシェイク、ツール発見、その後5つのツールそれぞれの呼び出し)。そして、回答が単に整形式であるだけでなく、根拠に基づいて返ってくることを確認します。
その後、任意のMCPクライアントに追加します:
{
"mcpServers": {
"runcoach": {
"type": "http",
"url": "https://runcoach-ruby.vercel.app/mcp",
"headers": { "Authorization": "Bearer rc_live_..." }
}
}
}stdio経由でのローカル実行
自分のマシンで自分のデータに対して使用する場合:
{
"mcpServers": {
"runcoach": {
"command": "node",
"args": ["/absolute/path/to/runcoach/dist/stdio.js"],
"env": {
"SUPABASE_URL": "...",
"SUPABASE_SERVICE_ROLE_KEY": "...",
"RUNCOACH_API_KEY": "rc_live_..."
}
}
}
}stdioサーバーには認証するリクエストがありません。クライアントの子プロセスとして実行されるため、アスリートは起動時に固定されます。これはアスリート自身のマシンでのみ適切であり、そのためデプロイされたトランスポートはリクエストごとに認証を行います。
テスト
npm test3つのレイヤーにわたる31のテスト:Runmanの共有フィクスチャセット(一貫したランナー、心拍数なしランナー、単一アクティビティ、空の履歴、GPSグリッチ履歴、散発的ランナー、復帰ランナー、ボリュームスパイク)に対するツールハンドラ、および実際のMCPクライアントを実際のサーバーに接続し、ツール発見、スキーマ検証、呼び出しを駆動するエンドツーエンドプロトコルテスト。3番目のレイヤーは、このREADMEで引用されている例の数値を固定します。
v1には含まれないもの
Garminソースのツール(回復、睡眠、HRV)は、上流のGarmin MCPサーバーへのプロキシを介して提供され、アスリートがアカウントをリンクしている場合にのみ利用可能です。意図的に分離可能であり、Garminを持たないアスリートは機能低下を経験しません。
ライセンス
MIT
This 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 Servers
- FlicenseBqualityDmaintenanceA Model Context Protocol server that integrates Garmin Connect data with LLMs to provide personalized running analysis and training plans. It enables users to monitor performance metrics, manage training loads, and receive data-driven workout suggestions based on health indicators like VO2 Max and recovery status.435
- Alicense-qualityDmaintenanceAn autonomous MCP server that polls Garmin LiveTrack data during races, stores time-series metrics in SQLite, and triggers periodic Claude analysis for real-time coaching feedback.MIT
- Alicense-qualityAmaintenanceAn AI training coach MCP server that integrates with Garmin Connect to provide science-based load management, code-enforced injury gates, and persistent coaching memory, keeping data local.MIT
- AlicenseAqualityBmaintenanceAn MCP server that transforms Garmin data into compact, verdict-first coaching reports for LLMs, computing metrics like CTL/ATL/TSB and ACWR to answer training readiness questions.14MIT
Related MCP Connectors
Hosted MCP server for LLM cost estimation, model comparison, and budget-aware routing.
MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.
Hosted MCP server exposing US hospital procedure cost data to AI assistants
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/varun-gangadharan/runcoach'
If you have feedback or need assistance with the MCP directory API, please join our Discord server