* [Server] Let the client gateway see modern-era capabilities The six supports*() probes read session state only InitializeHandler wrote, so every request served statelessly reported no client capabilities at all — a tool guarding on them took the unsupported branch without a signal. StatelessProtocol now writes the request's declaration under the same keys. * [Server] Reject the RPCs 2026-07-28 removed resources/subscribe and resources/unsubscribe were still dispatched and answered 200 OK, recording subscriptions the modern era never reads. They join initialize, ping and logging/setLevel in the era guard; the handlers stay registered because the handshake era still serves them. * [Server] Decode a wrapped Mcp-Name before comparing it The Base64 sentinel was only unwrapped for Mcp-Param-*, so any resource URI or tool name outside the header-safe ASCII set — which the spec explicitly tells clients to wrap — was compared encoded and refused with -32020. * [Server] Require the MCP-Protocol-Version header It was only checked for contradicting the body, so omitting it entirely passed — leaving the value intermediaries route on unenforced. Tied to the header validator's presence, since that is what a header-bearing transport installs and stdio carries its metadata inline. * [Server] Read the modern-era request body whole A single read() takes whatever the stream cares to give — 64 bytes from a chunked transfer is legal — so an oversized-but-valid POST came back as a parse error. Shares the legacy transport's incremental read as a trait. * [Schema][Server] Answer a notification with a status, not a response A body with no id was dispatched as a request and came back as a JSON-RPC error carrying "id": "" — an id nobody issued, and on a path a client uses to tell a modern server from a legacy one. Notifications now get 202 and no body, and Error omits an id it could not read instead of emptying it. * [Server] Stop emitting the error codes 2026-07-28 reserved resources/read answered -32002, which this revision forbids; prompts/get and completion/complete answered it for an unknown *name*, which it never meant; tools/call answered -32601, which belongs to an unknown method. Only the resources/read code is revision-gated — older peers expect -32002 there, and nowhere else. Also routes the -32021 capability exception out of the prompt and resource handlers, which were swallowing it into -32603.
37 lines
1.8 KiB
YAML
37 lines
1.8 KiB
YAML
# Expected conformance failures for spec revision 2026-07-28.
|
|
#
|
|
# Separate from conformance-baseline.yml because the two revisions exercise
|
|
# different lifecycles against different endpoints: the dated baseline covers
|
|
# the handshake era served at /, this one covers the modern (SEP-2575) era
|
|
# served at /stateless.
|
|
#
|
|
# Entries are per-check (scenario:check-id) rather than whole scenarios, so a
|
|
# scenario that is mostly conformant keeps reporting the parts that work and a
|
|
# new regression inside it still fails the run.
|
|
#
|
|
# Run with:
|
|
# make conformance-draft-server
|
|
|
|
server:
|
|
# --- Progress notifications on a response stream ---------------------------
|
|
# The one place the modern lifecycle is behind the handshake one, and a real
|
|
# gap rather than a fixture difference: this scenario passes at / and fails
|
|
# at /stateless. A tools/call answer is a single JSON response here, so
|
|
# notifications a handler emits mid-call have nowhere to go. Closing it means
|
|
# answering tools/call over a stream — the same seam MRTR's IncompleteResult
|
|
# chunks will need — rather than anything specific to progress.
|
|
- tools-call-with-progress:tools-call-with-progress
|
|
|
|
# --- Pre-existing, not lifecycle-specific ----------------------------------
|
|
# Neither is caused by (or fixable in) the modern lifecycle; both reproduce
|
|
# on the handshake endpoint. Listed so the draft run is honest.
|
|
#
|
|
# json-schema-2020-12 wants a `json_schema_2020_12_tool` fixture that neither
|
|
# conformance server defines, so the scenario has nothing to exercise.
|
|
# resources-templates-read is the single remaining wire-schema failure: the
|
|
# fixture emits a resource-template URI in a shape the schema rejects, on
|
|
# both revisions.
|
|
- json-schema-2020-12:json-schema-2020-12-tool-found
|
|
- resources-templates-read:wire-schema-valid
|
|
|
|
client: []
|