Implementar MCP Docker Server personalizado
Some checks failed
build-and-deploy / build (push) Successful in 8s
build-and-deploy / deploy (push) Failing after 2s

- Creado servidor MCP en TypeScript con @modelcontextprotocol/sdk
- Implementadas 13 herramientas Docker seguras usando dockerode:
  * docker_ps: Listar contenedores
  * docker_logs: Ver logs de contenedores
  * docker_inspect: Inspeccionar contenedor
  * docker_stats: Estadísticas de recursos
  * docker_top: Procesos del contenedor
  * docker_start/stop/restart: Gestión de contenedores
  * docker_exec: Ejecutar comandos
  * docker_images/networks/volumes: Listar recursos
  * docker_info: Información del sistema
- Configurado servidor HTTP con Express en puerto 3000
- Agregado endpoint /mcp para protocolo MCP
- Agregado health check en /health
- Actualizado docker-compose.yml para usar imagen personalizada
- Configurado GitHub Actions para build y deploy automático
- Socket Docker montado en modo solo lectura para seguridad
This commit is contained in:
2025-10-13 19:12:34 -06:00
parent aa5ac70c7c
commit a84c7b9114
8 changed files with 712 additions and 6 deletions

View File

@@ -49,10 +49,11 @@ services:
- "traefik.http.middlewares.${APP_NAME}-cors.headers.addvaryheader=true"
mcp-docker:
image: docker:cli
image: ${REG}/${REPO_OWNER}/mcp-docker-server:latest
container_name: ${APP_NAME}-mcp-docker
restart: unless-stopped
command: mcp gateway run --port 8080 --transport streaming
environment:
- PORT=3000
volumes:
# Montar el socket de Docker para acceso al daemon
- /var/run/docker.sock:/var/run/docker.sock:ro
@@ -65,15 +66,15 @@ services:
- "traefik.docker.network=traefik-network"
# Service
- "traefik.http.services.${APP_NAME}-mcp.loadbalancer.server.port=8080"
- "traefik.http.services.${APP_NAME}-mcp.loadbalancer.server.port=3000"
# Router sin autenticación
- "traefik.http.routers.${APP_NAME}-mcp.rule=Host(`${MCP_DOMAIN}`)"
# Router sin autenticación con PathPrefix para /mcp
- "traefik.http.routers.${APP_NAME}-mcp.rule=Host(`${MCP_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.service=${APP_NAME}-mcp"
# Headers personalizados para WebSocket y streaming
# Headers personalizados para MCP
- "traefik.http.middlewares.${APP_NAME}-mcp-headers.headers.customrequestheaders.X-Forwarded-Proto=https"
- "traefik.http.routers.${APP_NAME}-mcp.middlewares=${APP_NAME}-mcp-headers"