Factual issue
The @modelcontextprotocol/server-everything v2026.8.31 instructions string unconditionally tells integrating agents to use trigger-sampling-request and trigger-elicitation-request:
## Constraints & Limitations
- Sampling requests (`trigger-sampling-request`) require client sampling capability
- Elicitation requests (`trigger-elicitation-request`) require client elicitation capability
These tools are registered through registerConditionalTools() inside oninitialized, gated on the client's declared capabilities (server/index.ts). For a client that declares no sampling/elicitation capability — e.g. the majority of clients today, and verified by a capability sweep across 12 popular MCP servers — the tools never appear in tools/list, and the instructions reference tools that do not exist for that session:
- initialize with
capabilities: {} → tools/list returns 13 tools, none of them trigger-sampling-request or trigger-elicitation-request
- initialize with
capabilities: {sampling:{}, elicitation:{}} → 16 tools, both present
Suggested fixes (pick any)
- Make the instructions conditional-aware — e.g. "when your client declares the sampling capability,
trigger-sampling-request is available" — so the guidance matches what an agent can actually call.
- Compose the instructions per session — the instructions string is static, but it could be built from the registered-tools state after
oninitialized, or the conditionality could be stated in one sentence.
- At minimum, add the phrase "if your client declares the corresponding capability" to the two bullets.
Why this matters beyond this server
The instructions field exists to orient agents; an agent that follows these instructions on a non-capability client will attempt to call a tool that is not in its catalog — a coherence class that deterministic batteries (this was found with mcp-eval's catalog-vs-instructions checks) can expose mechanically.
Repro
npx -y @modelcontextprotocol/server-everything
# initialize with capabilities: {} ; then tools/list -> 13 tools, no trigger-sampling-request
# initialize with capabilities: {sampling:{},elicitation:{}} ; wait ~1.5s after notifications/initialized ; tools/list -> 16 tools, both present
Environment: server-everything v2026.8.31 (npm), server self-reports 2.0.0; verified against the published dist (registerConditionalTools in dist/server/index.js).
Factual issue
The
@modelcontextprotocol/server-everythingv2026.8.31instructionsstring unconditionally tells integrating agents to usetrigger-sampling-requestandtrigger-elicitation-request:These tools are registered through
registerConditionalTools()insideoninitialized, gated on the client's declared capabilities (server/index.ts). For a client that declares nosampling/elicitationcapability — e.g. the majority of clients today, and verified by a capability sweep across 12 popular MCP servers — the tools never appear intools/list, and the instructions reference tools that do not exist for that session:capabilities: {}→tools/listreturns 13 tools, none of themtrigger-sampling-requestortrigger-elicitation-requestcapabilities: {sampling:{}, elicitation:{}}→ 16 tools, both presentSuggested fixes (pick any)
trigger-sampling-requestis available" — so the guidance matches what an agent can actually call.oninitialized, or the conditionality could be stated in one sentence.Why this matters beyond this server
The instructions field exists to orient agents; an agent that follows these instructions on a non-capability client will attempt to call a tool that is not in its catalog — a coherence class that deterministic batteries (this was found with mcp-eval's catalog-vs-instructions checks) can expose mechanically.
Repro
Environment: server-everything v2026.8.31 (npm), server self-reports 2.0.0; verified against the published dist (
registerConditionalToolsindist/server/index.js).