Facilitates isolated code execution within Docker containers, enabling secure multi-language script execution and integration with language models like Claude via the Model Context Protocol.
A powerful Model Context Protocol (MCP) server that executes code in isolated Docker containers and returns the results to language models like Claude.
Clone this repository:
git clone https://github.com/yourusername/docker_mcp_server.git cd docker_mcp_server
Create a virtual environment:
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
Install required packages:
pip install -r requirements.txt
To test and explore the server's functionality:
python run_server.py
The MCP Inspector interface will open in your browser at http://localhost:5173.
The Docker MCP server provides the following tools:
Lists all Docker containers and their details:
show_all
: (Optional) Whether to show all containers including stopped ones (default: True)Creates and starts a Docker container with optional dependencies:
image
: The Docker image to use (e.g., "python:3.9-slim", "node:16")container_name
: A unique name for the containerdependencies
: (Optional) Space-separated list of packages to install (e.g., "numpy pandas", "express lodash")Installs additional packages in an existing Docker container:
container_name
: The name of the target containerdependencies
: Space-separated list of packages to installExecutes a command inside a running Docker container:
container_name
: The name of the target containercommand
: The command to execute inside the containerExecutes a multi-line Python script inside a running Docker container:
container_name
: The name of the target containerscript_content
: The full Python script contentscript_args
: Optional arguments to pass to the scriptStops and removes a Docker container:
container_name
: The name of the container to clean up# 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")
# 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")
# 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")
The Docker MCP server automatically detects and uses the appropriate package manager:
pip
npm
apt-get
apk
For containers where the package manager isn't obvious from the image name, the server attempts to detect available package managers.
This MCP server can be integrated with Claude and other LLMs that support the Model Context Protocol. Use the fastmcp install
command to register it with Claude:
fastmcp install src/docker_mcp.py
docker --version
.This server executes code in Docker containers, which provides isolation from the host system. However, exercise caution:
Contributions are welcome! Please feel free to submit a Pull Request.
Discover shared experiences
Shared threads will appear here, showcasing real-world applications and insights from the community. Check back soon for updates!