🐛 Fix indicate that the mcp is disabled if the mcp key has expired

If the mcp key has expired, the switch that indicates the status in the dashboard will appear as disabled, and will show a modal for regenerate the key. It will also appear as disabled in the workspace, not allowing the plugin to connect
This commit is contained in:
Luis de Dios 2026-04-22 15:17:46 +02:00
parent b0b2c0d264
commit b60695f54a
3 changed files with 33 additions and 25 deletions

View File

@ -648,3 +648,9 @@
(def progress
(l/derived :progress st/state))
(def access-tokens
(l/derived :access-tokens st/state))
(def access-token-created
(l/derived :access-token-created st/state))

View File

@ -34,15 +34,8 @@
[app.util.dom :as dom]
[app.util.forms :as fm]
[app.util.i18n :as i18n :refer [tr]]
[okulary.core :as l]
[rumext.v2 :as mf]))
(def tokens-ref
(l/derived :access-tokens st/state))
(def token-created-ref
(l/derived :access-token-created st/state))
(def notification-timeout 7000)
(def ^:private schema:form-access-token
@ -78,7 +71,7 @@
(mf/defc token-created*
{::mf/private true}
[{:keys [title mcp-key?]}]
(let [token-created (mf/deref token-created-ref)
(let [token-created (mf/deref refs/access-token-created)
on-copy-to-clipboard
(mf/use-fn
@ -310,7 +303,7 @@
[]
(let [created? (mf/use-state false)
tokens (mf/deref tokens-ref)
tokens (mf/deref refs/access-tokens)
mcp-key (some #(when (= (:type %) "mcp") %) tokens)
mcp-key-id (:id mcp-key)
@ -413,7 +406,7 @@
(mf/defc mcp-server-section*
{::mf/private true}
[]
(let [tokens (mf/deref tokens-ref)
(let [tokens (mf/deref refs/access-tokens)
profile (mf/deref refs/profile)
mcp-key (some #(when (= (:type %) "mcp") %) tokens)
@ -422,6 +415,8 @@
expires-at (:expires-at mcp-key)
expired? (and (some? expires-at) (> (ct/now) expires-at))
show-enabled? (and mcp-enabled? (false? expired?))
tooltip-id
(mf/use-id)
@ -511,14 +506,17 @@
(tr "integrations.mcp-server.status.expired.1")]]])
[:div {:class (stl/css :mcp-server-switch)}
[:> switch* {:label (if mcp-enabled?
[:> switch* {:label (if show-enabled?
(tr "integrations.mcp-server.status.enabled")
(tr "integrations.mcp-server.status.disabled"))
:default-checked mcp-enabled?
:default-checked show-enabled?
:on-change handle-mcp-change}]
(when (and (false? mcp-enabled?) (nil? mcp-key))
[:div {:class (stl/css :mcp-server-switch-cover)
:on-click handle-generate-mcp-key}])]]]
:on-click handle-generate-mcp-key}])
(when (true? expired?)
[:div {:class (stl/css :mcp-server-switch-cover)
:on-click handle-regenerate-mcp-key}])]]]
(when (some? mcp-key)
[:div {:class (stl/css :mcp-server-key)}
@ -567,7 +565,7 @@
(mf/defc access-tokens-section*
{::mf/private true}
[]
(let [tokens (mf/deref tokens-ref)
(let [tokens (mf/deref refs/access-tokens)
handle-click
(mf/use-fn

View File

@ -43,13 +43,9 @@
[app.util.i18n :as i18n :refer [tr]]
[app.util.keyboard :as kbd]
[beicon.v2.core :as rx]
[okulary.core :as l]
[potok.v2.core :as ptk]
[rumext.v2 :as mf]))
(def tokens-ref
(l/derived :access-tokens st/state))
(mf/defc shortcuts*
{::mf/private true}
[{:keys [id]}]
@ -749,14 +745,22 @@
(mf/defc mcp-menu*
{::mf/private true}
[{:keys [on-close]}]
(let [plugins? (features/active-feature? @st/state "plugins/runtime")
profile (mf/deref refs/profile)
mcp (mf/deref refs/mcp)
(let [plugins? (features/active-feature? @st/state "plugins/runtime")
profile (mf/deref refs/profile)
mcp (mf/deref refs/mcp)
tokens (mf/deref refs/access-tokens)
expired? (some->> tokens
(some #(when (= (:type %) "mcp") %))
:expires-at
(> (ct/now)))
mcp-enabled? (true? (-> profile :props :mcp-enabled))
mcp-connected? (= "connected" (get mcp :connection-status))
show-enabled? (and mcp-enabled? (false? expired?))
on-nav-to-integrations
(mf/use-fn
(fn []
@ -794,7 +798,7 @@
:pos-6 plugins?)
:on-close on-close}
(when mcp-enabled?
(when show-enabled?
[:> dropdown-menu-item* {:id "mcp-menu-toggle-mcp-plugin"
:class (stl/css :base-menu-item :submenu-item)
:on-click on-toggle-mcp-plugin
@ -809,7 +813,7 @@
:on-click on-nav-to-integrations
:on-key-down on-nav-to-integrations-key-down}
[:span {:class (stl/css :item-name)}
(if mcp-enabled?
(if show-enabled?
(tr "workspace.header.menu.mcp.server.status.enabled")
(tr "workspace.header.menu.mcp.server.status.disabled"))]]]))
@ -983,7 +987,7 @@
:class (stl/css :item-arrow)}]])
(when (contains? cf/flags :mcp)
(let [tokens (mf/deref tokens-ref)
(let [tokens (mf/deref refs/access-tokens)
expired? (some->> tokens
(some #(when (= (:type %) "mcp") %))
:expires-at