- Context efficiency: Tool definitions can consume large portions of the context window (50 tools can use 10-20K tokens), leaving less room for actual work.
- Tool selection accuracy: Tool selection accuracy degrades with more than 30-50 tools loaded at once.
How tool search works
When tool search is active, tool definitions are withheld from the context window. The agent receives a summary of available tools and searches for relevant ones when the task requires a capability not already loaded. The 3-5 most relevant tools are loaded into context, where they stay available for subsequent turns. If the conversation is long enough that the SDK compacts earlier messages to free space, previously discovered tools may be removed, and the agent searches again as needed. Tool search adds one extra round-trip the first time Claude discovers a tool (the search step), but for large tool sets this is offset by smaller context on every turn. With fewer than ~10 tools, loading everything upfront is typically faster. For details on the underlying API mechanism, see Tool search in the API.Tool search requires Claude Sonnet 4 or later, or Claude Opus 4 or later. Haiku models do not support tool search.
Configure tool search
By default, tool search is always on. You can change this with theENABLE_TOOL_SEARCH environment variable:
| Value | Behavior |
|---|---|
| (unset) | Tool search is always on. Tool definitions are never loaded into context. This is the default. |
true | Same as unset. |
auto | Checks the combined token count of all tool definitions against the model’s context window. If they exceed 10%, tool search activates. If they’re under 10%, all tools are loaded into context normally. |
auto:N | Same as auto with a custom percentage. auto:5 activates when tool definitions exceed 5% of the context window. Lower values activate sooner. |
false | Tool search is off. All tool definitions are loaded into context on every turn. |
auto, the threshold is based on the combined size of all tool definitions across all servers.
Set the value in the env option on query(). This example connects to a remote MCP server that exposes many tools, pre-approves all of them with a wildcard, and uses auto:5 so tool search activates when their definitions exceed 5% of the context window:
ENABLE_TOOL_SEARCH to "false" disables tool search and loads all tool definitions into context on every turn. This removes the search round-trip, which can be faster when the tool set is small (fewer than ~10 tools) and the definitions fit comfortably in the context window.
Optimize tool discovery
The search mechanism matches queries against tool names and descriptions. Names likesearch_slack_messages surface for a wider range of requests than query_slack. Descriptions with specific keywords (“Search Slack messages by keyword, channel, or date range”) match more queries than generic ones (“Query Slack”).
You can also add a system prompt section listing available tool categories. This gives the agent context about what kinds of tools are available to search for:
Limits
- Maximum tools: 10,000 tools in your catalog
- Search results: Returns 3-5 most relevant tools per search
- Model support: Claude Sonnet 4 and later, Claude Opus 4 and later (no Haiku)
Related documentation
- Tool search in the API: Full API documentation for tool search, including custom implementations
- Connect MCP servers: Connect to external tools via MCP servers
- Custom tools: Build your own tools with SDK MCP servers
- TypeScript SDK reference: Full API reference
- Python SDK reference: Full API reference