From 33fd672c21a7dbbab0998de5124e720cb91b39e2 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 9 Feb 2026 18:00:43 +0100 Subject: [PATCH] :rewind: Backport MCP related changes from develop (#8306) --- .github/workflows/build-docker.yml | 17 ++++++++ manage.sh | 49 +++++++++++++++++++--- mcp/packages/plugin/public/manifest.json | 1 + mcp/packages/server/src/PenpotMcpServer.ts | 4 +- 4 files changed, 64 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build-docker.yml b/.github/workflows/build-docker.yml index 2d03826b65..c1901c9114 100644 --- a/.github/workflows/build-docker.yml +++ b/.github/workflows/build-docker.yml @@ -59,6 +59,7 @@ jobs: mv penpot/frontend bundle-frontend mv penpot/exporter bundle-exporter mv penpot/storybook bundle-storybook + mv penpot/mcp bundle-mcp popd - name: Set up Docker Buildx @@ -89,6 +90,7 @@ jobs: backend exporter storybook + mcp labels: | bundle_version=${{ steps.bundles.outputs.bundle_version }} @@ -152,6 +154,21 @@ jobs: cache-from: type=registry,ref=${{ secrets.DOCKER_REGISTRY }}/${{ env.DOCKER_IMAGE }}:buildcache cache-to: type=registry,ref=${{ secrets.DOCKER_REGISTRY }}/${{ env.DOCKER_IMAGE }}:buildcache,mode=max + - name: Build and push MCP Docker image + uses: docker/build-push-action@v6 + env: + DOCKER_IMAGE: 'mcp' + BUNDLE_PATH: './bundle-mcp' + with: + context: ./docker/images/ + file: ./docker/images/Dockerfile.mcp + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ secrets.DOCKER_REGISTRY }}/${{ env.DOCKER_IMAGE }}:${{ steps.vars.outputs.gh_ref }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=registry,ref=${{ secrets.DOCKER_REGISTRY }}/${{ env.DOCKER_IMAGE }}:buildcache + cache-to: type=registry,ref=${{ secrets.DOCKER_REGISTRY }}/${{ env.DOCKER_IMAGE }}:buildcache,mode=max + - name: Notify Mattermost if: failure() uses: mattermost/action-mattermost-notify@master diff --git a/manage.sh b/manage.sh index d16e08b613..eb87d41b14 100755 --- a/manage.sh +++ b/manage.sh @@ -124,7 +124,7 @@ function run-devenv-shell { docker exec -ti \ -e JAVA_OPTS="$JAVA_OPTS" \ -e EXTERNAL_UID=$CURRENT_USER_ID \ - penpot-devenv-main sudo -EH -u penpot bash; + penpot-devenv-main sudo -EH -u penpot $@ } function run-devenv-isolated-shell { @@ -138,7 +138,7 @@ function run-devenv-isolated-shell { -e SHADOWCLJS_EXTRA_PARAMS=$SHADOWCLJS_EXTRA_PARAMS \ -e JAVA_OPTS="$JAVA_OPTS" \ -w /home/penpot/penpot/$1 \ - $DEVENV_IMGNAME:latest sudo -EH -u penpot bash + $DEVENV_IMGNAME:latest sudo -EH -u penpot $@ } function build-imagemagick-docker-image { @@ -215,6 +215,23 @@ function build-frontend-bundle { echo ">> bundle frontend end"; } +function build-mcp-bundle { + echo ">> bundle mcp start"; + + mkdir -p ./bundles + local version=$(print-current-version); + local bundle_dir="./bundles/mcp"; + + build "mcp"; + + rm -rf $bundle_dir; + mv ./mcp/dist $bundle_dir; + echo $version > $bundle_dir/version.txt; + put-license-file $bundle_dir; + echo ">> bundle mcp end"; +} + + function build-backend-bundle { echo ">> bundle backend start"; @@ -309,6 +326,16 @@ function build-exporter-docker-image { popd; } +function build-mcp-docker-image { + rsync -avr --delete ./bundles/mcp/ ./docker/images/bundle-mcp/; + pushd ./docker/images; + docker build \ + -t penpotapp/mcp:$CURRENT_BRANCH -t penpotapp/mcp:latest \ + --build-arg BUNDLE_PATH="./bundle-mcp/" \ + -f Dockerfile.mcp .; + popd; +} + function build-storybook-docker-image { rsync -avr --delete ./bundles/storybook/ ./docker/images/bundle-storybook/; pushd ./docker/images; @@ -335,17 +362,19 @@ function usage { echo "- isolated-shell Starts a bash shell in a new devenv container." echo "- log-devenv Show logs of the running devenv docker compose service." echo "" - echo "- build-bundle Build all bundles (frontend, backend and exporter)." + echo "- build-bundle Build all bundles (frontend, backend, exporter, storybook and mcp)." echo "- build-frontend-bundle Build frontend bundle" echo "- build-backend-bundle Build backend bundle." echo "- build-exporter-bundle Build exporter bundle." echo "- build-storybook-bundle Build storybook bundle." + echo "- build-mcp-bundle Build mcp bundle." echo "- build-docs-bundle Build docs bundle." echo "" echo "- build-docker-images Build all docker images (frontend, backend and exporter)." echo "- build-frontend-docker-image Build frontend docker images." echo "- build-backend-docker-image Build backend docker images." echo "- build-exporter-docker-image Build exporter docker images." + echo "- build-mcp-docker-image Build exporter docker images." echo "- build-storybook-docker-image Build storybook docker images." echo "" echo "- version Show penpot's version." @@ -397,6 +426,7 @@ case $1 in ## production builds build-bundle) build-frontend-bundle; + build-mcp-bundle; build-backend-bundle; build-exporter-bundle; build-storybook-bundle; @@ -406,6 +436,10 @@ case $1 in build-frontend-bundle; ;; + build-mcp-bundle) + build-mcp-bundle; + ;; + build-backend-bundle) build-backend-bundle; ;; @@ -413,7 +447,7 @@ case $1 in build-exporter-bundle) build-exporter-bundle; ;; - + build-storybook-bundle) build-storybook-bundle; ;; @@ -431,6 +465,7 @@ case $1 in build-frontend-docker-image build-backend-docker-image build-exporter-docker-image + build-mcp-docker-image build-storybook-docker-image ;; @@ -445,7 +480,11 @@ case $1 in build-exporter-docker-image) build-exporter-docker-image ;; - + + build-mcp-docker-image) + build-mcp-docker-image + ;; + build-storybook-docker-image) build-storybook-docker-image ;; diff --git a/mcp/packages/plugin/public/manifest.json b/mcp/packages/plugin/public/manifest.json index 506021c29e..e2a769c7f8 100644 --- a/mcp/packages/plugin/public/manifest.json +++ b/mcp/packages/plugin/public/manifest.json @@ -1,6 +1,7 @@ { "name": "Penpot MCP Plugin", "code": "plugin.js", + "version": 2, "description": "This plugin enables interaction with the Penpot MCP server", "permissions": ["content:read", "content:write", "library:read", "library:write", "comment:read", "comment:write"] } diff --git a/mcp/packages/server/src/PenpotMcpServer.ts b/mcp/packages/server/src/PenpotMcpServer.ts index 1797fdec23..abb7677b11 100644 --- a/mcp/packages/server/src/PenpotMcpServer.ts +++ b/mcp/packages/server/src/PenpotMcpServer.ts @@ -55,8 +55,8 @@ export class PenpotMcpServer { this.port = parseInt(process.env.PENPOT_MCP_SERVER_PORT ?? "4401", 10); this.webSocketPort = parseInt(process.env.PENPOT_MCP_WEBSOCKET_PORT ?? "4402", 10); this.replPort = parseInt(process.env.PENPOT_MCP_REPL_PORT ?? "4403", 10); - this.listenAddress = process.env.PENPOT_MCP_SERVER_LISTEN_ADDRESS ?? "localhost"; - this.serverAddress = process.env.PENPOT_MCP_SERVER_ADDRESS ?? "localhost"; + this.listenAddress = process.env.PENPOT_MCP_SERVER_LISTEN_ADDRESS ?? "0.0.0.0"; + this.serverAddress = process.env.PENPOT_MCP_SERVER_ADDRESS ?? "0.0.0.0"; this.configLoader = new ConfigurationLoader(process.cwd()); this.apiDocs = new ApiDocs();