Skills over MCPとは — MCPのSkills拡張機能でAgent Skillsを配る仕組み
Skills over MCP(MCPのSkills拡張機能)は、Agent SkillsをMCPサーバーから配る仕組みでSEP-2640でFinalになりました。skills/listの中身と対応状況を解説します。
Skills over MCP(MCPのSkills拡張機能、識別子io.modelcontextprotocol/skills)は、Agent Skills(エージェント向けの構造化された指示書)をMCPサーバーからクライアントへ届けるための拡張機能です。検索では「skill over MCP」「MCP skills」と書かれることもあります。この記事で扱うのは、公式名「Skills Extension」(SEP-2640)の仕様です。SEP-2640「Skills Extension」は2026年9月13日にマージされ、ステータスはFinalになりました。コア仕様に新しいプリミティブが加わったわけではなく、既存のResourcesの上に載る拡張機能(Extensions Track)です。
この拡張機能があるからといって、Claude CodeのSkillsの使い方が変わるわけではありません。変わるのは、MCPサーバーを作る側が「使い方を教える手順書」をツールと一緒に配れるようになる点です。
Skills over MCPで何が決まったのか
決まったのは、Skillの中身ではなく運び方です。Skillの書式(SKILL.mdのYAMLフロントマター、命名規則、段階的開示)はAgent Skills仕様にすべて委ねられています。SEP-2640が定めるのは、そのSkillをMCPのResourcesとして公開する規約です。
Skills over MCPの経過
- 2026-02-01Interest Groupが発足
実験用リポジトリ
experimental-ext-skillsを持つInterest Groupとして始まりました。 - 2026-04-16Working Groupへ格上げ
- 2026-04-23SEP-2640を起票
新プリミティブではなく、Resourcesを使う拡張機能という方向に絞られました。
- 2026-09-01Core Maintainersの投票を通過
SEP-2640はAcceptedになりました。
- 2026-09-11適合性テストがマージ
サーバー側・クライアント側のシナリオを含む
conformanceのPull Requestが入りました。 - 2026-09-13SEP-2640がFinalに
拡張機能の識別子は
io.modelcontextprotocol/skillsです。
Working Groupのリードは3人です。NordstromのOla Hungerford氏、AnthropicのCore MaintainerであるPeter Alexander氏、BloombergのSambhav Kothari氏が名を連ねます。参加者にはGoogle・Databricks・GitHub・AWSの関係者も入っています。
Claude Code・APIのSkillsとは何が別物か
先に切り分けておくと、Claude Code / Claude APIのAgent Skillsは既に実在する製品機能です。Skills over MCPが扱うのは、それとは別の層の話です。
同じSkillを届ける2つの経路
Claude Code・APIの既存Skills
Claude Codeは.claude/skills/配下のSKILL.mdを読みます。APIではpptx xlsx docx pdfのようなプリセットSkillと、アップロードしたカスタムSkillをコード実行ツール経由で使います。
Skills over MCP
MCPサーバーが自分の持つSkillをskill://のURIで公開し、クライアントがskills/listで見つけてresources/readで読みます。ファイルのコピーもアップロードも要りません。
SKILL.mdをどこに置くかや、4つの機構(Skills・MCP・サブエージェント・hooks)の使い分けはClaude CodeのSkillsとMCPの違いにあります。フォルダ構成とSKILL.mdの書き方はClaude Code Skills完全ガイドが扱っています。
これまでMCPサーバーがSkillを配りたいときは、Resourcesを流用するか独自の規約を作るしかありませんでした。SEP-2640の動機の節には、独立した実装がそれぞれ別々のskill://のURI構造を発明し、authority・パス・サブリソースの扱いが食い違っていたと書かれています。
サーバーとクライアントの間で何が流れるか
Skillを配るサーバーは、server/discoverのcapabilitiesでresourcesとio.modelcontextprotocol/skillsの両方を宣言します。宣言した時点でskills/listとskills/getの実装が義務になります。
クライアントがSkillを読み込むまで
- 1
拡張機能の宣言を確認する
クライアントは、サーバーが
io.modelcontextprotocol/skillsを宣言しているのを見てからskills/listとskills/getを呼びます。宣言のないサーバーには呼びません。 - 2
skills/listで一覧を得る
各エントリにはURI・SKILL.mdのフロントマターの写し・ファイルごとのSHA-256ダイジェストとサイズが入ります。結果は空でもかまいません。
- 3
resources/readで中身を取る
必要になったファイルだけを1つずつ読みます。読み取ったファイルは、エントリのダイジェストと照合します。
- 4
ホストの読み込み経路でSkillを有効化する
resources/readはバイト列を返すだけで、Skillを有効にはしません。ユーザーの承認が要る場合は、ホストが有効化の前に取ります。
skills/listの1エントリは、規範例では次の形をとります。
{
"uri": "skill://pdf-processing/SKILL.md",
"frontmatter": {
"name": "pdf-processing",
"description": "Extract, fill, and assemble PDF documents"
},
"resources": [
{ "uri": "skill://pdf-processing/SKILL.md", "digest": "sha256:d5e6f7a8...", "size": 5120 },
{ "uri": "skill://pdf-processing/scripts/extract.py", "digest": "sha256:f7a8b9c0...", "size": 4096 }
]
}URIはskill://<skill-path>/<file-path>の形です。<skill-path>の最後の1区切りは、SKILL.mdのnameと一致させる決まりです。acme/billing/refundsのように階層を持たせたパスも使えます。
一覧に載せないSkillも許されます。サーバーはSkillを列挙する義務を負わず、URIさえ分かればresources/readで読めるのが土台です。URIはサーバーのinstructions欄に書いて示せます。載っていないSkillのエントリはskills/getで取れます。カタログが大きい、またはその場で生成されるサーバーは、一覧を空や一部だけにして構いません。
これとは別に、内容が動的に生成されてダイジェストを出せないSkillは、resourcesに文字列"dynamic"を置きます。この場合は内容の検証も承認の紐づけもできず、ホストは読み込みを断れます。
resources/directory/readは任意の3つ目のメソッドです。「templates/から適切な雛形を選ぶ」のように、Skillの指示がディレクトリを指すときに、その直下の子を列挙するために使います。サーバーがdirectoryRead: trueを宣言したときだけ呼べます。
遠隔のSkillは、ローカルのSkillより厳しく扱われる
ローカルのSKILL.mdは自分のディスクにあるので、内容を自分で見られます。MCPサーバーのSkillは、遠隔のサーバーが書いた指示がモデルの文脈に入ります。SEP-2640のセキュリティの節は、これをツール呼び出しより高リスクな面として扱い、ホストにいくつもの「MUST」を課しています。
ホストが守る決まり(SEP-2640)
出どころをモデルに見せる
MCP由来のSkillの内容には、どのサーバーから来たかを付けます。ローカルのSkillと区別のつかない形では見せません。
allowed-toolsは無視する
allowed-toolsは、ユーザーが明示的に承認しない限り効きません。遠隔のサーバーが書いた値は、権限の申請であって、環境の説明ではないという扱いです。コード実行には承認を挟む
Skillの内容がホスト側のコード実行を引き起こすには、Skillごとのユーザー承認が要ります。同梱スクリプトを走らせる指示も同じです。
名前の衝突で乗っ取らせない
同名のSkillが別の出どころにあっても、黙ってローカルのSkillを置き換えられません。衝突はユーザーに見せます。
承認は内容にも紐づきます。ホストがSkillごとの承認を保存するなら、承認時に見たURIとダイジェストの組に結びつけなければなりません。後でダイジェストが変わったエントリが来たら、その承認は引き継がれません。サーバー側でSkillを差し替えても、承認済みの扱いのまま別の内容が読み込まれる事態は避けられます。
入れ子のSkillも同じ考え方です。親のSkillを承認しても、その配下にあるSKILL.mdの承認にはなりません。
途中で外された案もある — アーカイブ配布
初期の案では、Skillのディレクトリ全体をgzip圧縮のtarやZIPにまとめ、1回のresources/readで取れるようにする形がありました。実行権限ビットやシンボリックリンクも運べる利点があります。
Core Maintainersはレビューの中でこれを削りました。SEPの「Archive Distribution」の節が挙げる理由は2つです。1つ目は、遠隔サーバーが送ってきたアーカイブを安全に展開するには、圧縮爆弾・パストラバーサル・ディレクトリ外へ出るリンク・setuidビットなどを、すべてのホストが漏れなく防がなければならないことです。2つ目は、同じSkillを2通りの形で配れると、両方に対応しないホストが読めないSkillを生むことです。
代償も明記されています。ファイルの多いSkillは、使うファイルごとに往復が1回ずつ増えます。実行権限ビットとシンボリックリンクは、この方式では表現できません。
いま実際に使えるのか
仕様が確定した一方で、対応の広がりはこれからです。拡張機能の概要ページは「SDKとホストの対応は実装中」と述べ、対応状況はクライアント対応表と実装一覧に分けて載せています。
| 種別 | 状況 |
|---|---|
| 公式SDK(Go・TypeScript・Python・C#) | 状況いずれも「in progress」で、実装一覧にPull Requestが並びます |
| サーバー | 状況Hugging Faceのhf-mcp-serverがv1です |
| ホスト | 状況対応表ではmcpc(CLI)が対応、fast-agent・MCP Inspector・MCPJam Inspectorが部分対応です |
| ChatGPT | 状況プラグイン提出時のスナップショット取り込みで部分対応と記載されています |
公式のクライアント対応表では、Claude(web)とClaude DesktopのSkills列は空欄です。SEPの中でも、Claude Codeは「Anthropic内部で試作済みだが、まだ公開されていない」と書かれています。対応表と実装一覧は更新されていくので、確認するときは最新のページを見てください。
手元のClaude Code(v2.1.285)でclaude mcp --helpを実行すると、サブコマンドはadd add-json add-from-claude-desktop get list login logout remove reset-project-choices serveの10個で、Skillsに関するものはありませんでした。ただしこれはヘルプに出る範囲の話で、未対応の証拠にはなりません。SEP-2640が示す前提は「MCPサーバーがSkillを持ち、ホストが対応した時点で取り込める」形で、対応の有無をclaude mcpのコマンドで確かめる手段は、この版のヘルプからは見つかりません。
MCPサーバーは使い方の手順書をツールと一緒に配れるようになる
MCPサーバーを運用している場合、この拡張機能は「ツールの使い方を教える手順書を、サーバーの一部として配れる」ようにします。従来は、サーバーと、そのサーバーの使い方を教えるSkillが別々に配布・更新・導入されていました。レジストリからサーバーを入れたユーザーは、対応するSkillがあることにも気づけません。
instructions欄に全部を書く方法にも限界があります。SEP-2640は、875行あるmcpGraphのSkillを例に挙げ、サーバー指示の大きさでは収まらない手順書があると述べています。
拡張機能の交渉の仕組みはMCPの拡張機能ネゴシエーションにあります。Skillsはこの仕組みに乗る拡張機能の1つで、サーバーはextensions欄でSkillsの対応を宣言します。Skillsの名前の付け方と段階的開示の設計思想は、Agent Skillsの命名規則と段階的開示で扱っています。
よくある質問
Skills over MCPで、既存のSKILL.mdは書き直しが要りますか
Skillの書式はAgent Skills仕様にそのまま委ねられ、SEP-2640は運び方だけを定めます。ただしskill://のURIを使う場合は、パスの最後の区切りをSKILL.mdのnameに合わせる決まりです。
既存の独自のskill://実装はどうなりますか
SEP-2640は、別のURI構造を使っていた実装は規約に合わせて直す必要があると述べています。FastMCPのSkillsProviderは、実装一覧で独自のskill://の形を持つpre-v1として載っています。