MCP QuickJS 运行器
实现模型上下文协议 (MCP) 的服务器,它提供了一种工具,可以在编译为 WebAssembly (WASM) 的 QuickJS 引擎中安全地执行任意 JavaScript 代码,并使用 Node.js 的内置 WASI 实现运行。
描述
该服务器充当 MCP 工具提供程序。它公开一个工具run_javascript_code ,该工具接受一串 JavaScript 代码作为输入。然后在沙盒化的 QuickJS WASM 环境中执行该代码。服务器捕获执行过程中的标准输出 ( stdout ) 和标准错误 ( stderr ) 流,并将它们连同所有执行错误一起返回给 MCP 客户端。
这允许语言模型或其他 MCP 客户端安全地执行可能不受信任的 JavaScript 代码片段,而不会损害主机系统。
Related MCP server: MCP-REPL
特征
**安全执行:**使用 QuickJS 和 Node.js WASI 在 WASM 沙箱中运行 JavaScript。
**标准 I/O 捕获:**从执行的 JavaScript 代码中捕获
stdout和stderr。**错误报告:**报告 QuickJS 的运行时错误和非零退出代码。
**MCP 集成:**通过
stdio公开标准 MCP 工具的功能。**使用 TypeScript 构建:**在开发过程中提供类型安全。
工作原理
**WASM 模块:**使用针对 WebAssembly 系统接口 (WASI) 的预编译 QuickJS 引擎 (
qjs-wasi.wasm)。**Node.js WASI:**利用 Node.js 中的
node:wasi模块实例化并运行 WASM 模块。**Stdio 重定向(临时文件):**为了从 WASM 环境捕获
stdout和stderr,服务器当前依赖于与node:wasi兼容的标准方法:使用
node:fs/promises和node:os在主机文件系统上创建一个临时目录。在此目录中打开
stdout和stderr的临时文件。这些文件的真实 OS 文件描述符在初始化期间传递给
WASI实例(stdout: fd,stderr: fd)。QuickJS WASM 模块将其输出写入这些描述符,然后由 WASI 路由到临时文件。
执行完成后,服务器关闭文件句柄并读取临时文件的内容。
临时目录和文件已被清理。
(注意:尝试使用内存管道或虚拟文件系统(如
**MCP 通信:**服务器使用
@modelcontextprotocol/sdk通过stdio监听 MCP 请求,并以根据协议格式化的执行结果进行响应。
先决条件
Node.js (建议使用 v23.x 或更高版本,请检查
node:wasi与您的特定版本的兼容性)QuickJS WASM 文件 (
qjs-wasi.wasm) 必须与已编译的服务器脚本位于同一目录中(例如,./dist/qjs-wasi.wasm相对于./dist/server.js)。您可能需要单独获取或编译该文件。
安装
克隆存储库(如果适用)。
安装依赖项:
npm install
用法
node server.tsThis server cannot be installed
Resources
Looking for Admin?
Admins can modify the Dockerfile, update the server description, and track usage metrics. If you are the server author, to access the admin panel.