项目简介

Daytona MCP 服务器旨在通过标准化的 Model Context Protocol (MCP) 接口,桥接 LLM 客户端和 Daytona 沙箱环境。它允许 LLM 应用以统一的方式与 Daytona 的强大沙箱功能进行交互,从而实现更智能、更灵活的应用开发和自动化流程。

主要功能点

  • 资源管理: 通过 MCP 资源暴露 Daytona 沙箱、文件、进程和 Git 仓库,方便 LLM 客户端获取环境信息。
  • 工具集: 提供丰富的工具集,用于沙箱管理、代码执行、文件操作和 Git 操作,允许 LLM 客户端调用这些功能来完成特定任务。
  • 传输协议: 支持 Stdio 和 HTTP/SSE 多种传输协议,满足不同应用场景的需求。
  • 性能优化: 通过缓存沙箱实例来提高性能,加快响应速度。
  • MCP 兼容: 完全实现了 MCP 规范,确保与 MCP 客户端的兼容性。

安装步骤

  1. 安装 Node.js: 确保你的环境中安装了 Node.js 18 或更高版本。
  2. 安装 Daytona MCP: 使用 npm, yarn 或 pnpm 命令安装 'daytona-mcp' 包:
    npm install daytona-mcp
    yarn add daytona-mcp
    pnpm add daytona-mcp
  3. 配置 Daytona API 密钥: 从 Daytona Dashboard 获取 Daytona API 密钥。
  4. (可选) 安装 Express.js: 如果使用 HTTP/SSE 传输协议,需要安装 Express.js。

服务器配置

MCP 客户端需要配置以下信息以连接到 Daytona MCP 服务器。配置信息通常以 JSON 格式提供,例如:

{
  "serverName": "DaytonaMcpServer",
  "command": "node",
  "args": ["./dist/server.js"],
  "environmentVariables": {
    "DAYTONA_API_KEY": "<your_daytona_api_key>",  // 替换为你的 Daytona API 密钥
    "DAYTONA_SERVER_URL": "https://app.daytona.io/api", // (可选) Daytona 服务器 URL,默认为 https://app.daytona.io/api
    "DAYTONA_TARGET": "us" // (可选) Daytona 目标区域,默认为 us
  }
}
  • serverName: 服务器名称,例如 "DaytonaMcpServer"。
  • command: 启动服务器的命令,通常为 "node"。
  • args: 启动服务器命令的参数,例如 '["./dist/server.js"]',指向编译后的服务器入口文件。
  • environmentVariables: 环境变量配置,用于服务器运行时读取:
    • DAYTONA_API_KEY: 必需。你的 Daytona API 密钥,用于访问 Daytona 服务。
    • DAYTONA_SERVER_URL: 可选。Daytona 服务器 URL,如果需要连接到非默认的 Daytona 服务器,请配置此项。
    • DAYTONA_TARGET: 可选。Daytona 目标区域,用于指定创建沙箱的区域。

注意: 请确保在运行 MCP 客户端之前,已经根据上述配置启动了 Daytona MCP 服务器。

基本使用方法

  1. 启动 Daytona MCP 服务器: 根据上述服务器配置,使用配置的 'command' 和 'args' 启动 Daytona MCP 服务器。例如,如果配置为 Stdio 传输,则在终端中运行 'node ./dist/server.js'。

  2. 配置 MCP 客户端: 在你的 MCP 客户端应用中,配置连接到 Daytona MCP 服务器所需的信息,包括服务器启动命令、参数以及必要的环境变量(特别是 'DAYTONA_API_KEY')。

  3. 使用 MCP 客户端与服务器交互: 通过 MCP 客户端发送请求到 Daytona MCP 服务器,例如创建沙箱、执行命令、管理文件等。客户端可以使用 MCP 协议定义的标准方法(如 'tools/call')调用服务器提供的工具,并使用资源 URI 访问服务器暴露的资源。

    以下是一个使用 MCP 客户端创建沙箱并执行命令的示例流程(伪代码,具体客户端代码请参考 MCP 客户端 SDK 的文档):

    // 初始化 MCP 客户端并连接到 Daytona MCP 服务器 (Stdio 传输)
    client = new MCPClient(...)
    transport = new StdioTransport(...)
    client.connect(transport)
    
    // 调用 create-sandbox 工具创建沙箱
    createSandboxResult = client.request("tools/call", {
        name: "create-sandbox",
        arguments: { language: "typescript", resources: { cpu: 2, memory: 4 } }
    })
    sandboxId = parseSandboxId(createSandboxResult)
    
    // 调用 execute-command 工具在沙箱中执行命令
    execCommandResult = client.request("tools/call", {
        name: "execute-command",
        arguments: { sandboxId: sandboxId, command: "echo 'Hello from Daytona MCP'" }
    })
    commandOutput = parseCommandOutput(execCommandResult)
    print(commandOutput)
    
    // ... 其他操作 ...
    
    // 清理沙箱
    removeSandboxResult = client.request("tools/call", {
        name: "remove-sandbox",
        arguments: { sandboxId: sandboxId }
    })
    
    // 断开客户端连接
    client.disconnect()

    请参考仓库中的 'src/examples/example.ts' 和 'src/examples/client.ts' 文件,获取更详细的客户端使用示例。

信息

分类

开发者工具