🐢🚀 Node.js 沙盒 MCP 服务器
这是一个基于 Node.js 的服务器,实现了模型上下文协议(Model Context Protocol, MCP),用于在临时的 Docker 容器中运行任意 JavaScript 代码,并支持动态安装 npm 依赖。
功能特性
- 启动和管理隔离的 Node.js 沙盒容器
- 在容器内执行任意 shell 命令
- 按需安装指定的 npm 依赖
- 运行 ES 模块的 JavaScript 代码片段并捕获标准输出
- 清理并销毁容器
- 分离模式(Detached Mode):脚本执行后保持容器运行(例如用于长时间运行的服务器)
注意:容器运行时受到 CPU/内存限制的控制。
探索有趣的用例
⚠️ 前提条件
使用此 MCP 服务器前,必须在你的机器上安装并运行 Docker。
提示: 预先拉取所需的 Docker 镜像,以避免首次执行时的延迟。
推荐的镜像示例:
node:lts-slim
mcr.microsoft.com/playwright:v1.52.0-noble
alfonsograziano/node-chartjs-canvas:latest
API
工具
run_js_ephemeral
在一个全新的临时容器中运行一次性 JavaScript 脚本。
输入参数:
image
(字符串,可选):使用的 Docker 镜像(默认:node:lts-slim
)。
code
(字符串,必填):要执行的 JavaScript 源代码。
dependencies
({ name, version }
数组,可选):要安装的 npm 包及其版本(默认:[]
)。
行为:
- 创建一个全新的容器。
- 写入
index.js
和一个最小的package.json
。
- 安装指定的依赖。
- 执行脚本。
- 销毁(删除)容器。
- 返回捕获的标准输出。
- 如果你的代码在当前目录保存了任何文件,这些文件将自动返回。
- 图片(例如 PNG、JPEG)将作为
image
内容返回。 - 其他文件(例如
.txt
、.json
)将作为resource
内容返回。 - 注意:文件保存功能目前仅在
run_js_ephemeral
工具中可用。
提示: 要获取文件,只需在脚本执行期间保存它们。
调用示例:
保存文件的示例:
这将返回控制台输出 以及
hello.txt
文件。sandbox_initialize
启动一个全新的沙盒容器。
- 输入:
image
(字符串,可选,默认:node:lts-slim
):沙盒使用的 Docker 镜像port
(数字,可选):如果设置,将此容器端口映射到主机
- 输出:容器 ID 字符串
sandbox_exec
在运行的沙盒容器中执行 shell 命令。
- 输入:
container_id
(字符串):来自sandbox_initialize
的容器 IDcommands
(字符串数组):要执行的 shell 命令数组
- 输出:每个命令的标准输出组合
run_js
安装 npm 依赖并执行 JavaScript 代码。
- 输入:
container_id
(字符串):来自sandbox_initialize
的容器 IDcode
(字符串):要运行的 JS 源代码(支持 ES 模块)dependencies
({ name, version }
数组,可选,默认:[]
):npm 包名称 → 语义化版本listenOnPort
(数字,可选):如果设置,保持进程运行并将此端口暴露给主机(分离模式)
- 行为:
- 在容器内创建一个临时工作区
- 写入
index.js
和一个最小的package.json
- 运行
npm install --omit=dev --ignore-scripts --no-audit --loglevel=error
- 执行
node index.js
并捕获标准输出,或者如果设置了listenOnPort
,则在后台保持进程运行 - 除非在分离模式下运行,否则清理工作区
- 输出:脚本的标准输出或后台执行通知
sandbox_stop
终止并移除沙盒容器。
- 输入:
container_id
(字符串):来自sandbox_initialize
的容器 ID
- 输出:确认消息
使用建议
- 基于会话的工具(
sandbox_initialize
➔run_js
➔sandbox_stop
)适用于以下场景: - 保持一个长期运行的沙盒容器开启。
- 在同一环境中运行多个命令或脚本。
- 逐步安装并复用依赖。
- 一次性执行(
run_js_ephemeral
)适用于以下场景: - 快速实验或简单脚本。
- 不需要维护状态或缓存依赖的情况。
- 干净的原子化运行,无需手动清理。
- 分离模式适用于以下场景:
- 动态启动服务器或长时间运行的服务。
- 暴露并测试运行容器的端点。
选择最适合你用例的工作流!
与 Claude Desktop 结合使用
注意:确保你的工作目录指向构建的服务器,并且 Docker 已安装并运行。
Docker
在容器中运行服务器(如果需要,挂载 Docker 套接字),并将所需的主机输出目录作为环境变量传递:
这将主机的文件夹绑定挂载到容器中的 相同绝对路径,并使
JS_SANDBOX_OUTPUT_DIR
在 MCP 服务器中可用。与 VS Code 结合使用
快速安装 按钮(VS Code & Insiders):
安装 js-sandbox-mcp (NPX) 安装 js-sandbox-mcp (Docker)
手动配置:将此添加到你的 VS Code
settings.json
或 .vscode/mcp.json
中:构建
编译和打包:
许可证
MIT 许可证
特此免费授予任何获得本软件及相关文档文件(“软件”)副本的人,不受限制地处理本软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售本软件的副本,并允许获得本软件的人这样做,但须遵守以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或实质性部分中。
本软件“按原样”提供,不提供任何形式的明示或暗示的担保,包括但不限于适销性、特定用途适用性和非侵权性的担保。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是在合同、侵权或其他方面,因本软件或本软件的使用或其他交易引起的或与之相关的。
- Author:waytomcp
- URL:https://www.waytomcp.com/article/alfonsograziano/node-code-sandbox-mcp
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!