Agent-almanac containerize-mcp-server
git clone https://github.com/pjt222/agent-almanac
T=$(mktemp -d) && git clone --depth=1 https://github.com/pjt222/agent-almanac "$T" && mkdir -p ~/.claude/skills && cp -r "$T/i18n/es/skills/containerize-mcp-server" ~/.claude/skills/pjt222-agent-almanac-containerize-mcp-server-9a4a7c && rm -rf "$T"
i18n/es/skills/containerize-mcp-server/SKILL.mdContenerizar Servidor MCP
Contenerizar un servidor MCP basado en R para despliegue y distribución reproducible.
Cuándo Usar
- Desplegando un servidor MCP en un entorno contenerizado
- Distribuyendo servidores MCP pre-configurados a miembros del equipo
- Integrando servidores MCP en infraestructura Kubernetes
- Necesitando aislamiento entre múltiples servidores MCP
- Automatizando el despliegue de servidores MCP en CI/CD
Entradas
- Requerido: Código fuente del servidor MCP (R o Node.js)
- Requerido: Lista de dependencias del servidor
- Opcional: Certificados TLS para conexiones seguras
- Opcional: Archivos de configuración del servidor
- Opcional: Requisitos de recursos (CPU, memoria)
Procedimiento
Paso 1: Crear Dockerfile para Servidor MCP R
Construir la imagen Docker con las dependencias necesarias.
FROM rocker/r-ver:4.4.0 # Instalar dependencias del sistema RUN apt-get update && apt-get install -y --no-install-recommends \ libcurl4-openssl-dev \ libssl-dev \ && rm -rf /var/lib/apt/lists/* # Instalar paquetes R necesarios RUN R -e "install.packages(c('mcptools', 'ellmer', 'jsonlite'), repos='https://cloud.r-project.org')" # Copiar código del servidor WORKDIR /server COPY . . # Exponer puerto MCP EXPOSE 8080 # Punto de entrada CMD ["Rscript", "-e", "mcptools::mcp_server()"]
Esperado: Dockerfile creado con todas las dependencias, imagen base apropiada seleccionada.
En caso de fallo: Verificar que los paquetes R se instalan correctamente, comprobar dependencias del sistema faltantes.
Paso 2: Configurar Red y Transporte
Configurar el transporte de red para el servidor MCP.
# Para transporte stdio (comunicación estándar) CMD ["Rscript", "-e", "mcptools::mcp_server()"] # Para transporte HTTP/SSE EXPOSE 8080 CMD ["Rscript", "-e", "mcptools::mcp_server(transport='sse', port=8080, host='0.0.0.0')"]
Esperado: El servidor acepta conexiones en el transporte configurado, los puertos están correctamente expuestos.
En caso de fallo: Verificar que el host es '0.0.0.0' (no 'localhost') para acceso externo al contenedor, comprobar reglas de firewall.
Paso 3: Compilar y Probar
Compilar la imagen y verificar la funcionalidad.
# Compilar imagen docker build -t mcp-server-r:latest . # Ejecutar con transporte stdio docker run -i mcp-server-r:latest # Ejecutar con transporte HTTP docker run -p 8080:8080 mcp-server-r:latest # Probar conectividad curl http://localhost:8080/health
Esperado: El servidor MCP se inicia correctamente dentro del contenedor, acepta conexiones de clientes.
En caso de fallo: Revisar logs del contenedor (
docker logs), verificar que los paquetes R están disponibles, comprobar el mapeo de puertos.
Paso 4: Optimizar Imagen
Reducir el tamaño de la imagen para producción.
# Compilación multi-etapa FROM rocker/r-ver:4.4.0 AS builder RUN R -e "install.packages('renv', repos='https://cloud.r-project.org')" COPY renv.lock . RUN R -e "renv::restore()" FROM rocker/r-ver:4.4.0 COPY --from=builder /usr/local/lib/R/site-library /usr/local/lib/R/site-library COPY . /server WORKDIR /server CMD ["Rscript", "-e", "mcptools::mcp_server()"]
Esperado: La imagen final es significativamente más pequeña que la versión de una sola etapa.
En caso de fallo: Verificar que todos los paquetes necesarios se copian desde la etapa de compilación, probar la imagen final exhaustivamente.
Validación
- La imagen Docker se compila sin errores
- El servidor MCP se inicia dentro del contenedor
- Los clientes pueden conectarse al servidor contenerizado
- Las herramientas MCP están disponibles y funcionan correctamente
- El tamaño de la imagen es razonable para distribución
- El contenedor se reinicia limpiamente sin pérdida de estado
Errores Comunes
- Host localhost en contenedor: Usar '0.0.0.0' como host para que el servidor sea accesible desde fuera del contenedor.
- Paquetes R faltantes: Instalar todas las dependencias en el Dockerfile, no confiar en el entorno del host.
- Tiempo de inicio largo: Pre-compilar paquetes en la etapa de compilación para reducir el tiempo de inicio.
- Sin persistencia: Los datos del servidor se pierden al reiniciar el contenedor; usar volúmenes para estado persistente.
Habilidades Relacionadas
- Patrones base de Dockerfile para aplicaciones Rcreate-r-dockerfile
- Configuración de servidores MCP sin Dockerconfigure-mcp-server
- Construir servidores MCP personalizadosbuild-custom-mcp-server
- Andamiaje de nuevos servidores MCPscaffold-mcp-server