svrnty-mcp-server/test-mcp-server.sh
Svrnty 516e1479c6 docs: comprehensive AI coding assistant research and MCP-first implementation plan
Research conducted on modern AI coding assistants (Cursor, GitHub Copilot, Cline,
Aider, Windsurf, Replit Agent) to understand architecture patterns, context management,
code editing workflows, and tool use protocols.

Key Decision: Pivoted from building full CLI (40-50h) to validation-driven MCP-first
approach (10-15h). Build 5 core CODEX MCP tools that work with ANY coding assistant,
validate adoption over 2-4 weeks, then decide on full CLI if demand proven.

Files:
- research/ai-systems/modern-coding-assistants-architecture.md (comprehensive research)
- research/ai-systems/codex-coding-assistant-implementation-plan.md (original CLI plan, preserved)
- research/ai-systems/codex-mcp-tools-implementation-plan.md (approved MCP-first plan)
- ideas/registry.json (updated with approved MCP tools proposal)

Architech Validation: APPROVED with pivot to MCP-first approach
Human Decision: Approved (pragmatic validation-driven development)

Next: Begin Phase 1 implementation (10-15 hours, 5 core MCP tools)

🤖 Generated with CODEX Research System

Co-Authored-By: The Archivist <archivist@codex.svrnty.io>
Co-Authored-By: The Architech <architech@codex.svrnty.io>
Co-Authored-By: Mathias Beaulieu-Duncan <mat@svrnty.io>
2025-10-22 21:00:34 -04:00

181 lines
5.5 KiB
Bash
Executable File

#!/bin/bash
#
# End-to-End Test Script for CODEX MCP Server
# Tests all 6 tools via JSON-RPC 2.0 protocol over stdin/stdout
#
set -e
PROJECT_DIR="/home/svrnty/codex/OpenHarbor.MCP"
SERVER_PROJECT="$PROJECT_DIR/samples/CodexMcpServer"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}================================${NC}"
echo -e "${BLUE}CODEX MCP Server - E2E Test${NC}"
echo -e "${BLUE}================================${NC}"
echo ""
# Function to send JSON-RPC request and capture response
test_mcp_request() {
local test_name="$1"
local request="$2"
local timeout_secs="${3:-3}"
echo -e "${YELLOW}Test: ${test_name}${NC}"
echo -e "Request: ${request}"
# Send request to server with timeout
response=$(echo "$request" | timeout "$timeout_secs" dotnet run --project "$SERVER_PROJECT" 2>&1 | grep -v "Building..." | grep -v "Determining projects" | grep -v "Restore" | grep -v "warnings" || true)
if [ -z "$response" ]; then
echo -e "${RED}✗ FAILED: No response received${NC}"
return 1
fi
# Check if response contains valid JSON-RPC structure
if echo "$response" | jq -e '.jsonrpc' > /dev/null 2>&1; then
echo -e "${GREEN}✓ PASSED${NC}"
echo -e "Response: $(echo "$response" | jq -c .)"
echo ""
return 0
else
echo -e "${RED}✗ FAILED: Invalid JSON-RPC response${NC}"
echo -e "Response: $response"
echo ""
return 1
fi
}
# Track test results
PASSED=0
FAILED=0
echo -e "${BLUE}Building server...${NC}"
dotnet build "$SERVER_PROJECT" > /dev/null 2>&1
echo -e "${GREEN}✓ Build successful${NC}"
echo ""
# Test 1: List all tools
echo -e "${BLUE}--- Test 1: List Tools (tools/list) ---${NC}"
if test_mcp_request "List all available tools" \
'{"jsonrpc":"2.0","id":"1","method":"tools/list"}' 5; then
((PASSED++))
else
((FAILED++))
fi
# Test 2: Search CODEX (will fail if API not running, but server should return proper error)
echo -e "${BLUE}--- Test 2: Search CODEX Tool ---${NC}"
if test_mcp_request "Call search_codex tool" \
'{"jsonrpc":"2.0","id":"2","method":"tools/call","params":{"name":"search_codex","arguments":{"query":"test"}}}' 5; then
((PASSED++))
else
((FAILED++))
fi
# Test 3: Get Document Tool
echo -e "${BLUE}--- Test 3: Get Document Tool ---${NC}"
if test_mcp_request "Call get_document tool" \
'{"jsonrpc":"2.0","id":"3","method":"tools/call","params":{"name":"get_document","arguments":{"id":"test123"}}}' 5; then
((PASSED++))
else
((FAILED++))
fi
# Test 4: List Documents Tool
echo -e "${BLUE}--- Test 4: List Documents Tool ---${NC}"
if test_mcp_request "Call list_documents tool" \
'{"jsonrpc":"2.0","id":"4","method":"tools/call","params":{"name":"list_documents","arguments":{"page":1,"pageSize":10}}}' 5; then
((PASSED++))
else
((FAILED++))
fi
# Test 5: Search By Tag Tool
echo -e "${BLUE}--- Test 5: Search By Tag Tool ---${NC}"
if test_mcp_request "Call search_by_tag tool" \
'{"jsonrpc":"2.0","id":"5","method":"tools/call","params":{"name":"search_by_tag","arguments":{"tag":"architecture"}}}' 5; then
((PASSED++))
else
((FAILED++))
fi
# Test 6: Get Document Sections Tool
echo -e "${BLUE}--- Test 6: Get Document Sections Tool ---${NC}"
if test_mcp_request "Call get_document_sections tool" \
'{"jsonrpc":"2.0","id":"6","method":"tools/call","params":{"name":"get_document_sections","arguments":{"id":"doc123"}}}' 5; then
((PASSED++))
else
((FAILED++))
fi
# Test 7: List Tags Tool
echo -e "${BLUE}--- Test 7: List Tags Tool ---${NC}"
if test_mcp_request "Call list_tags tool" \
'{"jsonrpc":"2.0","id":"7","method":"tools/call","params":{"name":"list_tags"}}' 5; then
((PASSED++))
else
((FAILED++))
fi
# Test 8: Error Handling - Unknown Method
echo -e "${BLUE}--- Test 8: Error Handling (Unknown Method) ---${NC}"
if test_mcp_request "Call unknown method" \
'{"jsonrpc":"2.0","id":"8","method":"unknown/method"}' 5; then
((PASSED++))
else
((FAILED++))
fi
# Test 9: Error Handling - Unknown Tool
echo -e "${BLUE}--- Test 9: Error Handling (Unknown Tool) ---${NC}"
if test_mcp_request "Call nonexistent tool" \
'{"jsonrpc":"2.0","id":"9","method":"tools/call","params":{"name":"nonexistent_tool","arguments":{}}}' 5; then
((PASSED++))
else
((FAILED++))
fi
# Test 10: Error Handling - Missing Tool Name
echo -e "${BLUE}--- Test 10: Error Handling (Missing Tool Name) ---${NC}"
if test_mcp_request "Call tool without name parameter" \
'{"jsonrpc":"2.0","id":"10","method":"tools/call","params":{"arguments":{}}}' 5; then
((PASSED++))
else
((FAILED++))
fi
# Summary
echo -e "${BLUE}================================${NC}"
echo -e "${BLUE}Test Summary${NC}"
echo -e "${BLUE}================================${NC}"
echo -e "${GREEN}Passed: $PASSED${NC}"
echo -e "${RED}Failed: $FAILED${NC}"
echo -e "Total: $((PASSED + FAILED))"
echo ""
if [ $FAILED -eq 0 ]; then
echo -e "${GREEN}✓ All tests passed!${NC}"
echo ""
echo -e "${BLUE}Next Steps:${NC}"
echo "1. Ensure CODEX API is running at http://localhost:5050"
echo "2. Configure Claude Desktop with this MCP server"
echo "3. Ask Claude to search your CODEX knowledge base!"
exit 0
else
echo -e "${RED}✗ Some tests failed${NC}"
echo ""
echo -e "${YELLOW}Troubleshooting:${NC}"
echo "- Check if CODEX API is running at http://localhost:5050"
echo "- Verify the server builds: dotnet build $SERVER_PROJECT"
echo "- Run tests: dotnet test"
exit 1
fi