home / skills / oimiragieo / agent-studio / tool-search
This skill helps you find and load the most relevant tools on demand using semantic search and embeddings to dramatically reduce context usage.
npx playbooks add skill oimiragieo/agent-studio --skill tool-searchReview the files below or copy the command above to add this skill to your agents.
---
name: tool-search
description: Semantic tool search with embeddings for scalable tool discovery. Enables on-demand tool loading to reduce context usage by 90%+ for large tool libraries.
version: 1.0
model: sonnet
invoked_by: both
user_invocable: true
tools: [Read, Write, Grep, Glob]
best_practices:
- Use for tool libraries with 10+ tools
- Keep 3-5 most-used tools always loaded
- Use clear, descriptive tool names
- Add system prompt guidance
error_handling: graceful
streaming: supported
---
# Tool Search Skill
## Identity
Tool Search - Provides semantic tool discovery using embeddings to scale from dozens to thousands of tools with 90%+ context reduction.
## Capabilities
- **Semantic Tool Search**: Find relevant tools based on task context
- **Embedding-Based Matching**: Use embeddings for accurate tool discovery
- **On-Demand Loading**: Load tools only when needed
- **Context Efficiency**: 90%+ reduction in tool definition tokens
## The Problem
Traditional tool loading:
- All tools loaded upfront
- 58 tools = ~55K tokens
- Context fills quickly
- Hard to scale beyond ~100 tools
## The Solution
Tool Search with Embeddings:
- Only Tool Search Tool loaded initially (~500 tokens)
- Tools discovered on-demand via semantic search
- 3-5 relevant tools loaded per search (~3K tokens)
- Total: ~8.7K tokens vs. ~77K traditional (85% reduction)
## How It Works
1. **Initial State**: Only Tool Search Tool + critical tools loaded
2. **Tool Discovery**: Agent searches for tools based on task
3. **Semantic Matching**: Embeddings match tools to task context
4. **Tool Expansion**: Matching tools expanded into full definitions
5. **Tool Use**: Agent uses discovered tools
## Configuration
### MCP Configuration (`.claude/.mcp.json`)
```json
{
"betaFeatures": ["advanced-tool-use-2025-11-20"],
"toolSearch": {
"enabled": true,
"autoEnableThreshold": 20,
"defaultDeferLoading": true
},
"mcpServers": {
"repo": {
"deferLoading": true,
"alwaysLoadTools": ["search_code", "read_file"]
},
"github": {
"deferLoading": true,
"alwaysLoadTools": ["create_pull_request", "get_issue"]
}
}
}
```
### Always Load Critical Tools
Keep 3-5 most-used tools always loaded:
- Core file operations: `read_file`, `write_file`, `search_code`
- Essential integrations: `create_pull_request`, `get_issue`
- Frequently used: `take_screenshot`, `navigate_page`
## Usage Patterns
### When to Use Tool Search
**Most Beneficial When**:
- Tool definitions consuming >10K tokens
- Tool library has 10+ tools
- Experiencing tool selection accuracy issues
- Building MCP-powered systems with multiple servers
**Less Beneficial When**:
- Small tool library (<10 tools)
- All tools used frequently in every session
- Tool definitions are compact
### Tool Discovery
**Agent Workflow**:
1. Agent needs capability (e.g., "create a pull request")
2. Agent searches: "github pull request creation"
3. Tool Search returns: `create_pull_request` tool
4. Tool expanded into full definition
5. Agent uses tool
**Example**:
```
User: "Create a pull request for my changes"
Agent searches: "github pull request creation"
Tool Search finds: create_pull_request tool
Tool loaded and used
```
## Best Practices
### 1. Clear Tool Names and Descriptions
**Good**:
```json
{
"name": "search_customer_orders",
"description": "Search for customer orders by date range, status, or total amount. Returns order details including items, shipping, and payment info."
}
```
**Bad**:
```json
{
"name": "query_db_orders",
"description": "Execute order query"
}
```
### 2. System Prompt Guidance
Add guidance in agent prompts:
```
You have access to tools for Slack messaging, Google Drive file management,
Jira ticket tracking, and GitHub repository operations. Use the tool search
to find specific capabilities when needed.
```
### 3. Keep Critical Tools Always Loaded
Don't defer loading for:
- Core file operations
- Essential integrations
- Frequently used tools
### 4. Monitor Tool Usage
Track which tools are discovered:
- Most searched tools
- Tool discovery patterns
- Context savings achieved
## Implementation
### Embedding-Based Tool Search
The tool search uses embeddings to match tools to queries:
1. **Tool Indexing**: Create embeddings for all tool definitions
2. **Query Embedding**: Create embedding for user query
3. **Similarity Search**: Find tools with similar embeddings
4. **Tool Expansion**: Load matching tools into context
### Tool Search Tool
The Tool Search Tool itself:
- Searches tool library semantically
- Returns relevant tools based on query
- Expands tools into full definitions
- Maintains tool index
## Benefits
### Context Efficiency
- **85% reduction** in tool definition tokens
- **52.5% total context** (down from 87%)
- **Within optimal range** (60-70% target)
### Improved Accuracy
- **11% improvement** in tool selection accuracy
- **79.5% → 88.1%** (Opus 4.5)
- Better tool matching for complex queries
### Scalability
- Scales to **thousands of tools**
- No context limit concerns
- Dynamic tool discovery
## Examples
### Example 1: GitHub Operations
```
User: "Create a pull request"
Agent workflow:
1. Searches: "github pull request creation"
2. Tool Search finds: create_pull_request tool
3. Tool loaded (3K tokens)
4. Agent uses tool
5. Total context: ~8.7K tokens (vs. 55K traditional)
```
### Example 2: File Operations
```
User: "Search for authentication code"
Agent workflow:
1. Searches: "code search file operations"
2. Tool Search finds: search_code, read_file tools
3. Tools loaded (5K tokens)
4. Agent uses tools
```
### Example 3: Multiple Integrations
```
User: "Check Slack messages and create Jira ticket"
Agent workflow:
1. Searches: "slack message reading"
2. Tool Search finds: read_slack_message tool
3. Searches: "jira ticket creation"
4. Tool Search finds: create_jira_ticket tool
5. Both tools loaded (6K tokens total)
```
## Integration
### With MCP Servers
Tool search works with MCP servers:
- GitHub MCP: 35 tools → 3-5 loaded on-demand
- Slack MCP: 11 tools → 2-3 loaded on-demand
- Custom MCPs: Any number of tools → Loaded as needed
### With Agent System
All agents benefit from tool search:
- Reduced context usage
- Better tool selection
- Scalable tool libraries
## Troubleshooting
### Tools Not Found
- Check tool names and descriptions are clear
- Verify tool search is enabled
- Review search queries
- Check tool index is up to date
### Context Still High
- Verify deferLoading is enabled
- Check alwaysLoadTools list (should be minimal)
- Review tool definitions (may be too verbose)
- Monitor actual tool usage
### Tool Selection Issues
- Improve tool descriptions
- Add more context to search queries
- Review tool naming conventions
- Check embedding quality
## Integration with Programmatic Tool Calling (PTC)
Tool Search works excellently with Programmatic Tool Calling:
1. **Tool Search** finds relevant tools (on-demand loading)
2. **PTC** orchestrates tools efficiently (reduced context)
3. **Result**: Optimal tool usage with minimal token consumption
**Example Workflow**:
```python
# Tool Search finds tools
tools = search_tools("github issue management")
# PTC orchestrates multiple tool calls
team = await get_team_members("engineering")
issues = await asyncio.gather(*[
get_issue(member["github_username"]) for member in team
])
# Only final results in context, not all intermediate data
```
See [PTC Patterns Guide](../docs/PTC_PATTERNS.md) for comprehensive PTC documentation.
## Related Documentation
- [Advanced Tool Use](../docs/ADVANCED_TOOL_USE.md) - Comprehensive tool use guide
- [PTC Patterns](../docs/PTC_PATTERNS.md) - Programmatic Tool Calling patterns
- [Context Optimization](../docs/CONTEXT_OPTIMIZATION.md) - Context management
## References
- [Tool Search with Embeddings Cookbook](https://github.com/anthropics/anthropic-cookbook/tree/main/tool_use/tool_search_with_embeddings.ipynb)
- [Programmatic Tool Calling Cookbook](https://github.com/anthropics/anthropic-cookbook/tree/main/tool_use/programmatic_tool_calling_ptc.ipynb)
- [Advanced Tool Use Documentation](https://docs.claude.com/en/docs/agents-and-tools/advanced-tool-use)
<examples>
<usage_example>
**Example Commands**:
```bash
# Search for git-related tools
node .claude/tools/tool_search.mjs --query "git"
# Search for database tools
node .claude/tools/tool_search.mjs --query "database" --limit 3
# Search for testing tools
node .claude/tools/tool_search.mjs --query "testing"
```
</usage_example>
</examples>
## Memory Protocol (MANDATORY)
**Before starting:**
Read `.claude/context/memory/learnings.md`
**After completing:**
- New pattern -> `.claude/context/memory/learnings.md`
- Issue found -> `.claude/context/memory/issues.md`
- Decision made -> `.claude/context/memory/decisions.md`
> ASSUME INTERRUPTION: If it's not in memory, it didn't happen.
This skill provides semantic tool discovery using embeddings to enable scalable tool libraries and on-demand tool loading. It reduces context usage by loading only a compact search tool initially and expanding 3–5 relevant tools per request, achieving 80–90%+ token savings. The focus is accurate matching and fast expansion so agents can scale from dozens to thousands of tools without hitting context limits.
The skill indexes tool definitions with embeddings and performs a semantic similarity search against the agent's task query. It returns the highest-ranking tools, then expands selected entries into full tool definitions only when needed. This keeps the initial context small while allowing targeted expansion and programmatic orchestration of discovered tools. The tool index is kept up to date so search quality and selection accuracy remain high.
Will tool search work for small tool libraries?
It can, but benefits are limited; tool search shines when you have many tools or large tool definitions.
How do I improve tools that are not being found?
Make names and descriptions clearer, update the index, and add more query context in system prompts.