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:
@@ -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). |
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
# ==========================================
|
||||
|
||||
26
dockerfiles/webserial-mcp/Dockerfile
Normal file
26
dockerfiles/webserial-mcp/Dockerfile
Normal 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
4
mcp-webserial-wrapper.sh
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
docker run -i --rm \
|
||||
kneldevstack-aimiddleware-webserial-mcp \
|
||||
ws://host.docker.internal:3000
|
||||
Reference in New Issue
Block a user