mirror of
https://github.com/penpot/penpot.git
synced 2026-04-25 11:18:36 +00:00
* ✨ Add core changes for mcp server * ✨ Changes to plugins-runtime to add mcp extensions * ✨ Changes to MCP plugin * ✨ Changes post-review and ci fixes
59 lines
1.8 KiB
Clojure
59 lines
1.8 KiB
Clojure
;; This Source Code Form is subject to the terms of the Mozilla Public
|
|
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
;;
|
|
;; Copyright (c) KALEIDOS INC
|
|
|
|
(ns app.main.data.workspace.mcp
|
|
(:require
|
|
[app.common.logging :as log]
|
|
[app.common.uri :as u]
|
|
[app.config :as cf]
|
|
[app.main.data.plugins :as dp]
|
|
[app.main.repo :as rp]
|
|
[beicon.v2.core :as rx]
|
|
[potok.v2.core :as ptk]))
|
|
|
|
(log/set-level! :info)
|
|
|
|
(def ^:private default-manifest
|
|
{:code "plugin.js"
|
|
:name "Penpot MCP Plugin"
|
|
:version 2
|
|
:plugin-id "96dfa740-005d-8020-8007-55ede24a2bae"
|
|
:description "This plugin enables interaction with the Penpot MCP server"
|
|
:allow-background true
|
|
:permissions
|
|
#{"library:read" "library:write" "comment:read" "content:write" "comment:write"
|
|
"content:read"}})
|
|
|
|
(defn init-mcp!
|
|
[]
|
|
(->> (rp/cmd! :get-current-mcp-token)
|
|
(rx/subs!
|
|
(fn [{:keys [token]}]
|
|
(when token
|
|
(dp/start-plugin!
|
|
(assoc default-manifest
|
|
:url (str (u/join cf/public-uri "plugins/mcp/manifest.json"))
|
|
:host (str (u/join cf/public-uri "plugins/mcp/")))
|
|
|
|
;; API extension for MCP server
|
|
#js {:mcp
|
|
#js
|
|
{:getToken (constantly token)
|
|
:getServerUrl #(str cf/mcp-ws-uri)
|
|
:setMcpStatus
|
|
(fn [status]
|
|
;; TODO: Visual feedback
|
|
(log/info :hint "MCP STATUS" :status status))}}))))))
|
|
|
|
(defn init-mcp-connexion
|
|
[]
|
|
(ptk/reify ::init-mcp-connexion
|
|
ptk/EffectEvent
|
|
(effect [_ state _]
|
|
(when (and (contains? cf/flags :mcp)
|
|
(-> state :profile :props :mcp-status))
|
|
(init-mcp!)))))
|