MCP DevBench:LLM 开发环境管理服务器

MCP DevBench 是一个基于 Model Context Protocol (MCP) 实现的服务器,专注于提供安全、隔离且持久的开发环境。它通过与 Docker 引擎集成,允许大型语言模型 (LLM) 客户端以标准化的方式管理和操作开发容器,包括执行命令、访问文件系统等,从而为 LLM 应用提供强大的上下文服务框架。

主要功能点

  • 容器生命周期管理: 支持创建、启动、停止和移除 Docker 容器,可配置为持久化存储或临时性工作区。
  • 安全命令执行: 在隔离的容器中异步执行命令,支持自定义工作目录、环境变量、执行超时设置和幂等性(防止重复执行)。
  • 实时输出流: 提供命令执行的实时标准输出和标准错误流,支持基于游标的分页拉取机制,确保数据有序完整。
  • 文件系统操作: 允许在容器工作区内进行文件的读取、写入、删除、获取元数据和列出目录内容等操作,所有操作都经过严格的安全路径验证。
  • 镜像策略与安全: 通过镜像白名单、摘要固定(确保镜像版本可复现)和容器安全加固(如限制权限、计算资源)来确保环境的安全性。
  • 预热容器池: 维护一个预先启动的容器池,旨在实现极速(通常小于1秒)的容器挂载,显著提升用户体验和响应速度。

安装步骤

MCP DevBench 服务器的运行需要 Python 3.11+ 和 Docker Engine。请确保您的系统已安装 Docker Engine。

  1. 安装 'uv' 包管理器: 'uv' 是一个快速的 Python 包管理器。如果您尚未安装,请通过以下命令安装:
    pip install uv
  2. 克隆仓库: 使用 Git 命令克隆 MCP DevBench 的代码仓库:
    git clone https://github.com/pvliesdonk/mcp-devbench.git
    cd mcp-devbench
  3. 安装依赖: 进入项目目录后,使用 'uv' 安装所有必要的项目依赖:
    uv sync

服务器配置

MCP DevBench 服务器通过环境变量进行运行时配置。MCP 客户端(例如,一个 LLM 代理或应用)在需要启动并连接到 MCP DevBench 服务器时,通常需要配置以下信息来启动服务器进程并与之通信:

  • 服务器名称 (server_name): 一个用于识别此服务器实例的名称,例如 "mcp-devbench-server"。
  • 启动命令 (command): 执行服务器程序所需的命令。对于此 Python 项目,通常应设置为 'python'。
  • 命令参数 (args): 传递给启动命令的参数列表。对于此服务器,应配置为 '["-m", "mcp_devbench.server"]',这将以模块形式运行服务器的主文件。
  • 环境变量 (env): 一个键值对集合,用于设置服务器进程的环境变量,这些变量将用于覆盖 MCP DevBench 服务器的默认配置。
    • 'MCP_HOST': MCP DevBench 服务器将绑定到的 IP 地址,例如 '127.0.0.1' (仅限本地连接) 或 '0.0.0.0' (允许所有网络接口访问)。
    • 'MCP_PORT': MCP DevBench 服务器将监听的端口号,例如 '8000'。
    • 'MCP_LOG_LEVEL': 服务器的日志输出级别,可选择 'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL' 等。
    • 'MCP_LOG_FORMAT': 服务器的日志输出格式,可选择 'json' 或 'text'。
    • 'MCP_ALLOWED_REGISTRIES': 允许 Docker 镜像来源的注册表列表,多个之间用逗号分隔,例如 'docker.io,ghcr.io'。
    • 'MCP_STATE_DB': SQLite 数据库文件的路径,用于存储容器、执行记录和附件等服务器状态信息,例如 '/path/to/your/data/state.db'。
  • 描述 (description): 对服务器功能用途的简短说明,例如 "用于LLM应用管理Docker开发环境的MCP服务器"。

基本使用方法

1. 运行服务器

你可以选择以下任一方式启动 MCP DevBench 服务器:

  • 开发模式 (推荐用于本地测试和开发):
    uv run python -m mcp_devbench.server
  • 使用 Docker Compose (推荐用于生产环境或需要管理多个相关服务的部署): 如果您有 'docker-compose.yml' 文件,可以通过它启动服务:
    docker-compose up -d
  • 使用 Docker 命令 (推荐用于生产环境的单服务部署): 首先构建 Docker 镜像:
    docker build -t mcp-devbench .
    然后运行容器,并确保它能访问 Docker 守护进程:
    docker run -v /var/run/docker.sock:/var/run/docker.sock mcp-devbench
    ('-v /var/run/docker.sock:/var/run/docker.sock' 是为了让 'mcp-devbench' 容器能够访问宿主机的 Docker 守护进程,从而管理其他 Docker 容器。)

2. 与 MCP 客户端交互

一旦 MCP DevBench 服务器成功启动并运行,MCP 客户端(通常是基于 LLM 的应用或工具)就可以通过 JSON-RPC 协议连接到服务器配置的 IP 地址和端口。客户端可以调用服务器提供的各种“工具”来与开发环境进行交互:

  • 'spawn' (创建容器): 客户端可以请求创建一个新的容器,指定 Docker 镜像、是否持久化以及可选的别名。例如,LLM 可能发出请求 '{"image": "python:3.11-slim", "persistent": true, "alias": "my-llm-workspace"}'。
  • 'attach' (挂载客户端): 客户端挂载到指定容器,以便进行会话跟踪。例如,'{"target": "my-llm-workspace", "client_name": "my-llm-agent", "session_id": "session-123"}'。
  • 'exec_start' (执行命令): 在指定容器内启动一个命令执行。例如,LLM 可能请求 '{"container_id": "c_xxx", "cmd": ["python", "script.py"], "cwd": "/workspace"}' 以运行一段代码。
  • 'exec_poll' (轮询输出): 用于获取 'exec_start' 命令的实时输出流和执行状态。客户端会指定 'exec_id' 和 'after_seq' 来拉取自上次轮询以来的最新数据。
  • 'fs_read' (读取文件): 从容器工作区内读取文件的内容。例如,'{"container_id": "c_xxx", "path": "/workspace/README.md"}'。
  • 'fs_write' (写入文件): 向容器工作区写入文件内容。例如,'{"container_id": "c_xxx", "path": "/workspace/test.txt", "content": "base64encoded_data_here"}'。
  • 'fs_delete' (删除文件): 删除容器工作区内的文件或目录。
  • 'fs_stat' (获取文件信息): 获取文件或目录的元数据,如大小、权限、修改时间等。
  • 'fs_list' (列出目录): 列出指定目录下的文件和子目录。

所有这些操作都由 MCP DevBench 服务器处理,并通过安全的 Docker 集成与底层容器进行交互,并将结构化的结果返回给 LLM 客户端,从而为 LLM 应用提供了强大的、可编程的开发环境上下文。

信息

分类

开发者工具