@@ -240,11 +240,11 @@ class Requirement:
240240 # Request metadata
241241 # ═══════════════════════════════════════════════════════════════════════════
242242 "meta:request-to-handler" : Requirement (
243- source = f"{ SPEC_BASE_URL } /basic#meta " ,
243+ source = f"{ SPEC_BASE_URL } /basic#_meta " ,
244244 behavior = "The _meta object the client attaches to a request is visible to the server handler." ,
245245 ),
246246 "meta:result-to-client" : Requirement (
247- source = f"{ SPEC_BASE_URL } /basic#meta " ,
247+ source = f"{ SPEC_BASE_URL } /basic#_meta " ,
248248 behavior = "The _meta object a handler attaches to its result is delivered to the client." ,
249249 ),
250250 # ═══════════════════════════════════════════════════════════════════════════
@@ -337,7 +337,7 @@ class Requirement:
337337 behavior = "completion/complete with a ref/resource returns suggested values for a URI template variable." ,
338338 ),
339339 "completion:complete:context" : Requirement (
340- source = f"{ SPEC_BASE_URL } /server/utilities/completion#context " ,
340+ source = f"{ SPEC_BASE_URL } /server/utilities/completion#requesting-completions " ,
341341 behavior = "Previously-resolved argument values supplied in context.arguments reach the completion handler." ,
342342 ),
343343 "completion:complete:not-supported" : Requirement (
@@ -351,7 +351,7 @@ class Requirement:
351351 # Logging
352352 # ═══════════════════════════════════════════════════════════════════════════
353353 "logging:set-level" : Requirement (
354- source = f"{ SPEC_BASE_URL } /server/utilities/logging#log-levels " ,
354+ source = f"{ SPEC_BASE_URL } /server/utilities/logging#setting- log-level " ,
355355 behavior = "logging/setLevel delivers the requested level to the server's handler and returns an empty result." ,
356356 ),
357357 "logging:message:notification" : Requirement (
@@ -365,8 +365,22 @@ class Requirement:
365365 source = f"{ SPEC_BASE_URL } /server/utilities/logging#log-levels" ,
366366 behavior = "All eight RFC 5424 severity levels are deliverable as log message notifications." ,
367367 ),
368+ "logging:capability" : Requirement (
369+ source = f"{ SPEC_BASE_URL } /server/utilities/logging#capabilities" ,
370+ behavior = (
371+ "MCPServer tools emit log message notifications through the Context helpers while the server's "
372+ "advertised capabilities omit logging."
373+ ),
374+ divergence = Divergence (
375+ note = (
376+ "The spec says servers that emit log message notifications MUST declare the logging "
377+ "capability; MCPServer registers no setLevel handler, so capability derivation leaves "
378+ "logging unset even though the Context helpers send the notifications."
379+ ),
380+ ),
381+ ),
368382 "logging:set-level:filtering" : Requirement (
369- source = f"{ SPEC_BASE_URL } /server/utilities/logging#log-levels " ,
383+ source = f"{ SPEC_BASE_URL } /server/utilities/logging#setting- log-level " ,
370384 behavior = (
371385 "MCPServer registers no logging/setLevel handler (the request is rejected with method-not-found) "
372386 "and log messages are delivered at every severity regardless of any requested level."
@@ -477,7 +491,7 @@ class Requirement:
477491 ),
478492 ),
479493 "sampling:create-message:image-content" : Requirement (
480- source = f"{ SPEC_BASE_URL } /client/sampling#message -content" ,
494+ source = f"{ SPEC_BASE_URL } /client/sampling#image -content" ,
481495 behavior = "Sampling messages can carry image content: base64 data with a mimeType." ,
482496 ),
483497 "sampling:create-message:tools:not-supported" : Requirement (
@@ -506,18 +520,19 @@ class Requirement:
506520 "sampling:create-message:not-supported" : Requirement (
507521 source = f"{ SPEC_BASE_URL } /client/sampling#capabilities" ,
508522 behavior = (
509- "A sampling request to a client that did not declare the sampling capability fails with an "
510- "error rather than hanging or being silently dropped."
523+ "A sampling request to a client that did not declare the sampling capability fails with the "
524+ "client's default-callback error (-32600 Invalid request) rather than hanging or being "
525+ "silently dropped; the spec names no error code for this case."
511526 ),
512527 ),
513528 # ═══════════════════════════════════════════════════════════════════════════
514529 # Elicitation (server → client)
515530 # ═══════════════════════════════════════════════════════════════════════════
516531 "elicitation:form:accept" : Requirement (
517- source = f"{ SPEC_BASE_URL } /client/elicitation#form-mode-elicitation" ,
532+ source = f"{ SPEC_BASE_URL } /client/elicitation#form-mode-elicitation-requests " ,
518533 behavior = (
519534 "A form-mode elicitation answered with action 'accept' returns the user's content to the "
520- "requesting handler, validated against the requested schema ."
535+ "requesting handler."
521536 ),
522537 ),
523538 "elicitation:form:decline" : Requirement (
@@ -529,7 +544,7 @@ class Requirement:
529544 behavior = "A form-mode elicitation answered with action 'cancel' returns no content to the handler." ,
530545 ),
531546 "elicitation:url:accept" : Requirement (
532- source = f"{ SPEC_BASE_URL } /client/elicitation#url-mode-elicitation" ,
547+ source = f"{ SPEC_BASE_URL } /client/elicitation#url-mode-elicitation-requests " ,
533548 behavior = (
534549 "A URL-mode elicitation delivers the message, URL, and elicitationId to the client; an accept "
535550 "response carries no content (accept means the user agreed to visit the URL, not that the "
@@ -545,7 +560,7 @@ class Requirement:
545560 behavior = "A URL-mode elicitation answered with cancel returns the action with no content." ,
546561 ),
547562 "elicitation:complete-notification" : Requirement (
548- source = f"{ SPEC_BASE_URL } /client/elicitation#completion-notification " ,
563+ source = f"{ SPEC_BASE_URL } /client/elicitation#completion-notifications-for-url-mode-elicitation " ,
549564 behavior = (
550565 "An elicitation/complete notification sent by the server after an out-of-band elicitation "
551566 "finishes reaches the client carrying the elicitationId."
@@ -559,11 +574,18 @@ class Requirement:
559574 ),
560575 ),
561576 "elicitation:form:not-supported" : Requirement (
562- source = f"{ SPEC_BASE_URL } /client/elicitation#capabilities " ,
577+ source = f"{ SPEC_BASE_URL } /client/elicitation#error-handling " ,
563578 behavior = (
564579 "An elicitation request to a client that did not declare the elicitation capability fails with "
565580 "an error rather than hanging or being silently dropped."
566581 ),
582+ divergence = Divergence (
583+ note = (
584+ "The spec says a request for an elicitation mode the client has not declared MUST be "
585+ "answered with -32602 Invalid params; the client's default callback answers with -32600 "
586+ "Invalid request."
587+ ),
588+ ),
567589 ),
568590 # ═══════════════════════════════════════════════════════════════════════════
569591 # Roots (server → client)
@@ -580,11 +602,17 @@ class Requirement:
580602 behavior = "An empty roots list is a valid response and reaches the handler as such." ,
581603 ),
582604 "roots:list:not-supported" : Requirement (
583- source = f"{ SPEC_BASE_URL } /client/roots#capabilities " ,
605+ source = f"{ SPEC_BASE_URL } /client/roots#error-handling " ,
584606 behavior = (
585607 "A roots/list request to a client that did not declare the roots capability fails with an "
586608 "error rather than hanging or being silently dropped."
587609 ),
610+ divergence = Divergence (
611+ note = (
612+ "The spec says a client that does not support roots SHOULD answer with -32601 Method not "
613+ "found; the client's default callback answers with -32600 Invalid request."
614+ ),
615+ ),
588616 ),
589617 "roots:list-changed" : Requirement (
590618 source = f"{ SPEC_BASE_URL } /client/roots#root-list-changes" ,
0 commit comments