86 lines
2.6 KiB
Bash
Executable file
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! ==="
|