feat: integrate webserial-mcp for ESP32 MicroPython development

- Add webserial-mcp service to docker-compose.yml
- Create wrapper script and add to crush.json
- Update STATUS.md with build status and requirements
- Note: requires bridge server + browser + ESP32 hardware

deps: generated with Crush
Assisted-by: GLM-5 via Crush <crush@charm.land>
This commit is contained in:
Charles N Wyble
2026-02-17 11:10:38 -05:00
parent af1a823683
commit 0c20861103
5 changed files with 56 additions and 0 deletions

View File

@@ -21,9 +21,11 @@ Last validated: 2026-02-17
- ✓ gimp-mcp: Working (GimpMCP v1.10.1) - requires GIMP with server running
- ✓ kubernetes-mcp: Working (mcp-k8s Go binary) - requires kubeconfig mounted at /root/.kube/config
- ✗ imap-mcp: Not working - requires working IMAP server (server crashes on startup if IMAP unreachable)
- ✗ webserial-mcp: Not working - requires bridge server running at ws://host.docker.internal:3000 + browser + ESP32 hardware
**MCP Servers with Configuration Issues:**
- ✗ imap-mcp: Not working - requires working IMAP server (server crashes on startup if IMAP unreachable)
- ✗ webserial-mcp: Not working - requires bridge server (esp32_bridge_server.py) running at ws://host.docker.internal:3000 + browser with WebSerial access + ESP32 hardware
**Host-Only MCP Servers:**
- ✗ kicad-mcp: Requires KiCAD installed on host (pcbnew Python module unavailable in container)
@@ -47,6 +49,7 @@ Last validated: 2026-02-17
- 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
- ✓ kubernetes-mcp: Built (silenceper/mcp-k8s) - stdio-based, requires kubeconfig mount
- ✓ webserial-mcp: Built (Python/Flask) - stdio-based, requires bridge server + browser + ESP32 hardware
**Builds in Progress:**
- None
@@ -96,6 +99,7 @@ All the following ahujasid repositories exist but contain no code (empty repos w
| matomo-mcp | Blocked | Cannot build - vendor repository does not exist. CloneVendorRepos.sh references https://github.com/ahujasid/matomo-mcp-client.git which returns 404. |
| discourse-mcp | Blocked | Cannot build - vendor repository exists but is empty. CloneVendorRepos.sh references https://github.com/ahujasid/discourse-mcp.git which has no commits. |
| kubernetes-mcp | Built | Container built from Go source (67MB). Uses silenceper/mcp-k8s alternative repo. Multi-stage build with golang:1.24.1 and alpine:3.18.4. MCP stdio-based, requires kubeconfig mounted at /root/.kube/config. Supports K8s resources and Helm operations. |
| webserial-mcp | Built | Container built from Python source. Uses Flask-SocketIO for WebSocket bridge. MCP stdio-based, requires esp32_bridge_server.py running on host at ws://host.docker.internal:3000 + browser with WebSerial access + ESP32 hardware. Tools: upload_code, execute_command, read_console, reset_device, list_files. |
| proxmox-mcp | Blocked | Cannot build - vendor repository https://github.com/ahujasid/ProxmoxMCP.git is empty (no code). |
| terraform-mcp | Blocked | Cannot build - vendor repository https://github.com/ahujasid/terraform-mcp-server.git is empty (no code). |
| nextcloud-mcp | Blocked | Cannot build - vendor repository https://github.com/ahujasid/nextcloud-mcp-server.git is empty (no code). |

View File

@@ -81,6 +81,11 @@
"type": "stdio",
"command": "/home/charles/Projects/KNEL/KNEL-AIMiddleware/mcp-docspace-wrapper.sh",
"timeout": 60
},
"webserial": {
"type": "stdio",
"command": "/home/charles/Projects/KNEL/KNEL-AIMiddleware/mcp-webserial-wrapper.sh",
"timeout": 60
}
}
}

View File

@@ -47,6 +47,23 @@ services:
profiles:
- dev
# ESP32 WebSerial MCP - MicroPython development via WebSerial
# NOTE: Requires bridge server running on host (esp32_bridge_server.py)
# and browser with WebSerial connected to ESP32
webserial-mcp:
image: kneldevstack-aimiddleware-webserial-mcp
build:
context: ./vendor/webserial-mcp
dockerfile: ../../dockerfiles/webserial-mcp/Dockerfile
container_name: kneldevstack-aimiddleware-webserial-mcp
restart: unless-stopped
environment:
- PYTHONUNBUFFERED=1
- WEBSOCKET_URL=ws://host.docker.internal:3000
- MCP_TIMEOUT=30
profiles:
- dev
# ==========================================
# Hosting & Infrastructure (5 servers)
# ==========================================

View File

@@ -0,0 +1,26 @@
# ESP32 WebSerial MCP Bridge
# This MCP requires the bridge server to be running and a browser+ESP32 connected
FROM python:3.11-slim
WORKDIR /app
# Install dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt && \
pip install --no-cache-dir nest-asyncio
# Copy application files
COPY mcp_handler.py .
COPY mcp_client.py .
COPY esp32_bridge_server.py .
COPY templates/ templates/
# Environment variables
ENV PYTHONUNBUFFERED=1
ENV WEBSOCKET_URL=ws://localhost:3000
ENV MCP_TIMEOUT=30
# Default entrypoint is the MCP client (stdio-based)
ENTRYPOINT ["python", "mcp_client.py"]
CMD ["ws://host.docker.internal:3000"]

4
mcp-webserial-wrapper.sh Executable file
View File

@@ -0,0 +1,4 @@
#!/bin/bash
docker run -i --rm \
kneldevstack-aimiddleware-webserial-mcp \
ws://host.docker.internal:3000