Skip to content

MCP/A2A/Skill/Agent の構成論

AI駆動開発のインフラを理解するための構成要素と、それぞれの役割・関係性を整理する。

このドキュメントの位置づけ

Vision(01-vision)が「なぜ」を、ブレない参照先(02-reference-sources)が「何を」を定義するのに対し、本ドキュメントは 「どう構成するか」 を定義する。思想を壊さずに構造化し、哲学的基盤から実行可能なシステム設計への橋渡しを担う。

メタ情報
この章で固定するものAgent / Skills / MCP の三層分離と各層の責務境界
扱わないこと各パターンの選択基準(→04)、制約への対処(→05)、ドクトリン層の詳細(→07)
依存01-vision(設計思想)、02-reference-sources(参照先の体系)
誤用ポイント三層を物理的な配置と混同すること。三層は責務の分離であり、デプロイ構成ではない

レイヤー構造の概観

ドクトリン層 — 「憲法的判断基準」

これら三層はAIが何を知り、何ができるかを定義する。AIが何を基準に判断し、決定するかは、ドクトリン層が担う。ドクトリン層は単なるシステムプロンプトではなく、共有された目的・制約・判断基準を通じて三層すべてを統治する憲法的判断基準である。

Visionで定義した責任シフトモデル(設計時:人間 / 実行時:エージェント / 構造的制約:システム)と二層検証構造(ガードレール+評価パイプライン)は、このドクトリン層を通じて各レイヤーに適用される。

各レイヤーの責務

各レイヤーがどのような責務を担い、誰が所有するかを以下にまとめる。

レイヤー責任所有者
Agentオーケストレーション、意思決定タスクフローClaude Code, Cursor
Skillsドメイン知識、ガイドラインベストプラクティスSOLID 原則、翻訳ガイドライン
MCP外部接続ツール定義deepl-mcp, rfcxml-mcp

このドキュメントについて

AI駆動開発には複数の構成要素が存在するが、それぞれの役割と関係性を正しく理解することが効率的な開発の鍵となる。このドキュメントでは、MCP(ツール接続)、A2A(エージェント間通信)、Skill(静的知識)、カスタムサブエージェント(役割特化)という4つの主要概念を整理する。

「何をMCPにすべきか」「Skillで十分なのはどんな場合か」「サブエージェントはいつ使うべきか」という判断に迷ったとき、このドキュメントを参照することで適切な選択ができるようになる。

全体アーキテクチャ

MCPの3層構造

Host / Client / Server

MCPは3つの層で構成されている。以下の図はHost・Client・Serverの関係を示す。

役割開発者の関わり
HostUI、セッション管理Claude Code, Cursor, VS Code使う側
Clientプロトコル処理、サーバー管理Host内蔵通常は意識しない
Serverツール/リソース提供rfcxml-mcp, deepl-mcp作る側

なぜClientを意識しなくて済むか

通常の開発フロー:
1. MCP Server を作る(rfcxml等)
2. Claude Code の設定に追加
3. Claude Code が内蔵Clientとして動作
4. ツールが使える

→ Client は Host に内蔵されており、
   ブラックボックスとして機能している

MCP と A2A の棲み分け

プロトコルの違い

MCPとA2Aは接続先が根本的に異なる。以下の図でその違いを示す。

項目MCPA2A
主導AnthropicGoogle → Linux Foundation
目的ツール接続エージェント間通信
接続先MCPサーバー(ツール)他のエージェント(他社含む)
コンテキスト親エージェントと共有可能完全分離
所有者自分自分 or 他者

公式の推奨

Build with ADK, equip with MCP (tools), communicate with A2A (agents)

MCP = 手(ツール)を使う
A2A = 他者(エージェント)と協働

カスタムサブエージェント

サブエージェントとは

Claude Code内で定義できる特定タスクに特化したAIアシスタント

配置場所:
├── プロジェクト: .claude/agents/xxx.md (優先度: 高)
└── ユーザー:     ~/.claude/agents/xxx.md(優先度: 低)

定義形式

サブエージェントはMarkdownファイルで定義する。以下はRFC専門家サブエージェントの定義例である。

markdown
name: rfc-specialist
description: RFC仕様の確認・検証専門家
tools: rfcxml:get_rfc_structure, rfcxml:get_requirements
model: sonnet

あなたはRFC仕様の専門家です。
rfcxmlツールのみ使用してください。

定義例の追加

複数のMCPとSkillを組み合わせた、より実践的なサブエージェントの例を示す。

markdown
name: compliance-checker
description: 法的準拠性チェックの専門エージェント
tools: hourei:find_law_article, rfcxml:get_requirements, rfcxml:validate_statement
model: sonnet

あなたは法令・技術仕様の準拠性チェック専門家です。

1. hourei-mcp で法的要件を取得
2. rfcxml-mcp で技術要件を取得
3. 両者をマッピングし、準拠状況を報告

必ず出典(法令条項番号、RFCセクション番号)を明示してください。

サブエージェントの位置づけ

Claude Code内部でのサブエージェントの位置づけを以下の図で示す。

重要: サブエージェントはMCP Clientの「代わり」ではなく「上位レイヤー」

  • サブエージェント = 「何をするか」の定義(役割・手順)
  • MCP Client = 「どう接続するか」の実装(プロトコル処理)

Skill(スキル)

Skillとは

Claude Codeで参照できる静的な知識・ガイドライン

配置場所:
├── プロジェクト: .claude/skills/xxx/SKILL.md
└── ユーザー:     ~/.claude/skills/xxx/SKILL.md

Skillの特徴

参照先の4層モデルにおいて、レベル3(組織規約)とレベル4(ベストプラクティス)は Skills による体系化が主な提供手段となる。Skillの主な特徴を以下に整理する。

項目説明
形式Markdownファイル
内容ベストプラクティス、ワークフロー定義、ガイドライン
実行なし(参照のみ)
コンテキスト消費低い(参照時のみ)

MCP vs Skill vs サブエージェント

判断フロー

比較表

観点SkillMCPサブエージェント
コンテキスト消費低い高い中程度
動的処理❌ 不可✅ 可能✅ 可能
外部API❌ 不可✅ 可能△ MCP経由
メンテナンスMarkdown編集npm公開等Markdown編集
再利用性プロジェクト内グローバルプロジェクト内
用途知識・ガイドラインツール・API連携役割・専門性分離

使い分けの原則

Skill = 「知識」「ガイドライン」「ワークフロー定義」
MCP  = 「ツール」「API連携」「動的処理」
サブエージェント = 「役割」「専門性」「タスク委譲」

Skillで「何をすべきか」を定義
MCPで「どう実行するか」を提供
サブエージェントで「誰がやるか」を分離

A2A vs サブエージェント

根本的な違い

観点カスタムサブエージェントA2Aエージェント
所在同一プロセス内ネットワーク越し
所有者自分自分 or 他者
信頼関係完全信頼認証・認可が必要
コンテキスト親と一部共有完全分離
ライフサイクルセッション限り永続的サービス
内部実装見える(Markdown)見えない(API契約のみ)

比喩

カスタムサブエージェント = 「社内の専門部署」
A2Aエージェント         = 「外注先・パートナー企業」

社内に専門部署があっても、外注先は必要
外注先があっても、社内の専門部署は必要

→ 両方必要、代替関係ではない

使い分け

シナリオ使うべきもの
自分のMCPを専門的に使いたいサブエージェント
同じ処理を繰り返し使いたいサブエージェント
ワークフローを定義したいサブエージェント
他社のエージェントと連携A2A
自分のエージェントを外部公開A2A
複数組織間でエージェント連携A2A

実行主体の選択

MCP / Skill / Sub-agent の選択に加えて、**「誰が判断するか」**という視点が重要になる。

進化の流れ

外部サービスとの連携方法は、技術の進化とともに変化してきた。

この進化の中で、すべてをMCP化する必要はない。 「誰が判断するか」によって、適切なレイヤーが決まる。

判断主体によるレイヤー選択

「誰が判断するか」に基づいて、適切なレイヤーを選択する指針を以下に示す。

判断主体適切なレイヤー特徴
不要(決定論的)プログラム直接判断不要、高速、確実バッチ処理、CI/CD、cron
人間CLI人間が判断、AIは実行しないgh pr list, aws s3 ls
AI(単発)MCP + SkillAIが都度判断して実行翻訳、RFC参照、品質評価
AI(継続・自律)サブエージェント専門性を持って自律的に判断レビュー担当、翻訳担当

判断フロー

判断主体に応じた選択を以下のフローチャートで整理する。

CLI vs MCP:AIが判断する場合の選択

Key Insight: 公式CLIがある場合、MCP化せず CLI + Skill が効率的

— r/ClaudeAI コミュニティでの議論より

観点CLI + SkillMCP
トークン消費低い(コマンドのみ)高い(全ツール定義読み込み)
起動コストなしサーバープロセス必要
認証ローカル完結MCP側で管理
用途特化◎(専用設計)△(汎用的)

具体例

代表的なサービスについて、CLIの有無と推奨アプローチを以下に示す。

サービスCLI推奨
GitHubghCLI + Skill
AWSawsCLI + Skill
Google CloudgcloudCLI + Skill
PostgreSQLpsqlCLI + Skill
LinearMCP
GreptileMCP
DeepLMCP

重要な洞察

MCP・Skill・サブエージェント選択における最も重要な洞察は以下の通りである。

「何を実行するか」だけでなく「誰が判断するか」で選択が変わる

判断不要     → プログラム直接
人間が判断   → CLI
AIが判断    → MCP or CLI + Skill
AIが自律    → サブエージェント

この視点を持つことで、過剰なMCP化(over-MCPization)を避け、適切なレイヤーで実装できる。

組み合わせパターン

最強の組み合わせ

Skill・サブエージェント・MCPの3つを組み合わせることで、最も効果的なワークフローが実現できる。

具体例:翻訳ワークフロー

以下は、Skill + サブエージェント + MCP を組み合わせた翻訳ワークフローの具体的な定義例である。

markdown
<!-- skills/translation-workflow/SKILL.md -->

# 技術文書翻訳ワークフロー

## 使用MCP

- `deepl` - 翻訳実行
- `xcomet` - 品質評価

## ガードレール(不可侵制約)

- 用語集に登録済みの訳語は必ず使用する
- 原文にないコンテンツを追加しない

## ワークフロー

1. deepl:translate-text で翻訳(formality: "more")
2. xcomet:xcomet_evaluate で品質評価(評価パイプライン)
   - スコア 0.85以上: OK
   - スコア 0.85未満: 再翻訳または手動修正
3. xcomet:xcomet_detect_errors でエラー検出

この例は、Visionで定義した二層検証構造の具体的な実装パターンである。用語集の遵守がガードレール(不可侵制約)、xCOMETスコアが評価パイプライン(確率的品質ゲート)に対応する。

markdown
<!-- agents/translation-specialist.md -->

name: translation-specialist
description: 技術文書の翻訳と品質評価を行う専門エージェント
tools: deepl:translate-text, xcomet:xcomet_evaluate, xcomet:xcomet_detect_errors
model: sonnet

あなたは技術翻訳の専門家です。
translation-workflow スキルを参照してください。

シーケンス図:実行フローの可視化

コードレビュータスク

コードレビュータスクにおけるSkillとMCPの連携フローを以下のシーケンス図で示す。

翻訳ワークフロー

翻訳ワークフローにおけるSkillとMCPの連携フローを以下のシーケンス図で示す。

三層モデルが明示的に扱わないもの — Memory

三層モデル(Agent / Skills / MCP)は、エージェントが何を知り、何ができ、何を基準に判断するかを定義する。しかし、エージェントが過去の対話や結果をどう記憶し、どう活用するか——すなわち Memory——は、このモデルのスコープ外である。

なぜ三層に含めないのか

Memory は本質的に動的であり、対話の進行とともに変化する。一方、Skills は静的なドメイン知識、MCP は明示的なプロトコルインターフェースであり、どちらも宣言的に定義可能な要素である。Memory はこれらと性質が異なり、同列に置くとモデルの明快さが失われる。

さらに、Memory の実装は LLM やプラットフォームごとに大きく異なる。

  • コンテキストウィンドウ(短期メモリ): すべての LLM が持つが、サイズとライフサイクルはモデル依存
  • 永続的な記憶: プラットフォーム固有の機能(ChatGPT Memory 等)やアプリケーション層の実装(LangChain ConversationBufferMemory 等)
  • CLAUDE.md: Claude Code における「プロジェクトレベルの記憶」に近い概念だが、厳密には Memory ではなく指示ファイル

統一的なプロトコルや標準が確立されていない現時点では、三層モデルに含めるのではなく、実装フェーズで個別に設計するのが適切である。

Memory を無視してよいという意味ではない

実際のエージェント設計では、Memory は不可欠な関心事である。三層モデルの中では、Skills 層がドメイン知識の「長期記憶」を、MCP 層が外部コンテキストの「参照記憶」を暗黙的にカバーしている。対話履歴や学習結果の保持については、開発フェーズで実装方針を検討すること。

レイヤー構造まとめ

ここまで説明してきたレイヤー構造の全体像を、最後にまとめて示す。ドクトリン層(制約・目的・判断基準)が、すべての層を統治する。情報フローとして、ドクトリンの制約は上位から下降し、リソースの事実は下位から上昇し、エージェントの意思決定は中央で行われる。

Released under the MIT License.