yams/tests/manual/test_mcp_initialize_debug.sh
2025-10-07 11:18:35 -04:00

77 lines
2.1 KiB
Bash
Executable file

#!/bin/bash
# Test MCP initialize with debug logging enabled
# This helps diagnose why some clients see empty responses
set -euo pipefail
YAMS_BIN="${1:-./build/debug/tools/yams-cli/yams-cli}"
if [[ ! -f "$YAMS_BIN" ]]; then
echo "Error: yams binary not found at $YAMS_BIN"
echo "Usage: $0 [path/to/yams]"
exit 1
fi
echo "Testing MCP initialize with debug logging"
echo "Binary: $YAMS_BIN"
echo ""
# Enable debug logging via environment variable
export SPDLOG_LEVEL=debug
echo "=== Sending initialize request ==="
REQUEST='{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","clientInfo":{"name":"test-client","version":"1.0"}}}'
echo "Request: $REQUEST"
echo ""
echo "=== Server output (stdout + stderr) ==="
# Send request and capture both stdout and stderr
RESPONSE=$(echo "$REQUEST" | "$YAMS_BIN" serve 2>&1)
echo "$RESPONSE"
echo ""
echo "=== Parsing response ==="
# Try to extract just the JSON response line
JSON_LINE=$(echo "$RESPONSE" | grep -E '^\{.*"jsonrpc".*\}$' | head -1 || echo "")
if [[ -z "$JSON_LINE" ]]; then
echo "❌ FAIL: No JSON response found in output"
echo ""
echo "Full output was:"
echo "$RESPONSE"
exit 1
fi
echo "JSON response:"
echo "$JSON_LINE" | jq '.' || echo "Failed to parse: $JSON_LINE"
echo ""
# Validate response structure
echo "=== Validation ==="
if echo "$JSON_LINE" | jq -e '.result == null or .result == {}' >/dev/null 2>&1; then
echo "❌ FAIL: Result is null or empty!"
echo "This is the error Goose sees: ExpectedInitResult(Some(EmptyResult(EmptyObject)))"
exit 1
fi
if ! echo "$JSON_LINE" | jq -e '.result.protocolVersion' >/dev/null 2>&1; then
echo "❌ FAIL: Missing protocolVersion in result"
exit 1
fi
if ! echo "$JSON_LINE" | jq -e '.result.serverInfo' >/dev/null 2>&1; then
echo "❌ FAIL: Missing serverInfo in result"
exit 1
fi
if ! echo "$JSON_LINE" | jq -e '.result.capabilities' >/dev/null 2>&1; then
echo "❌ FAIL: Missing capabilities in result"
exit 1
fi
echo "✅ PASS: All required fields present"
echo ""
echo "=== Result details ==="
echo "$JSON_LINE" | jq '.result'