Class: Rigor::MCP::Loop

Inherits:
Object
  • Object
show all
Defined in:
lib/rigor/mcp/loop.rb

Overview

Reads newline-delimited JSON-RPC 2.0 messages from input, dispatches each to server, and writes responses to output. Runs until input reaches EOF (the client closes the connection).

Instance Method Summary collapse

Constructor Details

#initialize(input:, output:, server:) ⇒ Loop

Returns a new instance of Loop.



10
11
12
13
14
# File 'lib/rigor/mcp/loop.rb', line 10

def initialize(input:, output:, server:)
  @input = input
  @output = output
  @server = server
end

Instance Method Details

#runObject



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/rigor/mcp/loop.rb', line 16

def run
  @input.each_line do |raw|
    line = raw.chomp
    next if line.empty?

    begin
      request = JSON.parse(line)
    rescue JSON::ParserError => e
      write_response({ "jsonrpc" => "2.0", "id" => nil,
                       "error" => { "code" => -32_700, "message" => "Parse error: #{e.message}" } })
      next
    end

    response = @server.handle(request)
    write_response(response) if response
  end
end