Following up on this thread with the state on the current package (1.18.3 / Penpot 2.16.2). The flags @james added are working, and /mcp now resolves. However, the in-app MCP plugin still can't load, which blocks File → MCP Server → Connect. This is exactly the missing piece @Operator described (the frontend plugins/ static assets aren't served).
Current state on 1.18.3:
- [v]
enable-mcp+enable-access-tokensare in/app/pkg/start.shand served in/js/config.js(penpotFlags). - [v]
/mcpnow returns 200 (progress vs the earlier 404s in this thread). - In a design file,
File → MCP Server → Connectfails. Browser console:
Plugin Error: Failed to load plugin code
GET https://penpot.inno3.eu/plugins/mcp/plugin.js 404 (Not Found)
Root cause (confirmed): the frontend loads the bundled MCP plugin from ${PENPOT_PUBLIC_URI}/plugins/mcp/…, but the nginx root /app/code/frontend has no plugins/ directory -- the files don't exist anywhere in the container. The upstream image already ships them:
$ docker export $(docker create penpotapp/frontend:2.16.2) | tar -tf - | grep plugins/mcp
var/www/app/plugins/mcp/
var/www/app/plugins/mcp/assets/index-JunN9mS-.css
var/www/app/plugins/mcp/icon.jpg
var/www/app/plugins/mcp/index.html
var/www/app/plugins/mcp/index.js
var/www/app/plugins/mcp/manifest.json
var/www/app/plugins/mcp/plugin.js
For reference https://design.penpot.app/plugins/mcp/plugin.js returns 200; ours returns 404. Related: our config.js exposes none of the penpotPlugins* vars (penpotPluginsWhitelist, penpotPluginsListUri, …), so the Plugins manager panel is unavailable too for same root cause.
As @Operator noted, /app/code is read-only at runtime, so this needs to be handled at image-build time. It looks like copying the upstream frontend plugins/ directory into the served root (and exposing the PENPOT_PLUGINS_* config in config.js) would light up both the native MCP plugin and the Plugins manager, without needing to bundle the separate penpot-mcp Node service. Happy to test a patched package on our instance.
) fails with: