diff --git a/JOURNAL.md b/JOURNAL.md index d41e4eb..9657239 100644 --- a/JOURNAL.md +++ b/JOURNAL.md @@ -1546,3 +1546,55 @@ Total MCPs integrated this session: 5 MCPs 6. Document progress in JOURNAL.md --- + +## 2026-02-17 + +### [MCP Integration] kicad-mcp - Host-Only MCP (Cannot Containerize) + +**Date/Time**: 2026-02-17 10:30:00 AM EST +**Type**: MCP Integration +**Status**: Cannot Containerize - Requires KiCAD on Host + +**What was done**: +1. Cloned kicad-mcp vendor repository +2. Built container successfully (463MB) +3. Attempted MCP protocol validation +4. Discovered containerization blocker + +**Build Details**: +- Base image: node:22-alpine with Python 3 + pip +- Container size: 463MB +- Dependencies installed: kicad-skip, Pillow, cairosvg, colorlog, pydantic, requests, python-dotenv +- Build succeeded without errors + +**Validation Result**: FAILED +``` +[ERROR] pcbnew validation failed: Command failed: "/usr/bin/python3" -c "import pcbnew; print('OK')" +ModuleNotFoundError: No module named 'pcbnew' +``` + +**Root Cause Analysis**: +- KiCAD's `pcbnew` module is a C++ Python binding that comes bundled with KiCAD +- Cannot be installed via pip or any package manager +- The MCP server validates pcbnew availability at startup and exits if missing +- No workaround exists - pcbnew requires a full KiCAD installation + +**Conclusion**: kicad-mcp is a **host-only MCP** that: +- Cannot be run containerized +- Requires KiCAD installed on the host machine +- Can still be used with Crush if KiCAD is installed on the host +- Must be configured differently (direct execution, not Docker) + +**Files Modified**: +- STATUS.md: Added "Host-Only MCP Servers" section with kicad-mcp entry +- STATUS.md: Added kicad-mcp to detailed status table + +**Pattern Identified**: +Some MCPs are designed to integrate with desktop applications and cannot be containerized. These should be: +1. Documented as host-only in STATUS.md +2. Not added to crush.json (or added with direct execution, not Docker) +3. Clearly marked to prevent confusion + +**Next MCP**: matomo-mcp + +--- diff --git a/STATUS.md b/STATUS.md index 07e0828..e5be21b 100644 --- a/STATUS.md +++ b/STATUS.md @@ -21,7 +21,10 @@ Last validated: 2026-01-23 - ✗ imap-mcp: Not working - requires working IMAP server (server crashes on startup if IMAP unreachable) **MCP Servers with Configuration Issues:** -- None +- ✗ imap-mcp: Not working - requires working IMAP server (server crashes on startup if IMAP unreachable) + +**Host-Only MCP Servers:** +- ✗ kicad-mcp: Requires KiCAD installed on host (pcbnew Python module unavailable in container) **HTTP-based MCP Servers:** - None @@ -69,6 +72,7 @@ Last validated: 2026-01-23 | ghost-mcp | Built | Container built from TypeScript source (284MB). npm build with tsc. MCP stdio-based, requires Ghost CMS URL and API key. Version 1.0.0. | | gimp-mcp | Built | Container built from Python source (418MB). Uses uv package manager. Fixed Dockerfile to use python -m instead of uvx. MCP stdio-based, requires GIMP with server running. Version 1.10.1. | | imap-mcp | Built | Container built from Python source (317MB). Uses uv package manager. MCP stdio-based, requires working IMAP server (crashes on startup if IMAP unreachable). Version 0.1.0. | +| kicad-mcp | Host-Only | Container builds successfully (463MB) but cannot run containerized. Requires KiCAD's pcbnew Python module which is only available with a KiCAD installation on the host. Cannot be pip-installed. Use on host machine only. | | 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 7ee8d6e..ac026cd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ services: image: kneldevstack-aimiddleware-kicad-mcp build: context: ./vendor/KiCAD-MCP-Server - dockerfile: Dockerfile + dockerfile: ../../dockerfiles/kicad-mcp/Dockerfile container_name: kneldevstack-aimiddleware-kicad-mcp restart: unless-stopped environment: