Skip to content

Commit 3f6a271

Browse files
committed
Fix dead 2026 spec source URLs in the interaction manifest
Eight entries cited pages or anchors that do not exist in the 2026-07-28 specification tree (the basic/lifecycle page was split into basic/versioning and server/discover; two anchors were renamed). Repoint each to the verified live section. Also add the missing added_in="2026-07-28" on client-auth:authorization-response:iss-verify: RFC 9207 iss validation is SEP-2468, new at 2026-07-28, and the prior 2025 source page carries no such requirement. Cell generation is unchanged (830 before and after).
1 parent b61ce38 commit 3f6a271

1 file changed

Lines changed: 10 additions & 9 deletions

File tree

‎tests/interaction/_requirements.py‎

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ def __post_init__(self) -> None:
352352
note="initialize-time version negotiation removed at 2026-07-28; version carried per-request in _meta.",
353353
),
354354
"lifecycle:stateless:request-envelope": Requirement(
355-
source=f"{SPEC_2026_BASE_URL}/basic/lifecycle#stateless-operation",
355+
source=f"{SPEC_2026_BASE_URL}/basic#_meta",
356356
behavior=(
357357
"At protocol_version 2026-07-28, every request carries io.modelcontextprotocol/protocolVersion "
358358
"and /clientCapabilities in params._meta (/clientInfo is optional); no initialize handshake occurs."
@@ -369,7 +369,7 @@ def __post_init__(self) -> None:
369369
deferred="covered by a tests/client/ unit test; not observable as an interaction",
370370
),
371371
"lifecycle:stateless:caller-meta-preserved": Requirement(
372-
source=f"{SPEC_2026_BASE_URL}/basic/lifecycle#stateless-operation",
372+
source=f"{SPEC_2026_BASE_URL}/basic#_meta",
373373
behavior=(
374374
"Caller-supplied _meta keys on a request survive the per-request envelope merge: the "
375375
"three io.modelcontextprotocol/* envelope keys overwrite any caller-supplied values for "
@@ -398,14 +398,14 @@ def __post_init__(self) -> None:
398398
supersedes=("lifecycle:initialize:client-info", "lifecycle:initialize:client-capabilities"),
399399
),
400400
"lifecycle:envelope:header-matches-meta": Requirement(
401-
source=f"{SPEC_2026_BASE_URL}/basic/transports/streamable-http#headers",
401+
source=f"{SPEC_2026_BASE_URL}/basic/transports/streamable-http#protocol-version-header",
402402
behavior="On HTTP, the MCP-Protocol-Version header on every POST matches _meta.protocolVersion in the body.",
403403
transports=("streamable-http", "streamable-http-stateless"),
404404
added_in="2026-07-28",
405405
note="HTTP-only: the header is a streamable-http transport concern; stdio and in-memory carry no headers.",
406406
),
407407
"lifecycle:discover:basic": Requirement(
408-
source=f"{SPEC_2026_BASE_URL}/basic/lifecycle#discover",
408+
source=f"{SPEC_2026_BASE_URL}/server/discover",
409409
behavior=(
410410
"Calling discover() sends server/discover with no params and returns a typed DiscoverResult "
411411
"carrying supportedVersions, capabilities and the cache hint fields; the server's identity "
@@ -414,7 +414,7 @@ def __post_init__(self) -> None:
414414
added_in="2026-07-28",
415415
),
416416
"lifecycle:discover:retry-on-32022": Requirement(
417-
source=f"{SPEC_2026_BASE_URL}/basic/lifecycle#version-errors",
417+
source=f"{SPEC_2026_BASE_URL}/basic/versioning#protocol-version-negotiation",
418418
behavior=(
419419
"When server/discover returns -32022 UnsupportedProtocolVersion, the client retries once with "
420420
"the intersection of error.data.supported and its own modern versions; an empty intersection raises."
@@ -3532,7 +3532,7 @@ def __post_init__(self) -> None:
35323532
note="removed in 2026-07-28 (SEP-2567); session DELETE removed with Mcp-Session-Id, no replacement.",
35333533
),
35343534
"client-transport:http:body-derived-headers": Requirement(
3535-
source=f"{SPEC_2026_BASE_URL}/basic/transports#stateless-request-headers",
3535+
source=f"{SPEC_2026_BASE_URL}/basic/transports/streamable-http#standard-request-headers",
35363536
behavior=(
35373537
"An envelope-bearing request body yields MCP-Protocol-Version, Mcp-Method, and (for tools/call) "
35383538
"Mcp-Name headers on the outgoing HTTP request; a body without the envelope yields none."
@@ -3568,7 +3568,7 @@ def __post_init__(self) -> None:
35683568
),
35693569
),
35703570
"client-transport:http:stateless-ignores-session-id": Requirement(
3571-
source=f"{SPEC_2026_BASE_URL}/basic/transports#stateless-request-headers",
3571+
source=f"{SPEC_2026_BASE_URL}/basic/transports/streamable-http#standard-request-headers",
35723572
behavior=(
35733573
"A pinned client never echoes a server-issued Mcp-Session-Id and never opens the standalone "
35743574
"GET stream or the closing DELETE: the recorded wire is POST-only."
@@ -3712,7 +3712,7 @@ def __post_init__(self) -> None:
37123712
note="OAuth is HTTP-only.",
37133713
),
37143714
"client-auth:as-binding": Requirement(
3715-
source=f"{SPEC_BASE_URL}/basic/authorization#authorization-server-binding",
3715+
source=f"{SPEC_2026_BASE_URL}/basic/authorization/client-registration#authorization-server-binding",
37163716
behavior=(
37173717
"Stored client credentials are bound to the issuer that registered them; when the authorization "
37183718
"server changes, the client discards them and re-registers rather than reusing them (SEP-2352)."
@@ -3856,12 +3856,13 @@ def __post_init__(self) -> None:
38563856
note="OAuth is HTTP-only.",
38573857
),
38583858
"client-auth:authorization-response:iss-verify": Requirement(
3859-
source=f"{SPEC_BASE_URL}/basic/authorization#authorization-server-metadata-discovery",
3859+
source=f"{SPEC_2026_BASE_URL}/basic/authorization#authorization-response-validation",
38603860
behavior=(
38613861
"The client validates the RFC 9207 iss authorization-response parameter against the "
38623862
"authorization server issuer (simple string comparison) and rejects a mismatch, or a "
38633863
"missing iss when the server advertises support (SEP-2468)."
38643864
),
3865+
added_in="2026-07-28",
38653866
transports=("streamable-http",),
38663867
note="OAuth is HTTP-only.",
38673868
),

0 commit comments

Comments
 (0)