Build and validate FreeCAD MCP Server (v1.25.0). Changes: - mcp-freecad-wrapper.sh: Created wrapper script with container cleanup - crush.json: Added freecad-mcp entry with type: stdio and timeout: 180 - STATUS.md: Updated working MCP list and detailed status table - JOURNAL.md: Documented integration with full validation results Validation: - Container builds successfully (317MB, Python + uv) - MCP protocol handshake verified with initialize request - Protocol version 2024-11-05 confirmed - Server name: FreeCADMCP, version 1.25.0 - Wrapper script tested and working - Environment variable: PYTHONUNBUFFERED=1 - External dependency: FreeCAD with MCP addon (warning if not running) Similar to blender-mcp: - Both Python-based with uv package manager - Both require CAD application with addon running - Both show warning on startup when CAD app not connected - Both still initialize properly for MCP protocol handshake This is second MCP added in alphabetical order after filtering out already working MCPs (audiobook, bitwarden, blender, cloudron, context7, docker, drawio, elasticsearch). Following ADR-007: Sequential Server Validation - one MCP at a time, awaiting user validation before proceeding to next MCP.
21 lines
787 B
Bash
Executable File
21 lines
787 B
Bash
Executable File
#!/bin/sh
|
|
# Wrapper script for freecad-mcp
|
|
# Ensures clean container with proper name
|
|
|
|
CONTAINER_NAME="kneldevstack-aimiddleware-freecad-mcp-crush"
|
|
IMAGE_NAME="kneldevstack-aimiddleware-freecad-mcp"
|
|
|
|
# Force remove existing container if it exists (in any state)
|
|
if docker ps -a --filter "name=${CONTAINER_NAME}" --format '{{.Names}}' 2>/dev/null | grep -q "^${CONTAINER_NAME}$"; then
|
|
docker rm -f "${CONTAINER_NAME}" >/dev/null 2>&1
|
|
# Wait for container to be fully removed
|
|
while docker ps -a --filter "name=${CONTAINER_NAME}" --format '{{.Names}}' 2>/dev/null | grep -q "^${CONTAINER_NAME}$"; do
|
|
sleep 0.05
|
|
done
|
|
fi
|
|
|
|
# Start MCP server with explicit name
|
|
exec docker run -i --rm --name "${CONTAINER_NAME}" \
|
|
-e "PYTHONUNBUFFERED=1" \
|
|
"${IMAGE_NAME}" "$@"
|