2026-07-28 Support incl. Stateless HTTP Transport
With v0.8.0 we are shipping support for the 2026-07-28 Model Context Protocol specification, which includes a major rework on HTTP transport going stateless, while keeping older versions of the specifications alive and mostly compatible in userland code. Find a detailed CHANGELOG in the repository, and per PR below.
What's Changed
- [Client] Reject non-positive timeouts in Configuration by @chr-hertel in #415
- [Server] Throw the SDK's own RuntimeException from FileSessionStore by @chr-hertel in #404
- [Schema] Always emit {} for empty tool schema properties by @BrocksiNet in #407
- [Server] Handle malformed JSON-RPC input graceful by @chr-hertel in #412
- [Client] Parse CRLF- and CR-delimited SSE events by @cbcoutinho in #401
- [Capability] Preserve optional content fields in PromptResultFormatter by @chr-hertel in #406
- [Client][Server] Add Roots support by @wachterjohannes in #395
- [Schema] Add resource_link content block by @cancan101 in #400
- [Client][Schema][Server] Implement protocol version negotiation by @chr-hertel in #403
- [Server] Add ClientGateway::supportsSampling() by @chr-hertel in #418
- [Tests] Introduce client-server integration tests by @chr-hertel in #419
- [Client] Implement setMaxRetries connection retries by @chr-hertel in #413
- [Schema][Server] feat: support sampling with tools by @wWzZb in #409
- [Capability] Gate
structuredContenton the protocol revision by @chr-hertel in #417 - [Schema][Server] Harden sampling tools against the spec by @chr-hertel in #420
- [Schema] Support PHPStan/Psalm integer range types by @wWzZb in #422
- [Schema][Server] Close the 2025-11-25 schema gaps and add the 2026-07-28 surface by @chr-hertel in #421
- [Tests] Bump MCP Inspector to 2.2.0 by @chr-hertel in #426
- [Schema][Client][Server] Deprecate Roots, Sampling and Logging (SEP-2577) by @chr-hertel in #427
- [Schema][Client][Server] Close MCP Apps gaps: extension negotiation checks by @chr-hertel in #429
- [Schema] Drop SDK-only name pattern on resources and resource templates by @chr-hertel in #430
- Tighten the 0.8.0 CHANGELOG section by @chr-hertel in #431
- [Examples][Tests] Make the MCP Apps example work over HTTP, and pin it by @chr-hertel in #439
- [Capability] Stop a union type losing a branch by @chr-hertel in #434
- [Schema] Serialize a settingless extension as an object by @chr-hertel in #438
- [Capability] Apply a parameter's complete schema definition by @chr-hertel in #435
- [Schema] Omit the id of an error response that never had one by @chr-hertel in #442
- [Schema][Server] Preserve request id in JSON-RPC error responses instead of fabricating id:"" by @valeriudev in #379
- [Schema] Stop rejecting elicitation schemas the specification allows by @chr-hertel in #437
- [Schema] Refuse an invalid x-mcp-header annotation at definition time by @chr-hertel in #441
- [Tests] Pin that protected resource metadata advertises no scope of its own by @chr-hertel in #440
- [Schema][Server] Add the extensions framework SEP-2133 defines by @chr-hertel in #443
- [Server][Tests] Serve the modern (SEP-2575) lifecycle by @chr-hertel in #444
- [Server][Tests] Validate the standard MCP request headers (SEP-2243) by @chr-hertel in #445
- [Server][Tests] Add the multi round-trip request flow (SEP-2322) by @chr-hertel in #446
- [Server] Close the conformance gaps in the modern lifecycle by @chr-hertel in #447
- [Server] Stream a modern-era response when there is something to stream by @chr-hertel in #448
- [CI] Matrix conformance jobs over both spec revisions by @chr-hertel in #458
- [Server] Complete the multi round-trip request surface (SEP-2322) by @chr-hertel in #449
- [CI] Version conformance baselines and split badges per spec by @chr-hertel in #459
- [Server] Let a server say how long its answers stay fresh (SEP-2549) by @chr-hertel in #450
- [Server] Make subscriptions/listen actually deliver (SEP-2575) by @chr-hertel in #451
- [Tests] Fix resources-templates-read to return a resolved URI by @chr-hertel in #460
- [Server] Carry trace context through a request (SEP-414) by @chr-hertel in #452
- Add badge linebreak and v1.0 roadmap items by @chr-hertel in #461
- [Server] Enforce x-mcp-header where a request uses it (SEP-2243) by @chr-hertel in #453
- [Server] Serve an extension's methods under the modern lifecycle by @chr-hertel in #454
- [Server] Serve both protocol eras from one endpoint by @chr-hertel in #455
- [Client] Speak the 2026-07-28 lifecycle by @chr-hertel in #456
- [Docs][Examples][CI] Document and gate the 2026-07-28 lifecycle by @chr-hertel in #457
- [Docs] Render the guides with Zensical instead of phpDocumentor by @chr-hertel in #414
- [Server] Serve ClientGateway::elicit() under the modern lifecycle by @chr-hertel in #466
- [Server] Log expected tool failures at debug level by @ousamabenyounes in #433
- [Server] Log failures in CompletionCompleteHandler by @chr-hertel in #471
- [Changelog] Restructure 0.8.0 section by @chr-hertel in #478
- [Server] Make resource subscribe/unsubscribe errors protocol-version-aware (SEP-2164) by @chr-hertel in #474
- [Docs] Deprecation policy, SDK tier target, and CONTRIBUTING.md by @chr-hertel in #472
- [Server][Client] Bridge W3C trace context between HTTP headers and _meta (SEP-414) by @chr-hertel in #473
- [Server] Restrict FileSessionStore::gc() to owned session files by @chr-hertel in #479
- [Capability] Suppress list-changed events during the initial registry load by @chr-hertel in #480
- [Capability] Extract shared element name/description resolution by @chr-hertel in #481
- [Server] Keep injectable parameters out of the published inputSchema by @chr-hertel in #482
New Contributors
- @BrocksiNet made their first contribution in #407
- @cbcoutinho made their first contribution in #401
- @cancan101 made their first contribution in #400
- @wWzZb made their first contribution in #409
- @ousamabenyounes made their first contribution in #433
Full Changelog: v0.7.1...v0.8.0