首页/代码执行/node-code-sandbox-mcp

node-code-sandbox-mcp

查看源码
2025-5-12
Words 1879Read Time 5 min
Score:90

基于Node.js的MCP服务器,通过Docker容器运行任意JavaScript代码,支持npm依赖自动安装。

🐢🚀 Node.js 沙盒 MCP 服务器

这是一个基于 Node.js 的服务器,实现了模型上下文协议(Model Context Protocol, MCP),用于在临时的 Docker 容器中运行任意 JavaScript 代码,并支持动态安装 npm 依赖。

功能特性

  • 启动和管理隔离的 Node.js 沙盒容器
  • 在容器内执行任意 shell 命令
  • 按需安装指定的 npm 依赖
  • 运行 ES 模块的 JavaScript 代码片段并捕获标准输出
  • 清理并销毁容器
  • 分离模式(Detached Mode):脚本执行后保持容器运行(例如用于长时间运行的服务器)
注意:容器运行时受到 CPU/内存限制的控制。

探索有趣的用例

如果你想了解如何使用这个库实现一些酷炫且强大的功能,请查看 USE_CASES.md 文件!该文件整理了一系列提示、示例和创意实验,供你在 Node.js 沙盒 MCP 服务器中尝试。

⚠️ 前提条件

使用此 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 包及其版本(默认:[])。
行为:
  1. 创建一个全新的容器。
  1. 写入 index.js 和一个最小的 package.json
  1. 安装指定的依赖。
  1. 执行脚本。
  1. 销毁(删除)容器。
  1. 返回捕获的标准输出。
  1. 如果你的代码在当前目录保存了任何文件,这些文件将自动返回。
      • 图片(例如 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 的容器 ID
    • commands字符串数组):要执行的 shell 命令数组
  • 输出:每个命令的标准输出组合

run_js

安装 npm 依赖并执行 JavaScript 代码。
  • 输入
    • container_id字符串):来自 sandbox_initialize 的容器 ID
    • code字符串):要运行的 JS 源代码(支持 ES 模块)
    • dependencies{ name, version } 数组,可选,默认:[]):npm 包名称 → 语义化版本
    • listenOnPort数字,可选):如果设置,保持进程运行并将此端口暴露给主机(分离模式
  • 行为:
      1. 在容器内创建一个临时工作区
      1. 写入 index.js 和一个最小的 package.json
      1. 运行 npm install --omit=dev --ignore-scripts --no-audit --loglevel=error
      1. 执行 node index.js 并捕获标准输出,或者如果设置了 listenOnPort,则在后台保持进程运行
      1. 除非在分离模式下运行,否则清理工作区
  • 输出:脚本的标准输出或后台执行通知

sandbox_stop

终止并移除沙盒容器。
  • 输入
    • container_id字符串):来自 sandbox_initialize 的容器 ID
  • 输出:确认消息

使用建议

  • 基于会话的工具sandbox_initializerun_jssandbox_stop)适用于以下场景:
    • 保持一个长期运行的沙盒容器开启。
    • 在同一环境中运行多个命令或脚本。
    • 逐步安装并复用依赖。
  • 一次性执行run_js_ephemeral)适用于以下场景:
    • 快速实验或简单脚本。
    • 不需要维护状态或缓存依赖的情况。
    • 干净的原子化运行,无需手动清理。
  • 分离模式适用于以下场景:
    • 动态启动服务器或长时间运行的服务。
    • 暴露并测试运行容器的端点。
选择最适合你用例的工作流!

与 Claude Desktop 结合使用

将此添加到你的 claude_desktop_config.json 中:你可以按照 官方指南 安装此 MCP 服务器。
注意:确保你的工作目录指向构建的服务器,并且 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 许可证
特此免费授予任何获得本软件及相关文档文件(“软件”)副本的人,不受限制地处理本软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售本软件的副本,并允许获得本软件的人这样做,但须遵守以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或实质性部分中。
本软件“按原样”提供,不提供任何形式的明示或暗示的担保,包括但不限于适销性、特定用途适用性和非侵权性的担保。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是在合同、侵权或其他方面,因本软件或本软件的使用或其他交易引起的或与之相关的。
上一篇
mcp-server-ufile
下一篇
DevDocs