Servidor Docker MCP
Un potente servidor de Protocolo de Contexto de Modelo (MCP) que ejecuta código en contenedores Docker aislados y devuelve los resultados a modelos de lenguaje como Claude.
Características
Ejecución de código aislado : ejecute código en contenedores Docker separados de su sistema principal
Compatibilidad con varios idiomas : ejecute código en cualquier idioma con una imagen de Docker
Compatibilidad con scripts complejos : ejecute comandos simples y scripts completos de varias líneas
Gestión de paquetes : instale dependencias mediante pip, npm, apt-get o apk
Gestión de contenedores : cree, enumere y limpie contenedores Docker fácilmente
Manejo robusto de errores : gestión elegante de tiempos de espera y mecanismos de respaldo
Salida colorida : Respuesta de consola clara y codificada por colores
Related MCP server: MCP Development Server
Requisitos
Python 3.9+
Docker instalado y en ejecución
biblioteca fastmcp
Instalación
Clonar este repositorio:
git clone https://github.com/yourusername/docker_mcp_server.git cd docker_mcp_serverCrear un entorno virtual:
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activateInstalar los paquetes necesarios:
pip install -r requirements.txt
Uso
Ejecución del inspector MCP
Para probar y explorar la funcionalidad del servidor:
python run_server.pyLa interfaz de MCP Inspector se abrirá en su navegador en http://localhost:5173 .
Herramientas disponibles
El servidor Docker MCP proporciona las siguientes herramientas:
1. Lista de contenedores
Enumera todos los contenedores Docker y sus detalles:
Parámetros :
show_all: (opcional) Si se deben mostrar todos los contenedores, incluidos los detenidos (valor predeterminado: Verdadero)
2. Crear contenedor
Crea e inicia un contenedor Docker con dependencias opcionales:
Parámetros :
image: La imagen de Docker que se utilizará (por ejemplo, "python:3.9-slim", "node:16")container_name: Un nombre único para el contenedordependencies: (Opcional) Lista separada por espacios de paquetes para instalar (por ejemplo, "numpy pandas", "express lodash")
3. Agregar dependencias
Instala paquetes adicionales en un contenedor Docker existente:
Parámetros :
container_name: El nombre del contenedor de destinodependencies: Lista separada por espacios de paquetes para instalar
4. Ejecutar código
Ejecuta un comando dentro de un contenedor Docker en ejecución:
Parámetros :
container_name: El nombre del contenedor de destinocommand: El comando a ejecutar dentro del contenedor
5. Ejecutar script de Python
Ejecuta un script de Python de varias líneas dentro de un contenedor Docker en ejecución:
Parámetros :
container_name: El nombre del contenedor de destinoscript_content: El contenido completo del script de Pythonscript_args: argumentos opcionales para pasar al script
6. Contenedor de limpieza
Detiene y elimina un contenedor Docker:
Parámetros :
container_name: El nombre del contenedor a limpiar
Ejemplos
Ejemplo de flujo de trabajo básico
# 1. List existing containers to see what's already running
list_containers()
# 2. Create a new container
create_container(
image="python:3.9-slim",
container_name="python-example",
dependencies="numpy pandas"
)
# 3. Execute a command in the container
execute_code(
container_name="python-example",
command="python -c 'import numpy as np; print(\"NumPy version:\", np.__version__)'"
)
# 4. Add more dependencies later
add_dependencies(
container_name="python-example",
dependencies="matplotlib scikit-learn"
)
# 5. List containers again to confirm status
list_containers(show_all=False) # Only show running containers
# 6. Clean up when done
cleanup_container(container_name="python-example")Ejemplo de análisis de datos en Python
# 1. Create a container with dependencies
create_container(
image="python:3.9-slim",
container_name="python-test",
dependencies="numpy pandas matplotlib"
)
# 2. Execute a Python script
script = """
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Create some data
data = pd.DataFrame({
'x': np.random.randn(100),
'y': np.random.randn(100)
})
print(f"Data shape: {data.shape}")
print(f"Data correlation: {data.corr().iloc[0,1]:.4f}")
"""
execute_python_script(container_name="python-test", script_content=script)
# 3. Add additional dependencies later if needed
add_dependencies(container_name="python-test", dependencies="scikit-learn")
# 4. Verify container is running
list_containers(show_all=False)
# 5. Clean up when done
cleanup_container(container_name="python-test")Ejemplo de Node.js
# 1. Check for existing Node.js containers
list_containers()
# 2. Create a Node.js container
create_container(
image="node:16",
container_name="node-test",
dependencies="express axios"
)
# 3. Execute a Node.js script
execute_code(
container_name="node-test",
command="node -e \"console.log('Node.js version: ' + process.version); console.log('Express installed: ' + require.resolve('express'));\""
)
# 4. Add more dependencies
add_dependencies(container_name="node-test", dependencies="lodash moment")
# 5. Clean up when done
cleanup_container(container_name="node-test")Soporte del administrador de paquetes
El servidor Docker MCP detecta y utiliza automáticamente el administrador de paquetes adecuado:
Contenedores de Python : usos de
pipContenedores Node.js : utiliza
npmContenedores Debian/Ubuntu : utiliza
apt-getContenedores alpinos : Usos de
apk
Para los contenedores donde el administrador de paquetes no es evidente a partir del nombre de la imagen, el servidor intenta detectar los administradores de paquetes disponibles.
Integración con Claude y otros LLM
Este servidor MCP se puede integrar con Claude y otros LLM compatibles con el Protocolo de Contexto de Modelo. Utilice el comando fastmcp install para registrarlo con Claude:
fastmcp install src/docker_mcp.pySolución de problemas
Puerto ya en uso : si ve errores de "Dirección ya en uso", asegúrese de que no haya otras instancias de MCP Inspector en ejecución.
Problemas de conexión de Docker : verifique que Docker se esté ejecutando con
docker --version.Tiempos de espera de los contenedores : el servidor incluye mecanismos de respaldo para los contenedores que no responden dentro de los plazos esperados.
Errores de instalación del paquete : verifique que el nombre del paquete sea correcto para el administrador de paquetes especificado.
No se encontraron contenedores : si list_containers no muestra resultados, es posible que Docker aún no tenga ningún contenedor creado.
Consideraciones de seguridad
Este servidor ejecuta código en contenedores Docker, lo que proporciona aislamiento del sistema host. Sin embargo, tenga cuidado:
No exponga este servidor públicamente sin medidas de seguridad adicionales
Tenga cuidado al montar volúmenes de host en contenedores
Considere los límites de recursos para los contenedores para evitar ataques DoS
Licencia
Contribuyendo
¡Agradecemos sus contribuciones! No dude en enviar una solicitud de incorporación de cambios.