Optional eager-schema-load hint for MCP servers / plugins
Problem
Tool schemas are deferred behind ToolSearch by default — the model sees tool names but must do a discovery call to load schemas before invoking. This is the right default when 1000s of schemas would otherwise sit in the system prompt unused.
But for some MCPs the tools are virtually certain to be called as soon as the session starts. Example: a Kodak Charmera digital-camera MCP whose menu-bar app launches claude "<curated import prompt>" whenever the camera is mounted. In that flow:
- 100% of sessions immediately call
detect_camera,prepare_camera_import,read_photo - The mandatory
ToolSearchround-trip costs one extra LLM turn (latency) plus ~300–500 tokens for the discovery output (cost) - The discovery output is then cached forever in the transcript even though the model only needed it once
Proposed behavior
Let MCPs / plugins opt into eager schema loading — schemas land in the initial system context without ToolSearch. Several possible shapes; not prescribing one:
(a) Manifest flag
{ "name": "charmera", "mcp": { }, "eager": true }
(b) Conditional trigger (matches existing plugin trigger semantics)
{ "eager": { "when": "<predicate>" } }
(c) Per-project opt-in via slash command or settings
User runs /charmera-eager once; harness persists per project.
(d) Session-prompt directive<eager>charmera</eager> in the user prompt or CLAUDE.md to load named MCPs eagerly for that session.
Tradeoffs / open questions
- Need a hard cap on eager schemas so a misbehaving plugin can't bloat the system prompt
- Does (b) need a sandboxed predicate language, or is a shell exit-code check enough?
- Should eager loading also bypass the tool-name reminder (see related issue) so the schemas are the only thing that lands?
Use case
charmera-mcp (https://github.com/timncox/charmerapp) ships in Charmera.app/Contents/MacOS/charmera-mcp and is launched by a menu-bar app whenever the camera mounts. Every invocation currently pays the ToolSearch tax for tools that are guaranteed to be called within the next two turns.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗