#!/usr/bin/env bash set -e echo "🚀 Запуск Security Tools MCP Collection..." # Функция для ожидания запуска сервиса wait_for_service() { local port=$1 local service_name=$2 local max_attempts=30 local attempt=1 echo "⏳ Ожидание запуска $service_name на порту $port..." while [ $attempt -le $max_attempts ]; do if curl -f http://localhost:$port/health 2>/dev/null || curl -f http://localhost:$port 2>/dev/null; then echo "✅ $service_name запущен на порту $port" return 0 fi echo " Попытка $attempt/$max_attempts для $service_name..." sleep 2 attempt=$((attempt + 1)) done echo "❌ Не удалось дождаться запуска $service_name" return 1 } # Экспортируем переменные окружения для MCP серверов export GRADIO_SERVER_NAME=${GRADIO_SERVER_NAME:-0.0.0.0} # Запускаем Bandit MCP сервер в фоне echo "🔒 Запуск Bandit Security Scanner..." export GRADIO_SERVER_PORT=7861 python bandit_mcp.py & BANDIT_PID=$! # Запускаем Detect Secrets MCP сервер в фоне echo "🔍 Запуск Detect Secrets Scanner..." export GRADIO_SERVER_PORT=7862 python detect_secrets_mcp.py & DETECT_SECRETS_PID=$! # Запускаем Pip Audit MCP сервер в фоне echo "🛡️ Запуск Pip Audit Scanner..." export GRADIO_SERVER_PORT=7863 python pip_audit_mcp.py & PIP_AUDIT_PID=$! # Запускаем Circle Test MCP сервер в фоне echo "📋 Запуск Circle Test Scanner..." export GRADIO_SERVER_PORT=7864 python circle_test_mcp.py & CIRCLE_TEST_PID=$! # Запускаем Semgrep MCP сервер в фоне echo "🔍 Запуск Semgrep Scanner..." export GRADIO_SERVER_PORT=7865 python semgrep_mcp.py & SEMGREP_PID=$! # Даем серверам время на запуск echo "⏳ Ожидание запуска всех MCP серверов..." sleep 10 # Проверяем что все серверы запустились wait_for_service 7861 "Bandit" wait_for_service 7862 "Detect Secrets" wait_for_service 7863 "Pip Audit" wait_for_service 7864 "Circle Test" wait_for_service 7865 "Semgrep" # Функция для корректного завершения всех процессов cleanup() { echo "🛑 Завершение всех сервисов..." kill $BANDIT_PID $DETECT_SECRETS_PID $PIP_AUDIT_PID $CIRCLE_TEST_PID $SEMGREP_PID 2>/dev/null || true wait $BANDIT_PID $DETECT_SECRETS_PID $PIP_AUDIT_PID $CIRCLE_TEST_PID $SEMGREP_PID 2>/dev/null || true echo "✅ Все сервисы завершены" } # Регистрируем обработчик сигналов trap cleanup SIGTERM SIGINT # Запускаем главный агент на порту 7860 echo "🎯 Запуск главного Security Tools Agent..." export GRADIO_SERVER_PORT=7860 python main.py # Если main.py завершился, останавливаем все остальные сервисы cleanup