From 1b01b3303ba26cd5b4c2784e506e56a2728ac7a7 Mon Sep 17 00:00:00 2001 From: Charles N Wyble Date: Thu, 22 Jan 2026 15:14:00 -0500 Subject: [PATCH] feat: add MCP server validation script and fix drawio-mcp - Add validate-mcp.sh script to test MCP servers with protocol messages - Fix drawio-mcp Dockerfile to use pnpm and correct build directory - Update drawio-mcp to use build/ instead of dist/ - Validate penpot-mcp, context7-mcp, docker-mcp, drawio-mcp working --- docker-compose.yml | 3 +- dockerfiles/drawio-mcp/Dockerfile | 11 +++-- validate-mcp.sh | 69 +++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+), 6 deletions(-) create mode 100755 validate-mcp.sh diff --git a/docker-compose.yml b/docker-compose.yml index 875dafd..8cd123f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -422,12 +422,11 @@ services: image: kneldevstack-aimiddleware-drawio-mcp build: context: ./vendor/drawio-mcp-server - dockerfile: Dockerfile + dockerfile: ../../dockerfiles/drawio-mcp/Dockerfile container_name: kneldevstack-aimiddleware-drawio-mcp restart: unless-stopped environment: - DRAWIO_URL=${DRAWIO_URL:-https://app.diagrams.net} - command: ["npx", "-y", "drawio-mcp-server"] profiles: - dev diff --git a/dockerfiles/drawio-mcp/Dockerfile b/dockerfiles/drawio-mcp/Dockerfile index cdda738..f46d737 100644 --- a/dockerfiles/drawio-mcp/Dockerfile +++ b/dockerfiles/drawio-mcp/Dockerfile @@ -1,13 +1,16 @@ FROM node:22-alpine +# Install pnpm +RUN npm install -g pnpm + WORKDIR /app -COPY package.json package-lock.json* ./ +COPY package.json pnpm-lock.yaml ./ -RUN npm ci +RUN pnpm install --frozen-lockfile COPY . . -RUN npm run build +RUN pnpm run build -CMD ["node", "dist/index.js"] +CMD ["node", "build/index.js"] diff --git a/validate-mcp.sh b/validate-mcp.sh new file mode 100755 index 0000000..e33867d --- /dev/null +++ b/validate-mcp.sh @@ -0,0 +1,69 @@ +#!/bin/bash +# MCP Server Validation Script +# Tests each MCP server with actual protocol messages + +GREEN='\033[0;32m' +RED='\033[0;31m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +# Initialize JSON message +INIT_MSG='{"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{},"protocolVersion":"2024-11-05","clientInfo":{"name":"test","version":"1.0.0"}},"id":1}' + +# Test a container with initialize message +test_mcp_server() { + local container_name=$1 + local timeout=${2:-5} + + echo -e "${YELLOW}Testing $container_name...${NC}" + + # Run container with stdin input + result=$(timeout $timeout docker run --rm -i --name "$container_name-test" \ + "$container_name" \ + <<<"$INIT_MSG" \ + 2>&1) + + # Check for valid JSON-RPC response + if echo "$result" | grep -q '"result"'; then + # Check if it has server info + if echo "$result" | grep -q '"serverInfo"'; then + server_name=$(echo "$result" | grep -o '"name":"[^"]*"' | head -1 | cut -d'"' -f4) + version=$(echo "$result" | grep -o '"version":"[^"]*"' | head -1 | cut -d'"' -f4) + echo -e "${GREEN}✓ $container_name: Working ($server_name v${version})${NC}" + return 0 + fi + fi + + # Check if server requires environment variables + if echo "$result" | grep -qi "environment variable"; then + echo -e "${YELLOW}⚠ $container_name: Needs environment variables${NC}" + return 1 + fi + + # Check if server needs external service + if echo "$result" | grep -qi "connection refused\|not connected"; then + echo -e "${YELLOW}⚠ $container_name: Needs external service (expected)${NC}" + return 1 + fi + + # Check other errors + echo -e "${RED}✗ $container_name: Failed${NC}" + echo -e "${RED} Error: $(echo "$result" | head -3 | tail -1)${NC}" + return 1 +} + +# Test all built containers +echo -e "${YELLOW}=== MCP Server Validation ===${NC}\n" + +# Stdio-based MCP servers +test_mcp_server "kneldevstack-aimiddleware-ghost-mcp" +test_mcp_server "kneldevstack-aimiddleware-penpot-mcp" +test_mcp_server "kneldevstack-aimiddleware-imap-mcp" +test_mcp_server "kneldevstack-aimiddleware-proxmox-mcp" +test_mcp_server "kneldevstack-aimiddleware-context7-mcp" +test_mcp_server "kneldevstack-aimiddleware-docker-mcp" +test_mcp_server "kneldevstack-aimiddleware-drawio-mcp" +test_mcp_server "kneldevstack-aimiddleware-mcp-redmine" +test_mcp_server "kneldevstack-aimiddleware-nextcloud-mcp" + +echo -e "\n${YELLOW}=== Validation Complete ===${NC}"