Class: RosettAi::Mcp::Admin::Registry
- Inherits:
-
Object
- Object
- RosettAi::Mcp::Admin::Registry
- Defined in:
- lib/rosett_ai/mcp/admin/registry.rb
Overview
Registry of configured MCP servers.
Manages discovery, storage, and querying of MCP server configurations from XDG-compliant paths.
Constant Summary collapse
- CONFIG_DIR =
'.config/rosett-ai/mcp/servers'
Instance Method Summary collapse
-
#add(config) ⇒ Pathname
Adds a server configuration.
-
#config_paths ⇒ Array<Pathname>
Returns all server config file paths.
-
#find(name) ⇒ Hash?
Finds a server by name.
-
#initialize(config_dir: nil) ⇒ Registry
constructor
A new instance of Registry.
-
#list ⇒ Array<Hash>
Lists all registered MCP servers.
-
#remove(name) ⇒ Boolean
Removes a server configuration.
Constructor Details
#initialize(config_dir: nil) ⇒ Registry
Returns a new instance of Registry.
20 21 22 |
# File 'lib/rosett_ai/mcp/admin/registry.rb', line 20 def initialize(config_dir: nil) @config_dir = config_dir || Pathname.new(Dir.home).join(CONFIG_DIR) end |
Instance Method Details
#add(config) ⇒ Pathname
Adds a server configuration.
45 46 47 48 49 50 51 52 |
# File 'lib/rosett_ai/mcp/admin/registry.rb', line 45 def add(config) FileUtils.mkdir_p(@config_dir) name = config.fetch('name') { config.fetch(:name) } path = @config_dir.join("#{name}.yml") File.write(path, YAML.dump(stringify_keys(config))) path end |
#config_paths ⇒ Array<Pathname>
Returns all server config file paths.
69 70 71 72 73 |
# File 'lib/rosett_ai/mcp/admin/registry.rb', line 69 def config_paths return [] unless @config_dir.directory? @config_dir.glob('*.yml') end |
#find(name) ⇒ Hash?
Finds a server by name.
37 38 39 |
# File 'lib/rosett_ai/mcp/admin/registry.rb', line 37 def find(name) list.find { |s| s[:name] == name } end |
#list ⇒ Array<Hash>
Lists all registered MCP servers.
27 28 29 30 31 |
# File 'lib/rosett_ai/mcp/admin/registry.rb', line 27 def list return [] unless @config_dir.directory? @config_dir.glob('*.yml').filter_map { |path| load_server(path) } end |
#remove(name) ⇒ Boolean
Removes a server configuration.
58 59 60 61 62 63 64 |
# File 'lib/rosett_ai/mcp/admin/registry.rb', line 58 def remove(name) # rubocop:disable Naming/PredicateMethod -- destructive action, not a predicate path = @config_dir.join("#{name}.yml") return false unless path.exist? File.delete(path) true end |