项目简介
Daytona MCP 服务器旨在通过标准化的 Model Context Protocol (MCP) 接口,桥接 LLM 客户端和 Daytona 沙箱环境。它允许 LLM 应用以统一的方式与 Daytona 的强大沙箱功能进行交互,从而实现更智能、更灵活的应用开发和自动化流程。
主要功能点
- 资源管理: 通过 MCP 资源暴露 Daytona 沙箱、文件、进程和 Git 仓库,方便 LLM 客户端获取环境信息。
- 工具集: 提供丰富的工具集,用于沙箱管理、代码执行、文件操作和 Git 操作,允许 LLM 客户端调用这些功能来完成特定任务。
- 传输协议: 支持 Stdio 和 HTTP/SSE 多种传输协议,满足不同应用场景的需求。
- 性能优化: 通过缓存沙箱实例来提高性能,加快响应速度。
- MCP 兼容: 完全实现了 MCP 规范,确保与 MCP 客户端的兼容性。
安装步骤
- 安装 Node.js: 确保你的环境中安装了 Node.js 18 或更高版本。
- 安装 Daytona MCP: 使用 npm, yarn 或 pnpm 命令安装 'daytona-mcp' 包:
或npm install daytona-mcp
或yarn add daytona-mcppnpm add daytona-mcp - 配置 Daytona API 密钥: 从 Daytona Dashboard 获取 Daytona API 密钥。
- (可选) 安装 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 服务器。
基本使用方法
-
启动 Daytona MCP 服务器: 根据上述服务器配置,使用配置的 'command' 和 'args' 启动 Daytona MCP 服务器。例如,如果配置为 Stdio 传输,则在终端中运行 'node ./dist/server.js'。
-
配置 MCP 客户端: 在你的 MCP 客户端应用中,配置连接到 Daytona MCP 服务器所需的信息,包括服务器启动命令、参数以及必要的环境变量(特别是 'DAYTONA_API_KEY')。
-
使用 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' 文件,获取更详细的客户端使用示例。
信息
分类
开发者工具