Class: RCrewAI::MCP::Transport::Http

Inherits:
Object
  • Object
show all
Defined in:
lib/rcrewai/mcp/transport/http.rb

Overview

Streamable HTTP transport for MCP: server pushes JSON-RPC responses via a long-lived SSE stream (GET); client sends requests via POST.

Instance Method Summary collapse

Constructor Details

#initialize(url:, headers: {}) ⇒ Http

Returns a new instance of Http.



12
13
14
15
16
17
# File 'lib/rcrewai/mcp/transport/http.rb', line 12

def initialize(url:, headers: {})
  @url = url
  @headers = headers
  @queue = Queue.new
  @sse_thread = nil
end

Instance Method Details

#closeObject



35
36
37
# File 'lib/rcrewai/mcp/transport/http.rb', line 35

def close
  @sse_thread&.kill
end

#openObject



19
20
21
22
# File 'lib/rcrewai/mcp/transport/http.rb', line 19

def open
  @http = Faraday.new(url: @url) { |f| f.adapter Faraday.default_adapter }
  @sse_thread = Thread.new { start_sse_stream }
end

#recv_lineObject



31
32
33
# File 'lib/rcrewai/mcp/transport/http.rb', line 31

def recv_line
  @queue.pop
end

#send_line(json) ⇒ Object



24
25
26
27
28
29
# File 'lib/rcrewai/mcp/transport/http.rb', line 24

def send_line(json)
  @http.post('') do |req|
    req.headers.merge!(@headers).merge!('Content-Type' => 'application/json')
    req.body = json
  end
end