Class: Mcp::ClientManager
- Inherits:
-
Object
- Object
- Mcp::ClientManager
- Defined in:
- lib/mcp/client_manager.rb
Overview
Connects to MCP servers and registers their tools with Tools::Registry. Each configured server (HTTP or stdio) gets a dedicated MCP::Client instance, cached for the worker’s lifetime. Connection failures are logged and skipped — a misconfigured or unavailable server does not prevent other servers or built-in tools from working.
Spawned stdio processes are reaped on worker exit via StdioTransport.cleanup_all.
The cache is built once on the first #register_tools call and never invalidated; edits to mcp.toml require a worker restart.
Class Method Summary collapse
-
.shared ⇒ Mcp::ClientManager
Lazily-instantiated process-wide manager.
Instance Method Summary collapse
-
#initialize(config: Config.new(logger: Rails.logger)) ⇒ ClientManager
constructor
A new instance of ClientManager.
-
#register_tools(registry) ⇒ Array<String>
Connects to every configured MCP server on first call, caches the resulting tool wrappers, and registers them in the given registry.
Constructor Details
#initialize(config: Config.new(logger: Rails.logger)) ⇒ ClientManager
Returns a new instance of ClientManager.
30 31 32 |
# File 'lib/mcp/client_manager.rb', line 30 def initialize(config: Config.new(logger: Rails.logger)) @config = config end |
Class Method Details
.shared ⇒ Mcp::ClientManager
Lazily-instantiated process-wide manager. Production code should call shared; new is reserved for tests and internal use.
25 26 27 |
# File 'lib/mcp/client_manager.rb', line 25 def self.shared @shared ||= new end |
Instance Method Details
#register_tools(registry) ⇒ Array<String>
Connects to every configured MCP server on first call, caches the resulting tool wrappers, and registers them in the given registry.
41 42 43 44 45 |
# File 'lib/mcp/client_manager.rb', line 41 def register_tools(registry) load_servers if @wrappers.nil? @wrappers.each { |wrapper| registry.register(wrapper) } @config.warnings + @warnings end |