ソースを参照

enhance: add UI setting for toggling MCP server on/off

Gabriel Horner 4 週間 前
コミット
16f977207c

+ 2 - 2
src/electron/electron/server.cljs

@@ -31,7 +31,7 @@
                   :port      (get-port)
                   :tokens    (cfgs/get-item :server/tokens)
                   :autostart (cfgs/get-item :server/autostart)
-                  :mcp-enabled? true}))
+                  :mcp-enabled? (cfgs/get-item :server/mcp-enabled?)}))
 
 (defn- set-status!
   ([status] (set-status! status nil))
@@ -141,7 +141,7 @@
     (logger/debug "[server] MCP routes initialized")
     (.post server "/mcp"
            #(cli-common-mcp-server/handle-post-request mcp-server {:port (get-port)
-                                                                           :host (get-host)} %1 %2))
+                                                                   :host (get-host)} %1 %2))
     (.get server "/mcp" cli-common-mcp-server/handle-get-request)
     (.delete server "/mcp" cli-common-mcp-server/handle-get-request)))
 

+ 27 - 0
src/main/frontend/components/settings.cljs

@@ -1194,6 +1194,32 @@
                            (rtc-handler/<rtc-invite-email graph-uuid user-email)))))}
         "Invite")]]]))
 
+(rum/defc mcp-server-row
+  [t]
+  (let [[checked set-checked!] (hooks/use-state false)]
+
+    (hooks/use-effect!
+     (fn []
+       (let [initial (get-in @state/state [:electron/server :mcp-enabled?])]
+         (set-checked! initial)))
+     [])
+
+    (let [on-toggle (fn []
+                      (let [new-val (not checked)]
+                        (set-checked! new-val)
+                        (-> (ipc/ipc :server/set-config {:mcp-enabled? new-val})
+                            ;; Dont start server if it's not running
+                            (p/then #(when (= "running" (state/sub [:electron/server :status]))
+                                       (p/let [_ (p/delay 1000)]
+                                         (ipc/ipc :server/do :restart))))
+                            (p/catch #(notification/show! (str %) :error)))))]
+      (toggle "mcp-server"
+              (t :settings-page/enable-mcp-server)
+              checked
+              on-toggle
+              [:span.text-sm.opacity-50
+               (t :settings-page/enable-mcp-server-desc)]))))
+
 (rum/defc settings-ai
   []
   (let [[model-info set-model-info] (hooks/use-state nil)
@@ -1229,6 +1255,7 @@
          :succ (constantly nil)))
      [])
     [:div.panel-wrap
+     (mcp-server-row t)
      [:div.flex.flex-col.gap-2.mt-4
       [:div.font-medium.text-muted-foreground.text-sm "Semantic search:"]
 

+ 2 - 0
src/resources/dicts/en.edn

@@ -215,6 +215,8 @@
  :context-menu/template-exists-warning "Template already exists!"
  :settings-page/ai "AI"
  :settings-page/tab-ai "AI"
+ :settings-page/enable-mcp-server "Enable MCP Server"
+ :settings-page/enable-mcp-server-desc "Run MCP Server within HTTP API server to allow local AI applications to connect to current graph."
  :settings-page/git-tip "If you have Logseq Sync enabled, you can view a page's edit history directly. This section is for tech-savvy only."
  :settings-page/git-desc-1 "To view page's edit history, click the three horizontal dots in the top-right corner and select \"View page history\"."
  :settings-page/git-desc-2 "For professional users, Logseq also supports using "