@@ -47,38 +47,34 @@ class << self
47
47
def ensure_capability! ( method , capabilities )
48
48
case method
49
49
when PROMPTS_GET , PROMPTS_LIST
50
- unless capabilities [ :prompts ]
51
- raise MissingRequiredCapabilityError . new ( method , :prompts )
52
- end
50
+ require_capability! ( method , capabilities , :prompts )
53
51
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 )
58
53
if method == RESOURCES_SUBSCRIBE && !capabilities [ :resources ] [ :subscribe ]
59
54
raise MissingRequiredCapabilityError . new ( method , :resources_subscribe )
60
55
end
61
56
when TOOLS_CALL , TOOLS_LIST
62
- unless capabilities [ :tools ]
63
- raise MissingRequiredCapabilityError . new ( method , :tools )
64
- end
57
+ require_capability! ( method , capabilities , :tools )
65
58
when SAMPLING_CREATE_MESSAGE
66
- unless capabilities [ :sampling ]
67
- raise MissingRequiredCapabilityError . new ( method , :sampling )
68
- end
59
+ require_capability! ( method , capabilities , :sampling )
69
60
when COMPLETION_COMPLETE
70
- unless capabilities [ :completions ]
71
- raise MissingRequiredCapabilityError . new ( method , :completions )
72
- end
61
+ require_capability! ( method , capabilities , :completions )
73
62
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 )
78
64
when INITIALIZE , PING
79
65
# No specific capability required for initialize or ping
80
66
end
81
67
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
82
78
end
83
79
end
84
80
end
0 commit comments