Commit f8b553a

mo khan <mo@mokhan.ca>
2026-01-26 19:41:22
feat: add custom plugin and example mcp configuration
1 parent c1c0242
Changed files (4)
.elelem/plugins/gitlab.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+Elelem::Plugins.register(:gitlab) do |toolbox|
+  toolbox.after("gitlab_search") do |_args, result|
+    $stdout.puts result.inspect
+  end
+end
.elelem/mcp.json
@@ -0,0 +1,14 @@
+{
+  "mcpServers": {
+    "gitlab": {
+      "type": "http",
+      "url": "https://gitlab.com/api/v4/mcp"
+    },
+    "playwright": {
+      "command": "npx",
+      "args": [
+        "@playwright/mcp@latest"
+      ]
+    }
+  }
+}
lib/elelem/mcp.rb
@@ -5,8 +5,13 @@ require_relative "mcp/oauth"
 
 module Elelem
   class MCP
-    def initialize(config_path = ".mcp.json")
-      @config = File.exist?(config_path) ? JSON.parse(IO.read(config_path)) : {}
+    CONFIG_PATHS = [
+      "~/.elelem/mcp.json",
+      ".elelem/mcp.json"
+    ].freeze
+
+    def initialize(configurations = CONFIG_PATHS)
+      @config = load_config(configurations)
       @servers = {}
     end
 
@@ -32,6 +37,17 @@ module Elelem
 
     private
 
+    def load_config(configurations)
+      configurations.each_with_object({}) do |path, merged|
+        file = File.expand_path(path)
+        next unless File.exist?(file)
+
+        config = JSON.parse(IO.read(file))
+        servers = config.fetch("mcpServers", {})
+        merged["mcpServers"] = (merged["mcpServers"] || {}).merge(servers)
+      end
+    end
+
     def server(name)
       @servers[name] ||= build_server(@config.dig("mcpServers", name))
     end
.gitignore
@@ -13,7 +13,6 @@
 *.log
 target/
 *.gem
-.mcp.json
 
 # rspec failure tracking
 .rspec_status