Internal Release 0.5.2

Added
- Added stdio transport functionality.
Changed
- Added stdio details to the README.
This commit is contained in:
Topher Bullock 2025-04-11 18:01:45 -04:00
commit 6da8bfab1a
4 changed files with 289 additions and 3 deletions

View file

@ -28,7 +28,7 @@ module ModelContextProtocol
@tools = tools.to_h { |t| [t.name_value, t] }
@prompts = prompts.to_h { |p| [p.name_value, p] }
@resources = resources
@resource_index = resources.index_by(&:uri)
@resource_index = index_resources_by_uri(resources)
@context = context
@configuration = ModelContextProtocol.configuration.merge(configuration)
@handlers = {
@ -205,5 +205,11 @@ module ModelContextProtocol
def report_exception(exception, context = {})
configuration.exception_reporter.call(exception, context)
end
def index_resources_by_uri(resources)
resources.each_with_object({}) do |resource, hash|
hash[resource.uri] = resource
end
end
end
end

View file

@ -0,0 +1,33 @@
# frozen_string_literal: true
module ModelContextProtocol
class Transport
def initialize(server)
@server = server
end
def send_response(response)
raise NotImplementedError, "Subclasses must implement send_response"
end
def open
raise NotImplementedError, "Subclasses must implement open"
end
def close
raise NotImplementedError, "Subclasses must implement close"
end
private
def handle_request(request)
response = @server.handle(request)
send_response(response) if response
end
def handle_json_request(request)
response = @server.handle_json(request)
send_response(response) if response
end
end
end

View file

@ -0,0 +1,33 @@
# frozen_string_literal: true
require_relative "../transport"
require "json"
module ModelContextProtocol
module Transports
class StdioTransport < Transport
def initialize(server)
@server = server
@open = false
super
end
def open
@open = true
while @open && (line = $stdin.gets)
handle_json_request(line.strip)
end
end
def close
@open = false
end
def send_response(message)
json_message = message.is_a?(String) ? message : JSON.generate(message)
$stdout.puts(json_message)
$stdout.flush
end
end
end
end

View file

@ -1,5 +1,5 @@
# frozen_string_literal: true
module ModelContextProtocol
VERSION = "0.5.1"
VERSION = "0.5.2"
end