From 58516a57a9fad64d1fef5af871624b3eea4b95d6 Mon Sep 17 00:00:00 2001 From: John Qiu Date: Sun, 15 Mar 2026 13:25:05 +1030 Subject: [PATCH] feat: add comprehensive MCP verification in init.sh MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three-step verification after setup: 1. Server connection test (initialize → HTTP 200) 2. Tool registration test (tools/list → tool count) 3. Claude Code MCP test (claude mcp list → Connected) Uses Mcp-Session-Id from initialize response for tools/list call. Co-Authored-By: Claude Opus 4.6 --- init.sh | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/init.sh b/init.sh index fa0c396..31036a4 100755 --- a/init.sh +++ b/init.sh @@ -214,18 +214,49 @@ echo "✅ 技能安装完成 → $SKILLS_DIR" echo "" echo "🔍 验证 MCP 连接..." if [ "$MODE" = "remote" ]; then - VERIFY_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -X POST "$SSE_URL" \ + # Step 1: 服务端连接测试 (initialize) + INIT_RESPONSE=$(curl -s -D /tmp/mcp_headers -X POST "$SSE_URL" \ -H "Content-Type: application/json" \ -H "X-API-Key: $TOKEN" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"init-verify","version":"1.0"}}}' \ --connect-timeout 10 --max-time 15 2>/dev/null) - if [ "$VERIFY_RESPONSE" = "200" ]; then - echo " ✅ MCP 服务端连接正常 (HTTP $VERIFY_RESPONSE)" + INIT_HTTP=$(grep -i "^HTTP" /tmp/mcp_headers 2>/dev/null | tail -1 | awk '{print $2}') + SESSION_ID=$(grep -i "^mcp-session-id:" /tmp/mcp_headers 2>/dev/null | tail -1 | tr -d '\r' | awk '{print $2}') + + if [ "$INIT_HTTP" = "200" ]; then + echo " ✅ 服务端连接正常 (HTTP 200)" + + # Step 2: 工具列表测试 (tools/list) + if [ -n "$SESSION_ID" ]; then + TOOLS_RESPONSE=$(curl -s -X POST "$SSE_URL" \ + -H "Content-Type: application/json" \ + -H "X-API-Key: $TOKEN" \ + -H "Mcp-Session-Id: $SESSION_ID" \ + -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' \ + --connect-timeout 10 --max-time 15 2>/dev/null) + TOOL_COUNT=$(echo "$TOOLS_RESPONSE" | grep -o '"name"' | wc -l | tr -d ' ') + if [ "$TOOL_COUNT" -gt 0 ] 2>/dev/null; then + echo " ✅ 工具注册正常 ($TOOL_COUNT 个工具可用)" + else + echo " ⚠️ 工具列表为空,请检查服务端日志" + fi + fi + + # Step 3: claude mcp list 测试 (如果有 Claude CLI) + if $HAS_CLAUDE; then + MCP_STATUS=$("$CLAUDE_BIN" mcp list 2>&1 | grep "ai-proj") + if echo "$MCP_STATUS" | grep -q "Connected"; then + echo " ✅ Claude Code MCP 连接正常" + else + echo " ⚠️ Claude Code MCP 未连接: $MCP_STATUS" + fi + fi else - echo " ⚠️ MCP 服务端连接异常 (HTTP $VERIFY_RESPONSE)" + echo " ❌ MCP 服务端连接失败 (HTTP ${INIT_HTTP:-无响应})" echo " 请检查: 1) API Key 是否正确 2) 服务端是否运行 3) 网络是否通畅" - echo " 测试命令: curl -s -X POST '$SSE_URL' -H 'X-API-Key: \$TOKEN' -H 'Content-Type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{}}'" fi + + rm -f /tmp/mcp_headers fi echo ""