Class: DatagroutConduit::Transport::Mcp

Inherits:
Base
  • Object
show all
Defined in:
lib/datagrout_conduit/transport/mcp.rb

Overview

MCP Streamable HTTP transport. Sends JSON-RPC requests via HTTP POST to the MCP endpoint.

Instance Attribute Summary

Attributes inherited from Base

#url

Instance Method Summary collapse

Methods inherited from Base

#connect, #connected?, #disconnect

Constructor Details

#initialize(url:, auth: {}, identity: nil) ⇒ Mcp

Returns a new instance of Mcp.



8
9
10
11
# File 'lib/datagrout_conduit/transport/mcp.rb', line 8

def initialize(url:, auth: {}, identity: nil)
  super
  @session_id = nil
end

Instance Method Details

#send_request(method, params = nil, id: nil) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/datagrout_conduit/transport/mcp.rb', line 13

def send_request(method, params = nil, id: nil)
  ensure_connected!

  request_id = id || next_id
  body = build_jsonrpc_body(method, params, request_id)
  headers = build_headers

  response = @connection.post do |req|
    req.headers = headers
    req.body = JSON.generate(body)
  end

  track_session_id(response)
  result = handle_response(response)

  if result == :retry_oauth
    headers = build_headers
    response = @connection.post do |req|
      req.headers = headers
      req.body = JSON.generate(body)
    end
    track_session_id(response)
    result = handle_response(response)
    raise AuthError, "OAuth token rejected after refresh" if result == :retry_oauth
  end

  result
end