开发环境诊断工具

一个模型上下文协议(MCP)服务器,提供对本地开发环境的洞察,包括Docker容器、系统资源、运行进程和安全沙箱shell,支持用自然语言提问和诊断问题。

  • by Kamalesh-Kavin
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Kamalesh-Kavin/devops-mcp

使用说明

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).你的第一个令牌 命令在执行前会根据满列表进行检查。任意外壳 管道、重定向和命令链(&&, |, ;)不支持 通过设计。