MCP ツールの応答がメインのコンテキストを「溢れさせる」問題を、サブエージェント隔離 + 要約/全文モード + 読み取り/書き込み分離で解決するパターンをまとめます。
メインエージェントが MCP ツールを直接呼ぶと、ツール応答の全文がメインのコンテキストに注入されます。主な問題は 2 つです。
メインのコンテキストを「保管庫」にせず、読み取り系は隔離コンテキストのサブエージェントに委譲し、メインには蒸留結果だけを返します。
[Main] "PR #123 を確認して"
-> spawn
[Subagent (isolated context)]
-> PR メタ取得
-> diff 取得
-> ファイル一覧取得
-> レビュー/コメント/状態取得
-> ノイズ除去 + パターン分析 + 構造化
<- 要約(または全文)だけ返す
これは コンテキスト/トークン管理(韓国語) の「progressive disclosure」をツール層に降ろしたもの、と捉えると分かりやすいです。
参照専用サブエージェントに書き込み権限を与えると、プロンプトインジェクションや誤動作時の被害が拡大します。
Context7 型のドキュメント参照は、通常 「Resolve」と「Fetch」を分離します。
resolveLibraryId で曖昧な名称を正確な ID に解決queryDocs で「ID + 質問」から必要部分だけ取得この考え方はドキュメントに限らず、他の MCP 統合にも一般化できます。
サブエージェントはこれらを「複合取得」にまとめ、メインには 変更要約 + リスク + 次アクションを返します。
よって「Resolve(検索)-> Fetch(詳細)」に分けるのがトークン/品質両面で有利です。
ここでいう「upstream」は MCP サーバーのレポジトリではなく、Atlassian/GitHub のような製品ベンダが サブエージェント隔離パターンを実装した公式プラグインを配布するケースを指します。
技術的には十分実現できますが、公式提供には次のような理由で動機が弱かったり、負担が急増することが多いです。
補足として、MCP 自体も「コンテキスト交換」までを主目的とし、要約/キャッシュ/複合取得などのコンテキスト予算管理はホスト/ミドルウェア側で行う設計なので、このパターンはベンダ公式よりもユーザー/コミュニティのミドルウェアとして実装されやすいです。
このアイデアは、直接操作(Write/Actuation)よりも、非構造な情報を取得(Read)する MCP 統合のミドル層に特に向きます。
共通テンプレートとしては以下が有効です。
例(一般形):
以下は「直接 MCP 呼び出し」と「サブエージェント経由」を、メインに注入される文字数で比較した例です。
| 種別 | 直接 MCP | サブエージェント | 節約 |
|---|---|---|---|
| 文書参照(routing) | 12,800 文字 | 3,800 文字 | 70% |
| 文書参照(hooks) | 15,000 文字 | 3,200 文字 | 79% |
| 単一 Issue | 1,200 文字 | 600 文字 | 50% |
| 検索(10件) | 12,000 文字 | 1,100 文字 | 91% |
| 文書検索(5件) | 3,000 文字 | 2,000 文字 | 33% |
| PR 要約 | 14,500 文字 | 2,500 文字 | 83% |
| PR diff(大) | 30,000 文字 | 3,500 文字 | 88% |
| PR 複合取得 | 59,500 文字 | 3,500 文字 | 94% |
大量出力自体が問題なら、Script/MCP offloading(韓国語) と組み合わせるとさらに効きます。
以下はベンダ非依存の最小サンプルです。
mcp-subagent-plugins/
.claude-plugin/
marketplace.json
plugins/
acme-context7/
.claude-plugin/plugin.json
commands/docs.md
skills/context-docs/SKILL.md
agents/docs-researcher.md
acme-github/
.claude-plugin/plugin.json
commands/pr.md
skills/github-lookup/SKILL.md
agents/github-researcher.md
acme-atlassian/
.claude-plugin/plugin.json
commands/jira.md
commands/confluence.md
skills/jira-lookup/SKILL.md
skills/confluence-lookup/SKILL.md
agents/jira-researcher.md
agents/confluence-researcher.md
plugin.json サンプル{
"name": "acme-github-plugin",
"description": "Isolate read-only GitHub lookups via subagents",
"version": "1.0.0",
"mcpServers": {
"acme-github": {
"type": "http",
"url": "https://your-mcp-github.example.com/mcp",
"headers": {
"Authorization": "Bearer ${GITHUB_TOKEN}",
"Content-Type": "application/json"
}
}
}
}
{
"name": "acme-context7-plugin",
"description": "Isolate docs lookup via subagents",
"version": "1.0.0",
"mcpServers": {
"acme-context7": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"your-context7-image:latest",
"node",
"dist/index.js",
"--transport",
"stdio",
"--api-key",
"${CONTEXT7_API_KEY}"
]
}
}
}
commands/*.md サンプル---
description: Look up a GitHub PR via a subagent
argument-hint: <owner/repo> <pr-number> [query]
---
# /acme-github:pr
...
skills/*/SKILL.md サンプル---
name: github-lookup
description: Auto-activate when GitHub lookups are needed
---
Never call MCP tools from main context. Spawn a subagent and return a summary.
agents/*.md サンプル---
name: github-researcher
description: Lightweight read-only subagent
model: sonnet
---
Hard rules:
- Read-only
- Prefix allowlist
- Call limits
- summary/detail