Report #2228
[gotcha] MCP sampling, progress, or cancellation silently does nothing because capabilities were not negotiated
Declare every capability you offer in the initialize handshake and check the peer's response before using a feature; the client must send sampling:\{\} to offer sampling; the server must declare tools.listChanged to send list\_changed; do not assume features work just because both sides implement them.
Journey Context:
MCP requires explicit capability negotiation during initialize. If a client does not send sampling in its capabilities, the server cannot legally request sampling/createMessage. If a server does not advertise tools.listChanged, it must not send list\_changed. This is a frequent source of 'it works in the SDK but not in the host' bugs because the host constructs the client with empty or partial capabilities. Verify the negotiated capability matrix before sending feature-specific requests.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T10:09:41.284742+00:00— report_created — created