homula
MCP活用ガイド

MCPツールのスケーリング

Code Mode・Tool Search・Programmatic Tool Callingで、 数千のツールをトークン消費99%削減で運用する

読了 15分最終更新: 2025年12月上級者向け

Overview

MCPツールのスケーリングとは、MCP(Model Context Protocol)で接続するツール数が数十〜数千に拡大した際に生じるコンテキストウィンドウの圧迫・精度低下・コスト増大を、 Code Mode・Tool Search Tool・Programmatic Tool Callingの3つのアプローチで解決する設計パターンの総称です。 適切に実装することで、ツール定義のトークン消費を最大99.9%削減し、 中間結果のコンテキスト汚染を排除しながら、エージェントの精度を向上させることが可能です。

なぜMCPのスケーリングが問題になるのか

MCPの普及により、AIエージェントは多数の外部システムに接続できるようになりました。しかし接続先が増えるほど、エージェントの実行効率は低下します。根本原因は2つあります。

第一に、ツール定義がコンテキストウィンドウを圧迫する問題です。 MCPクライアントは通常、接続している全MCPサーバーのツール定義を事前にロードします。 ツール1つあたり数百トークンを消費するため、50ツールで約55,000トークン、100ツール超では10万トークン以上が、ユーザーの指示を処理する前に消費されます。 Anthropicの内部テストでは、最適化前のツール定義だけで134,000トークンを消費したケースが報告されています。

第二に、中間結果の往復がトークンを浪費する問題です。 従来のツール呼び出しでは、各ツールの実行結果がそのままLLMのコンテキストに蓄積されます。 たとえば「Google Driveから議事録を取得してSalesforceに添付する」という処理では、議事録の全文がコンテキストを2回通過します。2時間の会議の議事録なら、それだけで追加50,000トークンの消費です。

55K

50ツールの定義で
消費されるトークン

134K

Anthropic内部テストで
確認された最大消費量

1.17M

Cloudflare API全体の
ツール定義トークン数

49%

大量ツール環境での
Opus 4精度(最適化前)

これらの問題は、PoCでは顕在化しにくく、本番環境でツール数が増えた段階で深刻化します。 2025年後半、AnthropicとCloudflareが独立して提唱した3つのアプローチが、この構造的課題への実践的な解法を示しました。

Three Approaches

コンテキスト最適化の3つのアプローチ

MCPのスケーリング問題に対し、それぞれ異なるレイヤーで作用する3つの解法が確立されています。 これらは競合ではなく補完関係にあり、組み合わせることで最大の効果を発揮します。

Code Mode

ツール定義を渡す代わりに、LLMにAPIを検索・操作するコードを書かせる。

定義トークン99.9%削減

解決する問題: ツール定義の肥大化

Tool Search Tool

全ツール定義の事前ロードを廃止し、必要なツールだけを動的に検索・ロードする。

初期ロード85%削減

解決する問題: 初期コンテキストの肥大化

Programmatic Tool Calling

ツール呼び出しをコード実行環境で処理し、最終結果だけをLLMに返す。

中間トークン37%削減

解決する問題: 中間結果の蓄積

各アプローチが作用するレイヤー

1

ツール定義レイヤー

Code Mode / Tool Search Tool が作用

入力時
2

ツール実行レイヤー

Code Mode / Programmatic Tool Calling が作用

処理時
3

結果返却レイヤー

Programmatic Tool Calling が作用

出力時

Approach 01

Code Mode — ツール定義を不要にする

Code Modeは、MCPの最も根本的なスケーリング問題——ツール定義のコンテキスト消費——を解決するアプローチです。 Cloudflareが2025年9月に提唱し、Anthropicも同様のパターンを「Code execution with MCP」として発表しました。

核心的洞察

LLMはツール呼び出し(Function Calling)よりも、 コードを書くことの方が遥かに得意です。 LLMの学習データには何百万ものオープンソースプロジェクトのコードが含まれていますが、 ツール呼び出しのトレーニングデータは限定的な合成データです。 Cloudflareはこれを「シェイクスピアに1ヶ月の中国語授業を受けさせて戯曲を書かせるようなもの」と表現しています。

仕組み: search() と execute() の2ツール

Code Modeでは、数千のツール定義を渡す代わりに、わずか2つのメタツールだけをエージェントに提供します。 エージェントはsearch()でAPIスキーマをコードで検索し、execute()でAPI操作をコードで実行します。

Code Modeのフロー

AIエージェント

2ツールのみロード(〜1,000トークン)

search() — コードでAPIスキーマを検索

OpenAPI Spec

2,500以上のエンドポイント

execute() — コードでAPI操作を一括実行

サンドボックス(V8 Isolate)

安全な実行環境・APIキー隠蔽

Slack

Salesforce

GitHub

DB

実行例: エージェントが書くコード

たとえば「WAFとDDoS防御を有効化して」というユーザー指示に対し、エージェントはまずsearch()で関連エンドポイントを探索します。

// search() — エージェントがAPIスキーマを検索するコード

async () => {
  const results = [];
  for (const [path, methods] of Object.entries(spec.paths)) {
    if (path.includes('/zones/') &&
        (path.includes('firewall/waf') || path.includes('rulesets'))) {
      for (const [method, op] of Object.entries(methods)) {
        results.push({ method: method.toUpperCase(), path, summary: op.summary });
      }
    }
  }
  return results;  // 2,500件 → 必要な10件だけ返す
}

2,500以上のエンドポイントから必要な10件だけを抽出し、全スキーマがコンテキストに入ることはありません。 続けてexecute()で、複数のAPI呼び出しを1回のコード実行にまとめます。

// execute() — 複数のAPI操作を一括実行

async () => {
  // DDoS L7のルールセットを取得
  const ddos = await cloudflare.request({
    method: "GET",
    path: `/zones/${zoneId}/rulesets/phases/ddos_l7/entrypoint`
  });
  // WAFマネージドルールセットを取得
  const waf = await cloudflare.request({
    method: "GET",
    path: `/zones/${zoneId}/rulesets/phases/http_request_firewall_managed/entrypoint`
  });
  return { ddos: ddos.result, waf: waf.result };
}

従来のMCPツール方式

1,170,000

トークン(Cloudflare API全ツール定義)

→ 最先端モデルのコンテキストウィンドウを超過

Code Mode方式

〜1,000

トークン(search + execute の2ツール)

→ 99.9%削減。ツール数に関係なく固定

サーバーサイドCode Mode vs クライアントサイドCode Mode

Code Modeには2つの実装パターンがあります。 サーバーサイドではMCPサーバー自体が2ツールを提供し、エージェント側の変更が不要です。 クライアントサイドではエージェント側のSDKがMCPツールをTypeScript APIに変換し、エージェントはそのAPIに対してコードを書きます。

Code Modeの実装パターン比較

観点サーバーサイドクライアントサイド
提唱者Cloudflare(2026年2月)Cloudflare Agents SDK(2025年9月)
エージェント側の変更不要。標準MCPクライアントで利用可能SDKの導入が必要
コード実行環境MCPサーバー側のV8 Isolateエージェント側のサンドボックス
セキュリティモデルサーバー管理者がサンドボックスを制御エージェント環境にサンドボックスが必要
適用範囲大規模API(数百〜数千エンドポイント)複数MCPサーバーの横断操作

Approach 02

Tool Search Tool — 必要なツールだけを動的にロードする

Tool Search Toolは、Anthropicが2025年11月にClaude APIのベータ機能として公開したアプローチです。 全ツール定義の事前ロードをやめ、エージェントが必要なときに必要なツールだけを検索・ロードすることで、コンテキストの初期消費を劇的に削減します。

仕組み: defer_loading によるオンデマンドロード

ツール定義にdefer_loading: trueを設定すると、 そのツールは初期コンテキストにロードされません。エージェントはTool Search Tool(Regex版またはBM25版)を使って検索し、 マッチしたツールの定義だけがコンテキストに展開されます。

Tool Search Toolのフロー

初期状態

Tool Search Tool

〜500トークン

50+ツール(非ロード)

検索実行

search("github")

Regex / BM25で検索

→ 3〜5件の tool_reference を返却

ツール展開

github.createPR

github.listIssues

〜3,000トークン(必要分のみ)

精度向上のインパクト

Anthropicの内部テストでは、Tool Search Tool の有効化により、大量ツール環境でのMCP評価タスクの精度がOpus 4で49%→74%Opus 4.5で79.5%→88.1%に改善しました。 コンテキスト消費は約85%削減され、トークン消費は77,000トークンから8,700トークンに低下しています。

実装のポイント

1

高頻度ツールは常時ロード、残りをdefer

3〜5個の最頻出ツールはdefer_loading: falseで常時ロードし、残りを全てdefer_loading: trueに設定します。一般的なタスクの即応性とスケーラビリティのバランスが取れます。

2

ツール名と説明を検索しやすく設計する

Tool Searchはツール名とdescriptionの両方を検索対象とします。query_db_ordersのような曖昧な名前ではなく、search_customer_ordersのように検索しやすい名称と詳細な説明が精度を左右します。

3

システムプロンプトでカテゴリを提示する

「Slack・GitHub・Jira・Google Driveのツールが利用可能です」のように、利用可能なツールカテゴリをシステムプロンプトに記載することで、エージェントの検索精度が向上します。

Approach 03

Programmatic Tool Calling — 中間結果をコンテキストから排除する

Programmatic Tool Calling(PTC)は、ツールの呼び出しと結果処理をコード実行環境内で完結させ、最終結果だけをLLMに返すアプローチです。 Anthropicが2025年11月にClaude APIのベータ機能として公開しました。

従来方式の問題: ツール呼び出しの「細切れ往復」

従来のツール呼び出しでは、各ツールの結果がそのままLLMのコンテキストに蓄積されます。 「チームメンバー20人の経費を確認して予算オーバーの人を報告して」という処理では、 全員の経費明細(2,000行以上、50KB超)がコンテキストを通過し、LLMがそのデータを「目視」で確認して集計しなければなりません。

従来方式(22回のAPI往復)

チームメンバー取得 → 結果がコンテキストに

メンバーA経費取得 → 結果がコンテキストに

メンバーB経費取得 → 結果がコンテキストに

... × 20人分

予算取得 → 結果がコンテキストに

LLMが全データを読んで手動集計

消費: 200KB+ / 43,588トークン

PTC方式(1回のコード実行)

Pythonスクリプトが全ツール呼び出しを実行

中間結果はコード内で処理・フィルタ

予算オーバーの2〜3人だけをLLMに返却

LLMは最終結果だけを見て回答

消費: 〜1KB / 27,297トークン(37%削減)

# PTCでClaudeが生成するオーケストレーションコード

team = await get_team_members("engineering")

# 全メンバーの経費を並列取得
expenses = await asyncio.gather(*[
    get_expenses(m["id"], "Q3") for m in team
])

# 予算取得 & 超過者の抽出(コンテキストには入らない)
budgets = {level: await get_budget_by_level(level)
           for level in set(m["level"] for m in team)}
exceeded = []
for member, exp in zip(team, expenses):
    total = sum(e["amount"] for e in exp)
    if total > budgets[member["level"]]["travel_limit"]:
        exceeded.append({"name": member["name"],
                         "spent": total,
                         "limit": budgets[member["level"]]["travel_limit"]})

print(json.dumps(exceeded))  # ← これだけがLLMに返る

Programmatic Tool Callingの追加メリット

プライバシー保護

中間結果がLLMのコンテキストを通過しないため、個人情報や機密データをモデルに見せずに処理できます。PII(個人識別情報)のトークン化を組み合わせれば、生データがモデルに触れることを完全に防止できます。

レイテンシ削減

従来方式では各ツール呼び出しごとにモデル推論(数百ms〜数秒)が発生します。PTCでは20回のツール呼び出しを1回のコード実行にまとめるため、19回分の推論パスが削減されます。

精度向上

Anthropicの内部テストでは、ナレッジ検索タスクの精度が25.6%→28.5%、GIAベンチマークが46.5%→51.2%に改善。明示的なコードロジックは自然言語での判断より正確です。

スキル永続化

エージェントが一度成功したコードをファイルとして保存すれば、再利用可能な「スキル」になります。SKILL.mdを添えればエージェントが参照できる構造化されたスキルライブラリへと進化します。

Selection Guide

選定ガイド: いつ、何を使うか

3つのアプローチはそれぞれ異なるボトルネックを解消します。 最大のボトルネックから着手し、段階的にレイヤーを追加する戦略が推奨されます。

ボトルネック別の選定マトリクス

ボトルネック推奨アプローチ効果の目安前提条件
ツール定義が10K+トークンTool Search Tool85%削減Claude API(Sonnet 4+)
単一APIが数百〜数千エンドポイントCode Mode(サーバーサイド)99.9%削減MCPサーバーの対応が必要
中間結果が大量(50K+トークン)Programmatic Tool Calling37〜90%削減コード実行環境の提供
ツール選択の精度が低いTool Search + Tool Use Examples精度49%→74%ツール名・説明の最適化
PII保護が必要Programmatic Tool Calling + トークン化機密データのモデル非接触MCPクライアント側でPII置換

注意: ツール数が10個以下で、全てが毎セッションで使用される場合は、従来のツール呼び出しで十分です。 最適化の導入には実装・テストのコストが伴うため、まずボトルネックが実際に存在するかを確認してください。

パラダイムシフト: 「手順を与える」から「目的を任せる」へ

これら3つのアプローチに共通する本質的な洞察は、AIには「手順書」を与えるより 「目的と制約」を渡してコードで実行させた方が優秀だという事実です。 従来のワークフローツールでは、人間がブロックを組み合わせて「正しい手順」を構築していました。 しかしLLMは何百万ものオープンソースプロジェクトからコードの書き方を学習しており、 コードを通じたタスク実行はいわば「母国語」です。

この原則はツール呼び出しに限りません。ワークフロー構築、データ前処理、マルチエージェント連携、 外部ツールの選定と接続——あらゆるAIエージェント開発の場面で、 「人間が構築する」から「AIに目的を伝えて任せる」へのシフトが起きています。

homula's Insight

homulaの支援現場でも、従来のワークフロー構築アプローチからCode Mode / PTCベースのアプローチへの移行により、 エージェントの処理時間が93%削減、トークンコストが90%削減された事例が生まれています。 このパラダイムシフトを具現化したのが、homulaのAgens(Tool Search + Programmatic Tool Calling + Code Mode統合基盤)です。

Enterprise Considerations

エンタープライズ環境での実装考慮事項

これらの技術を本番環境に適用する際には、セキュリティ・ガバナンス・運用の3軸で追加の検討が必要です。

1

サンドボックスのセキュリティ設計

Code ModeとPTCでは、AIが生成したコードを実行する環境が必要です。 V8 Isolate(Cloudflare Workers)やコンテナサンドボックス(Anthropic Code Execution Tool)が代表的な選択肢です。 エンタープライズでは、外部ネットワークへのアクセス制御、APIキーのバインディング経由での隠蔽、 実行時間とリソースの制限、実行ログの全量保存が必須要件となります。 閉域網環境での運用には、セルフホスト型のサンドボックス基盤が必要です。

2

監査ログとトレーサビリティ

PTCでは中間結果がLLMのコンテキストを通過しないため、従来のLLMログだけでは全処理の追跡が困難になります。 コード実行環境レベルでの全ツール呼び出しのログ記録、生成されたコード自体の保存、 そして実行結果の監査が、J-SOX対応やISMS運用に不可欠です。

3

段階的な導入アプローチ

全てを一度に導入する必要はありません。推奨される段階は、 まずTool Search Toolで初期コンテキストを最適化し(最も導入が容易)、 次にPTCでデータ量の大きいワークフローを最適化し、 最後にCode Modeで大規模APIとの接続を効率化する順序です。 各段階でROIを測定し、次の段階への投資判断を行います。

よくある質問

Code Modeは「ツール定義の代わりにコードで操作させる」アプローチで、ツール定義そのものを不要にします。Tool Search Toolは「必要なツールだけを動的に検索・ロードする」アプローチで、ツール定義は保持したまま初期ロードを最小化します。Programmatic Tool Callingは「ツール呼び出しの結果をコード内で処理し、最終結果だけをLLMに返す」アプローチで、中間結果のコンテキスト消費を削減します。3つは競合ではなく補完関係にあり、組み合わせることで最大の効果を発揮します。

10個以下のツールで全てのセッションで使用される場合、従来のツール呼び出しで十分です。最適化が効果を発揮するのは、ツール定義が10,000トークン以上を消費する場合、ツール選択の精度が低下している場合、または中間結果が大量のトークンを消費するワークフローの場合です。ただし、ツール数は時間とともに増加する傾向があるため、アーキテクチャ設計段階でスケーリングを考慮しておくことを推奨します。

Code Modeでは、AIが生成したコードはサンドボックス(V8 Isolateやコンテナ)内で実行されます。外部ネットワークへのアクセスはデフォルトで遮断され、APIキーや認証情報はバインディング経由で隠蔽されるため、コードから直接漏洩することはありません。エンタープライズ環境では、サンドボックスの実行ポリシー、外部通信の制御、実行ログの監査が追加の安全策として重要です。

Tool Search ToolとProgrammatic Tool CallingはAnthropic Claude API(Sonnet 4.0以上、Opus 4.0以上)で利用可能です。Code Modeの概念はLLM非依存で、Cloudflare Agents SDKやGooseなどの実装が存在します。企業環境では、利用するLLMとエージェントフレームワークに応じて、最適な組み合わせを選定する必要があります。homulaのAgensはモデル非依存設計で、これらの最適化パターンを統合的に提供します。

homulaはエンタープライズ環境でのMCPスケーリングを一気通貫で支援します。具体的には、AgensによるMCPハブ構築(Tool Search + Programmatic Tool Calling + Code Mode統合)、閉域網・VPC環境でのセキュアなサンドボックス実行基盤の構築、200以上のツール接続の設計・最適化、そしてガバナンス(監査ログ・DLP・RBAC)の実装を含みます。ブートキャンプ(3〜5日)でプロトタイプを構築し、ROIを検証した上で本番導入に進めます。

MCPスケーリングを実現しませんか?

homulaのFDE(Forward Deployed Engineer)が、貴社の環境に最適なMCPスケーリング戦略を設計・実装します。 まずはブートキャンプで、5日間で動くプロトタイプとROI試算を。