Docker MCP server
Gestiona contenedores, volúmenes y servicios de Docker usando comandos en lenguaje natural.
Documentación
🐋 Docker MCP server
Un servidor MCP para gestionar Docker con lenguaje natural.
🪩 ¿Qué puede hacer?
- 🚀 Crear contenedores con lenguaje natural
- 🔍 Inspeccionar y depurar contenedores en ejecución
- 📀 Gestionar datos persistentes con volúmenes de Docker
❓ ¿Para quién es?
- Administradores de servidores: conéctate a motores Docker remotos, por ejemplo, para gestionar un sitio web público.
- Entusiastas: ejecuta contenedores localmente y experimenta con aplicaciones de código abierto que soporten Docker.
- Entusiastas de la IA: ¡lleva al límite lo que un LLM es capaz de hacer!
Demo
Una demostración rápida que muestra un despliegue de WordPress usando lenguaje natural:
https://github.com/user-attachments/assets/65e35e67-bce0-4449-af7e-9f4dd773b4b3
🏎️ Inicio rápido
Instalación
Claude Desktop
En MacOS: ~/Library/Application\ Support/Claude/claude_desktop_config.json
En Windows: %APPDATA%/Claude/claude_desktop_config.json
Instalar desde PyPi con uv
Si no tienes uv instalado, sigue las instrucciones de instalación para tu sistema:
enlace
Luego añade lo siguiente a tu archivo de servidores MCP:
"mcpServers": {
"mcp-server-docker": {
"command": "uvx",
"args": [
"mcp-server-docker"
]
}
}
Instalar con Docker
Por pura conveniencia, el servidor puede ejecutarse en un contenedor Docker.
Después de clonar este repositorio, construye la imagen Docker:
docker build -t mcp-server-docker .
Y luego añade lo siguiente a tu archivo de servidores MCP:
"mcpServers": {
"mcp-server-docker": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"/var/run/docker.sock:/var/run/docker.sock",
"mcp-server-docker:latest"
]
}
}
Ten en cuenta que montamos el socket de Docker como un volumen; esto asegura que el servidor MCP pueda conectarse y controlar el daemon Docker local.
📝 Prompts
🎻 docker_compose
Usa lenguaje natural para crear contenedores. Ver arriba para una demostración.
Proporciona un Nombre de Proyecto y una descripción de los contenedores deseados, y deja que el LLM haga el resto.
Este prompt instruye al LLM a entrar en un bucle de plan+apply. Tu interacción con el LLM implicará los siguientes pasos:
- Le das al LLM instrucciones sobre qué contenedores levantar
- El LLM calcula un plan conciso en lenguaje natural y te lo presenta
- Tú puedes:
- Aplicar el plan
- Dar retroalimentación al LLM, y el LLM recalcula el plan
Ejemplos
- nombre:
nginx, contenedores: "desplegar un contenedor nginx exponiéndolo en el puerto 9000" - nombre:
wordpress, contenedores: "desplegar un contenedor WordPress y un contenedor MySQL de soporte, exponiendo WordPress en el puerto 9000"
Reanudar un Proyecto
Al iniciar un nuevo chat con este prompt, el LLM recibirá el estado de cualquier contenedor, volumen y red creados con el proyecto name dado.
Esto es principalmente útil para limpiar, en caso de que pierdas un chat que fuera responsable de muchos contenedores.
📔 Recursos
El servidor expone plantillas de recursos en lugar de enumerar los contenedores actualmente en ejecución:
docker://containers/{container_id}/logs(text/plain)docker://containers/{container_id}/stats(application/json)
Lee cualquiera de los URI con un ID o nombre de contenedor Docker.
🔨 Herramientas
Contenedores
list_containerscreate_containerrun_containerrecreate_containerstart_containerfetch_container_logsstop_containerremove_container
Imágenes
list_imagespull_imagepush_imagebuild_imageremove_image
Redes
list_networkscreate_networkremove_network
Volúmenes
list_volumescreate_volumeremove_volume
🚧 Advertencias
Datos Sensibles
NO CONFIGURES CONTENEDORES CON DATOS SENSIBLES. Esto incluye claves de API, contraseñas de bases de datos, etc.
Cualquier dato sensible intercambiado con el LLM está inherentemente comprometido, a menos que el LLM se ejecute en tu máquina local.
Si te interesa pasar secretos de forma segura a los contenedores, abre un issue en este repositorio con tu caso de uso.
Revisión de Contenedores Creados
Ten cuidado al revisar los contenedores que crea el LLM. Docker no es un sandbox seguro, y por lo tanto el servidor MCP puede potencialmente afectar la máquina host a través de Docker.
Por razones de seguridad, este servidor MCP no soporta opciones sensibles de Docker como --privileged o --cap-add/--cap-drop. Si estas características te interesan, abre un issue en este repositorio con tu caso de uso.
🛠️ Configuración
Este servidor usa el método from_env del SDK de Python de Docker. Para detalles de configuración, consulta la documentación.
Conectar a Docker por SSH
Este servidor MCP puede conectarse a un daemon Docker remoto por SSH.
Simplemente establece una URL de host ssh:// en la definición del servidor MCP:
"mcpServers": {
"mcp-server-docker": {
"command": "uvx",
"args": [
"mcp-server-docker"
],
"env": {
"DOCKER_HOST": "ssh://myusername@myhost.example.com"
}
}
}
💻 Desarrollo
Prefiere usar Devbox para configurar tu entorno de desarrollo. El servidor usa la API de alto nivel MCPServer del SDK de Python MCP v2 y puede inspeccionarse directamente:
uv sync --all-groups
uv run mcp dev src/mcp_server_docker/server.py:app
# or: npx @modelcontextprotocol/inspector uv run mcp-server-docker
Ejecuta la suite hermética de pruebas y lint sin un daemon Docker:
uv run pytest
uv run ruff format --check src tests
uv run ruff check src tests
Consulta el devbox.json para comandos útiles de desarrollo.
Después de configurar devbox, puedes configurar tu archivo MCP de Claude para usarlo:
"docker": {
"command": "/path/to/repo/.devbox/nix/profile/default/bin/uv",
"args": [
"--directory",
"/path/to/repo/",
"run",
"mcp-server-docker"
]
},