Skip to content

Commit 280e835

Browse files
Refactor capability check
1 parent 9a00406 commit 280e835

File tree

1 file changed

+16
-20
lines changed

1 file changed

+16
-20
lines changed

lib/mcp/methods.rb

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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
8480
end

0 commit comments

Comments
 (0)