ツール検索ツールを使用すると、Claudeはツールをオンデマンドで検出して読み込むことで、数百から数千のツールを扱えるようになります。すべてのツール定義を事前にコンテキストウィンドウに読み込む代わりに、Claudeはツールカタログ(ツール名、説明、引数名、引数の説明を含む)を検索し、必要なツールのみを読み込みます。
ツールライブラリが大きくなるにつれて、すべてのツール定義を事前に読み込むと2つの問題が発生します。
ツール検索はClaude APIで一般提供されています。サポートされているモデルについては、モデルの互換性を参照してください。
ツール検索が解決するスケーリングの課題の背景については、Advanced tool useを参照してください。ツール検索のオンデマンド読み込みは、Effective context engineeringで説明されている、より広範なジャストインタイム取得の原則の一例でもあります。
ツール検索はサーバー側ツールとして実行されますが、独自のクライアント側ツール検索を実装することもできます。詳細については、カスタムツール検索の実装を参照してください。
この機能に関するフィードバックは、フィードバックフォームからお寄せください。
この機能はZero Data Retention(ZDR)の対象です。組織がZDR契約を締結している場合、この機能を通じて送信されたデータは、APIレスポンスが返された後に保存されることはありません。
Amazon Bedrockでは、サーバー側ツール検索は InvokeModel API を通じてのみ利用可能で、Converse APIでは利用できません。
Claude Platform on AWSでは、サーバー側ツール検索はClaude APIと同じように動作します。Claude Platform on AWSはAnthropic Messages APIを直接使用するため、InvokeModelとConverseの区別はありません。
両方のツール検索バリアントは、以下のモデルで利用可能です。
| モデル | ツールバージョン |
|---|---|
| Claude Fable 5(claude-fable-5) | tool_search_tool_regex_20251119、tool_search_tool_bm25_20251119 |
| Claude Mythos 5(claude-mythos-5) | tool_search_tool_regex_20251119、tool_search_tool_bm25_20251119 |
| Claude Opus 4.8(claude-opus-4-8) | tool_search_tool_regex_20251119、tool_search_tool_bm25_20251119 |
| Claude Opus 4.7(claude-opus-4-7) | tool_search_tool_regex_20251119、tool_search_tool_bm25_20251119 |
| Claude Opus 4.6(claude-opus-4-6) | tool_search_tool_regex_20251119、tool_search_tool_bm25_20251119 |
| Claude Sonnet 4.6(claude-sonnet-4-6) | tool_search_tool_regex_20251119、tool_search_tool_bm25_20251119 |
| Claude Opus 4.5(claude-opus-4-5-20251101) | tool_search_tool_regex_20251119、tool_search_tool_bm25_20251119 |
| Claude Sonnet 4.5(claude-sonnet-4-5-20250929) | tool_search_tool_regex_20251119、tool_search_tool_bm25_20251119 |
| Claude Haiku 4.5(claude-haiku-4-5-20251001) | tool_search_tool_regex_20251119、tool_search_tool_bm25_20251119 |
Claude Opus 4.1以前のモデルはツール検索ツールをサポートしていません。
ツール検索には2つのバリアントがあります。
tool_search_tool_regex_20251119):Claudeは正規表現パターンを構築してツールを検索します。tool_search_tool_bm25_20251119):Claudeは自然言語クエリを使用してツールを検索します。ツール検索ツールを有効にすると、以下のように動作します。
toolsリストにツール検索ツール(例:tool_search_tool_regex_20251119またはtool_search_tool_bm25_20251119)を含めます。tools配列にすべてのツール定義を提供し、事前に読み込むべきでないツールにdefer_loading: trueを設定します。少なくとも1つのツール(通常はツール検索ツール自体)は遅延なしのままにする必要があります。tool_referenceブロックとして返します(デフォルトで最大5個)。以下の例には、ツール検索ツールと2つの遅延ツールが含まれています。
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=2048,
messages=[{"role": "user", "content": "What is the weather in San Francisco?"}],
tools=[
{"type": "tool_search_tool_regex_20251119", "name": "tool_search_tool_regex"},
{
"name": "get_weather",
"description": "Get the weather at a specific location",
"input_schema": {
"type": "object",
"properties": {
"location": {"type": "string"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
},
"required": ["location"],
},
"defer_loading": True,
},
{
"name": "search_files",
"description": "Search through files in the workspace",
"input_schema": {
"type": "object",
"properties": {
"query": {"type": "string"},
"file_types": {"type": "array", "items": {"type": "string"}},
},
"required": ["query"],
},
"defer_loading": True,
},
],
)
print(response)Claudeはカタログを検索し、get_weatherを検出して呼び出します。レスポンスはstop_reason: "tool_use"で終了します。検出されたツールを実行し、ツール呼び出しの処理と同様にtool_resultを返します。レスポンス形式では、返されるブロックと次に送信すべき内容を示しています。
ツール検索ツールには2つのバリアントがあります。
{
"type": "tool_search_tool_regex_20251119",
"name": "tool_search_tool_regex"
}{
"type": "tool_search_tool_bm25_20251119",
"name": "tool_search_tool_bm25"
}Regexバリアントのクエリ形式:自然言語ではなくPython正規表現
tool_search_tool_regex_20251119では、Claudeは自然言語クエリではなくPythonのre.search()パターンを記述します。マッチングは大文字と小文字を区別しません。一般的なパターンには以下のようなものがあります。
"weather":「weather」を含むツール名と説明にマッチします"get_.*_data":get_user_dataやget_weather_dataなどのツールにマッチします"database.*query|query.*database":どちらの語順にもマッチしますパターンの最大長:200文字
BM25バリアントのクエリ形式:自然言語
tool_search_tool_bm25_20251119では、Claudeは自然言語クエリで検索します。クエリの最大長:500文字。
defer_loading: trueを追加して、ツールをオンデマンド読み込み対象としてマークします。
{
"name": "get_weather",
"description": "Get current weather for a location",
"input_schema": {
"type": "object",
"properties": {
"location": { "type": "string" },
"unit": { "type": "string", "enum": ["celsius", "fahrenheit"] }
},
"required": ["location"]
},
"defer_loading": true
}defer_loadingは、リクエストで送信する内容ではなく、コンテキストウィンドウに入る内容を制御します。
tools配列に送信します。APIは検索を実行しtool_referenceブロックを展開するために、サーバー側でこれらを必要とします。defer_loadingのないツールは即座にコンテキストに読み込まれます。defer_loading: trueのツールは、Claudeが検索を通じて検出した場合にのみ読み込まれます。defer_loading: trueを設定しないでください。両方のツール検索バリアント(regexとbm25)は、ツール名、説明、引数名、引数の説明を検索します。
内部的には、APIは遅延ツールをシステムプロンプトのプレフィックスから除外します。Claudeがツール検索を通じて遅延ツールを検出すると、APIは会話内にインラインでtool_referenceブロックを追加し、Claudeに渡す前にそれを完全なツール定義に展開します。プレフィックスは変更されないため、プロンプトキャッシングは保持されます。strict mode(ツール呼び出しの出力をスキーマに一致するよう制約するルール)の文法は完全なツールセットから構築されるため、defer_loadingとstrict modeは文法の再コンパイルなしで組み合わせられます。
Claudeがツール検索ツールを使用すると、レスポンスには以下のブロックタイプが含まれます。
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "I'll search for tools to help with the weather information."
},
{
"type": "server_tool_use",
"id": "srvtoolu_01ABC123",
"name": "tool_search_tool_regex",
"input": {
"pattern": "weather"
}
},
{
"type": "tool_search_tool_result",
"tool_use_id": "srvtoolu_01ABC123",
"content": {
"type": "tool_search_tool_search_result",
"tool_references": [{ "type": "tool_reference", "tool_name": "get_weather" }]
}
},
{
"type": "text",
"text": "I found a weather tool. Let me get the weather for San Francisco."
},
{
"type": "tool_use",
"id": "toolu_01XYZ789",
"name": "get_weather",
"input": { "location": "San Francisco", "unit": "fahrenheit" }
}
],
"stop_reason": "tool_use"
}server_tool_use: Claudeによるツール検索ツールの呼び出しです。検索はAnthropicのサーバーで実行されます。そのsrvtoolu_... IDに対してtool_resultを返さないでください。tool_search_tool_result: ネストされたtool_search_tool_search_resultオブジェクト内の検索結果です。メッセージ履歴にそのまま保持してください。tool_references: 検出されたツールを指すtool_referenceオブジェクトの配列です。APIがClaudeのためにこれらを展開します。自分で展開する必要はありません。tool_use: Claudeによる検出されたツールの呼び出しです。これを実行し、標準のツール使用と同様にtool_resultを返します。APIは、Claudeに表示する前にtool_referenceブロックを自動的に完全なツール定義に展開します。toolsパラメータに一致するすべてのツール定義を提供している限り、この展開を自分で処理する必要はありません。
次のリクエストでは、server_tool_useとtool_search_tool_resultブロックを含め、アシスタントのコンテンツを変更せずにそのまま渡します。検出されたツールのtool_resultをユーザーメッセージに追加し、同じtools配列(検索ツールとすべての遅延定義)を送信します。srvtoolu_... IDに対してtool_resultを返さないでください。APIがリクエストを拒否します。APIは会話履歴全体でtool_referenceブロックを展開するため、Claudeは再検索せずに後のターンで検出されたツールを再利用できます。何もマッチしない検索は、エラーではなく、空のtool_references配列を持つtool_search_tool_search_resultを返します。
ツールがMCPコネクタを通じてMCPサーバーから提供される場合、個々のツール定義にdefer_loadingを設定しません。代わりに、サーバー全体に対してmcp_toolsetエントリのdefault_configで一度設定するか、そのconfigsでツールごとに設定します。MCPツールセット設定を参照してください。
カスタムツールからtool_referenceブロックを返すことで、独自のツール検索ロジック(例:埋め込みやセマンティック検索を使用)を実装できます。Claudeがカスタム検索ツールを呼び出したら、コンテンツ配列にtool_referenceブロックを含む標準のtool_resultを返します。
{
"type": "tool_result",
"tool_use_id": "toolu_your_tool_id",
"content": [{ "type": "tool_reference", "tool_name": "discovered_tool_name" }]
}参照されるすべてのツールは、トップレベルのtoolsパラメータに対応するツール定義を持つ必要があり、通常はdefer_loading: trueが設定されています。これにより、埋め込みベースの検索など、組み込みバリアントが提供しない検索方法を使用でき、APIは返されたtool_referenceブロックを同じ方法で展開します。
レスポンス形式セクションで示されているtool_search_tool_result形式は、Anthropicの組み込みツール検索が内部的に使用するサーバー側の形式です。カスタムのクライアント側実装では、前述の例に示すように、常にtool_referenceコンテンツブロックを含む標準のtool_result形式を使用してください。
埋め込みを使用した完全な例については、埋め込みを使用したツール検索レシピを参照してください。
ツール使用の例
はツール検索と連携します。Claudeが遅延ツールを検出すると、APIは
その定義とともにinput_examplesを展開します。
これらのエラーは、APIがリクエストを処理できないことを示します。
すべてのツールが遅延されている場合:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "At least one tool must have defer_loading=false. All tools cannot be deferred."
}
}ツール定義が見つからない場合:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "Tool reference 'unknown_tool' not found in available tools"
}
}実行中にツール検索操作が失敗した場合、APIはボディにエラーを含む200レスポンスを返します。
{
"type": "tool_search_tool_result",
"tool_use_id": "srvtoolu_01ABC123",
"content": {
"type": "tool_search_tool_result_error",
"error_code": "invalid_tool_input",
"error_message": "Invalid regular expression pattern: missing ) at position 1"
}
}error_codeフィールドには4つの可能な値があります。
invalid_tool_input:検索入力が無効でした。例えば、不正な形式の正規表現パターンや200文字制限を超えるパターンなどunavailable:検索を実行できませんでした。例えば、タイムアウトしたか、サービスが利用できなかったなどtoo_many_requests:ツール検索操作のレート制限を超過しましたexecution_time_exceeded:検索が実行時間制限を超過しましたdefer_loadingがプロンプトキャッシングをどのように保持するかについては、プロンプトキャッシングを使用したツール使用を参照してください。
defer_loading: trueのツールは同時にcache_controlを持つことはできません。APIは400を返します。キャッシュブレークポイントは遅延なしのツールに設定してください。
ストリーミングを有効にすると、ストリームの一部としてツール検索イベントを受信します。
event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "server_tool_use", "id": "srvtoolu_xyz789", "name": "tool_search_tool_regex"}}
// Search pattern streamed
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "input_json_delta", "partial_json": "{\"pattern\":\"weather\"}"}}
// Pause while search executes
// Search results streamed
event: content_block_start
data: {"type": "content_block_start", "index": 2, "content_block": {"type": "tool_search_tool_result", "tool_use_id": "srvtoolu_xyz789", "content": {"type": "tool_search_tool_search_result", "tool_references": [{"type": "tool_reference", "tool_name": "get_weather"}]}}}
// Claude continues with discovered toolsMessages Batches APIにツール検索ツールを含めることができます。
defer_loading: trueのツールは最大10,000個以下のいずれかに該当する場合は、ツール検索を使用してください。
ツールが10個未満の場合、すべてのツールがすべてのリクエストで使用される場合、またはツール定義が小さい(合計100トークン未満)場合は、ツール検索なしの標準のツール呼び出しの方が適しています。
github_、slack_)、1回の検索でグループ全体にマッチします。ツール検索は個別のサーバーツールとして計測されません。レスポンスのusage.server_tool_useオブジェクトにはツール検索フィールドがなく、検索がコンテキストに読み込むツール定義は、他のツール定義と同様に入力トークンとしてカウントされます。
アプリケーションにメモリツールのファイル操作を実装することで、Claudeが会話をまたいで情報を保存および取得できるようにします。
Anthropic提供ツールのディレクトリと、オプションのツール定義プロパティのリファレンスです。
遅延読み込みを使用してMCPツールセットを設定します。
ターンをまたいでツール定義をキャッシュし、キャッシュを無効化する要因を理解します。
ツールスキーマを指定し、効果的な説明を記述し、Claudeがツールを呼び出すタイミングを制御します。
Was this page helpful?