@@ -47,38 +47,34 @@ class << self
4747 def ensure_capability! ( method , capabilities )
4848 case method
4949 when PROMPTS_GET , PROMPTS_LIST
50- unless capabilities [ :prompts ]
51- raise MissingRequiredCapabilityError . new ( method , :prompts )
52- end
50+ require_capability! ( method , capabilities , :prompts )
5351 when RESOURCES_LIST , RESOURCES_TEMPLATES_LIST , RESOURCES_READ , RESOURCES_SUBSCRIBE , RESOURCES_UNSUBSCRIBE
54- unless capabilities [ :resources ]
55- raise MissingRequiredCapabilityError . new ( method , :resources )
56- end
57-
52+ require_capability! ( method , capabilities , :resources )
5853 if method == RESOURCES_SUBSCRIBE && !capabilities [ :resources ] [ :subscribe ]
5954 raise MissingRequiredCapabilityError . new ( method , :resources_subscribe )
6055 end
6156 when TOOLS_CALL , TOOLS_LIST
62- unless capabilities [ :tools ]
63- raise MissingRequiredCapabilityError . new ( method , :tools )
64- end
57+ require_capability! ( method , capabilities , :tools )
6558 when SAMPLING_CREATE_MESSAGE
66- unless capabilities [ :sampling ]
67- raise MissingRequiredCapabilityError . new ( method , :sampling )
68- end
59+ require_capability! ( method , capabilities , :sampling )
6960 when COMPLETION_COMPLETE
70- unless capabilities [ :completions ]
71- raise MissingRequiredCapabilityError . new ( method , :completions )
72- end
61+ require_capability! ( method , capabilities , :completions )
7362 when LOGGING_SET_LEVEL
74- # Logging is unsupported by the Server
75- unless capabilities [ :logging ]
76- raise MissingRequiredCapabilityError . new ( method , :logging )
77- end
63+ require_capability! ( method , capabilities , :logging )
7864 when INITIALIZE , PING
7965 # No specific capability required for initialize or ping
8066 end
8167 end
68+
69+ private
70+
71+ def require_capability! ( method , capabilities , *keys )
72+ name = keys . join ( "." ) # :resources, :subscribe -> "resources.subscribe"
73+ has_capability = capabilities . dig ( *keys )
74+ return if has_capability
75+
76+ raise MissingRequiredCapabilityError . new ( method , name )
77+ end
8278 end
8379 end
8480end
0 commit comments