import os import subprocess import sys import re from pathlib import Path ROOT = Path(__file__).resolve().parent PYTHON_PATH = (ROOT.parent / ".venv" / "Scripts" / "python.exe").resolve() PID_FILE = ROOT / "mcps.pid" # Rutas relativas de scripts (no es necesario configurar puertos) scripts = [ "../domains/Llms/MCPs/McpServers/server_files.py", "../domains/Llms/MCPs/McpServers/server_math.py", "../domains/Llms/MCPs/McpServers/server_utils.py" ] print("🚀 Iniciando scripts MCP con entorno virtual...") # Verificar intérprete Python if not PYTHON_PATH.exists(): print(f"❌ No se encontró Python en: {PYTHON_PATH}") sys.exit(1) # Limpiar archivo de PIDs previo if PID_FILE.exists(): PID_FILE.unlink() # Expresión regular para capturar la URL de uvicorn URL_REGEX = re.compile(r"Uvicorn running on (?Phttp://[^\s]+)") # Lanzar cada script y detectar su URL for relative_path in scripts: script_path = (ROOT / relative_path).resolve() if not script_path.exists(): print(f"⚠ Script no encontrado: {script_path}") continue try: proc = subprocess.Popen( [str(PYTHON_PATH), str(script_path)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True ) # Leer la salida para encontrar la URL url = None for line in proc.stdout: match = URL_REGEX.search(line) if match: url = match.group("url") break # Guardar el PID with open(PID_FILE, "a", encoding="utf-8") as f: f.write(str(proc.pid) + "\n") print(f"→ {relative_path} lanzado con PID {proc.pid}") if url: print(f" 🛰️ Servidor accesible en: {url}") else: print(" ⚠ No se detectó URL del servidor.") except Exception as e: print(f"❌ Error al lanzar {relative_path}:\n{e}") print("✅ Todos los scripts han sido procesados. PIDs guardados en mcps.pid.")