Class: MCPClient::ServerFactory
- Inherits:
-
Object
- Object
- MCPClient::ServerFactory
- Defined in:
- lib/mcp_client/server_factory.rb
Overview
Factory for creating MCP server instances based on configuration
Class Method Summary collapse
-
.create(config, logger: nil) ⇒ MCPClient::ServerBase
Create a server instance based on configuration.
-
.create_http_server(config, logger) ⇒ MCPClient::ServerHTTP
Create an HTTP-based server.
-
.create_sse_server(config, logger) ⇒ MCPClient::ServerSSE
Create an SSE-based server.
-
.create_stdio_server(config, logger) ⇒ MCPClient::ServerStdio
Create a stdio-based server.
-
.create_streamable_http_server(config, logger) ⇒ MCPClient::ServerStreamableHTTP
Create a Streamable HTTP-based server.
-
.prepare_command(config) ⇒ String, Array
Prepare command by combining command and args.
Class Method Details
.create(config, logger: nil) ⇒ MCPClient::ServerBase
Create a server instance based on configuration
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
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
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
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
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
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 |