From 01460b0b4fecede8c8ab51789813bc730cb2c4d0 Mon Sep 17 00:00:00 2001 From: iberianpig Date: Tue, 13 May 2025 17:26:10 +0900 Subject: [PATCH 1/3] fix: force UTF-8 encoding for stdio streams This change forces $stdin/$stdout to use UTF-8 encoding, similar to PR 198 in the python-sdk. https://github.com/modelcontextprotocol/python-sdk/pull/198 It addresses platform-dependent encoding issues. --- lib/model_context_protocol/transports/stdio.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/model_context_protocol/transports/stdio.rb b/lib/model_context_protocol/transports/stdio.rb index 1c158d0..f72508b 100644 --- a/lib/model_context_protocol/transports/stdio.rb +++ b/lib/model_context_protocol/transports/stdio.rb @@ -9,6 +9,8 @@ module ModelContextProtocol def initialize(server) @server = server @open = false + $stdin.set_encoding("UTF-8") + $stdout.set_encoding("UTF-8") super end From ea4828987c0d70470f19df0f321593728449b79e Mon Sep 17 00:00:00 2001 From: Kevin Fischer Date: Tue, 13 May 2025 23:51:02 +0900 Subject: [PATCH 2/3] Allow specifying a server version --- lib/model_context_protocol/server.rb | 8 ++++++-- test/model_context_protocol/server_test.rb | 15 ++++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/model_context_protocol/server.rb b/lib/model_context_protocol/server.rb index e707566..f6de3ee 100644 --- a/lib/model_context_protocol/server.rb +++ b/lib/model_context_protocol/server.rb @@ -6,6 +6,8 @@ require_relative "methods" module ModelContextProtocol class Server + DEFAULT_VERSION = "0.1.0" + class RequestHandlerError < StandardError attr_reader :error_type attr_reader :original_error @@ -20,10 +22,11 @@ module ModelContextProtocol include Instrumentation - attr_accessor :name, :tools, :prompts, :resources, :server_context, :configuration, :capabilities + attr_accessor :name, :version, :tools, :prompts, :resources, :server_context, :configuration, :capabilities def initialize( name: "model_context_protocol", + version: DEFAULT_VERSION, tools: [], prompts: [], resources: [], @@ -33,6 +36,7 @@ module ModelContextProtocol capabilities: { prompts: {}, resources: {}, tools: {} } ) @name = name + @version = version @tools = tools.to_h { |t| [t.name_value, t] } @prompts = prompts.to_h { |p| [p.name_value, p] } @resources = resources @@ -153,7 +157,7 @@ module ModelContextProtocol def server_info @server_info ||= { name:, - version: ModelContextProtocol::VERSION, + version:, } end diff --git a/test/model_context_protocol/server_test.rb b/test/model_context_protocol/server_test.rb index 2a35667..5890d6b 100644 --- a/test/model_context_protocol/server_test.rb +++ b/test/model_context_protocol/server_test.rb @@ -51,6 +51,7 @@ module ModelContextProtocol @server = Server.new( name: @server_name, + version: "1.2.3", tools: [@tool, @tool_that_raises], prompts: [@prompt], resources: [@resource], @@ -120,7 +121,7 @@ module ModelContextProtocol }, "serverInfo": { "name": @server_name, - "version": ModelContextProtocol::VERSION, + "version": "1.2.3", }, }, } @@ -648,6 +649,18 @@ module ModelContextProtocol assert_equal Configuration::DEFAULT_PROTOCOL_VERSION, response[:result][:protocolVersion] end + test "server uses default version when not configured" do + server = Server.new(name: "test_server") + request = { + jsonrpc: "2.0", + method: "initialize", + id: 1, + } + + response = server.handle(request) + assert_equal Server::DEFAULT_VERSION, response[:result][:serverInfo][:version] + end + test "#define_tool adds a tool to the server" do @server.define_tool( name: "defined_tool", From 7b390053bd5754c8d94e39f7f585d9bdc1731d09 Mon Sep 17 00:00:00 2001 From: Kevin Fischer Date: Tue, 13 May 2025 23:58:38 +0900 Subject: [PATCH 3/3] Update README and example with server version --- README.md | 1 + examples/stdio_server.rb | 1 + 2 files changed, 2 insertions(+) diff --git a/README.md b/README.md index 6314c62..9dcbf76 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,7 @@ module ModelContextProtocol def index server = ModelContextProtocol::Server.new( name: "my_server", + version: "1.0.0", tools: [SomeTool, AnotherTool], prompts: [MyPrompt], server_context: { user_id: current_user.id }, diff --git a/examples/stdio_server.rb b/examples/stdio_server.rb index 7c1a09a..631822e 100755 --- a/examples/stdio_server.rb +++ b/examples/stdio_server.rb @@ -54,6 +54,7 @@ end # Set up the server server = MCP::Server.new( name: "example_server", + version: "1.0.0", tools: [ExampleTool], prompts: [ExamplePrompt], resources: [