# Test All MCP Servers for ShopDB Development # Run from flask-shopdb directory to verify all MCP servers are configured and working # # Usage: # .\\.claude\test-mcp-servers.ps1 # .\\.claude\test-mcp-servers.ps1 -Verbose # .\\.claude\test-mcp-servers.ps1 -SkipVM param( [switch]$SkipVM, [switch]$Verbose ) $ErrorActionPreference = "Continue" Write-Host "" Write-Host "==========================================" -ForegroundColor Cyan Write-Host "ShopDB MCP Server Test Suite" -ForegroundColor Cyan Write-Host "==========================================" -ForegroundColor Cyan Write-Host "" $results = @{} $configPath = Join-Path $PSScriptRoot "mcp-servers.json" # Test 1: Configuration File Exists Write-Host "[1/7] Checking MCP configuration..." -ForegroundColor Yellow if (Test-Path $configPath) { $config = Get-Content $configPath | ConvertFrom-Json Write-Host " OK: Config file exists at $configPath" -ForegroundColor Green $results["config"] = $true } else { Write-Host " FAIL: Config file not found at $configPath" -ForegroundColor Red $results["config"] = $false exit 1 } # Test 2: Gortex MCP Server Write-Host "[2/7] Testing Gortex MCP server..." -ForegroundColor Yellow $gortexPath = "C:\Users\270015376\Documents\gortex.exe" if (Test-Path $gortexPath) { try { $gortexVersion = & $gortexPath --version 2>&1 Write-Host " OK: Gortex found at $gortexPath" -ForegroundColor Green if ($Verbose) { Write-Host " Version: $gortexVersion" -ForegroundColor Gray } $results["gortex"] = $true } catch { Write-Host " WARN: Gortex found but cannot execute: $($_.Exception.Message)" -ForegroundColor Yellow $results["gortex"] = $false } } else { Write-Host " FAIL: Gortex not found at $gortexPath" -ForegroundColor Red Write-Host " Download from: https://github.com/zzet/gortex/releases" -ForegroundColor Yellow $results["gortex"] = $false } # Test 3: MySQL MCP Server (via npx) Write-Host "[3/7] Testing MySQL MCP server..." -ForegroundColor Yellow try { $npxCheck = Get-Command npx -ErrorAction Stop Write-Host " OK: npx found at $($npxCheck.Source)" -ForegroundColor Green # Test MySQL connection $mysqlHost = "127.0.0.1" $mysqlPort = 3306 $tcp = Test-NetConnection -ComputerName $mysqlHost -Port $mysqlPort -WarningAction SilentlyContinue -InformationLevel Quiet if ($tcp) { Write-Host " OK: MySQL server is reachable at ${mysqlHost}:${mysqlPort}" -ForegroundColor Green $results["mysql"] = $true } else { Write-Host " WARN: MySQL server not reachable at ${mysqlHost}:${mysqlPort}" -ForegroundColor Yellow Write-Host " Start with: docker compose up -d db" -ForegroundColor Yellow $results["mysql"] = $false } } catch { Write-Host " FAIL: npx not found (Node.js/npm not installed)" -ForegroundColor Red Write-Host " Install from: https://nodejs.org/" -ForegroundColor Yellow $results["mysql"] = $false } # Test 4: Browser MCP Server (via npx) Write-Host "[4/7] Testing Browser MCP server..." -ForegroundColor Yellow if ($npxCheck) { try { # Check if package exists $browserPkg = npm view @agent-infra/mcp-server-browser version 2>&1 if ($LASTEXITCODE -eq 0) { Write-Host " OK: Browser MCP package exists (version $browserPkg)" -ForegroundColor Green $results["browser"] = $true } else { Write-Host " WARN: Browser MCP package not found in npm registry" -ForegroundColor Yellow $results["browser"] = $false } } catch { Write-Host " WARN: Cannot verify browser MCP package" -ForegroundColor Yellow $results["browser"] = $false } } else { Write-Host " SKIP: npx not available" -ForegroundColor Gray $results["browser"] = $false } # Test 5: VM SSH MCP Server if (-not $SkipVM) { Write-Host "[5/7] Testing VM SSH MCP server..." -ForegroundColor Yellow # Check VM connectivity $vmIP = "192.168.100.10" $vmUser = "SupportUser" # Test network connectivity $ping = Test-Connection -ComputerName $vmIP -Count 1 -Quiet -ErrorAction SilentlyContinue if ($ping) { Write-Host " OK: VM is reachable at $vmIP" -ForegroundColor Green # Check SSH port $sshPort = Test-NetConnection -ComputerName $vmIP -Port 22 -WarningAction SilentlyContinue -InformationLevel Quiet if ($sshPort) { Write-Host " OK: SSH port 22 is open on VM" -ForegroundColor Green $results["vm"] = $true } else { Write-Host " WARN: SSH port 22 is not open on VM" -ForegroundColor Yellow Write-Host " Run enable-vm-ssh.ps1 on the VM (as Administrator)" -ForegroundColor Yellow $results["vm"] = $false } } else { Write-Host " FAIL: VM not reachable at $vmIP" -ForegroundColor Red Write-Host " Check: Hyper-V VM is running" -ForegroundColor Yellow Write-Host " Check: VM network adapter connected to internal switch" -ForegroundColor Yellow $results["vm"] = $false } # Check ssh-mcp package if ($npxCheck) { try { $sshMcpPkg = npm view ssh-mcp version 2>&1 if ($LASTEXITCODE -eq 0) { Write-Host " OK: ssh-mcp package available (version $sshMcpPkg)" -ForegroundColor Green } else { Write-Host " WARN: ssh-mcp package not found" -ForegroundColor Yellow } } catch { Write-Host " WARN: Cannot verify ssh-mcp package" -ForegroundColor Yellow } } # Note about dual user setup if ($sshPort) { Write-Host " INFO: Two VM users configured:" -ForegroundColor Cyan Write-Host " - SupportUser (admin) for installation/config" -ForegroundColor Gray Write-Host " - shopfloor (standard user, auto-login) for testing" -ForegroundColor Gray } } else { Write-Host "[5/7] Skipping VM test (use -SkipVM switch)" -ForegroundColor Gray $results["vm"] = "skipped" } # Test 6: Hyper-V Status Write-Host "[6/7] Checking Hyper-V VMs..." -ForegroundColor Yellow try { $vms = Get-VM -ErrorAction Stop if ($vms.Count -gt 0) { Write-Host " OK: Found $($vms.Count) VM(s)" -ForegroundColor Green foreach ($vm in $vms) { $stateColor = if ($vm.State -eq "Running") { "Green" } else { "Yellow" } Write-Host " - $($vm.Name): $($vm.State)" -ForegroundColor $stateColor } $results["hyperv"] = $true } else { Write-Host " INFO: No VMs found" -ForegroundColor Gray $results["hyperv"] = $true } } catch { Write-Host " INFO: Cannot use PowerShell Hyper-V cmdlets (need Hyper-V Administrators group)" -ForegroundColor Gray Write-Host " NOTE: VM MCP works via SSH - no admin needed for that!" -ForegroundColor Cyan Write-Host " TIP: Use Hyper-V Manager GUI to view/manage VMs" -ForegroundColor Gray if ($Verbose) { Write-Host " Error: $($_.Exception.Message)" -ForegroundColor Gray } $results["hyperv"] = "no-permission" } # Test 7: VM Snapshots Write-Host "[7/7] Checking VM snapshots..." -ForegroundColor Yellow try { $snapshots = Get-VMSnapshot -VMName * -ErrorAction Stop if ($snapshots.Count -gt 0) { Write-Host " OK: Found $($snapshots.Count) snapshot(s)" -ForegroundColor Green foreach ($snap in $snapshots) { Write-Host " - $($snap.VMName): $($snap.Name) ($(Get-Date $snap.CreationTime -Format 'yyyy-MM-dd HH:mm'))" -ForegroundColor Gray } $results["snapshots"] = $true } else { Write-Host " INFO: No snapshots found" -ForegroundColor Gray Write-Host " Create snapshots via Hyper-V Manager GUI (right-click VM -> Checkpoint)" -ForegroundColor Gray $results["snapshots"] = "none" } } catch { Write-Host " INFO: Cannot use PowerShell snapshot cmdlets (need Hyper-V Administrators group)" -ForegroundColor Gray Write-Host " TIP: Use Hyper-V Manager GUI to create/restore snapshots" -ForegroundColor Cyan if ($Verbose) { Write-Host " Error: $($_.Exception.Message)" -ForegroundColor Gray } $results["snapshots"] = "no-permission" } # Summary Write-Host "" Write-Host "==========================================" -ForegroundColor Cyan Write-Host "Summary" -ForegroundColor Cyan Write-Host "==========================================" -ForegroundColor Cyan Write-Host "" $passCount = ($results.Values | Where-Object { $_ -eq $true }).Count $totalCount = $results.Count $percentage = [math]::Round(($passCount / $totalCount) * 100) foreach ($test in $results.Keys) { $status = $results[$test] $icon = switch ($status) { $true { "OK"; "Green" } $false { "FAIL"; "Red" } "skipped" { "SKIP"; "Gray" } "none" { "INFO"; "Yellow" } "no-permission" { "WARN"; "Yellow" } default { "UNKNOWN"; "Gray" } } Write-Host " $($test.PadRight(15)): $($icon[0])" -ForegroundColor $icon[1] } Write-Host "" Write-Host "Overall: $passCount/$totalCount tests passed ($percentage%)" -ForegroundColor $(if ($percentage -ge 80) { "Green" } elseif ($percentage -ge 50) { "Yellow" } else { "Red" }) Write-Host "" # Next Steps if ($passCount -lt $totalCount) { Write-Host "Next Steps:" -ForegroundColor Yellow Write-Host "" if (-not $results["gortex"]) { Write-Host " 1. Install Gortex:" -ForegroundColor White Write-Host " curl -L -o gortex_windows_amd64.zip https://github.com/zzet/gortex/releases/latest/download/gortex_windows_amd64.zip" -ForegroundColor Gray Write-Host " unzip -o gortex_windows_amd64.zip -d C:\Users\270015376\Documents\" -ForegroundColor Gray Write-Host "" } if (-not $results["mysql"]) { Write-Host " 2. Start MySQL database:" -ForegroundColor White Write-Host " docker compose up -d db" -ForegroundColor Gray Write-Host "" } if ($results["vm"] -eq $false) { Write-Host " 3. Configure VM SSH:" -ForegroundColor White Write-Host " a. Start VM in Hyper-V Manager" -ForegroundColor Gray Write-Host " b. Run .claude\enable-vm-ssh.ps1 on VM (as Administrator)" -ForegroundColor Gray Write-Host " c. Test: ssh SupportUser@192.168.100.10" -ForegroundColor Gray Write-Host "" } } Write-Host "To use MCP servers with Claude Code:" -ForegroundColor Cyan Write-Host " 1. Run Claude Code from this directory (flask-shopdb)" -ForegroundColor White Write-Host " 2. MCP servers will auto-load from .claude/mcp-servers.json" -ForegroundColor White Write-Host " 3. Test by asking Claude to use each server" -ForegroundColor White Write-Host "" exit $(if ($passCount -eq $totalCount) { 0 } else { 1 })