Add missing checks

This commit is contained in:
Kevin Fischer 2025-06-15 17:33:30 +09:00
commit ff92a3d016
No known key found for this signature in database
GPG key ID: 8E4CB46A9AC8D1C1
2 changed files with 73 additions and 31 deletions

View file

@ -22,35 +22,62 @@ module MCP
end
end
# Tools capability tests
ensure_capability_raises_error_for Methods::TOOLS_LIST, required_capability_name: "tools"
ensure_capability_raises_error_for Methods::TOOLS_CALL, required_capability_name: "tools"
# Server methods and notifications
ensure_capability_does_not_raise_for Methods::INITIALIZE
# Sampling capability tests
ensure_capability_raises_error_for Methods::SAMPLING_CREATE_MESSAGE, required_capability_name: "sampling"
# Completions capability tests
ensure_capability_raises_error_for Methods::COMPLETION_COMPLETE, required_capability_name: "completions"
# Logging capability tests
ensure_capability_raises_error_for Methods::LOGGING_SET_LEVEL, required_capability_name: "logging"
# Prompts capability tests
ensure_capability_raises_error_for Methods::PROMPTS_GET, required_capability_name: "prompts"
ensure_capability_raises_error_for Methods::PROMPTS_LIST, required_capability_name: "prompts"
ensure_capability_raises_error_for Methods::PROMPTS_GET, required_capability_name: "prompts"
ensure_capability_raises_error_for Methods::NOTIFICATIONS_PROMPTS_LIST_CHANGED, required_capability_name: "prompts"
ensure_capability_raises_error_for Methods::NOTIFICATIONS_PROMPTS_LIST_CHANGED,
required_capability_name: "prompts.listChanged",
capabilities: { prompts: {} }
# Resources capability tests
ensure_capability_raises_error_for Methods::RESOURCES_LIST, required_capability_name: "resources"
ensure_capability_raises_error_for Methods::RESOURCES_TEMPLATES_LIST, required_capability_name: "resources"
ensure_capability_raises_error_for Methods::RESOURCES_READ, required_capability_name: "resources"
# Resources subscribe capability tests
ensure_capability_raises_error_for Methods::RESOURCES_TEMPLATES_LIST, required_capability_name: "resources"
ensure_capability_raises_error_for Methods::NOTIFICATIONS_RESOURCES_LIST_CHANGED, required_capability_name: "resources"
ensure_capability_raises_error_for Methods::NOTIFICATIONS_RESOURCES_LIST_CHANGED,
required_capability_name: "resources.listChanged",
capabilities: { resources: {} }
ensure_capability_raises_error_for Methods::RESOURCES_SUBSCRIBE, required_capability_name: "resources"
ensure_capability_raises_error_for Methods::RESOURCES_SUBSCRIBE,
required_capability_name: "resources_subscribe",
required_capability_name: "resources.subscribe",
capabilities: { resources: {} }
ensure_capability_raises_error_for Methods::RESOURCES_UNSUBSCRIBE, required_capability_name: "resources"
ensure_capability_raises_error_for Methods::RESOURCES_UNSUBSCRIBE,
required_capability_name: "resources.subscribe",
capabilities: { resources: {} }
ensure_capability_raises_error_for Methods::NOTIFICATIONS_RESOURCES_UPDATED, required_capability_name: "resources"
ensure_capability_raises_error_for Methods::NOTIFICATIONS_RESOURCES_UPDATED,
required_capability_name: "resources.subscribe",
capabilities: { resources: {} }
# Methods that don't require capabilities
ensure_capability_raises_error_for Methods::TOOLS_LIST, required_capability_name: "tools"
ensure_capability_raises_error_for Methods::TOOLS_CALL, required_capability_name: "tools"
ensure_capability_raises_error_for Methods::NOTIFICATIONS_TOOLS_LIST_CHANGED, required_capability_name: "tools"
ensure_capability_raises_error_for Methods::NOTIFICATIONS_TOOLS_LIST_CHANGED,
required_capability_name: "tools.listChanged",
capabilities: { tools: {} }
ensure_capability_raises_error_for Methods::LOGGING_SET_LEVEL, required_capability_name: "logging"
ensure_capability_raises_error_for Methods::NOTIFICATIONS_MESSAGE, required_capability_name: "logging"
ensure_capability_raises_error_for Methods::COMPLETION_COMPLETE, required_capability_name: "completions"
# Client methods and notifications
ensure_capability_does_not_raise_for Methods::NOTIFICATIONS_INITIALIZED
ensure_capability_raises_error_for Methods::ROOTS_LIST, required_capability_name: "roots"
ensure_capability_raises_error_for Methods::NOTIFICATIONS_ROOTS_LIST_CHANGED, required_capability_name: "roots"
ensure_capability_raises_error_for Methods::NOTIFICATIONS_ROOTS_LIST_CHANGED,
required_capability_name: "roots.listChanged",
capabilities: { roots: {} }
ensure_capability_raises_error_for Methods::SAMPLING_CREATE_MESSAGE, required_capability_name: "sampling"
# Methods and notifications of both server and client
ensure_capability_does_not_raise_for Methods::PING
ensure_capability_does_not_raise_for Methods::INITIALIZE
ensure_capability_does_not_raise_for Methods::NOTIFICATIONS_PROGRESS
ensure_capability_does_not_raise_for Methods::NOTIFICATIONS_CANCELLED
end
end

View file

@ -635,7 +635,7 @@ module MCP
test "#handle method with missing required nested capability returns an error" do
@server.capabilities = { resources: {} }
response = @server.handle({ jsonrpc: "2.0", method: "resources/subscribe", id: 1 })
assert_equal "Server does not support resources_subscribe (required for resources/subscribe)",
assert_equal "Server does not support resources.subscribe (required for resources/subscribe)",
response[:error][:data]
end