[Schema][Server] Close the 2026-07-28 conformance gaps - #3
Open
chr-hertel wants to merge 1 commit into
Open
Conversation
chr-hertel
force-pushed
the
2026spec-findings
branch
from
August 17, 2026 22:45
ddf2518 to
a721561
Compare
Squashed WIP: the modern (SEP-2575) stateless lifecycle end to end - server dispatcher, per-era wire codec, standard header validation, multi round-trip requests, subscriptions, cache policy, the generic extensions framework, and a client that speaks it. Tasks (SEP-2663) is carved out to modelcontextprotocol#428. To be decomposed before review.
chr-hertel
force-pushed
the
2026spec-findings
branch
from
August 18, 2026 00:24
a721561 to
87b40ce
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on
feature/2026-07-28(#2). Closes the gaps an audit of the branch againstschema/2026-07-28/schema.tsand the 2026-07-28 spec docs turned up.Full findings, evidence and what is left:
spec-report.md.Bugs
ClientGateway's sixsupports*()probes returnedfalsefor every stateless request — the session key they read is only written byInitializeHandlerresources/subscribe/resources/unsubscribestill dispatched and answered200 OKMcp-Namecompared without Base64-sentinel decoding, refusing any non-ASCII resource URI with-32020MCP-Protocol-Versionheader was accepted-32002emitted where the revision forbids it; unknown tool answered-32601"id": ""instead of202read(), truncating chunked transfers into-32700-32021only reachable fromtools/callFeatures
logLevelwork; the stream opens after the handler's first suspension so-32021/-32602keep their required statuses.subscriptions/listendelivery —NotificationBusInterfacewith in-memory and PSR-16 implementations; PHP-FPM needs the latter, since publisher and stream are different workers.tasks/*surface, capability gating.CachePolicy, W3C trace context,x-mcp-headernesting + validation,$refSSRF and composition-DoS bounds, SEP-2577 deprecation tags.docs/stateless-lifecycle.mdand anexamples/server/stateless-lifecycleexample.Verification
make conformance-draft-servermake conformance-serverThe nine
tasks-*conformance scenarios run at 36/44 — every remaining failure is the runner applying thecore schema to an extension result, which has no
resultType: "task".The Inspector cannot drive a 2026-07-28 server (it opens with
initialize), so the new example is covered bytests/Integration/StatelessLifecycleTest.phpover real HTTP instead. MCP Apps did get snapshots — whichsurfaced that its example was broken over HTTP entirely, the only one without a session store.
Worth a look
prompts/getandtools/callfor unknownnames). Marked
[BC Break]; the spec has said-32602since 2025-06-18. Onlyresources/readisversion-gated.
2026-07-28auth items arerules for an OAuth client this SDK does not have yet ([Client] Add OAuth 2.0 credential storage interface (TokenStorageInterface) modelcontextprotocol/php-sdk#315–[Client] Implement Cross-App Access (token exchange, RFC 8693) modelcontextprotocol/php-sdk#325). [Server][Auth] SEP-2207: Audit PRM to ensure offline_access is not advertised as a required scope modelcontextprotocol/php-sdk#364 had nothing to fix and is pinned
by test. See §3.2 of the report.