Class: McpInspector::Transport::ClientAdapter

Inherits:
BaseAdapter
  • Object
show all
Defined in:
lib/mcp_inspector/transport/client_adapter.rb

Instance Method Summary collapse

Methods inherited from BaseAdapter

#connected?

Constructor Details

#initialize(timeout: 30) ⇒ ClientAdapter

Returns a new instance of ClientAdapter.



7
8
9
10
11
# File 'lib/mcp_inspector/transport/client_adapter.rb', line 7

def initialize(timeout: 30)
  super
  @client = nil
  @server_config = nil
end

Instance Method Details

#connect(server_config) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/mcp_inspector/transport/client_adapter.rb', line 13

def connect(server_config)
  @server_config = server_config
  
  begin
    with_timeout do
      case server_config.transport
      when "stdio"
        connect_stdio
      when "sse"
        connect_sse
      when "websocket"
        connect_websocket
      else
        raise ConnectionError, "Unsupported transport: #{server_config.transport}"
      end
    end
    @connected = true
  rescue => e
    @connected = false
    raise ConnectionError, "Failed to connect to #{server_config.name}: #{e.message}"
  end
end

#disconnectObject



36
37
38
39
40
41
42
# File 'lib/mcp_inspector/transport/client_adapter.rb', line 36

def disconnect
  if @client && @client.respond_to?(:disconnect)
    @client.disconnect
  end
  @client = nil
  @connected = false
end

#execute_tool(name, arguments = {}) ⇒ Object



80
81
82
83
84
85
86
87
# File 'lib/mcp_inspector/transport/client_adapter.rb', line 80

def execute_tool(name, arguments = {})
  with_timeout do
    response = @client.call_tool(name, arguments)
    normalize_response(response)
  end
rescue => e
  raise OperationError, "Failed to execute tool '#{name}': #{e.message}"
end

#get_prompt(name, arguments = {}) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/mcp_inspector/transport/client_adapter.rb', line 102

def get_prompt(name, arguments = {})
  if @client.respond_to?(:get_prompt)
    with_timeout do
      response = @client.get_prompt(name, arguments)
      normalize_response(response)
    end
  else
    raise OperationError, "Prompts are not supported by this server"
  end
rescue => e
  raise OperationError, "Failed to get prompt '#{name}': #{e.message}"
end

#list_promptsObject



66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/mcp_inspector/transport/client_adapter.rb', line 66

def list_prompts
  if @client.respond_to?(:list_prompts)
    with_timeout do
      response = @client.list_prompts
      normalize_response(response)
    end
  else
    # Return empty prompts list if not supported
    []
  end
rescue => e
  raise OperationError, "Failed to list prompts: #{e.message}"
end

#list_resourcesObject



53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/mcp_inspector/transport/client_adapter.rb', line 53

def list_resources
  if @client.respond_to?(:list_resources)
    with_timeout do
      response = @client.list_resources
      normalize_response(response)
    end
  else
    []
  end
rescue => e
  raise OperationError, "Failed to list resources: #{e.message}"
end

#list_toolsObject



44
45
46
47
48
49
50
51
# File 'lib/mcp_inspector/transport/client_adapter.rb', line 44

def list_tools
  with_timeout do
    response = @client.list_tools
    normalize_response(response)
  end
rescue => e
  raise OperationError, "Failed to list tools: #{e.message}"
end

#read_resource(uri) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/mcp_inspector/transport/client_adapter.rb', line 89

def read_resource(uri)
  if @client.respond_to?(:read_resource)
    with_timeout do
      response = @client.read_resource(uri)
      normalize_response(response)
    end
  else
    raise OperationError, "Resource reading is not supported by this server"
  end
rescue => e
  raise OperationError, "Failed to read resource '#{uri}': #{e.message}"
end

#server_infoObject



115
116
117
118
119
120
121
122
# File 'lib/mcp_inspector/transport/client_adapter.rb', line 115

def server_info
  {
    name: @server_config.name,
    transport: @server_config.transport,
    connected: connected?,
    capabilities: detect_capabilities
  }
end