Class: RubyLLM::MCP::Adapters::MCPTransports::StreamableHTTP
- Inherits:
-
Object
- Object
- RubyLLM::MCP::Adapters::MCPTransports::StreamableHTTP
- Defined in:
- lib/ruby_llm/mcp/adapters/mcp_transports/streamable_http.rb
Overview
Custom Streamable HTTP transport for MCP SDK adapter Wraps the native StreamableHTTP transport to provide the interface expected by MCP::Client
Instance Attribute Summary collapse
-
#native_transport ⇒ Object
readonly
Returns the value of attribute native_transport.
Instance Method Summary collapse
- #close ⇒ Object
-
#initialize(url:, headers: {}, version: :http2, request_timeout: 10_000, reconnection: {}, oauth_provider: nil, rate_limit: nil, session_id: nil, protocol_version: RubyLLM::MCP.config.protocol_version, notification_callback: nil) ⇒ StreamableHTTP
constructor
rubocop:disable Metrics/ParameterLists.
-
#send_request(request:) ⇒ Hash
Send a JSON-RPC request and return the response This is the interface expected by MCP::Client.
- #start ⇒ Object
Constructor Details
#initialize(url:, headers: {}, version: :http2, request_timeout: 10_000, reconnection: {}, oauth_provider: nil, rate_limit: nil, session_id: nil, protocol_version: RubyLLM::MCP.config.protocol_version, notification_callback: nil) ⇒ StreamableHTTP
rubocop:disable Metrics/ParameterLists
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/ruby_llm/mcp/adapters/mcp_transports/streamable_http.rb', line 9 def initialize(url:, headers: {}, version: :http2, request_timeout: 10_000, # rubocop:disable Metrics/ParameterLists reconnection: {}, oauth_provider: nil, rate_limit: nil, session_id: nil, protocol_version: RubyLLM::MCP.config.protocol_version, notification_callback: nil) # Create a minimal coordinator-like object for the native transport @coordinator = CoordinatorStub.new( protocol_version: protocol_version, notification_callback: notification_callback ) @initialized = false @native_transport = RubyLLM::MCP::Native::Transports::StreamableHTTP.new( url: url, headers: headers, version: version, coordinator: @coordinator, request_timeout: request_timeout, reconnection: reconnection, oauth_provider: oauth_provider, rate_limit: rate_limit, session_id: session_id ) @coordinator.transport = @native_transport end |
Instance Attribute Details
#native_transport ⇒ Object (readonly)
Returns the value of attribute native_transport.
7 8 9 |
# File 'lib/ruby_llm/mcp/adapters/mcp_transports/streamable_http.rb', line 7 def native_transport @native_transport end |
Instance Method Details
#close ⇒ Object
38 39 40 41 |
# File 'lib/ruby_llm/mcp/adapters/mcp_transports/streamable_http.rb', line 38 def close @initialized = false @native_transport.close end |
#send_request(request:) ⇒ Hash
Send a JSON-RPC request and return the response This is the interface expected by MCP::Client
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/ruby_llm/mcp/adapters/mcp_transports/streamable_http.rb', line 48 def send_request(request:) # Auto-initialize on first non-initialize request # Streamable HTTP servers require initialization before other requests unless @initialized || request[:method] == "initialize" || request["method"] == "initialize" perform_initialization end unless request["id"] || request[:id] request["id"] = SecureRandom.uuid end result = @native_transport.request(request, wait_for_response: true) if result.is_a?(RubyLLM::MCP::Result) result.response else result end end |
#start ⇒ Object
34 35 36 |
# File 'lib/ruby_llm/mcp/adapters/mcp_transports/streamable_http.rb', line 34 def start @native_transport.start end |