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: [ diff --git a/lib/model_context_protocol/server.rb b/lib/model_context_protocol/server.rb index 944db86..6e31f69 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,11 +22,13 @@ module ModelContextProtocol include Instrumentation + attr_writer :capabilities - attr_accessor :name, :tools, :prompts, :resources, :server_context, :configuration + attr_accessor :name, :version, :tools, :prompts, :resources, :server_context, :configuration def initialize( name: "model_context_protocol", + version: DEFAULT_VERSION, tools: [], prompts: [], resources: [], @@ -34,6 +38,7 @@ module ModelContextProtocol capabilities: nil ) @name = name + @version = version @tools = tools.to_h { |t| [t.name_value, t] } @prompts = prompts.to_h { |p| [p.name_value, p] } @resources = resources @@ -169,7 +174,7 @@ module ModelContextProtocol def server_info @server_info ||= { name:, - version: ModelContextProtocol::VERSION, + version:, } end 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 diff --git a/test/model_context_protocol/server_test.rb b/test/model_context_protocol/server_test.rb index 83650f5..ae527e2 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",