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
22
23
24
25
# 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)
  when 'http'
    create_http_server(config, logger_to_use)
  when 'streamable_http'
    create_streamable_http_server(config, logger_to_use)
  else
    raise ArgumentError, "Unknown server type: #{config[:type]}"
  end
end

.create_http_server(config, logger) ⇒ MCPClient::ServerHTTP

Create an HTTP-based server

Parameters:

  • config (Hash)

    server configuration

  • logger (Logger, nil)

    logger to use

Returns:



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/mcp_client/server_factory.rb', line 68

def self.create_http_server(config, logger)
  # Handle both :url and :base_url (config parser uses :url)
  base_url = config[:base_url] || config[:url]
  MCPClient::ServerHTTP.new(
    base_url: base_url,
    endpoint: config[:endpoint] || '/rpc',
    headers: config[:headers] || {},
    read_timeout: config[:read_timeout] || 30,
    retries: config[:retries] || 3,
    retry_backoff: config[:retry_backoff] || 1,
    name: config[:name],
    logger: logger,
    oauth_provider: config[:oauth_provider],
    faraday_config: config[:faraday_config]
  )
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:



49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/mcp_client/server_factory.rb', line 49

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:



31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/mcp_client/server_factory.rb', line 31

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

.create_streamable_http_server(config, logger) ⇒ MCPClient::ServerStreamableHTTP

Create a Streamable HTTP-based server

Parameters:

  • config (Hash)

    server configuration

  • logger (Logger, nil)

    logger to use

Returns:



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/mcp_client/server_factory.rb', line 89

def self.create_streamable_http_server(config, logger)
  # Handle both :url and :base_url (config parser uses :url)
  base_url = config[:base_url] || config[:url]
  MCPClient::ServerStreamableHTTP.new(
    base_url: base_url,
    endpoint: config[:endpoint] || '/rpc',
    headers: config[:headers] || {},
    read_timeout: config[:read_timeout] || 30,
    retries: config[:retries] || 3,
    retry_backoff: config[:retry_backoff] || 1,
    name: config[:name],
    logger: logger,
    oauth_provider: config[:oauth_provider],
    faraday_config: config[:faraday_config]
  )
end

.prepare_command(config) ⇒ String, Array

Prepare command by combining command and args

Parameters:

  • config (Hash)

    server configuration

Returns:

  • (String, Array)

    prepared command



109
110
111
112
113
114
115
# File 'lib/mcp_client/server_factory.rb', line 109

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