From 7ee9e69b289d4cadc27f5a13c2e3c07695c03cdb Mon Sep 17 00:00:00 2001 From: josedario87 Date: Mon, 13 Oct 2025 19:39:32 -0600 Subject: [PATCH] Configurar MCP en mismo dominio de la app principal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Cambiar router MCP para usar APP_DOMAIN/mcp en lugar de dominio separado - Prioridad 200 para que tenga precedencia sobre otros routers - Eliminar variable MCP_DOMAIN del workflow y .env.example - Actualizar README con nueva configuración de endpoints - El servidor MCP estará en docs.nucleoriofrio.com/mcp sin Authentik --- .env.example | 4 +--- .gitea/workflows/build-and-deploy.yml | 1 - README.md | 13 ++++++++----- docker-compose.yml | 5 +++-- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/.env.example b/.env.example index c1aeecd..6d54c2b 100644 --- a/.env.example +++ b/.env.example @@ -19,11 +19,9 @@ REGISTRY_URL=gitea.ejemplo.com APP_NAME=mi-app # Dominio donde se desplegará la aplicación +# El servidor MCP estará disponible en: APP_DOMAIN/mcp (sin autenticación) APP_DOMAIN=miapp.ejemplo.com -# Dominio para el servidor MCP Docker (sin autenticación) -MCP_DOMAIN=mcp.ejemplo.com - # =========================================== # APPLICATION # =========================================== diff --git a/.gitea/workflows/build-and-deploy.yml b/.gitea/workflows/build-and-deploy.yml index 348b2a3..6e1c703 100644 --- a/.gitea/workflows/build-and-deploy.yml +++ b/.gitea/workflows/build-and-deploy.yml @@ -46,7 +46,6 @@ jobs: # Variables de entorno para docker-compose APP_DOMAIN: ${{ vars.APP_DOMAIN }} NUXT_PUBLIC_APP_URL: ${{ vars.NUXT_PUBLIC_APP_URL }} - MCP_DOMAIN: ${{ vars.MCP_DOMAIN }} steps: - uses: actions/checkout@v3 - name: Login to registry diff --git a/README.md b/README.md index 369092b..6df3af7 100644 --- a/README.md +++ b/README.md @@ -35,13 +35,16 @@ Este repositorio contiene la documentación del funcionamiento del sistema Nucle Aplicación Nuxt 4 con la documentación del sistema Nucleo, expuesta mediante Traefik con autenticación Authentik. ### MCP Docker Server (`mcp-docker`) -Servidor MCP de Docker (`ckreiling/mcp-server-docker`) que permite gestionar contenedores Docker mediante lenguaje natural. Este servicio: -- Usa el puerto 8080 para comunicación MCP +Servidor MCP personalizado construido con TypeScript que expone operaciones Docker a través del protocolo MCP sobre HTTP. Este servicio: +- Implementa 13 herramientas Docker seguras usando dockerode +- Usa el puerto 3000 para comunicación HTTP - Tiene acceso al socket de Docker del host (solo lectura) - Se ejecuta en las redes `principal` y `traefik-network` -- **Expuesto públicamente a través de Traefik SIN autenticación Authentik** -- Accesible en el dominio configurado en `MCP_DOMAIN` -- Incluye soporte para operaciones de Docker mediante protocolo MCP +- **Expuesto públicamente en `APP_DOMAIN/mcp` SIN autenticación Authentik** +- Prioridad 200 en Traefik para evitar conflictos con otros routers +- Endpoints disponibles: + - `POST /mcp` - Protocolo MCP para operaciones Docker + - `GET /mcp/health` - Health check del servicio ## Desarrollo Local diff --git a/docker-compose.yml b/docker-compose.yml index 9f995a7..ff41e8d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -68,10 +68,11 @@ services: # Service - "traefik.http.services.${APP_NAME}-mcp.loadbalancer.server.port=3000" - # Router sin autenticación con PathPrefix para /mcp - - "traefik.http.routers.${APP_NAME}-mcp.rule=Host(`${MCP_DOMAIN}`) && PathPrefix(`/mcp`)" + # Router sin autenticación para /mcp - Mayor prioridad que la app principal + - "traefik.http.routers.${APP_NAME}-mcp.rule=Host(`${APP_DOMAIN}`) && PathPrefix(`/mcp`)" - "traefik.http.routers.${APP_NAME}-mcp.entrypoints=websecure" - "traefik.http.routers.${APP_NAME}-mcp.tls.certresolver=letsencrypt" + - "traefik.http.routers.${APP_NAME}-mcp.priority=200" - "traefik.http.routers.${APP_NAME}-mcp.service=${APP_NAME}-mcp" # Headers personalizados para MCP