As AI agents become connected to more enterprise systems, the number of tools available to a model can grow very quickly.
A small agent might use five tools:
search_customer
get_order
create_ticket
update_ticket
send_notification
An enterprise agent can easily have hundreds of tools across systems such as GitHub, monitoring platforms, ticketing systems, databases, analytics services, and internal APIs.
That creates a problem that is easy to miss during early development: giving an AI agent more tools does not necessarily make it more capable.
A large tool catalog consumes context, increases input-token usage, and can make tool selection more difficult. Microsoft Foundry's current tool-search capability addresses this by hiding the full tool catalog and exposing discovery mechanisms that retrieve relevant tools when they are needed.
Claude models hosted in Microsoft Foundry now support Tool Search alongside capabilities such as structured outputs, web search, web fetch, and MCP connectivity.
This makes an interesting benchmark possible:
How does Claude perform when every tool definition is loaded up front compared with discovering tools dynamically?
The answer should be evaluated using measurable metrics such as tool-selection accuracy, token usage, latency, failed tool calls, and task completion.
Static Tools vs Tool Search
There are two fundamentally different approaches.
Static Tool Loading
In the traditional approach, the agent receives the available tool definitions at the beginning of the request.
User Request
|
v
Claude
|
+-- Tool A
+-- Tool B
+-- Tool C
+-- Tool D
+-- Tool E
+-- Tool F
+-- Tool G
+-- ...
Every tool definition becomes part of the model's available context.
This works well when the tool catalog is small.
Dynamic Tool Search
Tool Search changes the loading model.
Instead of exposing every tool immediately, the agent can search for the capability it needs.
User Request
|
v
Claude
|
v
tool_search
|
v
Relevant Tools
|
v
call_tool
Microsoft Foundry's toolbox implementation uses tool_search to discover relevant tools and call_tool to invoke a discovered tool. Tool Search uses tool names, descriptions, and parameter information when determining which tools match the requested capability.
Why Tool Count Matters
Imagine an enterprise agent with 500 tools.
With static loading:
500 tool definitions
|
v
Large context
|
+-- Conversation history
|
+-- System instructions
|
+-- User request
|
+-- Retrieved data
The model has to reason in an environment containing a large amount of tool metadata.
The problem becomes more pronounced as tools have detailed schemas.
Microsoft's documentation specifically identifies three problems with large toolboxes:
Increased token consumption
Reduced available context
Less accurate tool selection
Tool Search attempts to address all three.
How Microsoft Foundry Tool Search Works
When Tool Search is enabled for a toolbox, the initial tool list does not expose all toolbox tools.
Instead, the model receives the discovery interface.
Conceptually:
Initial Context
|
+-- tool_search
|
+-- call_tool
|
+-- Conversation
When the model determines that it needs a particular capability, it performs a search.
For example:
Query:
"Find the customer's recent support incidents"
The system searches the tool catalog and returns the most relevant tools.
The model can then invoke the discovered tool.
Microsoft documents BM25 as the ranking mechanism for toolbox Tool Search. The search considers tool names, descriptions, and parameter information.
The Benchmark Question
A useful benchmark should compare:
Configuration A:
All tools statically available
versus
Configuration B:
Tool Search enabled
The model, task, tool catalog, and environment should remain the same.
Only the tool-discovery strategy should change.
Benchmark Environment
Start with a representative toolbox.
For example:
GitHub
├── Search repositories
├── Search issues
├── Search pull requests
├── Get pull request
└── Create issue
Monitoring
├── Search incidents
├── Get incident
├── Search alerts
└── Get service health
Customer System
├── Search customers
├── Get customer
├── Search orders
└── Get order
Communication
├── Search messages
├── Send message
└── Create notification
The benchmark can then scale this catalog:
10 tools
25 tools
50 tools
100 tools
250 tools
500 tools
1000 tools
This is important because Tool Search is primarily interesting when the tool catalog becomes large.
Microsoft currently recommends Tool Search for larger toolboxes, particularly when there are more than roughly 10–15 tools or when different tasks need different subsets of the catalog.
Benchmark Tasks
The benchmark should contain realistic agent tasks rather than artificial tool-selection questions.
Task 1: Customer Support
Find the customer's latest unresolved incident
and summarize its current status.
Expected tools:
search_customer
search_incidents
get_incident
Task 2: Engineering
Find the open pull request related to the
authentication timeout issue.
Expected tools:
search_pull_requests
get_pull_request
Task 3: Operations
Identify the active checkout latency incident
and retrieve its current service health.
Expected tools:
search_incidents
get_service_health
Task 4: Cross-System Workflow
Find the customer's latest failed order,
check whether an incident exists, and create
a support ticket if necessary.
Expected tools:
search_customer
search_orders
search_incidents
create_ticket
These tasks test both discovery and execution.
Measuring Tool Selection Accuracy
The first important metric is whether the agent selects the correct tool.
Define:
Tool Selection Accuracy =
Correct Tool Selections / Total Tool Selections
For example:
100 tool selections
92 correct
8 incorrect
Accuracy = 92%
But accuracy alone is not enough.
An agent may eventually find the correct tool after several incorrect searches.
Therefore, also measure:
First-Choice Accuracy
and:
Recovery Accuracy
These provide more detail.
First-Choice Accuracy
Suppose the correct tool is:
search_pull_requests
The agent chooses:
search_issues
first and then discovers the correct tool.
The final task may succeed, but the first-choice selection was incorrect.
This distinction matters in large tool catalogs.
First choice
|
X Wrong
|
v
Second search
|
v
Correct tool
Dynamic discovery should ideally reduce these errors by narrowing the candidate set.
Measuring Token Consumption
Tool definitions consume input context.
A static configuration might repeatedly send:
Tool A schema
Tool B schema
Tool C schema
...
Tool N schema
A dynamic configuration can instead keep only the relevant working set.
Microsoft states that Tool Search can keep the active tool context focused and reports that its Claude implementation can reduce tool-definition tokens substantially in large catalogs. These published figures are platform claims rather than an independent benchmark, so they should be validated against your own workload.
A benchmark should measure actual input tokens.
Static:
Input Tokens = Prompt + All Tool Definitions
Tool Search:
Input Tokens = Prompt + Search Interface + Retrieved Tools
Then calculate:
Token Reduction % =
(Static Tokens - Dynamic Tokens)
/
Static Tokens × 100
Measuring Latency
Tool Search introduces an additional discovery operation.
That creates a trade-off.
Static:
Request
|
v
Model
|
v
Tool
versus:
Tool Search:
Request
|
v
Model
|
v
Search
|
v
Tool
Dynamic discovery can reduce context size while adding search overhead.
Therefore, measure:
Initial model latency
Tool-search latency
Tool execution latency
Total task latency
A useful result table is:
| Metric | Static | Tool Search |
|---|---|---|
| Median latency | Measure | Measure |
| p95 latency | Measure | Measure |
| Tool-search overhead | N/A | Measure |
| Input tokens | Measure | Measure |
| Failed selections | Measure | Measure |
Join the conversation! Your thoughts help the community grow.