diff --git a/STATUS.md b/STATUS.md index fb49290..06fc901 100644 --- a/STATUS.md +++ b/STATUS.md @@ -2,37 +2,80 @@ Tracking the setup and validation of MCP/LSP servers via Docker Compose. +Last validated: 2026-01-22 + +## Validation Summary + +**Working MCP Servers (tested with MCP initialize protocol):** +- ✓ ghost-mcp: Working (ghost-mcp-ts v1.0.0) - requires GHOST_API_URL, GHOST_ADMIN_API_KEY +- ✓ penpot-mcp: Working (Penpot MCP Server v1.25.0) - requires PENPOT_URL, PENPOT_TOKEN +- ✓ docker-mcp: Working (docker-mcp v0.1.0) +- ✓ audiobook-mcp: Working (audiobook-library v1.1.0) - requires AUDIOBOOK_ROOT +- ✓ bitwarden-mcp: Working (Bitwarden MCP Server v2026.1.0) - requires BITWARDEN_* env vars +- ✓ context7-mcp: Working (Context7 v2.1.0) - Takes >10s to initialize +- ✓ drawio-mcp: Working (drawio-mcp-server v1.4.0) - Takes >10s to initialize +- ✓ redmine-mcp: Working (Redmine MCP server v1.25.0) - Takes >10s to initialize + +**MCP Servers with Configuration Issues:** +- ⚠ proxmox-mcp: Requires PROXMOX_MCP_CONFIG file path (not individual env vars) - incompatible with Crush's docker run approach +- ⚠ imap-mcp: Working but requires IMAP_HOST, IMAP_USERNAME, IMAP_PASSWORD env vars + +**HTTP-based MCP Servers:** +- nextcloud-mcp: HTTP-based on port 8083, needs to be started via `docker compose up -d nextcloud-mcp` + +**Pending Build:** +- discourse-mcp, cloudron-mcp, postizz-mcp, snipeit-mcp, docspace-mcp +- kubernetes-mcp-server, terraform-mcp-server, mcp-ansible +- wordpress-mcp, matomo-mcp-client, elasticsearch-mcp + +**LSP Servers:** +- ✓ bash-language-server: Built (190MB) - configured in crush.json +- ✓ docker-language-server: Built (49.2MB) - configured in crush.json +- ✓ marksman: Built (144MB) - configured in crush.json + +## Detailed Status + | Repository | Status | Notes | |------------|--------|-------| | KiCAD-MCP-Server | Documented | Host-only - requires KiCAD installed on host. Connects via TCP to KICAD_HOST:KICAD_PORT | -| freecad-mcp | Working | Built with uvx entrypoint. stdio-based. Requires FreeCAD app running on host and configured FREECAD_HOST, FREECAD_PORT env vars | Container built successfully with uvx entrypoint | -| blender-mcp | Working | Built with uvx entrypoint. stdio-based. Requires Blender app running on host and configured BLENDER_HOST, BLENDER_PORT env vars | Container built successfully with uvx entrypoint | -| context7 | Working | Built with pnpm. stdio-based. Crush config in crush.json | | -| gimp-mcp | Working | Built with uvx entrypoint. stdio-based. Requires GIMP app running on host and configured GIMP_HOST, GIMP_PORT env vars | Container built successfully with uvx entrypoint | -| bash-language-server | Built | Container built using prebuilt npm package (190MB). Configured for Crush via docker run with -i flag for stdio. | -| docker-language-server | Built | Container built from Go source (49.2MB). Configured for Crush via docker run with -i flag for stdio. | -| marksman | Built | Container built from prebuilt binary (144MB). Configured for Crush via docker run with -i flag for stdio. | -| drawio-mcp-server | Working | Built with pnpm and proper build directory. stdio-based. Crush config in crush.json | | +| freecad-mcp | Not Tested | Built with uvx entrypoint. stdio-based. Requires FreeCAD app running on host | +| blender-mcp | Not Tested | Built with uvx entrypoint. stdio-based. Requires Blender app running on host | +| context7 | Working | Built with pnpm. stdio-based. Crush config in crush.json. Slow startup (>10s) | +| gimp-mcp | Not Tested | Built with uvx entrypoint. stdio-based. Requires GIMP app running on host | +| bash-language-server | Built | Container built using prebuilt npm package (190MB). LSP configured in crush.json | +| docker-language-server | Built | Container built from Go source (49.2MB). LSP configured in crush.json | +| marksman | Built | Container built from prebuilt binary (144MB). LSP configured in crush.json | +| drawio-mcp-server | Working | Built with pnpm. stdio-based. Crush config in crush.json. Slow startup (>10s) | | matomo-mcp-client | Pending | | -| imap-mcp | Working | Built with custom Dockerfile and python module entrypoint. stdio-based. Requires IMAP_HOST, IMAP_USERNAME, IMAP_PASSWORD env vars. Crush config in crush.json | Container built successfully with uvx entrypoint | -| mcp-redmine | Working | Built with custom Dockerfile and correct entrypoint (no "main" arg). stdio-based. Requires REDMINE_URL, REDMINE_API_KEY env vars. Crush config in crush.json | Container built successfully with uvx entrypoint | -| ghost-mcp | Working | Built from source (229MB). stdio-based. Requires GHOST_URL, GHOST_API_KEY env vars. Crush config in crush.json | Built from source (229MB). MCP server initializes and starts properly. Requires GHOST_API_URL and GHOST_ADMIN_API_KEY ({24_hex}:{64_hex} format). Uses default dummy values for testing. Crush can connect via `docker run -i --rm`. Updated docker-compose.yml with restart: "no" for stdio-based containers. | +| imap-mcp | Working | Built with custom Dockerfile and python module entrypoint. stdio-based. Requires IMAP env vars. Crush config in crush.json | +| mcp-redmine | Working | Built with custom Dockerfile and correct entrypoint. stdio-based. Requires REDMINE env vars. Crush config in crush.json. Slow startup (>10s) | +| ghost-mcp | Working | Built from source (229MB). stdio-based. Requires GHOST_API_URL and GHOST_ADMIN_API_KEY ({24_hex}:{64_hex}). Crush config in crush.json | | discourse-mcp | Pending | | | mcp-cloudron | Pending | | | postizz-MCP | Pending | | | snipeit-mcp | Pending | | -| nextcloud-mcp-server | Working | Built with custom Dockerfile to handle .dockerignore issue. HTTP-based on port 8083. Requires NEXTCLOUD_HOST, NEXTCLOUD_USERNAME, NEXTCLOUD_PASSWORD env vars. Crush config in crush.json with SSE endpoint | Container built successfully (798MB) | +| nextcloud-mcp-server | HTTP | HTTP-based on port 8083. Requires NEXTCLOUD_HOST, NEXTCLOUD_USERNAME, NEXTCLOUD_PASSWORD env vars. Crush config in crush.json | | docspace-mcp | Pending | | -| docker-mcp | Working | Built with uvx entrypoint. stdio-based. Crush config in crush.json | Container built successfully with uvx entrypoint | +| docker-mcp | Working | Built with uvx entrypoint. stdio-based. Crush config in crush.json | | kubernetes-mcp-server | Pending | | -| ProxmoxMCP | Working | Built with uvx entrypoint. stdio-based. Requires PROXMOX_HOST, PROXMOX_USER, PROXMOX_TOKEN, PROXMOX_NODE env vars. Crush config in crush.json | Container built successfully with uvx entrypoint | +| ProxmoxMCP | Config Required | Built with uvx entrypoint. Requires PROXMOX_MCP_CONFIG file path, NOT individual env vars. Incompatible with Crush approach | | terraform-mcp-server | Pending | | | mcp-ansible | Pending | | -| mcp-server (Bitwarden) | Pending | | +| mcp-server (Bitwarden) | Working | Built with npx entrypoint. stdio-based. Crush config in crush.json | | mcp-adapter (WordPress) | Pending | | -| audiobook-mcp-server | Pending | | +| audiobook-mcp-server | Working | Built with pnpm entrypoint. stdio-based. Requires AUDIOBOOK_ROOT env var. Crush config in crush.json | | mcp-server-elasticsearch | Pending | | -| penpot-mcp | Working | Built with proper Dockerfile and python module entrypoint. stdio-based. Requires PENPOT_URL, PENPOT_TOKEN env vars. Crush config in crush.json | Container built successfully with uvx entrypoint | +| penpot-mcp | Working | Built with python module entrypoint. stdio-based. Requires PENPOT_URL, PENPOT_TOKEN. Crush config in crush.json | + +## Known Issues + +1. **ProxmoxMCP**: Requires a JSON config file (PROXMOX_MCP_CONFIG) instead of individual environment variables. This doesn't work with Crush's `docker run` approach which can't easily mount config files. + +2. **Slow initialization**: Some MCP servers (context7, drawio, redmine) take >10 seconds to initialize, likely due to downloading dependencies on first run. + +3. **Validation script**: Fixed bash script to use `echo |` instead of `<<<` for proper Docker stdin handling. + +4. **Docker config warning**: Non-critical warning about `/home/charles/.docker/config.json` being a directory (not a file). Doesn't affect MCP server operation. ## Usage @@ -56,4 +99,11 @@ To rebuild a server after changes: docker compose build --no-cache ``` +To test MCP server with Crush: +```bash +# Stdio-based servers are run on-demand by Crush +# Configuration is in crush.json +# Crush automatically handles docker run -i --rm +``` + Note: Use lowercase service names from compose file. Container names will be prefixed with kneldevstack-aimiddleware-.