diff --git a/lib/mcp/server.rb b/lib/mcp/server.rb index f62ee03b..cd5f1bb0 100644 --- a/lib/mcp/server.rb +++ b/lib/mcp/server.rb @@ -222,7 +222,7 @@ def server_info name:, title:, version:, - } + }.compact end def init(request) diff --git a/lib/mcp/tool.rb b/lib/mcp/tool.rb index 024704df..25397b70 100644 --- a/lib/mcp/tool.rb +++ b/lib/mcp/tool.rb @@ -19,7 +19,7 @@ def to_h title: title_value, description: description_value, inputSchema: input_schema_value.to_h, - } + }.compact result[:annotations] = annotations_value.to_h if annotations_value result end diff --git a/test/mcp/server_test.rb b/test/mcp/server_test.rb index a8527bc0..c7234720 100644 --- a/test/mcp/server_test.rb +++ b/test/mcp/server_test.rb @@ -771,7 +771,7 @@ def call(message:, server_context: nil) assert_equal Configuration::DEFAULT_PROTOCOL_VERSION, response[:result][:protocolVersion] end - test "server uses default title when not configured" do + test "server response does not include title when not configured" do server = Server.new(name: "test_server") request = { jsonrpc: "2.0", @@ -780,7 +780,7 @@ def call(message:, server_context: nil) } response = server.handle(request) - assert_nil response[:result][:serverInfo][:title] + refute response[:result][:serverInfo].key?(:title) end test "server uses default version when not configured" do diff --git a/test/mcp/tool_test.rb b/test/mcp/tool_test.rb index a8dafcaa..e90fbcc6 100644 --- a/test/mcp/tool_test.rb +++ b/test/mcp/tool_test.rb @@ -33,6 +33,14 @@ def call(message:, server_context: nil) assert_equal({ name: "mock_tool", title: "Mock Tool", description: "a mock tool for testing", inputSchema: { type: "object" } }, tool.to_h) end + test "#to_h does not have `:title` key when title is omitted" do + tool = Tool.define( + name: "mock_tool", + description: "a mock tool for testing", + ) + refute tool.to_h.key?(:title) + end + test "#to_h includes annotations when present" do tool = TestTool expected_annotations = {