使用说明
devops mcp
一个模型上下文协议(MCP)服务器,为Claude提供了一个进入您本地的窗口 开发环境——Docker容器、系统资源、运行进程、, 以及沙盒shell——这样你就可以简单地提问和诊断问题 英语。
它做什么
| 工具 | 说明 |
|---|---|
list_containers |
列出所有Docker容器(名称、映像、状态、端口) |
get_container_logs |
从任何容器中获取最后N行日志 |
get_container_stats |
容器的实时CPU/内存/网络/磁盘统计数据 |
list_processes |
按CPU或内存划分的顶级进程(通过psutil) |
get_system_info |
主机名、操作系统、CPU计数和使用率、RAM、磁盘、平均负载 |
run_command |
安全运行白名单shell命令(无shell注入) |
建筑
Claude Desktop
│ MCP (stdio)
▼
devops_mcp/server.py ← MCP server, 6 tools, lifespan startup
├── docker_client.py ← Docker SDK wrapper (handles dangling images)
├── system_info.py ← psutil: system info + process list
└── shell_runner.py ← subprocess: allowlist, shell=False, timeout
关键设计决策:
asyncio.to_thread()--Docker SDK和psutil是同步的。每个工具 将其阻塞呼叫打包asyncio.to_thread()因此,MCP事件循环永远不会 此 路 不通。AppState寿命 --Docker客户端在启动时打开一次(不是按 请求)并通过以下方式注入到每个工具中ctx.request_context.lifespan_context.- 沙盒外壳 —
run_command用途shell=False(无外壳注射), 一个满负荷检查和一个硬超时(默认10秒)。无法奔跑 一个不属于对抗主义的命令。
需求
- Python 3.11+
- 紫外线 包管理器
- Docker桌面在本地运行
- 不需要外部API密钥
设置
git clone https://github.com/Kamalesh-Kavin/devops-mcp
cd devops-mcp
# Install dependencies
uv sync
# Copy and edit environment config
cp .env.example .env
# Edit .env if you want to change ALLOWED_COMMANDS or COMMAND_TIMEOUT_SECONDS
运行烟雾测试
uv run python smoke_test.py
所有8个测试部分都应打印 PASS.
连接到克劳德桌面
增添 ~/Library/Application Support/Claude/claude_desktop_config.json:
"devops-assistant": {
"command": "/Users/yourname/.local/bin/uv",
"args": [
"--directory", "/path/to/devops-mcp",
"run", "python", "-m", "devops_mcp.server"
]
}
重新启动Claude Desktop,然后尝试:
- “列出所有正在运行的Docker容器”
- “显示iip-api-1的最后20行日志”
- “这台机器的CPU和内存使用情况如何?”
- “现在哪个进程使用的内存最多?”
- “跑
git status在/path/to/my/project中”
环境变量(.env)
| 变量 | 默认值 | 描述 |
|---|---|---|
ALLOWED_COMMANDS |
ls,cat,git,df,du,pwd,echo,env,whoami,uname,curl,ps,wc,head,tail,find,grep |
逗号分隔的shell命令 run_command 将执行 |
COMMAND_TIMEOUT_SECONDS |
10 |
硬超时;如果超过此值,则进程将被终止 |
安全说明
run_command 用途 subprocess.run(..., shell=False).你的第一个令牌
命令在执行前会根据满列表进行检查。任意外壳
管道、重定向和命令链(&&, |, ;)不支持
通过设计。