Class: MCPClient::ServerFactory

Inherits:
Object
  • Object
show all
Defined in:
lib/mcp_client/server_factory.rb

Overview

Factory for creating MCP server instances based on configuration

Class Method Summary collapse

Class Method Details

.create(config, logger: nil) ⇒ MCPClient::ServerBase

Create a server instance based on configuration

Parameters:

  • config (Hash)

    server configuration

  • logger (Logger, nil) (defaults to: nil)

    optional logger to use for the server

Returns:



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/mcp_client/server_factory.rb', line 10

def self.create(config, logger: nil)
  logger_to_use = config[:logger] || logger

  case config[:type]
  when 'stdio'
    create_stdio_server(config, logger_to_use)
  when 'sse'
    create_sse_server(config, logger_to_use)
  else
    raise ArgumentError, "Unknown server type: #{config[:type]}"
  end
end

.create_sse_server(config, logger) ⇒ MCPClient::ServerSSE

Create an SSE-based server

Parameters:

  • config (Hash)

    server configuration

  • logger (Logger, nil)

    logger to use

Returns:



45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/mcp_client/server_factory.rb', line 45

def self.create_sse_server(config, logger)
  # Handle both :url and :base_url (config parser uses :url)
  base_url = config[:base_url] || config[:url]
  MCPClient::ServerSSE.new(
    base_url: base_url,
    headers: config[:headers] || {},
    read_timeout: config[:read_timeout] || 30,
    ping: config[:ping] || 10,
    retries: config[:retries] || 0,
    retry_backoff: config[:retry_backoff] || 1,
    name: config[:name],
    logger: logger
  )
end

.create_stdio_server(config, logger) ⇒ MCPClient::ServerStdio

Create a stdio-based server

Parameters:

  • config (Hash)

    server configuration

  • logger (Logger, nil)

    logger to use

Returns:



27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/mcp_client/server_factory.rb', line 27

def self.create_stdio_server(config, logger)
  cmd = prepare_command(config)

  MCPClient::ServerStdio.new(
    command: cmd,
    retries: config[:retries] || 0,
    retry_backoff: config[:retry_backoff] || 1,
    read_timeout: config[:read_timeout] || MCPClient::ServerStdio::READ_TIMEOUT,
    name: config[:name],
    logger: logger,
    env: config[:env] || {}
  )
end

.prepare_command(config) ⇒ String, Array

Prepare command by combining command and args

Parameters:

  • config (Hash)

    server configuration

Returns:

  • (String, Array)

    prepared command



63
64
65
66
67
68
69
# File 'lib/mcp_client/server_factory.rb', line 63

def self.prepare_command(config)
  if config[:args] && !config[:args].empty?
    [config[:command]] + Array(config[:args])
  else
    config[:command]
  end
end