概要
MCP サーバーやその他の外部ツールを Copilot CLI (コパイロット CLI) に接続することは強力ですが、追加するすべてのツールにはコストがかかります。定義によってモデルのコンテキスト ウィンドウの領域が占有され、ツールの長いメニューによってエージェントが適切なものを選択するのが困難になります。 オンデマンド ツールの読み込み (または "ツール検索") により、エージェントが使用しないツールの定義によってコンテキスト ウィンドウが乱雑にならないようにします。 エージェントは、組み込みのツールと残りのツールを検索する方法から始まり、タスクを完了するために必要な場合にのみ追加のツールを読み込みます。
ツール検索は、増え続けるツールに関連する 2 つの問題に対処します。
- 無駄なコンテキスト。 エージェントが作業を行う前に、数十個のツール定義で 10 ~ 20,000 個のトークンを使用できます。
- ツールの選択精度が低下しました。 一度に数十個のツールが表示されると、モデルが間違ったツールに到達する可能性が高くなります。
セッション中に何が起こるか
プロンプトを入力するたびに、CLI は現在のツール インベントリを確認し、ツール検索を使用するかどうかを決定します。 約 30 個のツールの下では、ツール検索から得られる節約は価値がないため、 Copilot CLI (コパイロット CLI) ツールの検索を完全にスキップし、すべてを読み込みます。
最初に、ツール検索を使用すると、CLI の組み込みツールのみが読み込まれます。 それ以外のもの、つまり MCP ツールやその他の外部ツールは、すべて保留されます。 エージェントは、これらのツールが存在し、おおよその目的を確認できますが、完全な定義はまだ読み込まれていません。
エージェントは、読み込まれていないツールを必要とするステップにヒットすると、使用可能なツールをすばやく検索し、最も近い一致をコンテキストにプルします。 その後、これらのツールは会話の残りの部分に対して取り組むので、ルックアップは各ツールが初めて必要なときにのみ行われます。
その最初の参照では、モデルとのやり取りが1回余分に必要になりますが、以降の各ターンでコンテキストを小さく保てるため、その分のコストは何倍にもなって回収できます。
常に読み込まれるツール
ツール検索をスキップし、すぐに準備が整うツールがいくつかあります。
- Copilot CLI (コパイロット CLI)の組み込みツール (grep、glob、bash、編集など)。
deferTools: "never"で構成した MCP サーバーのツール。 この記事の後半にあるMCP サーバーのツールを常に読み込まれた状態に保つを参照してください。- カスタムエージェントによってロードされたツール。 この記事 で後述するカスタム エージェントでのツール遅延の構成 を参照してください。
ツール検索の無効化
ツール検索は既定で有効になっており、サポートされているモデルを使用していて、十分に接続されたツールを備えている場合は常に自動的にアクティブ化されます。 ツール検索を無効にし、すべてのツールの読み込みに戻るには、個人用設定で toolSearch: false を設定します。 「GitHub Copilot CLI の構成ディレクトリ」を参照してください。
サポートされているモデル
| ファミリ | サポートされているバージョン |
|---|---|
| クロード (アントロピック) | Mythos Preview、Fable、Sonnet 4.0+、Opus 4.0 以降 (俳句ではありません) |
| GPT (OpenAI) | GPT-5.4 以降 |
それ以外のどのモデルでも、すべてのツールが最初に読み込まれます。
MCP サーバーのツールを常に読み込んだ状態にしておく
場合によっては、特定の MCP サーバーのツールを常にエージェントの前に配置する必要がある場合があります。たとえば、ツールが常に使用されているサーバーや、追加の検索手順の価値がないサーバーなどです。 各 MCP サーバーには、これを制御する deferTools 設定があります。
"auto"(既定値) - サーバーのツールは他のツールと同様に動作し、しきい値を超えると延期される可能性があります。"never"—サーバーのツールは、他のすべてのツール検索がアクティブな場合でも、常にエージェントのツール リストに含まれます。
これを設定する最も簡単な方法は、 /mcp edit スラッシュ コマンドを使用することです。 MCP サーバーを編集するためのフォームで、 Defer Tools を Never に切り替えます。
~/.copilot/mcp-config.jsonで直接設定することもできます。
{
"mcpServers": {
"my-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@example/mcp-server"],
"deferTools": "never",
"tools": ["*"]
}
}
}
カスタム エージェントにおけるツール呼び出しの延期の設定
カスタム エージェントがツールを名前で一覧表示すると、それらのツールは常に読み込まれ、エージェントですぐに使用できるようになります。 通常はこれが必要ですが、エージェントが多数のツールセットを宣言し、特定の実行でそれらの一部にのみ触れる場合は、そのリストをツール検索に戻して、すべてのツールが一度に読み込まれるのではなく、必要に応じてツールが検出されるようにすることができます。
Markdown エージェント (.github/agents/*.md)は、 deferred-tool-loading: true を frontmatter に追加します。
---
name: my-agent
description: Works with a large catalog of tools
tools:
- some_mcp_tool
- another_mcp_tool
# ...many more
deferred-tool-loading: true
---
Agent instructions here.
deferred-tool-loading設定については、次の点に注意してください。
- ツール検索がアクティブな場合 (つまり、しきい値を超えるのに十分なツールがあるサポートされているモデル) にのみ影響します。
- 自分のツールに名前を付けるエージェントにのみ関係します。
*ワイルドカードを使用するエージェントは、既にツール検索を使用しています。
ツール検索用のツールの最適化
ツール検索は、エージェントが実行しようとしている操作を、各ツールの 名前、 説明、 およびパラメーターの名前と説明と照合します。 明確で具体的な文言は、適切な要求に対してツールを表示します。
- ツールには、見つけやすいように、その機能がわかる名前を付けます。
- 漠然とした言葉ではなく、実際に検索する言葉で説明を書きます。