@@ -95,6 +95,17 @@ class Requirement:
9595 "(sampling, elicitation, roots)."
9696 ),
9797 ),
98+ "lifecycle:initialize:protocol-version" : Requirement (
99+ source = f"{ SPEC_BASE_URL } /basic/lifecycle#version-negotiation" ,
100+ behavior = (
101+ "The server echoes a requested protocol version it supports, and answers an unsupported "
102+ "requested version with its own latest supported version rather than an error."
103+ ),
104+ ),
105+ "lifecycle:requests-before-initialized" : Requirement (
106+ source = f"{ SPEC_BASE_URL } /basic/lifecycle#initialization" ,
107+ behavior = "A request sent before the initialization handshake completes is rejected with an error." ,
108+ ),
98109 # ═══════════════════════════════════════════════════════════════════════════
99110 # Cancellation
100111 # ═══════════════════════════════════════════════════════════════════════════
@@ -279,6 +290,13 @@ class Requirement:
279290 source = f"{ SPEC_BASE_URL } /server/tools#error-handling" ,
280291 behavior = "tools/call for a name the server does not recognise returns a JSON-RPC error." ,
281292 ),
293+ "tools:call:concurrent" : Requirement (
294+ source = f"{ SPEC_BASE_URL } /basic#requests" ,
295+ behavior = (
296+ "Multiple tool calls in flight on one session are dispatched concurrently, and each caller "
297+ "receives the response to its own request."
298+ ),
299+ ),
282300 "tools:call:invalid-arguments" : Requirement (
283301 source = f"{ SPEC_BASE_URL } /server/tools#error-handling" ,
284302 behavior = (
@@ -326,6 +344,21 @@ class Requirement:
326344 source = f"{ SPEC_BASE_URL } /server/utilities/logging#log-levels" ,
327345 behavior = "All eight RFC 5424 severity levels are deliverable as log message notifications." ,
328346 ),
347+ "logging:set-level:filtering" : Requirement (
348+ source = f"{ SPEC_BASE_URL } /server/utilities/logging#log-levels" ,
349+ behavior = (
350+ "MCPServer registers no logging/setLevel handler (the request is rejected with method-not-found) "
351+ "and log messages are delivered at every severity regardless of any requested level."
352+ ),
353+ divergence = Divergence (
354+ note = (
355+ "The spec says servers SHOULD only send log messages at or above the level the client "
356+ "configured via logging/setLevel. Neither MCPServer (which rejects the request outright) "
357+ "nor the low-level Server (which leaves the handler entirely to the author) implements "
358+ "any filtering."
359+ ),
360+ ),
361+ ),
329362 # ═══════════════════════════════════════════════════════════════════════════
330363 # Resources
331364 # ═══════════════════════════════════════════════════════════════════════════
@@ -426,6 +459,25 @@ class Requirement:
426459 source = f"{ SPEC_BASE_URL } /client/sampling#message-content" ,
427460 behavior = "Sampling messages can carry image content: base64 data with a mimeType." ,
428461 ),
462+ "sampling:create-message:tools:not-supported" : Requirement (
463+ source = f"{ SPEC_BASE_URL } /client/sampling#capabilities" ,
464+ behavior = (
465+ "A tool-enabled sampling request to a client that did not declare sampling.tools is rejected "
466+ "by the server before anything reaches the wire, with an Invalid params error."
467+ ),
468+ ),
469+ "sampling:create-message:tools:round-trip" : Requirement (
470+ source = f"{ SPEC_BASE_URL } /client/sampling#sampling-with-tools" ,
471+ behavior = (
472+ "A sampling request carrying tools and toolChoice reaches the client, and a tool_use response "
473+ "with a toolUse stop reason returns to the requesting handler."
474+ ),
475+ deferred = (
476+ "Not expressible through the public API: Client does not expose ClientSession's "
477+ "sampling_capabilities parameter, so a client can never declare sampling.tools and the "
478+ "server-side validator rejects every tool-enabled request before it is sent."
479+ ),
480+ ),
429481 "sampling:create-message:client-error" : Requirement (
430482 source = f"{ SPEC_BASE_URL } /client/sampling#error-handling" ,
431483 behavior = "A sampling callback that returns an error is surfaced to the requesting handler as an MCPError." ,
@@ -599,6 +651,19 @@ class Requirement:
599651 source = "sdk" ,
600652 behavior = "Context.read_resource reads a resource registered on the same server from inside a tool." ,
601653 ),
654+ "mcpserver:tools:list-changed-on-mutation" : Requirement (
655+ source = "sdk" ,
656+ behavior = (
657+ "Adding or removing a tool on a running server changes what tools/list returns but sends no "
658+ "notification to connected clients."
659+ ),
660+ divergence = Divergence (
661+ note = (
662+ "The spec provides notifications/tools/list_changed for exactly this case; MCPServer never "
663+ "sends it, so a connected client cannot learn that the tool set changed without polling."
664+ ),
665+ ),
666+ ),
602667 "mcpserver:tools:handler-exception" : Requirement (
603668 source = "sdk" ,
604669 behavior = (
0 commit comments