项目简介

Container-Use 是一个为 AI 代理设计的后端服务,它通过 Model Context Protocol (MCP) 协议提供对容器化开发环境的访问和管理能力。AI 代理可以通过调用 Container-Use 暴露的标准工具,在隔离的容器环境中执行代码、管理文件、运行测试或构建项目,从而无需直接与本地系统交互。该项目利用了 Dagger 工具来构建和管理容器环境,并结合 Git 进行环境状态的版本控制。

主要功能点

Container-Use 作为 MCP 服务器,为 AI 代理提供了以下核心功能:

  • 环境管理:
    • 创建或打开一个基于指定源代码仓库和基础镜像的容器化开发环境。
    • 更新现有环境的基础镜像、设置命令和操作说明。
    • 列出当前已打开的环境。
    • 列出环境的版本历史。
    • 将环境回滚到历史版本。
    • 从现有环境或特定版本派生(fork)新环境。
  • 命令执行:
    • 在指定的容器环境中执行终端命令,可选择在前台或后台运行。
    • 支持指定 shell 和端口映射(针对后台服务)。
  • 文件系统操作:
    • 读取环境中指定文件的内容(支持按行范围读取)。
    • 列出环境中指定目录的内容。
    • 向环境中写入文件。
    • 删除环境中的文件。
    • 上传本地/Git 仓库的文件或目录到环境中。
    • 从环境中下载文件或目录到本地。
  • 版本与差异比较:
    • 比较环境中与本地文件系统或 Git 仓库的文件差异。
    • 比较环境中不同版本的文件差异。

所有对环境文件系统的修改(写入、删除、上传)以及通过前台执行的命令所产生的环境状态变化,都会被自动记录并推送到与该环境关联的 Git 分支上,实现环境状态的版本控制。

安装步骤

Container-Use 是一个 Go 项目。您需要先安装 Go 语言环境(版本 1.20 或更高)。

  1. 克隆仓库: 克隆 Container-Use 的 GitHub 仓库到您的本地机器:

    git clone https://github.com/aluzzardi/container-use.git
    cd container-use
  2. (可选)构建可执行文件: 您可以选择构建一个可执行文件,方便后续配置:

    go build .

    这将在当前目录下生成一个名为 'container-use'(或 'container-use.exe')的可执行文件。

服务器配置(为 MCP 客户端准备)

Container-Use 服务器是设计给 MCP 客户端(如 Goose)使用的。MCP 客户端需要知道如何启动并连接到 Container-Use 服务器。以下是客户端通常需要配置的关键信息:

  • 服务器名称 ('name'): 一个标识符,例如设置为 'container-use'。
  • 传输协议 ('type'): Container-Use 服务器默认使用标准输入输出 (Stdio) 进行通信,所以通常配置为 'stdio'。
  • 启动命令 ('cmd') 和参数 ('args'): 这是客户端用于启动 Container-Use 进程的命令。
    • 如果您构建了可执行文件(步骤 2),'cmd' 可以是可执行文件的绝对路径,'args' 为 '[]' 或包含其他您需要的参数(本项目默认启动不需要额外参数)。
    • 如果您直接使用 Go 源代码运行(如 README 所示),'cmd' 是 'go','args' 是 '["run", "<container-use 仓库的本地路径>"]'。请将 '<container-use 仓库的本地路径>' 替换为您克隆仓库的实际路径。
  • 环境变量 ('envs'): 可选,可以配置环境变量来自定义日志输出等。例如,配置 '{"CU_STDERR_FILE": "/tmp/cu.debug.stderr.log"}' 可以将服务器的日志输出到指定文件,方便调试。

这些配置信息会以 JSON 格式存储在 MCP 客户端的配置文件中,客户端在需要与 Container-Use 交互时会根据这些信息启动并连接服务器。

基本使用方法

Container-Use 服务器启动后,会监听标准输入,等待符合 MCP JSON-RPC 协议的请求。AI 代理作为客户端,通过标准输出向服务器发送请求,并通过标准输入接收服务器的响应和通知。

核心交互模式是通过发送 'callTool' 请求来调用服务器暴露的工具。AI 代理需要了解可用的工具列表及其参数定义(这些定义在代码中以 'mcp.NewTool' 的形式呈现),然后构造相应的 JSON-RPC 请求。

例如,要调用 'environment_open' 工具创建一个新环境,客户端会发送一个 'callTool' 请求,包含工具名称 'environment_open' 以及 'source' 和 'name' 等参数。服务器执行操作后,会返回一个包含环境详细信息的 'callToolResult'。

AI 代理可以根据任务需求,链式调用不同的工具来完成复杂的工作流,例如:先 'environment_open' 打开环境,然后 'environment_run_cmd' 执行构建命令,接着 'environment_file_read' 读取测试报告,最后根据结果 'environment_file_write' 修改代码等。

注意: 直接手动通过命令行与 Container-Use 的 Stdio 接口进行 JSON-RPC 交互是可能的,但通常非常繁琐,因为它主要设计用于机器(AI 代理)与机器(MCP 服务器)之间的自动化通信。

信息

分类

开发者工具