Feature request: eager schema loading for MCP tools (ToolSearch 91% empty rate)

Resolved 💬 3 comments Opened Mar 28, 2026 by saronic-brandyn Closed Mar 28, 2026

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:2 configured (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 |

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗