MCP Docker Orchestrator

Un demonio para orquestar servidores MCP como contenedores Docker y configurar el enrutamiento basado en rutas de AWS ALB.

Documentación

MCP Docker Orchestrator

Un demonio gestionado por systemd que orquesta servidores MCP (Model Context Protocol) como contenedores Docker y configura el enrutamiento basado en rutas de AWS ALB.

Características

  • Integración con Docker Compose: Gestiona servidores MCP utilizando el formato estándar de Docker Compose
  • Integración con AWS ALB: Configura el enrutamiento basado en rutas en el Application Load Balancer de AWS
  • Panel web: Monitorea y controla los servicios MCP a través de una interfaz web
  • Autocuración: Reconciliar automáticamente la configuración y el estado real
  • Seguro: Sin persistencia de secretos, compatible con LiteLLM Proxy

Arquitectura

El MCP Docker Orchestrator consta de varios componentes principales:

  • Administrador de configuración: Maneja la carga y el análisis de la configuración de Docker Compose
  • Administrador de Compose: Gestiona el ciclo de vida de los servicios de Docker Compose
  • Administrador de ALB: Configura las reglas de enrutamiento de AWS ALB
  • Panel: Interfaz web para monitoreo y gestión
  • Servicio Orquestador: Proceso principal que coordina todos los componentes

Requisitos previos

  • Python 3.8 o superior
  • Docker y Docker Compose
  • Cuenta de AWS con los permisos adecuados
  • Host Linux (para el servicio systemd)

Instalación

Instalación automática

La forma más fácil de instalar es utilizando el script de configuración proporcionado:

sudo ./setup.sh

Esto hará lo siguiente:

  1. Instalar las dependencias de Python
  2. Crear los archivos de configuración predeterminados
  3. Configurar el servicio systemd
  4. Configurar los permisos

Instalación manual

  1. Instalar las dependencias de Python:

    pip install -r requirements.txt
    
  2. Configurar los ajustes en settings.conf

  3. Configurar los servidores MCP en mcp-compose.yaml

  4. Instalar el servicio systemd:

    sudo cp service.template /etc/systemd/system/mcp-orchestrator.service
    # Edit the service file to configure paths
    sudo systemctl daemon-reload
    sudo systemctl enable mcp-orchestrator.service
    

Configuración

Ajustes (settings.conf)

[aws]
region = us-west-2      # AWS region
alb_arn =               # ARN of your Application Load Balancer
listener_arn =          # ARN of your ALB listener
vpc_id =                # ID of your VPC

[service]
reconciliation_interval_seconds = 60  # How often to check and reconcile state
port_range_start = 8000               # Start of port range for container mapping
port_range_end = 9000                 # End of port range for container mapping

[dashboard]
username = admin        # Dashboard login username
password = changeme     # Dashboard login password (change this!)
path = /monitor         # URL path for dashboard

[logging]
level = INFO            # Logging level (DEBUG, INFO, WARNING, ERROR)

Configuración del servidor MCP (mcp-compose.yaml)

version: '3'

services:
  example-mcp-server:
    image: mcp/example:latest
    restart: always
    environment:
      FASTMCP_LOG_LEVEL: "ERROR"
      ADDITIONAL_ENV_VAR: "value"
    labels:
      mcp.path: "/mcp/example"
      mcp.disabled: "false"
      mcp.managed_by: "mcp-orchestrator"

Cada configuración de servidor MCP consta de:

  • image: Imagen de Docker a ejecutar
  • restart: Política de reinicio (siempre recomendado)
  • environment: Variables de entorno
  • labels:
    • mcp.path: Patrón de ruta para el enrutamiento de ALB
    • mcp.disabled: Si este servidor está deshabilitado
    • mcp.managed_by: Siempre debe ser "mcp-orchestrator"

Uso

Iniciar el servicio

sudo systemctl start mcp-orchestrator

Verificar el estado

sudo systemctl status mcp-orchestrator

Ver los registros

sudo journalctl -u mcp-orchestrator -f

Ejecución manual

Para pruebas o depuración:

# Run once and exit
python orchestrator/main.py --one-shot

# Run without dashboard
python orchestrator/main.py --no-dashboard

# Specify custom config files
python orchestrator/main.py --compose /path/to/mcp-compose.yaml --settings /path/to/settings.conf

# Migrate from old config format
python orchestrator/main.py --migrate /path/to/old/mcp.config.json

Panel

El panel web está disponible en:

http://your-server:5000/monitor

Inicio de sesión predeterminado: admin / changeme

Características:

  • Resumen de los servidores MCP
  • Monitoreo del estado de los contenedores
  • Configuración del enrutamiento de ALB
  • Acciones (iniciar/detener/reiniciar servicios)
  • Controles de sincronización

Enrutamiento

Cada servidor MCP se asigna a una ruta basada en su ID o en la etiqueta mcp.path:

/mcp/{server-id}/*

Estos patrones de ruta se configuran en las reglas del listener de ALB.

Migración desde mcp.config.json

Si está actualizando desde una versión anterior que usaba mcp.config.json, puede utilizar la herramienta de migración integrada:

python orchestrator/main.py --migrate /path/to/mcp.config.json

Esto hará lo siguiente:

  1. Leer su mcp.config.json existente
  2. Convertirlo al nuevo formato de Docker Compose
  3. Guardarlo como mcp-compose.yaml

Solución de problemas

Problemas con contenedores

  • Verifique el estado de Docker Compose: docker compose ps
  • Verifique los registros del contenedor: docker compose logs {service-id}
  • Verifique si hay conflictos de puertos
  • Si ve errores de "Permiso denegado":
    • El usuario del servicio necesita acceso al socket de Docker
    • Asegúrese de que el usuario esté en el grupo docker
    • Es posible que deba cerrar sesión y volver a iniciarla para que los cambios de grupo surtan efecto

Problemas con AWS ALB

  • Verifique las credenciales de AWS
  • Verifique el ARN del listener de ALB y las reglas
  • Asegúrese de que los grupos de destino estén configurados correctamente
  • Verifique que la instancia EC2 esté registrada con los grupos de destino

Problemas con el servicio

  • Verifique el estado de systemd: systemctl status mcp-orchestrator
  • Vea los registros: journalctl -u mcp-orchestrator -f
  • Verifique que los archivos de configuración tengan el formato correcto

Licencia

Este proyecto está licenciado bajo la Licencia MIT: consulte el archivo LICENSE para obtener más detalles.