Feature request: eager schema loading for MCP tools (ToolSearch 91% empty rate)
Problem
ToolSearch returns empty results 91.1% of the time (399/438 calls over 93 sessions, 7 days). This has persisted for 7+ consecutive weekly retrospectives with minimal improvement.
Environment
- Claude Code v2.1.86, Windows 11, Opus 4.6 [1m]
- 100+ MCP tools across 15+ servers (mix of local stdio and remote HTTP/SSE)
auto:2configured (improved from 95.9% to 91.1%, but plateau reached)
Root cause
Deferred tool loading means the model must guess tool names before schemas are loaded. With 100+ tools, the keyword-based search rarely matches. The model calls ToolSearch("memory search"), but the deferred tool name is mcp__memory-search__memory_search — a format the model can't predict.
Impact
- 399 wasted tool calls per week (largest single friction source)
- Each empty ToolSearch adds ~500 tokens of overhead (query + empty response)
- Compounds in subagent sessions where agents need MCP tools but don't know names
Proposed solution
Add a preload_tools config in settings.json (or .claude.json) that eagerly fetches schemas at session start:
\\\json\
{
"preload_tools": [
"mcp__memory-search__*",
"mcp__tavily__*",
"mcp__remote-tailscale__*"
]
}
\\
Alternatively, for power users with many MCP servers, provide a flag to eagerly load ALL tool schemas at session start, trading startup latency for eliminating ToolSearch entirely.
Workarounds tried
- \
auto:2\in settings: marginal improvement (95.9% → 91.1%) - Rules instructing the model to batch-fetch tools: inconsistently followed
- SessionStart hook context injection: hooks can't invoke ToolSearch
Data
| Metric | Value |
|--------|-------|
| Sessions analyzed | 93 |
| Total ToolSearch calls | 438 |
| Empty results | 399 (91.1%) |
| Retros flagged | 7+ consecutive |
| MCP tools available | 100+ across 15 servers |
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗