Skip to main content
Glama

TeamSpeak MCP

by MarlBurroW
integration-tests.yml17.4 kB
name: Integration Tests on: # DÉSACTIVÉ - Tests d'intégration trop complexes pour la CI # Nécessitent: permissions admin, gestion tokens, clients réels # Gardé pour référence et tests manuels en local workflow_dispatch: # Uniquement manuel si besoin inputs: force_run: description: 'Force run integration tests (use with caution)' required: false default: 'false' type: choice options: - 'false' - 'true' # Tests automatiques désactivés - trop complexes pour CI # push: # branches: [ main, develop ] # pull_request: # branches: [ main ] # schedule: # - cron: '0 2 * * *' env: DOCKER_BUILDKIT: 1 COMPOSE_DOCKER_CLI_BUILD: 1 # Force official TeamSpeak image in CI (AMD64 environment) TEAMSPEAK_IMAGE: "teamspeak:latest" # CI-specific optimizations DOCKER_CLI_HINTS: false BUILDKIT_PROGRESS: plain jobs: integration-tests: runs-on: ubuntu-latest timeout-minutes: 20 # Condition pour ne jamais s'exécuter automatiquement if: github.event.inputs.force_run == 'true' strategy: matrix: teamspeak-version: ['latest'] # Can extend to test multiple TS3 versions steps: - name: Checkout repository uses: actions/checkout@v4 - name: Create test directories run: | mkdir -p tests test_results scripts chmod +x scripts/run-integration-tests.sh - name: Build test images run: | echo "🏗️ Building Docker images for integration tests..." echo "📦 Using TeamSpeak image for CI: $TEAMSPEAK_IMAGE" docker compose -f docker-compose.test.yml build - name: Start TeamSpeak 3 Server run: | echo "🚀 Starting TeamSpeak 3 server..." # Show system resources in CI echo "🖥️ CI System Resources:" free -h || echo "free command not available" df -h || echo "df command not available" nproc || echo "nproc command not available" docker compose -f docker-compose.test.yml up -d teamspeak3-server echo "📋 Container status after start:" docker compose -f docker-compose.test.yml ps -a echo "🐳 Docker system info:" docker info --format '{{.Architecture}}' | head -1 docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" || true echo "📋 Initial server logs:" sleep 10 docker compose -f docker-compose.test.yml logs --tail=20 teamspeak3-server - name: Wait for TeamSpeak server run: | echo "⏳ Waiting for TeamSpeak server to be ready..." timeout=180 counter=0 while [ $counter -lt $timeout ]; do # Test direct connectivity first if docker compose -f docker-compose.test.yml exec -T teamspeak3-server nc -z localhost 10011 2>/dev/null; then echo "✅ TeamSpeak server is ready after ${counter}s" break fi # Check container status and health every 30 seconds if [ $((counter % 30)) -eq 0 ] && [ $counter -gt 0 ]; then echo "⏳ Still waiting... (${counter}s elapsed)" echo "📊 Container status:" docker compose -f docker-compose.test.yml ps -a echo "🏥 Health check details:" docker inspect ts3-test-server --format='{{.State.Health.Status}}: {{range .State.Health.Log}}{{.Output}}{{end}}' || true echo "📋 Recent server logs:" docker compose -f docker-compose.test.yml logs --tail=10 teamspeak3-server echo "🔍 CPU/Memory usage:" docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" ts3-test-server || true fi # More detailed failure analysis if [ $counter -eq $timeout ]; then echo "❌ TeamSpeak server failed to start after ${timeout}s" echo "📋 Full container inspection:" docker inspect ts3-test-server || true echo "📋 Full server logs:" docker compose -f docker-compose.test.yml logs teamspeak3-server echo "📋 Container status:" docker compose -f docker-compose.test.yml ps -a echo "🔧 System diagnostics:" docker system df docker system events --since ${timeout}s --until now || true exit 1 fi sleep 1 counter=$((counter + 1)) done - name: Test TeamSpeak connection run: | echo "🔍 Testing direct connection to TeamSpeak server..." # Test basic connection from host echo "🌐 Testing raw socket connection from host..." if timeout 10 bash -c "</dev/tcp/localhost/10011"; then echo "✅ Port 10011 is open from host" else echo "❌ Port 10011 is not accessible from host" echo "📋 Port mapping status:" docker compose -f docker-compose.test.yml port teamspeak3-server 10011 || true echo "📋 Network inspection:" docker network ls docker network inspect teamspeak-mcp_ts3-test-network || true fi # Test container internal connectivity echo "🔍 Testing internal container connectivity..." if docker compose -f docker-compose.test.yml exec -T teamspeak3-server sh -c "nc -z localhost 10011"; then echo "✅ Port 10011 is accessible inside container" else echo "❌ Port 10011 is not accessible inside container" echo "📋 Container process list:" docker compose -f docker-compose.test.yml exec -T teamspeak3-server ps aux || true echo "📋 Container network status:" docker compose -f docker-compose.test.yml exec -T teamspeak3-server netstat -tlnp || true fi # Test ServerQuery protocol echo "🔗 Testing ServerQuery protocol..." response=$(echo -e "version\nquit" | nc -w 10 localhost 10011 2>/dev/null || echo "FAILED") if echo "$response" | grep -q "version="; then echo "✅ ServerQuery is responding correctly" echo "📊 Response: $(echo "$response" | head -2)" else echo "❌ ServerQuery test failed" echo "📊 Response: $response" echo "📋 Recent container logs:" docker compose -f docker-compose.test.yml logs --tail=50 teamspeak3-server fi # Test with alternative healthcheck echo "🏥 Testing alternative health approach..." if docker compose -f docker-compose.test.yml exec -T teamspeak3-server sh -c "pgrep -f ts3server"; then echo "✅ TeamSpeak process is running" else echo "❌ TeamSpeak process not found" echo "📋 All running processes:" docker compose -f docker-compose.test.yml exec -T teamspeak3-server ps aux || true fi - name: Test inter-container connectivity run: | echo "🔗 Testing inter-container connectivity..." # Test from MCP container to TeamSpeak container echo "📡 Testing MCP → TeamSpeak connectivity..." docker compose -f docker-compose.test.yml run --rm \ -e TEAMSPEAK_HOST=teamspeak3-server \ -e TEAMSPEAK_PORT=10011 \ teamspeak-mcp-test debug # Test network tools availability in MCP container echo "🛠️ Testing network tools in MCP container..." docker compose -f docker-compose.test.yml run --rm teamspeak-mcp-test sh -c " echo 'Available network tools:' command -v nc >/dev/null 2>&1 && echo ' ✅ nc: available' || echo ' ❌ nc: missing' command -v ping >/dev/null 2>&1 && echo ' ✅ ping: available' || echo ' ❌ ping: missing' command -v nslookup >/dev/null 2>&1 && echo ' ✅ nslookup: available' || echo ' ❌ nslookup: missing' command -v wget >/dev/null 2>&1 && echo ' ✅ wget: available' || echo ' ❌ wget: missing' command -v python3 >/dev/null 2>&1 && echo ' ✅ python3: available' || echo ' ❌ python3: missing' echo 'DNS resolution test:' nslookup teamspeak3-server || echo ' DNS resolution failed' echo 'Direct connectivity test:' nc -z teamspeak3-server 10011 && echo ' ✅ TeamSpeak reachable' || echo ' ❌ TeamSpeak unreachable' " || true # Test Docker network inspection echo "🌐 Docker network inspection..." docker network ls docker network inspect teamspeak-mcp_ts3-test-network || true - name: Extract admin token run: | echo "🔑 Extracting admin token..." # Try to extract token even if healthcheck failed echo "📊 Container status before token extraction:" docker compose -f docker-compose.test.yml ps -a # Check if server is actually responding regardless of healthcheck if echo -e "version\nquit" | nc -w 5 localhost 10011 2>/dev/null | grep -q "version="; then echo "✅ Server is responding to ServerQuery, proceeding with token extraction..." docker compose -f docker-compose.test.yml up token-extractor else echo "❌ Server is not responding to ServerQuery" echo "📋 Trying token extraction anyway (server might still be starting)..." docker compose -f docker-compose.test.yml up token-extractor || true # Wait a bit more and try again echo "⏳ Waiting 30 more seconds for server to stabilize..." sleep 30 if echo -e "version\nquit" | nc -w 5 localhost 10011 2>/dev/null | grep -q "version="; then echo "✅ Server is now responding after additional wait" else echo "❌ Server still not responding, but continuing with tests..." fi fi if [ -f scripts/admin_token.txt ]; then echo "✅ Admin token extracted successfully" # Don't echo the token for security else echo "⚠️ No admin token found, tests will run without password" fi - name: Run integration tests env: TEAMSPEAK_HOST: teamspeak3-server TEAMSPEAK_PORT: 10011 TEAMSPEAK_USER: serveradmin TEAMSPEAK_SERVER_ID: 1 GITHUB_ACTIONS: true run: | echo "🧪 Running comprehensive integration tests..." # Set password from token if available if [ -f scripts/admin_token.txt ]; then export TEAMSPEAK_PASSWORD=$(cat scripts/admin_token.txt) echo "🔑 Using extracted admin token" else export TEAMSPEAK_PASSWORD="" echo "⚠️ No admin token available, trying without password" fi # Final connectivity check before tests echo "🔍 Final connectivity check before running integration tests..." if echo -e "version\nquit" | nc -w 5 localhost 10011 2>/dev/null | grep -q "version="; then echo "✅ ServerQuery connection confirmed, running integration tests..." # Run integration tests with detailed error capturing echo "🚀 Starting integration tests with enhanced error handling..." set +e # Don't exit on error, capture it docker compose -f docker-compose.test.yml run --rm \ -e TEAMSPEAK_HOST=$TEAMSPEAK_HOST \ -e TEAMSPEAK_PORT=$TEAMSPEAK_PORT \ -e TEAMSPEAK_USER=$TEAMSPEAK_USER \ -e TEAMSPEAK_PASSWORD="$TEAMSPEAK_PASSWORD" \ -e TEAMSPEAK_SERVER_ID=$TEAMSPEAK_SERVER_ID \ teamspeak-mcp-test integration-test test_exit_code=$? set -e # Re-enable exit on error echo "📊 Integration test exit code: $test_exit_code" if [ $test_exit_code -ne 0 ]; then echo "❌ Integration tests failed with exit code $test_exit_code" echo "🔍 Diagnostic information:" echo "📋 Recent TeamSpeak server logs:" docker compose -f docker-compose.test.yml logs --tail=30 teamspeak3-server echo "📋 MCP container logs:" docker compose -f docker-compose.test.yml logs --tail=30 teamspeak-mcp-test || echo "No MCP container logs available" echo "📊 Container status:" docker compose -f docker-compose.test.yml ps -a # Try to get partial test results if available if [ -f test_results/integration_results.json ]; then echo "📋 Partial test results found:" cat test_results/integration_results.json | head -20 else echo "📋 No test results file found" fi exit $test_exit_code else echo "✅ Integration tests completed successfully!" fi else echo "❌ ServerQuery still not responding" echo "📋 Attempting basic MCP connection test anyway..." # Try a basic connection test instead of full integration tests docker compose -f docker-compose.test.yml run --rm \ -e TEAMSPEAK_HOST=$TEAMSPEAK_HOST \ -e TEAMSPEAK_PORT=$TEAMSPEAK_PORT \ -e TEAMSPEAK_USER=$TEAMSPEAK_USER \ -e TEAMSPEAK_PASSWORD="$TEAMSPEAK_PASSWORD" \ -e TEAMSPEAK_SERVER_ID=$TEAMSPEAK_SERVER_ID \ teamspeak-mcp-test test || true echo "⚠️ Basic test completed, integration tests may have failed" echo "📋 This suggests an issue with TeamSpeak server startup in CI environment" fi - name: Upload test results uses: actions/upload-artifact@v4 if: always() # Upload results even if tests fail with: name: integration-test-results-${{ matrix.teamspeak-version }} path: | test_results/ scripts/admin_token.txt retention-days: 30 - name: Display test summary if: always() run: | echo "📊 Integration Test Summary" echo "==========================" if [ -f test_results/integration_results.json ]; then echo "📋 Test results found:" # Count successes and failures if command -v jq >/dev/null 2>&1; then successes=$(jq '[.[] | select(.status == "SUCCESS")] | length' test_results/integration_results.json) failures=$(jq '[.[] | select(.status == "FAILURE")] | length' test_results/integration_results.json) total=$(jq 'length' test_results/integration_results.json) echo "✅ Successes: $successes" echo "❌ Failures: $failures" echo "📊 Total: $total" echo "🎯 Success rate: $(echo "scale=1; $successes * 100 / $total" | bc)%" if [ $failures -gt 0 ]; then echo "" echo "❌ Failed tests:" jq -r '.[] | select(.status == "FAILURE") | " • \(.tool): \(.message)"' test_results/integration_results.json fi echo "" echo "✅ Successful tests:" jq -r '.[] | select(.status == "SUCCESS") | " • \(.tool): \(.message)"' test_results/integration_results.json else echo "📄 Raw results (install jq for better formatting):" cat test_results/integration_results.json fi else echo "❌ No test results file found" fi - name: Show container logs on failure if: failure() run: | echo "🔍 Container logs for debugging:" echo "================================" echo "" echo "📋 TeamSpeak 3 Server logs:" docker compose -f docker-compose.test.yml logs --tail=100 teamspeak3-server echo "" echo "📋 MCP Test container logs:" docker compose -f docker-compose.test.yml logs --tail=100 teamspeak-mcp-test echo "" echo "📋 Token extractor logs:" docker compose -f docker-compose.test.yml logs token-extractor - name: Cleanup if: always() run: | echo "🧹 Cleaning up test environment..." docker compose -f docker-compose.test.yml down --volumes --remove-orphans docker system prune -f

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/MarlBurroW/teamspeak-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server