Skip to content

Commit a362be1

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 0da9092 commit a362be1

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."
@@ -3382,7 +3382,7 @@ def __post_init__(self) -> None:
33823382
note="removed in 2026-07-28 (SEP-2567); session DELETE removed with Mcp-Session-Id, no replacement.",
33833383
),
33843384
"client-transport:http:body-derived-headers": Requirement(
3385-
source=f"{SPEC_2026_BASE_URL}/basic/transports#stateless-request-headers",
3385+
source=f"{SPEC_2026_BASE_URL}/basic/transports/streamable-http#standard-request-headers",
33863386
behavior=(
33873387
"An envelope-bearing request body yields MCP-Protocol-Version, Mcp-Method, and (for tools/call) "
33883388
"Mcp-Name headers on the outgoing HTTP request; a body without the envelope yields none."
@@ -3418,7 +3418,7 @@ def __post_init__(self) -> None:
34183418
),
34193419
),
34203420
"client-transport:http:stateless-ignores-session-id": Requirement(
3421-
source=f"{SPEC_2026_BASE_URL}/basic/transports#stateless-request-headers",
3421+
source=f"{SPEC_2026_BASE_URL}/basic/transports/streamable-http#standard-request-headers",
34223422
behavior=(
34233423
"A pinned client never echoes a server-issued Mcp-Session-Id and never opens the standalone "
34243424
"GET stream or the closing DELETE: the recorded wire is POST-only."
@@ -3549,7 +3549,7 @@ def __post_init__(self) -> None:
35493549
note="OAuth is HTTP-only.",
35503550
),
35513551
"client-auth:as-binding": Requirement(
3552-
source=f"{SPEC_BASE_URL}/basic/authorization#authorization-server-binding",
3552+
source=f"{SPEC_2026_BASE_URL}/basic/authorization/client-registration#authorization-server-binding",
35533553
behavior=(
35543554
"Stored client credentials are bound to the issuer that registered them; when the authorization "
35553555
"server changes, the client discards them and re-registers rather than reusing them (SEP-2352)."
@@ -3693,12 +3693,13 @@ def __post_init__(self) -> None:
36933693
note="OAuth is HTTP-only.",
36943694
),
36953695
"client-auth:authorization-response:iss-verify": Requirement(
3696-
source=f"{SPEC_BASE_URL}/basic/authorization#authorization-server-metadata-discovery",
3696+
source=f"{SPEC_2026_BASE_URL}/basic/authorization#authorization-response-validation",
36973697
behavior=(
36983698
"The client validates the RFC 9207 iss authorization-response parameter against the "
36993699
"authorization server issuer (simple string comparison) and rejects a mismatch, or a "
37003700
"missing iss when the server advertises support (SEP-2468)."
37013701
),
3702+
added_in="2026-07-28",
37023703
transports=("streamable-http",),
37033704
note="OAuth is HTTP-only.",
37043705
),

0 commit comments

Comments
 (0)