チュートリアル
AI Agent Skills vs MCP vs Plugins:2026 年、開発者はどれを使うべきか。発見から JSON Schema まで
「どれを選ぶか」と聞くな。出すものが説明書なのか、手なのか、一緒に旅しなければならない箱なのかを先に聞け。
昨日の Google Agent Plugins 2026 は箱の形を見た。今日は審査で一番問い方を間違える一文に答える。「Skills、MCP、Plugins、どれを使う?」間違いだ。三つは競品ではない。Skill はモデルが読む説明書で、形式は Agent Skills。MCP はランタイムの手で、プロトコルは MCP とは。Plugin は 2026 年 8 月の包装形式で、仕様は Agent Plugins 1.0.0。Google 自身も書いた。単体 Skill、単体 MCP、単体クライアントでは箱に入れるな。本稿は発見と JSON Schema で決定木を歩き、MCP と JSON Schema の検証鎖へ渡す。Cloud の見本は google-cloud-developer。
問いが違う:同じ層のライバルではない
審査で多い失敗は、三枚のカードを机に広げて一票投じることだ。Skill は tools/list を出さず、tools/call も受けない。ディレクトリと SKILL.md だ。起動時は name と description だけが文脈に入る(およそ百 token)。本文と scripts/、references/ は必要なとき読む。JSON-RPC も握手も、線上の「スキル入参 Schema」もない。MCP はその逆だ。向かい側はプロセスか HTTP 端点で、引数は検証できる JSON でなければならない。Plugin はどちらもしない。ディレクトリと二つの閉集合 Manifest を決めるだけだ。Plugin を「より強い MCP」と見るのは、段ボールをエンジンと見ることだ。
発見も一本道ではない。Skill の発見面は説明文字列だ。「何をするか + いつ使うか」を書かないとモデルは選ばない。MCP の発見面は tools/list の名前と inputSchema。Plugin の発見面は根の plugin.json で、そのあと固定の skills/ と mcp.json。三つは重ねられる。クライアントは箱を見、スキルのメタを見、MCP の道具一覧を得る。重ねることは代替ではない。手が無いときに長い Skill を足すのは、モデルが shell で API のふりをする賭けだ。幻覚であり、統合ではない。
横への委任もこの三枚にはない。別の Agent をどう見つけ、Task を渡すかは A2A Agent Card だ。A2A vs MCP を見よ。今日決めるのは、この倉庫に説明書が要るか、手が要るか、二つを一つの可搬ディレクトリに鎖すかだけだ。先に層を分け、それから選ぶ。
| 選んでいるもの | 何を解くか | 発見面 |
|---|---|---|
| Skill | 再利用できる手順、形式、ガードレール。任意でローカルスクリプト | SKILL.md の name / description |
| MCP Server | 生きた系(DB、API、雲)への確定的な呼び出し | tools/list + inputSchema |
| Plugin | Skill と MCP を、クライアントを替えても分岐させない | plugin.json、それから固定ディレクトリ |
四つの質問で決定木を歩く
選択を四問に畳む。順に答え、飛ばすな。第一、モデルは倉庫の外の生きた系に触れる必要があるか。データベース、公式文書検索、課金 API、gcloud。要るなら少なくとも MCP(または既にある原生ツール、たとえば本機の gh)。要らないなら、見栄えのために空の Server を立てるな。第二、「先にプロジェクトを見、次に billing、鍵を git に入れるな」のような流れを、セッションを跨いで残したいか。要るなら Skill を書け。システムプロンプトに貼った一段は、窓が狭まると消える。
第三、第一と第二は一緒に配らねばならないか。請求を引く MCP は週報 Skill を失うと乱用される。週報 Skill は MCP を失うと偽データでしかデモできない。一緒に歩くときだけ Plugin を考える。第四、クライアントは二つ以上か。Cursor、Claude Code、Antigravity、Codex。一つの IDE で、すでに原生の MCP / Skills インストールがあるなら、原生設定の方が短い。Google は Developers Blog でこれを釘付けにした。Plugin が値を持つのは、部品が同じ目標に属し、一緒に旅するときだ。
下は倉庫に入れられる意思決定の記録だ。仕様の欄ではない。審査が残す JSON 治具だ。四問の答え、選択、箱に入れるつもり的な部品名。まず parse できること。CI で choice が四問と喧嘩していないことを断言する。mustTravelTogether が false なのに plugin なら、早すぎる装箱だ。
{
"task": "weekly-invoice-summary",
"needRuntimeTools": true,
"needReusableBrief": true,
"mustTravelTogether": true,
"clients": ["cursor", "claude-code", "antigravity"],
"choice": "plugin",
"components": [
"skill:write-weekly-summary",
"mcp:invoice-tools"
]
}
Skill だけ:発見は description、tools/call はない
Skill が勝つのは三つの点だ。握手ゼロ、必要なとき読む、人が diff できる。起動時はメタだけ入る。モデルは description の引き金に当たってから本文を読む。だから説明は「何を」と「いつ」を同時に書き、第三人称、キーワード付き、長さに上限がある(name 64、description 1024)。内部代号や一人称のスローガンでは発見面はゼロだ。形式の正本は Agent Skills。Plugins は skills/<name>/SKILL.md に置くことだけを決める。
Skill は scripts/ を持てる。それは新しい MCP ツールではない。「すでにある shell でこれを走れ」だ。本機の CLI に合う。gh、gcloud、自前の lint.sh。スクリプトは確定計算をプロセス外に残し、要約だけを文脈へ返す。それでも伝送層ではない。OAuth 発見も inputSchema もない。引数の正しさはモデルとスクリプトの argv だ。安定した JSON 入参や遠隔の認証が要るなら、スクリプトを MCP のふりをするな。
Skill だけの典型は、出力形式(PR 本文、事故報告)、本機 CLI の流れ、領域のガードレール(「先にこの checklist を読め」)。反例は「本番庫を引け」を Skill に書き、モデルに SQL を作らせて汎用 shell に流すことだ。説明書が手のふりをしている。発見段階で引数の形も検証できない。Schema が無い。
MCP だけ:発見は tools/list、契約は inputSchema
MCP が勝つのは Skill が渡せない三つだ。生きた接続、構造化された入参、失敗の境界。クライアントが繋がり、tools/list が名前と inputSchema を返し、モデルが arguments を埋め、ランタイムが tools/call する。通るかは JSON Schema の話であり、「モデルが自信ありげ」ではない。認証、割当、伝送版は MCP 自身の仕様。2026-07-28 の無状態版は普通の HTTP 負荷分散の後ろに置ける。Skill はそのどの層もできない。
クライアント一台、Server 一台なら、そのクライアントの原生 MCP 設定を先に使え。Plugin を先に作るな。mcp.json は Agent Plugins の可搬な書き方で、欄は Cursor や Gemini CLI の方言と一致しなくてよい。クライアントが写す。IDE 一台なら写し層は余剰だ。二台目が現れたら、同じ接続を根の mcp.json に収め、plugin.json を足す。skills/ はまだ無くてよい。無い位置は誤りではない。仕様は飛ばせと言う。
ここの発見鎖は短い。繋がる → tools/list → inputSchema で埋める。OpenAPI 全書を MCP Client に道具一覧として投げるな。Plugin Manifest の欄を inputSchema に写すな。包装契約は「箱があるか」に答える。ツール契約は「この hop の arguments が合法か」に答える。どちらも JSON Schema だが、層が一つ違う。下は「MCP だけ先に出し、まだ箱にしない」ときに書いておける可搬な断片だ。装箱したらプラグイン根へそのまま置く。
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
"mcpServers": {
"invoice-tools": {
"type": "stdio",
"command": "./bin/invoice-mcp",
"args": ["--data", "${PLUGIN_DATA}/invoices"],
"cwd": "${PLUGIN_ROOT}"
}
}
}
いつ箱に入れるか:多コンポーネントと多クライアントのとき
Plugin が値を持つのは、決定木の第三と第四が同時に点くときだ。典型は、数を引く MCP と人間向け週報を書く Skill。または Google の組——gcloud のガードレール技能と Developer Knowledge MCP。片方を欠くと誤用される。手だけなら週報を捏造する。説明書だけなら接地した文書検索が無い。装箱したあと、Antigravity、Claude Code、Codex でディレクトリを分岐させない。plugin.json は閉集合、mcp.json は別ファイル、秘密は環境変数で、headers に書かない。
早すぎる装箱の代価は、保守する Manifest が増えることと、「Plugin がある」という幻覚だ。箱は Skill を道具にしないし、MCP に説明書を与えない。独立した部品は独立して失敗する。mcp.json の一台が起きなくても技能は残る。ある SKILL.md の frontmatter が壊れても、他の技能と MCP は載る。これは仕様であり、宣伝文句ではない。CI が「未知のトップレベルを一つ」で整包拒否するなら、クライアントより厳しい。自分で知れ。
A2A との境界を再びに引く。Plugin が答えるのは「この Agent がどう一組の技能と道具を得るか」。別チームの請求 Agent をどう見つけるかは Agent Card であり、相手を mcp.json の一つの tool に詰めることではない。多ターンの確認と非同期コールバックは関数呼び出しの形を破る。順番は一文にできる。先に手、次に説明書、最後に箱。 手が無いのに Plugin を先に作るのは、売る物を決める前に段ボールを発注することだ。
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "reports-plugin",
"version": "1.0.0",
"description": "Invoice MCP plus the weekly-summary skill, shipped together"
}
| 場面 | 既定の選択 | するな |
|---|---|---|
| PR 本文の形式、事故報告の型 | Skill だけ | 空の MCP Server を立てる |
| IDE 一台だけの請求照会 API | その IDE の原生 MCP 設定 | 先に Plugin を作り、一台に写し戻す |
| 照会 MCP + 週報 Skill を三つのクライアントへ | Plugin(plugin.json + skills/ + mcp.json) | 遠隔 Agent ごと一つの tool に詰める |
三つの Schema、三つの発見を JSONVue で見る
契約を hop で広げる。第一は plugin.schema.json。箱を発見できるか。$schema は https://agent-plugins.org/schemas/1.0.0/plugin.schema.json に釘付け。第二は mcp.schema.json。どう繋ぐか。type は明示。第三は各ツールの inputSchema。arguments が通るか。Skill の frontmatter は YAML であり、この三つではない。SKILL.md 全書を JSON Schema で「検証」するな。発見では第一と第二、呼び出しでは第三。
審査の治具は少なくとも五つ。上の意思決定記録、合法な plugin.json、トップレベルを一つ足した Manifest、可搬な mcp.json、実際の tools/call arguments。記録は四問と choice の喧嘩を掴む。Manifest は包装契約。arguments はツール契約。Developer Knowledge の API Key はクライアント実行時の話。git で見る mcp.json に秘密を入れるな。
ブラウザで足りる。JSON 整形で意思決定記録と二つの Manifest が parse できるか見、JSON Schema 検証で $schema、name、mcpServers、inputSchema を見、JSON Diffで可搬な mcp.json とクライアント原生の書き出しを比べる。データは本機を出ない。続きはMCP と JSON Schema、Plugins 総覧、A2A と MCP の分担。
関連:Google Agent Plugins 2026、MCP と JSON Schema、MCP とは、A2A vs MCP。
よくある質問 FAQ
Skill のスクリプトは MCP の代わりになるか?
本機に CLI があり、引数が argv で、遠隔の認証発見が不要なら、なる。安定した JSON 入参、OAuth、機械を跨ぐ HTTP ツールが要るなら、ならない。スクリプトは Skill の添付であり、tools/list の一等ツールではない。
MCP だけで Skill が無い。Plugin にするべきか?
クライアント一台:するな、原生設定を使え。二台以上で、同じ接続記述を共有したい:mcp.json だけの Plugin は合法で、skills/ は欠席してよい。ディレクトリをきれいに見せるための空 Skill を足すな。
Plugin は MCP や Skills を置き換えるか?
しない。1.0 が認めるコンポーネントはこの二つだけであり、インストール、権限、サンドボックスは定義しない。置き換えるのは「各クライアントが自分の包装を発明すること」だ。実行契約は今まで通り MCP と Agent Skills。
三つの JSON Schema を一つにできるか?
業務欄は一つの canonical Schema に置き、そこから MCP inputSchema を生成してよい。plugin.json の欄とツール arguments を「汎用検証」一つのファイルに入れるな。発見の失敗と呼び出しの失敗は扱いが違う。
まとめと次の一歩
2026 年の Skills、MCP、Plugins の選択は一文に畳める。手が要るか、説明書が要るか、二つは一緒に歩くか、クライアントは複数か。三択ではない。層を重ねる。
出す順:四問を意思決定 JSON に書く。手が要るなら先に inputSchema。説明書が要るなら先に description。両方点き、クライアントを跨ぐなら plugin.json を足す。三つの契約は JSONVue で見る。箱の形は Plugins 総覧。線プロトコルは MCP 文。Agent 横断は A2A 文。