项目简介
这是一个基于 Model Context Protocol (MCP) 实现的服务器端应用,旨在为连接到它的 LLM 客户端(如 AI 助手)提供运行 Node.js 代码和执行 shell 命令的能力。它使用 Docker 容器来创建隔离的沙箱环境,确保代码执行的安全性和独立性。
主要功能点
- 创建和管理沙箱: 可以启动临时的或可长期使用的 Node.js 沙箱容器。
- 安全的代码执行: 在独立的 Docker 容器中运行 JavaScript/TypeScript 代码,防止影响宿主系统。
- 即时依赖安装: 在运行代码前自动安装指定的 npm 包及其版本。
- 执行 Shell 命令: 允许在正在运行的沙箱容器内执行 shell 命令。
- 会话式执行: 支持在同一个沙箱容器中执行多个命令或代码片段,并保持环境状态。
- 一次性执行: 提供无需手动初始化和清理的便捷模式,快速运行单个代码任务。
安装步骤
要运行此 MCP 服务器,您需要先安装 Node.js、npm 和 Docker。
- 克隆仓库: 将项目的代码下载到您的本地机器。
- 安装依赖并构建: 打开终端,导航到项目目录,运行 'npm install' 安装项目所需的 Node.js 依赖,然后运行 'npm run build' 构建服务器代码。构建完成后,可执行文件通常位于 'dist' 目录。
- 或者使用 Docker: 如果您已安装 Docker,也可以选择构建或拉取项目的 Docker 镜像来运行服务器,无需在宿主系统安装 Node.js 依赖。
服务器配置
MCP 服务器需要通过 MCP 客户端启动和连接。大多数 MCP 客户端(如 Claude Desktop、VS Code MCP 扩展)会通过配置来启动服务器进程。您需要在客户端的配置中指定如何启动这个服务器。
配置通常是一个 JSON 对象,描述一个特定的 MCP 服务器入口。关键的配置信息包括:
- 服务器名称 (Server Name): 您给这个服务器实例取的名字,例如 '"js-sandbox"'。
- 启动命令 (command): 启动服务器进程的命令。
- 如果您通过 Node.js 构建运行,命令可能是 '"node"'。
- 如果您通过 Docker 运行,命令可能是 '"docker"'。
- 命令参数 (args): 传递给启动命令的参数列表。
- Node.js 运行参数可能包含服务器脚本路径和传输协议,例如 '["dist/server.js", "stdio"]',表示运行构建后的 'dist/server.js' 并使用标准 I/O (stdio) 作为传输方式。
- Docker 运行参数可能包含 Docker 运行选项和镜像名称,例如 '["run", "-i", "--rm", "-v", "/var/run/docker.sock:/var/run/docker.sock", "alfonsograziano/node-code-sandbox-mcp", "stdio"]',表示运行 Docker 容器,挂载 Docker socket 以便服务器能管理其他容器,并指定使用 stdio 协议。
- 工作目录 (cwd, 可选): 服务器进程的启动目录。通常设置为项目的根目录或构建后的目录。
您的 MCP 客户端需要根据其文档,将上述信息配置到其服务器列表中。
基本使用方法
一旦 MCP 客户端连接到这个 MCP 服务器,LLM 或客户端应用就可以通过调用服务器提供的工具 (Tools) 来执行任务。这个服务器主要提供了以下工具:
- 'sandbox_initialize':调用此工具来启动一个新的沙箱容器。它会返回一个容器 ID。
- 'sandbox_exec':调用此工具,并传入之前获取的容器 ID 和一组 shell 命令,以便在沙箱中执行。
- 'run_js':调用此工具,并传入容器 ID、JavaScript 代码和可选的 npm 依赖列表,以便在沙箱中安装依赖并运行代码。
- 'sandbox_stop':调用此工具,并传入容器 ID,以停止并移除沙箱容器。
- 'run_js_ephemeral':调用此工具,并传入 JavaScript 代码、可选的 Docker 镜像和可选的 npm 依赖列表。服务器将自动创建一个临时容器,运行代码,然后清理容器。适用于一次性的、无需保持状态的任务。
LLM 可以根据用户的需求,选择合适的工具并构造相应的参数(如代码内容、依赖信息等),通过 MCP 协议发送给服务器执行,并获取执行结果。
信息
分类
开发者工具