← 記事

MCP にエージェントの Context を食い尽くさせない

· 19 分で読めます · 8 回閲覧
五層アーキテクチャ MCP CLI Context 管理 AI ツールチェーン
アーキテクチャ決定記録

MCP に

エージェントの Context を食い尽くさせない

199 個のツール、毎ターン 40K tokens の schema コスト——五層アーキテクチャで 90% 削減するまで。
Service → SDK → CLI → MCP → Skill によって、 AI Agent が 最小限の token で最大限の仕事ができるようにします。

課題

どんな問題に直面したのでしょうか?

三つの実際の課題から、この五層アーキテクチャが生まれました。Token の急増、MCP プロセスの増殖、Tool が多すぎて正しく選べないことです。

1

Token の急増

Playwright MCP は呼び出すたびに大量の token を消費します。使わない場合でも、tool schema が context window を占め、毎ターンコストが発生します。

Playwright CLI に置き換えた結果:

-98% Token 使用量
2

MCP プロセスの増殖

Claude Code session を一つ開くたびに、すべての MCP server プロセスが比例して複製されます。

3 sessions × 23 MCP servers
= 69 個の常駐プロセス
// RAM と CPU を線形に消費
3

Tool が多すぎて正しく選べない

単一の MCP server に tool が多すぎると、LLM のツール選択の正確さが下がります。

業界のベストプラクティス:MCP server ごとに ≤ 10 tools。

8 tools × 200 tokens/schema = 1,600 tokens/turn(使うかどうかに関係なく)

データ

Token コストの比較

MCP では毎ターン 1,600 tokens の schema を抱えますが、CLI は 0 です(実際の I/O を除く)。

1,600
MCP(8 個のツール)
毎ターンの schema コスト(tokens)
0
Bash 経由の CLI
毎ターンの schema コスト(tokens)
80K
50 ターンの対話
未使用の schema に費やした累計
2
Cloudflare Code Mode
IDE 全体をわずか 2 個のツールで操作
アーキテクチャ

五層はそれぞれ何をするのでしょうか?

五層は上から順に Skill(意図のルーティング)、MCP(書き込み操作)、CLI(読み取り操作)、SDK(HTTP に触れる唯一のラッパー層)、Service(ビジネスロジック本体)です。上位層は必ず下位層を import します。

Skill
意図のルーティング層——操作の種類に応じて CLI と MCP を選び分ける、AI ワークフローの入口
🤖 AI オーケストレーター / 自動化フロー
MCP
書き込み操作 + typed schema return——LLM の入力には JSON schema による検証が必要
🤖 Claude Code (tool call)
CLI
読み取り操作の共通インターフェース——schema overhead はゼロで、shell を実行できれば誰でも使える
👤🤖📋 人 / AI / Cron / Script
SDK
唯一の HTTP 境界を包む層——CLI と MCP はどちらも SDK を import し、HTTP には直接触れない
🐍 Python プログラム / Notebook
Service
ビジネスロジック本体——FastAPI routes + business logic + DB
⚙️ モジュール間の内部呼び出し

基本原則:Bug Fix は自動的に伝わります——SDK の bug を一つ直せば、CLI と MCP の両方に反映されます。 SDK 層がなければ、各利用者が HTTP + auth + error handling をそれぞれ実装することになり、保守は地獄です。

// 依存の方向(上位層が下位層を import)

Skill ──invoke──► CLI (読み取り) / MCP (書き込み)
MCP  ──import──► SDK ──HTTP──► Service
CLI  ──import──► SDK ──HTTP──► Service

// SDK だけが HTTP に触れる
// SDK を変更すれば、上位の利用者すべてに変更が反映される
利用者マトリクス

なぜ一層でも欠かせないのでしょうか?

利用者 最適な接続層 理由
ほかの Core Module Service 同一プロセス内で services.py を直接呼び出し、overhead はゼロ
Python スクリプト / Notebook SDK プログラムからアクセスでき、error handling も完備
人間(ターミナル) CLI --help 見つけやすく、pipe で組み合わせられる
AI Coding Agent
Claude Code / Codex CLI / Gemini CLI
CLI (読み取り) / MCP (書き込み) 読み取りを Bash に任せれば schema はゼロ。書き込みには typed input が必要
スケジューラー CLI shell command はスケジューリングの共通言語
AI ワークフロー Skill 高水準の意図をルーティングし、CLI または MCP を自動で選ぶ

「CLI は overhead ゼロの万能インターフェースです。shell を実行できるものなら何でも使えますが、
MCP は MCP protocol 対応の client でしか使えません。」

進化の過程

どうやってここまでたどり着いたのでしょうか?

このアーキテクチャは一度に設計したものではありません。四つの段階で、その時々に行き詰まっていた課題を解決し、つなぎ合わせて今の形になりました。

発見期 — Playwright MCP

Token 急増からの最初の教訓

Playwright MCP の tool schema は非常に大きく、対話の毎ターンで system prompt に注入されます。そのターンでブラウザーを使わなくても token は消費されます。Playwright CLI に置き換えたところ、token 使用量は 98% 減りました。

気づき:CLI でできることは MCP に載せるべきではありません。

拡張期 — MCP プロセスの増殖

複数の session を開くと起こる掛け算の災難

MCP server が 23 個まで増えると、Claude Code session を一つ追加するたびに全プロセスが比例して複製されます。3 個の session なら常駐プロセスは 69 個です。解決策は mcpproxy による集約と、読み取り操作を CLI に移すことでした。

気づき:MCP server / tool の数を減らす必要があります。

検証期 — Cloudflare Code Mode

業界でもっとも徹底した tool の圧縮

Cloudflare の Code Mode では、 MCP が公開するのは 2 個の tool、:search() と execute()だけです。ほかの操作はすべてサンドボックス内でその場で記述します。tool の数と能力が反比例することを示しました。

気づき:私たちはそこまで極端にはしませんが、原則は同じです——tool は少ないほどよいのです。

成熟期 — 実践での検証

新しいモジュールで五層を一通り実装

Backend → SDK → CLI → MCP → Skill。どれか一層が欠けると、下流の統合が途切れます。BaseClient の DRY パターンを導入してからは、新しいモジュールを追加する限界コストが下がりました。一方、層が増えることで得られる組み合わせやすさは、その後もずっと役立ちます。

気づき:五層は負担ではなく、複利です。

Sandbox Pattern

使い捨て Tools — サンドボックスで補完

すべての操作に恒久的な tool が必要なわけではありません。Cloudflare Code Mode に着想を得て、バッチ操作はサンドボックス内でその場で記述し、MCP tool slot を占有しないようにします。

恒久的な Tool(五層で対応)

高頻度で安定し、discoverability が必要な操作

  • search — 毎日のように使う
  • create — typed schema による検証が必要
  • render — 複雑なパラメーターの組み合わせ

✓ 保守コストをかける価値がある ✓ --help がある ✓ テストできる

使い捨て Tool(Sandbox)

低頻度、一回限り、または探索的なバッチ操作

  • 一括スキャン + 集約(3+ API 呼び出し)
  • 一回限りのデータ変換
  • 探索的なスクリプト(使い終えたら捨てる)

✓ schema overhead ゼロ ✓ tool slot を占めない ✓ その場で書いて使える

// Cloudflare の極端な解法 vs 現実的な解法

Cloudflare: 2 permanent tools + sandbox ですべての操作をその場で記述
現実路線:  ≤10 permanent tools/server + sandbox で低頻度の操作を補完

// 共通原則:恒久的な tool は希少資源。枠を使う価値がなければ sandbox を使う

判断基準:ある操作を恒久的な tool にする価値はあるでしょうか?
→ 週に ≥ 3 回使う + パラメーターの組み合わせが複雑 + discoverability が必要 → 五層で対応
→ それ以外 → sandbox でその場で書き、使い終えたら捨てる

比較

五層を使わないとどうなるでしょうか?

代替案 問題 結果
Service のみ HTTP 呼び出ししかできない AI agent、cron、CLI の利用者が全員、自分で HTTP client を書く必要がある
Service + MCP Token overhead + プロセスの増殖 23 servers × 3 sessions = 69 プロセス。schema が毎ターン token を消費する
Service + CLI 書き込み操作に typed schema がない LLM が誤ったパラメーターを渡し、input validation もない
すべて MCP 経由 CLI の利用者を排除してしまう Codex CLI、Gemini CLI、cron がすべて接続できない
各層で HTTP を個別に実装 統一する SDK がない 一か所直しても別の場所を直し忘れ、Ghost Parameter アンチパターンが増える
実装例

Agent SDK で Tool の注入を自分で制御する

Agent SDK を使って独自 client を構築するなら、アプリケーション層でLLM の context に入れる tool schema を完全に制御できます。プラットフォームの対応を待つ必要はありません。Speakeasy の動的ツールセット方式では、同じ発想で tool を選別し、token を 96% 削減しました。

# 疑似コードの例

all_tools = mcp_server.tools_list()    # 199 個を受け取る(protocol 層)
relevant = bm25_filter(all_tools, query) # 自分で 5 個に絞り込む
response = client.messages.create(
    tools=relevant,                # LLM に送るのは 5 個だけ
)

フィルタリングなし(デフォルト動作)

199 個の tool schema をすべて詰め込む tools[]

~40K tokens/ターン

BM25 でフィルタリングした後

もっとも関連性の高い 5-10 個の tool だけを毎回送る

~2K tokens/ターン

重要な違い:MCP protocol 層の tools/list はすべてのツールを返します——ここは変えられません。
一方、API の tools[]に何を入れるかは client が決めます——つまり、完全に自分で制御できます。
Claude Code のような既製の client を使う場合は、すべて詰め込まれます。独自 client なら自分で選別できます。

コスト分析

実装コストは実は低い

SDK

を継承し、 BaseClient各メソッドを一行でラップします。error handling、認証、ベースパスはすべて DRY にできます。

CLI

SDK を import するコマンドのラッパーです。シグネチャを統一し、ページネーションには共通のパーサーを使います。

MCP

SDK のラッパー + ツール定義。書き込み操作と構造化された戻り値だけを扱い、読み取り操作は含めません。

「限界コストは下がり、組み合わせやすさは長期的な利益になります——ただし、保守コストも長期にわたります。」

⚠ 五層アーキテクチャの代償

三種類のラッパーを保守する

SDK、CLI、MCP の三層が同じロジックを包みます。API が変われば三層とも変更が必要です。小さなチームなら対応できますが、人数が増えたら自動テストで支える必要があります。

デバッグ経路が長くなる

bug が出たら、まず問題の層を見極める必要があります。Service のロジックか、SDK のパラメーターの渡し忘れか、CLI の解析か、それとも MCP schema の更新漏れか。層が多いほど調査には時間がかかります。

すべてのモジュールに必要なわけではない

内部で使う小さなツールに五層は不要です。複数の利用者に使われる中核モジュールだけが投資に見合います。何にでも適用すると、かえって負担になります。

外部での検証

OpenCLI コミュニティの潮流の変化

オープンソースコミュニティでも CLI が標準のインターフェースになりつつあります。私たちだけが唱えている方向ではありません。

OpenCLI ウェブサイトやデスクトップアプリを標準化された CLI に変換します。CLI-Anything すべてのソフトウェアを Agent が CLI から操作できるようにすることを目指しています。「API はありますか」より「CLI はありますか」と尋ねる開発者が増えています。

理由は明快です。The New Stack の 2025 年の記事は、業界全体が Agentic CLI 時代に入っていると伝えました。AI coding tool がどれも shell を実行できるなら、CLI はツール間で共有できる最大公約数になります。

以前

主流の方法:Agent + MCP

すべてのツールを MCP 経由にし、schema をすべて context に詰め込む。tool が増えるほど遅くなる

現在

進化した方法:Agent + Skill(CLI / MCP を呼び出す)

Skill が必要に応じて振り分ける——読み取りは CLI でコストゼロ、書き込みだけ MCP に任せる

これは CLI の復活ではありません。AI 時代に CLI の価値が再発見されたのです。

結論

199 個のツール、一つのロジック

読み取りは CLI、書き込みは MCP——199 個のツールはこの一本の境界で動き、人、スクリプト、AI が それぞれ必要なものを使えます。
Token の急増からコミュニティの潮流による検証まで、一歩ずつ課題に押されて形になりました。一か所変えれば、すべてに反映されます。

// 意思決定の流れ

課題 1: Playwright MCP で token が急増
  → CLI で token を 98% 節約

課題 2: CC を複数開く → プロセスが比例して増える
  → mcpproxy 集約 + 読み取り操作を CLI に移す

課題 3: Tool が多すぎて LLM が正しく選べない
  → ≤10 tools/server + sandbox で補完

検証 1: Cloudflare はわずか 2 tools で IDE 全体を操作
→ 同じ原則ですが、私たちはもっと現実的に進めます

検証 2: OpenCLI コミュニティが CLI-first に移行
→ AI 時代の CLI はツール間で共有できる最大公約数

// まとめ
Service → SDK → CLI → MCP → Skill
199 個のツール、一つのロジック、三種類の利用者
ツール

まず自分の schema の請求額を計算する

上の 40K tokens は私の環境での数字です。あなたの環境では結果がまったく違うかもしれません。三つの項目を入力すると、本文で引用した二つの定数(tool schema 一つにつき約 200 tokens、業界の推奨は MCP server ごとに ≤ 10 tools)を使い、あなたの毎ターンのコストと常駐プロセス数を計算します。計算はすべてブラウザー内で行い、データはどこにも送信されません。

定数の出典はすべて本文にあります。200 tokens/schema は「8 tools × 200 tokens/schema = 1,600 tokens/turn」、プロセス数は「3 sessions × 23 MCP servers = 69 個の常駐プロセス」という線形の関係に基づきます。10 tools/server は本文で引用した業界の推奨値です。ここで計算するのは schema の常駐コストだけで、実際の I/O は含みません——実際の使用量は呼び出し方にもよります。

この文章を持ち帰る

あなたの AI Agent にコピーする

MCP tool schema は毎ターン token を消費します。でも、あなたの tool の大半は「読み取り」です——schema はそもそも不要です。ツールが増えると schema だけで数万 token を使い、10 個を超えると LLM が間違って選ぶ確率も上がります。この記事の五層アーキテクチャは「読み取り」を CLI に移し、MCP には「書き込み」だけを残します。

以下をあなたの AI に貼り付けてください。まず現在の MCP 設定を実際に調べてもらい、そのうえで五層に照らして何を移せるか判断してもらえます。

「五層アーキテクチャで MCP の token を節約する」という記事を読んでいます (https://blog.joneshong.com/zh/blog/five-layer-architecture)。 著者は AI ツールへの接続を五層に分け、読み取り操作を CLI に移し、書き込み操作だけを MCP に残しています。 まず私のプロジェクトを実際に調べ、この仕組みに照らして何を移せるか判断してください。一般論だけで答えないでください。 最初に現状を調べてください: 1. 現在接続している MCP server と、server ごとの tool 数を列挙する (10 個を超えるものは先に印を付ける——記事によると、10 個を超えると LLM の選択ミスが増えます) 2. これらの tool をそれぞれ「読み取り操作」と「書き込み操作」に分類する 3. tool の schema が毎ターンおよそ何 token を占めるか見積もる 次に、この五層アーキテクチャ(下から上)に照らして移行方法を判断してください: - Service:ビジネスロジック本体(API + DB) - SDK:統一された HTTP ラッパー。上位層は SDK を import し、HTTP に直接触れない - CLI:schema overhead ゼロの共通インターフェース。読み取り操作はここを通る - MCP:typed schema による検証が必要な書き込み操作だけを残す - Skill:意図のルーティング層。読み取りは CLI、書き込みは MCP と自動で判断する 回答してください: - どの「読み取り」tool を CLI に直接移せるか、それぞれ何 token 節約できそうか - HTTP 呼び出しのロジックが各所に散らばっているか、SDK にまとめる価値があるか - どの tool を統合するか、sandbox でその場で生成して常駐数を減らせるか もし接続している tool が一つか二つだけで、schema コストが問題になっていないなら、分割は不要だとはっきり言ってください。アーキテクチャに合わせるためだけに無理に分割しないでください。
参考資料

さらに読む

以下の記事はどれも実際に読み、意思決定に影響を受けたものです。手当たり次第に集めたリストではありません。

記事 重要な理由
Code Mode: Give Agents an Entire API in 1,000 Tokens Cloudflare は実測で 2 個の tool だけで IDE 全体を動かし、token コストを 81% 削減しました。「tool は少ないほどよい」という原則を裏づけています
Your MCP Server Is Eating Your Context Window Apideck は MCP schema が context をどう圧迫するかを分析し、代替策として CLI を提案しました——80 tokens の prompt と数万 tokens の schema の比較です
Advanced Tool Use — Anthropic Engineering Anthropic は tool schema が context を占める問題を公式に認め、Tool Search によって context を 85% 削減する仕組みを導入しました
How We Reduced Token Usage by 100x: Dynamic Toolsets Speakeasy の動的ツールセット方式は、input token を 96% 削減しました
MCPProxy — MCP Gateway オープンソースの MCP 集約ゲートウェイ。BM25 インデックスでツールを動的に発見し、数百の server と数千の tool をサポートします
Welcome to the Agentic CLI Era The New Stack が、AI coding tool が全面的に CLI へ移行する業界動向を報じました
OpenCLI — Universal CLI Hub AI Agent 向けに設計された共通の CLI ハブ。ウェブサイトやデスクトップアプリを標準化された CLI に変換します
CLI-Anything — Making ALL Software Agent-Native 香港大学の研究。すべてのソフトウェアを AI Agent が CLI から操作できるようにします
✦ プロンプトをコピー