From d3dcde24604075c99deadc188a16168289ff538c Mon Sep 17 00:00:00 2001 From: Koichi ITO Date: Mon, 26 May 2025 17:20:27 +0900 Subject: [PATCH] Fix incorrect capabilities handling for `completion/complete` This PR fixes incorrect capabilities handling for `completion/complete`. As specified, the capability of `completion/complete` is `completions`, not `prompts`: https://modelcontextprotocol.io/specification/2025-03-26/server/utilities/completion#capabilities Note that in the Ruby SDK, `completion/complete`, like `logging/setLevel`, is not yet implemented. Therefore, an empty implementation has been added to server.rb. --- lib/model_context_protocol/methods.rb | 6 +++++- lib/model_context_protocol/server.rb | 1 + test/model_context_protocol/methods_test.rb | 7 +++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/model_context_protocol/methods.rb b/lib/model_context_protocol/methods.rb index 721d11ff..02ac4b7f 100644 --- a/lib/model_context_protocol/methods.rb +++ b/lib/model_context_protocol/methods.rb @@ -36,7 +36,7 @@ def initialize(method, capability) def ensure_capability!(method, capabilities) case method - when PROMPTS_GET, PROMPTS_LIST, COMPLETION_COMPLETE + when PROMPTS_GET, PROMPTS_LIST unless capabilities[:prompts] raise MissingRequiredCapabilityError.new(method, :prompts) end @@ -56,6 +56,10 @@ def ensure_capability!(method, capabilities) unless capabilities[:sampling] raise MissingRequiredCapabilityError.new(method, :sampling) end + when COMPLETION_COMPLETE + unless capabilities[:completions] + raise MissingRequiredCapabilityError.new(method, :completions) + end when LOGGING_SET_LEVEL # Logging is unsupported by the Server unless capabilities[:logging] diff --git a/lib/model_context_protocol/server.rb b/lib/model_context_protocol/server.rb index f0653fcc..fb1e9a68 100644 --- a/lib/model_context_protocol/server.rb +++ b/lib/model_context_protocol/server.rb @@ -60,6 +60,7 @@ def initialize( # No op handlers for currently unsupported methods Methods::RESOURCES_SUBSCRIBE => ->(_) {}, Methods::RESOURCES_UNSUBSCRIBE => ->(_) {}, + Methods::COMPLETION_COMPLETE => ->(_) {}, Methods::LOGGING_SET_LEVEL => ->(_) {}, } end diff --git a/test/model_context_protocol/methods_test.rb b/test/model_context_protocol/methods_test.rb index e8ff5222..f35b3b77 100644 --- a/test/model_context_protocol/methods_test.rb +++ b/test/model_context_protocol/methods_test.rb @@ -19,6 +19,13 @@ class MethodsTest < ActiveSupport::TestCase assert_equal "Server does not support sampling (required for sampling/createMessage)", error.message end + test "ensure_capability! for completion/complete raises an error if completions capability is not present" do + error = assert_raises(Methods::MissingRequiredCapabilityError) do + Methods.ensure_capability!(Methods::COMPLETION_COMPLETE, {}) + end + assert_equal "Server does not support completions (required for completion/complete)", error.message + end + test "ensure_capability! for logging/setLevel raises an error if logging capability is not present" do error = assert_raises(Methods::MissingRequiredCapabilityError) do Methods.ensure_capability!(Methods::LOGGING_SET_LEVEL, {})