一个强大的模型上下文协议(MCP)服务器,它在隔离的Docker容器中执行代码,并将结果返回给像Claude这样的语言模型。
克隆此仓库:
git clone https://github.com/yourusername/docker_mcp_server.git
cd docker_mcp_server
创建虚拟环境:
python -m venv venv
source venv/bin/activate # 在Windows上:venv\Scripts\activate
安装所需包:
pip install -r requirements.txt
测试和探索服务器的功能:
python run_server.py
MCP检查器界面将在浏览器中的http://localhost:5173打开。
Docker MCP服务器提供以下工具:
列出所有Docker容器及其详细信息:
show_all:(可选)是否显示包括已停止的所有容器(默认:True)创建并启动具有可选依赖项的Docker容器:
image:要使用的Docker镜像(例如:"python:3.9-slim","node:16")container_name:容器的唯一名称dependencies:(可选)要安装的包的空格分隔列表(例如:"numpy pandas","express lodash")在现有Docker容器中安装额外的包:
container_name:目标容器的名称dependencies:要安装的包的空格分隔列表在正在运行的Docker容器内执行命令:
container_name:目标容器的名称command:要在容器内执行的命令在正在运行的Docker容器内执行多行Python脚本:
container_name:目标容器的名称script_content:完整的Python脚本内容script_args:传递给脚本的可选参数停止并删除Docker容器:
container_name:要清理的容器的名称# 1. 列出现有容器以查看正在运行的内容
list_containers()
# 2. 创建新容器
create_container(
image="python:3.9-slim",
container_name="python-example",
dependencies="numpy pandas"
)
# 3. 在容器内执行命令
execute_code(
container_name="python-example",
command="python -c 'import numpy as np; print(\"NumPy version:\", np.__version__)'"
)
# 4. 后期添加更多依赖项
add_dependencies(
container_name="python-example",
dependencies="matplotlib scikit-learn"
)
# 5. 再次列出容器以确认状态
list_containers(show_all=False) # 仅显示正在运行的容器
# 6. 完成后清理
cleanup_container(container_name="python-example")
# 1. 创建带有依赖项的容器
create_container(
image="python:3.9-slim",
container_name="python-test",
dependencies="numpy pandas matplotlib"
)
# 2. 执行Python脚本
script = """
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 创建一些数据
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_dependencies(container_name="python-test", dependencies="scikit-learn")
# 4. 验证容器是否正在运行
list_containers(show_all=False)
# 5. 完成后清理
cleanup_container(container_name="python-test")
# 1. 检查现有的Node.js容器
list_containers()
# 2. 创建Node.js容器
create_container(
image="node:16",
container_name="node-test",
dependencies="express axios"
)
# 3. 执行Node.js脚本
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_dependencies(container_name="node-test", dependencies="lodash moment")
# 5. 完成后清理
cleanup_container(container_name="node-test")
Docker MCP服务器自动检测并使用适当的包管理器:
pipnpmapt-getapk对于从镜像名称无法明显看出包管理器的容器,服务器会尝试检测可用的包管理器。
此MCP服务器可以与支持模型上下文协议的Claude和其他LLMs集成。使用fastmcp install命令将其注册到Claude:
fastmcp install src/docker_mcp.py
docker --version验证Docker是否正在运行。list_containers显示无结果,可能是因为Docker尚未创建任何容器。此服务器在Docker容器中执行代码,这提供了与主机系统的隔离。然而,应谨慎行事:
欢迎贡献!请随意提交Pull Request。