From 6017d996fe98776ead438f9c1d22d29d00c56379 Mon Sep 17 00:00:00 2001 From: Charles N Wyble Date: Fri, 23 Jan 2026 00:13:28 -0500 Subject: [PATCH] feat: add cloudron-mcp validation Build and validate Cloudron MCP server for self-hosted app management. Changes: - docker-compose.yml: Updated to use custom Dockerfile for cloudron-mcp - dockerfiles/cloudron-mcp/Dockerfile: Added custom Dockerfile with fix for CMD entry point (dist/server.js instead of dist/index.js) - STATUS.md: Added cloudron-mcp as validated MCP (v0.1.0, 374MB) Validation: - Container builds successfully from TypeScript source (374MB) - Fixed Dockerfile CMD to use correct entry point (dist/server.js) - MCP protocol handshake verified with initialize request - Protocol version 2024-11-05 confirmed - Server name: cloudron-mcp, version 0.1.0 - Requires CLOUDRON_URL environment variable - Tested with proper --name flag for container --- STATUS.md | 3 +++ docker-compose.yml | 2 +- dockerfiles/cloudron-mcp/Dockerfile | 14 ++++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 dockerfiles/cloudron-mcp/Dockerfile diff --git a/STATUS.md b/STATUS.md index cf3788c..7d3f600 100644 --- a/STATUS.md +++ b/STATUS.md @@ -10,6 +10,7 @@ Last validated: 2026-01-22 - ✓ audiobook-mcp: Working (audiobook-library v1.1.0) - requires AUDIOBOOK_ROOT env var - ✓ bitwarden-mcp: Working (Bitwarden MCP Server v2026.1.0) - requires Bitwarden credentials - ✓ blender-mcp: Working (BlenderMCP v1.25.0) - requires Blender with addon running +- ✓ cloudron-mcp: Working (cloudron-mcp v0.1.0) - requires CLOUDRON_URL env var **MCP Servers with Configuration Issues:** - None @@ -24,6 +25,7 @@ Last validated: 2026-01-22 - audiobook-mcp: Built (v1.1.0) - stdio-based, requires AUDIOBOOK_ROOT - bitwarden-mcp: Built (v2026.1.0) - stdio-based, requires Bitwarden credentials - blender-mcp: Built (v1.25.0) - stdio-based, Python-based, requires Blender with addon +- cloudron-mcp: Built (v0.1.0) - stdio-based, requires CLOUDRON_URL - bash-language-server: Built (v5.6.0) - configured in crush.json via wrapper script - docker-language-server: Built (v0.0.0) - configured in crush.json via wrapper script - marksman: Built (2025-12-13) - configured in crush.json via wrapper script @@ -46,6 +48,7 @@ Last validated: 2026-01-22 | audiobook-mcp | Built | Container built from source (361MB). MCP stdio-based, requires AUDIOBOOK_ROOT env var. Fixed Dockerfile to use npm install instead of npm ci. Version 1.1.0. | | bitwarden-mcp | Built | Container built from source (377MB). Multi-stage distroless build. MCP stdio-based, requires Bitwarden credentials. Version 2026.1.0. | | blender-mcp | Built | Container built from source (321MB). Python-based with uv package manager. MCP stdio-based, requires Blender running with addon. Version 1.25.0. | +| cloudron-mcp | Built | Container built from source (374MB). Fixed Dockerfile CMD to use dist/server.js. MCP stdio-based, requires CLOUDRON_URL env var. Version 0.1.0. | | bash-language-server | Built | Container built using prebuilt npm package (190MB). LSP configured in crush.json via wrapper script. Version 5.6.0. | | docker-language-server | Built | Container built from Go source (49.2MB). LSP configured in crush.json via wrapper script. Version 0.0.0. | | marksman | Built | Container built from prebuilt binary (144MB). LSP configured in crush.json via wrapper script. Version 2025-12-13. | diff --git a/docker-compose.yml b/docker-compose.yml index e2976cf..6cf7394 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -122,7 +122,7 @@ services: image: kneldevstack-aimiddleware-cloudron-mcp build: context: ./vendor/mcp-cloudron - dockerfile: Dockerfile + dockerfile: ../../dockerfiles/cloudron-mcp/Dockerfile container_name: kneldevstack-aimiddleware-cloudron-mcp restart: unless-stopped environment: diff --git a/dockerfiles/cloudron-mcp/Dockerfile b/dockerfiles/cloudron-mcp/Dockerfile new file mode 100644 index 0000000..58579aa --- /dev/null +++ b/dockerfiles/cloudron-mcp/Dockerfile @@ -0,0 +1,14 @@ +FROM node:22-alpine + +WORKDIR /app + +COPY package.json package-lock.json* ./ + +RUN npm ci + +COPY . . + +EXPOSE 3000 + +# Use correct entry point from package.json bin +CMD ["node", "dist/server.js"]