はじめに
昨年末まで業務過多で運動不足が続き、少し体調を崩してしまったので運動習慣を復活させるべく、もともと趣味でやっていたサイクリングを再開すべく、スポーツアクティビティの管理をするためのWebサービスである、STRAVAに接続し、運動の評価や怪我のリスクを考慮しながらトレーニングプランを作ってくれる仕組みを作ってみたいなと考えていました。
ローカルMCPの作成と昨年秋ぐらいから話題になりつつある、AgentSkillsを試してみたかったのでその検証も兼ねています。
MCPとAgentSkills
- MCPとは
MCPはすでにこのサイトを見ている方ならどのようなものかを理解しているかと思いますが、改めて整理しておくと「AIアプリケーションから外部データソース、ツールを接続するための標準プロトコル」です。
利用したい外部データソースやWebサービスのAPIコールなどを作っておけば、様々なAIサービスから利用することができます。
今回は、STRAVAから事実の取得・集計・構造化をさせるためのツールとして作成しました。- ローカルMCPサーバとリモートMCPサーバ
MCPにはClaudeDesktopやIDE組み込みのAIで利用するローカルMCPサーバとネットワーク経由で利用するリモートMCPサーバがあります。
今回はまずは機能理解のためにローカルMCPサーバを作成しました。
- ローカルMCPサーバとリモートMCPサーバ
- AgentSkillsとは
一方、AgentSkillsはインストラクション(指示書)、スクリプト、リソースを含むフォルダで、AIが必要に応じて読み込みます。
スキルが呼び出されると、AIがフォルダに含まれるSKILL.mdを読み込みます。
必要なときに必要な情報だけを読み込むので、プロンプトに指示を都度書くよりも効率的に利用することができます。
STRAVAへ接続するローカルMCPの作成
GPT5.2を利用して、簡単なローカルMCPサーバを作成しました。
PythonのFastMCPを利用すれば比較的簡単に作れることは事前に調べていたので、Pythonを利用することを条件につくりました。
すでにSTRAVAに接続するためのMCPサーバ公開されているものがあるので、それを利用するのも手段でしたが、今後、新しいWebサービスや既存のサイトのデータをAIサービスで利用する際に理解を深めておきたいと思い、作成しています。
このMCPには以下の機能があります。
- プロフィール情報を取得
- アクティビティ一覧をそのまま取得
- 手動アクティビティをStravaに登録
- 直近N日間のアクティビティ要約
- 週単位のトレーニング統計(JST対応)
- 直近のライドを検出し、コーチングコメント用の素材を生成
前半三つ目までが当方が最低限必要な機能として準備したもので、後半はGPT5.2おすすめの機能で追加していますが、最低限の機能でもよかったかなと思います。
コードはこちらに置いていますが、利用は自己責任で。
MCPの追加は以前の記事を参照ください。
STAVA MCPを利用するAgentSkillsの作成
AgentSkillsとして下記の2つの機能をとりあえず作ってみました。
- 週次トレーニングプランを作る
- 怪我のリスクを分析する
今回は例として、「週次トレーニングプランを作る」の内容を例にどのような形式で記載したかということを説明します。
下記が実際にCludeDesktopで利用しているSKILL.mdファイルです。
記述ポイントとしては下記の点に注意して記載しています。
- YAMLフロントマター(---で囲ったエリア)でまず、Skillの名前と概要を記述する必要があります。
- このSkillのゴールを明確に記述
- どのようなステップで処理をするかを記述
この例では下記の内容でステップを記載しています。- MCPの機能「週単位のトレーニング統計」を利用して4週間のコンテキストを取得。
- 必要に応じて
detect_last_ride_and_comment()を呼び出し、トーンを調整し最新の乗車データを強調。 - 目標の確認/推定: 基礎体力構築(指定なしの場合)
- 7日間計画を出力
- 安全策を含める
---
name: strava-next-week-planner
description: Generate a next-week training plan from weekly load + risk outputs (derived from Strava MCP data).
---
## Goal
Create a realistic next-week plan aligned with the user's goal and current risk level.
## Procedure
1) Fetch 4-week context via `weekly_stats(weeks=4, week_start=monday, tz_name=Asia/Tokyo)`.
2) Optionally call `detect_last_ride_and_comment()` to tailor tone and highlight the latest ride.
3) Ask/Infer goal:
- default: base building (if not specified)
4) Output a 7-day plan:
- 1 key session max (or none if risk=high)
- 2-4 easy sessions (Z2)
- at least 1 rest day
- include a brief "why" for each day
5) Include guardrails:
- cap weekly volume increase (e.g., ~10% heuristic)
- if risk high: emphasize recovery
## Output format (Markdown)
- Weekly objective
- Day-by-day bullets (Mon..Sun)
- Safety notes
AgentSkillsの配置
作成したSKILL.mdを下記のようなディレクトリツリーに保管します。
具体的にはSkill名のディレクトリを作り、その中にSKILL.mdというファイル名で配置します。
strava-injury-risk/
└SKILL.md
strava-nextweek-plan/
└SKILL.md
その後、Skill単位でZIPファイルに圧縮します。
ClaudeDesktopの場合は「ファイル」→「設定」→「機能」を開き、「スキル」から「+追加」をクリックし、「スキルをアップロード」でZIPファイルをアップロードします。
その際にMarkDownやYAMLの文法チェックが行われますので、不備がありエラーになった場合は修正してください。
動作確認
MCP単体でAgentSkillsなしの動作例
MCPのツールを使って、STRAVAから情報を取得して、直近のアクティビティを表示しています。

次にトレーニングプランを作成させました。
取得された情報をもとに、LLMが持つ情報でけが防止のポイントを出してくれています。


MCP+AgentSkillsでの動作例
ここまではAgentSkillsなしと同じ動きです。
MCPのツールを使って、STRAVAから情報を取得して、直近のアクティビティを表示しています。

次にトレーニングプランを作成させたところ、怪我のリスク評価のSkillと週次トレーニングプラン作成Skillが呼び出され、指示通りのレポートとなりました。


まとめ
AIが普及して、ドキュメント作成やレポート作成、サービスを連携するAIAgentでの利用などで必ずこういった形式にしてほしい、この計算をしてほしいといった利用用途は出てきていると感じています。
その利用法にAgentSkillsはとてもマッチする技術ではと思いました。