Skip to content

Commit 8c71b1b

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 8d0f928 commit 8c71b1b

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
"/clientInfo, and /clientCapabilities in params._meta; 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,22 +398,22 @@ 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 protocolVersion, capabilities, serverInfo and the cache hint fields."
412412
),
413413
added_in="2026-07-28",
414414
),
415415
"lifecycle:discover:retry-on-32022": Requirement(
416-
source=f"{SPEC_2026_BASE_URL}/basic/lifecycle#version-errors",
416+
source=f"{SPEC_2026_BASE_URL}/basic/versioning#protocol-version-negotiation",
417417
behavior=(
418418
"When server/discover returns -32022 UnsupportedProtocolVersion, the client retries once with "
419419
"the intersection of error.data.supported and its own modern versions; an empty intersection raises."
@@ -3319,7 +3319,7 @@ def __post_init__(self) -> None:
33193319
note="removed in 2026-07-28 (SEP-2567); session DELETE removed with Mcp-Session-Id, no replacement.",
33203320
),
33213321
"client-transport:http:body-derived-headers": Requirement(
3322-
source=f"{SPEC_2026_BASE_URL}/basic/transports#stateless-request-headers",
3322+
source=f"{SPEC_2026_BASE_URL}/basic/transports/streamable-http#standard-request-headers",
33233323
behavior=(
33243324
"An envelope-bearing request body yields MCP-Protocol-Version, Mcp-Method, and (for tools/call) "
33253325
"Mcp-Name headers on the outgoing HTTP request; a body without the envelope yields none."
@@ -3342,7 +3342,7 @@ def __post_init__(self) -> None:
33423342
note="Only observable over streamable HTTP: headers are derived from the cached tool schema at the seam.",
33433343
),
33443344
"client-transport:http:stateless-ignores-session-id": Requirement(
3345-
source=f"{SPEC_2026_BASE_URL}/basic/transports#stateless-request-headers",
3345+
source=f"{SPEC_2026_BASE_URL}/basic/transports/streamable-http#standard-request-headers",
33463346
behavior=(
33473347
"A pinned client never echoes a server-issued Mcp-Session-Id and never opens the standalone "
33483348
"GET stream or the closing DELETE: the recorded wire is POST-only."
@@ -3473,7 +3473,7 @@ def __post_init__(self) -> None:
34733473
note="OAuth is HTTP-only.",
34743474
),
34753475
"client-auth:as-binding": Requirement(
3476-
source=f"{SPEC_BASE_URL}/basic/authorization#authorization-server-binding",
3476+
source=f"{SPEC_2026_BASE_URL}/basic/authorization/client-registration#authorization-server-binding",
34773477
behavior=(
34783478
"Stored client credentials are bound to the issuer that registered them; when the authorization "
34793479
"server changes, the client discards them and re-registers rather than reusing them (SEP-2352)."
@@ -3617,12 +3617,13 @@ def __post_init__(self) -> None:
36173617
note="OAuth is HTTP-only.",
36183618
),
36193619
"client-auth:authorization-response:iss-verify": Requirement(
3620-
source=f"{SPEC_BASE_URL}/basic/authorization#authorization-server-metadata-discovery",
3620+
source=f"{SPEC_2026_BASE_URL}/basic/authorization#authorization-response-validation",
36213621
behavior=(
36223622
"The client validates the RFC 9207 iss authorization-response parameter against the "
36233623
"authorization server issuer (simple string comparison) and rejects a mismatch, or a "
36243624
"missing iss when the server advertises support (SEP-2468)."
36253625
),
3626+
added_in="2026-07-28",
36263627
transports=("streamable-http",),
36273628
note="OAuth is HTTP-only.",
36283629
),

0 commit comments

Comments
 (0)