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

86 lines
2.6 KiB
Bash
Executable file

#!/bin/bash
# Manual test to verify MCP initialize response through actual stdio transport
# This simulates what a real MCP client does
set -euo pipefail
YAMS_BIN="${1:-./build/debug/src/app/yams}"
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: $YAMS_BIN"
echo ""
# Test 1: Basic initialize request
echo "=== Test 1: Initialize with protocol version 2024-11-05 ==="
RESPONSE=$(echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","clientInfo":{"name":"test-client","version":"1.0"}}}' | timeout 5 "$YAMS_BIN" mcp 2>&1 | grep -v "^\[" | head -1)
echo "Raw response length: ${#RESPONSE}"
if [[ -z "$RESPONSE" ]]; then
echo "❌ FAIL: No response received (timeout or error)"
exit 1
fi
echo "Response:"
echo "$RESPONSE" | jq '.' || echo "Failed to parse JSON: $RESPONSE"
# Check for empty result
if echo "$RESPONSE" | jq -e '.result == null or .result == {}' >/dev/null 2>&1; then
echo "❌ FAIL: Result is null or empty!"
exit 1
fi
# Check required fields
if ! echo "$RESPONSE" | jq -e '.result.protocolVersion' >/dev/null 2>&1; then
echo "❌ FAIL: Missing protocolVersion!"
exit 1
fi
if ! echo "$RESPONSE" | jq -e '.result.serverInfo' >/dev/null 2>&1; then
echo "❌ FAIL: Missing serverInfo!"
exit 1
fi
if ! echo "$RESPONSE" | jq -e '.result.capabilities' >/dev/null 2>&1; then
echo "❌ FAIL: Missing capabilities!"
exit 1
fi
echo "✅ PASS: All required fields present"
echo ""
# Test 2: Initialize without protocolVersion
echo "=== Test 2: Initialize without protocol version ==="
RESPONSE2=$(echo '{"jsonrpc":"2.0","id":2,"method":"initialize","params":{"clientInfo":{"name":"test","version":"1.0"}}}' | timeout 5 "$YAMS_BIN" mcp 2>&1 | grep -v "^\[" | head -1)
echo "Response:"
echo "$RESPONSE2" | jq '.'
if echo "$RESPONSE2" | jq -e '.result == null or .result == {}' >/dev/null 2>&1; then
echo "❌ FAIL: Result is null or empty!"
exit 1
fi
echo "✅ PASS: Initialize works without explicit protocol version"
echo ""
# Test 3: Initialize with empty params
echo "=== Test 3: Initialize with empty params ==="
RESPONSE3=$(echo '{"jsonrpc":"2.0","id":3,"method":"initialize","params":{}}' | timeout 5 "$YAMS_BIN" mcp 2>&1 | grep -v "^\[" | head -1)
echo "Response:"
echo "$RESPONSE3" | jq '.'
if echo "$RESPONSE3" | jq -e '.result == null or .result == {}' >/dev/null 2>&1; then
echo "❌ FAIL: Result is null or empty!"
exit 1
fi
echo "✅ PASS: Initialize works with empty params"
echo ""
echo "=== All tests passed! ==="