Docker MCP Server

local-only server

The server can only run on the client’s local machine because it depends on local resources.

Integrations

  • Support for installing and using Axios in Node.js containers as demonstrated in examples

  • Support for Debian-based containers with automatic apt-get package management

  • Deep integration with Docker to execute code in isolated containers, manage container lifecycles, and install dependencies

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

Requisitos

  • Python 3.9+
  • Docker instalado y en ejecución
  • biblioteca fastmcp

Instalación

  1. Clonar este repositorio:
    git clone https://github.com/yourusername/docker_mcp_server.git cd docker_mcp_server
  2. Crear un entorno virtual:
    python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
  3. Instalar 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.py

La 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 contenedor
    • dependencies : (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 destino
    • dependencies : 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 destino
    • command : 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 destino
    • script_content : El contenido completo del script de Python
    • script_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 pip
  • Contenedores Node.js : utiliza npm
  • Contenedores Debian/Ubuntu : utiliza apt-get
  • Contenedores 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.py

Solució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

Licencia MIT

Contribuyendo

¡Agradecemos sus contribuciones! No dude en enviar una solicitud de incorporación de cambios.

-
security - not tested
A
license - permissive license
-
quality - not tested

Facilita la ejecución de código aislado dentro de contenedores Docker, lo que permite la ejecución segura de scripts en múltiples idiomas y la integración con modelos de lenguaje como Claude a través del Protocolo de contexto de modelo.

  1. Features
    1. Requirements
      1. Installation
        1. Usage
          1. Running the MCP Inspector
          2. Available Tools
          3. Examples
        2. Package Manager Support
          1. Integrating with Claude and Other LLMs
            1. Troubleshooting
              1. Security Considerations
                1. License
                  1. Contributing
                    ID: lqu9w7f3jf