@@ -2940,6 +2940,30 @@ def __post_init__(self) -> None:
29402940 transports = ("streamable-http" ,),
29412941 note = ("Only observable over streamable HTTP: the modern entry's method registry omits initialize." ),
29422942 ),
2943+ "hosting:http:modern:legacy-fallthrough" : Requirement (
2944+ source = f"{ SPEC_2026_BASE_URL } /basic/versioning" ,
2945+ behavior = (
2946+ "Non-2026-07-28 traffic on the same /mcp endpoint reaches the legacy transport "
2947+ "byte-unchanged: a 2025-era initialize handshake still completes, and an unrecognised "
2948+ "MCP-Protocol-Version header still produces the legacy 400 'Unsupported protocol version' literal."
2949+ ),
2950+ added_in = "2026-07-28" ,
2951+ transports = ("streamable-http" ,),
2952+ note = (
2953+ "Only observable over streamable HTTP: routing branches on the MCP-Protocol-Version "
2954+ "header at the same /mcp endpoint."
2955+ ),
2956+ ),
2957+ "hosting:http:modern:handler-exception-internal-error" : Requirement (
2958+ source = "sdk" ,
2959+ behavior = (
2960+ "An unhandled handler exception on the 2026-07-28 entry is returned as JSON-RPC error "
2961+ "-32603 with a generic message that does not echo str(exc)."
2962+ ),
2963+ added_in = "2026-07-28" ,
2964+ transports = ("streamable-http" ,),
2965+ note = "Only observable over streamable HTTP: the modern entry's exception-to-JSONRPCError boundary." ,
2966+ ),
29432967 # ═══════════════════════════════════════════════════════════════════════════
29442968 # Client transport: streamable HTTP
29452969 # ═══════════════════════════════════════════════════════════════════════════
@@ -3123,17 +3147,15 @@ def __post_init__(self) -> None:
31233147 transports = ("streamable-http" ,),
31243148 note = "Only observable over streamable HTTP: headers are derived from the body envelope at the transport seam." ,
31253149 ),
3126- "client-transport:http:mcp-name-encoding " : Requirement (
3150+ "client-transport:http:stateless-ignores-session-id " : Requirement (
31273151 source = f"{ SPEC_2026_BASE_URL } /basic/transports#stateless-request-headers" ,
31283152 behavior = (
3129- "Mcp-Name header values that are not safe for an HTTP field are wrapped in the =?base64?...?= "
3130- "sentinel; printable-ASCII values pass verbatim ."
3153+ "A pinned client never echoes a server-issued Mcp-Session-Id and never opens the standalone "
3154+ "GET stream or the closing DELETE: the recorded wire is POST-only ."
31313155 ),
31323156 added_in = "2026-07-28" ,
31333157 transports = ("streamable-http" ,),
3134- note = (
3135- "Only observable over streamable HTTP: the Base64-sentinel encoding is the spec's HTTP header-safety rule."
3136- ),
3158+ note = "Only observable over streamable HTTP: session-id, GET stream and DELETE are streamable-HTTP mechanics." ,
31373159 ),
31383160 # ═══════════════════════════════════════════════════════════════════════════
31393161 # Client auth
0 commit comments