MCP QuickJS Runner

MCP QuickJS 运行器

实现模型上下文协议 (MCP) 的服务器,它提供了一种工具,可以在编译为 WebAssembly (WASM) 的 QuickJS 引擎中安全地执行任意 JavaScript 代码,并使用 Node.js 的内置 WASI 实现运行。

描述

该服务器充当 MCP 工具提供程序。它公开一个工具run_javascript_code ,该工具接受一串 JavaScript 代码作为输入。然后在沙盒化的 QuickJS WASM 环境中执行该代码。服务器捕获执行过程中的标准输出 ( stdout ) 和标准错误 ( stderr ) 流,并将它们连同所有执行错误一起返回给 MCP 客户端。

这允许语言模型或其他 MCP 客户端安全地执行可能不受信任的 JavaScript 代码片段,而不会损害主机系统。

特征

  • **安全执行:**使用 QuickJS 和 Node.js WASI 在 WASM 沙箱中运行 JavaScript。
  • **标准 I/O 捕获:**从执行的 JavaScript 代码中捕获stdoutstderr
  • **错误报告:**报告 QuickJS 的运行时错误和非零退出代码。
  • **MCP 集成:**通过stdio公开标准 MCP 工具的功能。
  • **使用 TypeScript 构建:**在开发过程中提供类型安全。

工作原理

  1. **WASM 模块:**使用针对 WebAssembly 系统接口 (WASI) 的预编译 QuickJS 引擎 ( qjs-wasi.wasm )。
  2. **Node.js WASI:**利用 Node.js 中的node:wasi模块实例化并运行 WASM 模块。
  3. **Stdio 重定向(临时文件):**为了从 WASM 环境捕获stdoutstderr ,服务器当前依赖于与node:wasi兼容的标准方法:
    • 使用node:fs/promisesnode:os在主机文件系统上创建一个临时目录。
    • 在此目录中打开stdoutstderr的临时文件。
    • 这些文件的真实 OS 文件描述符在初始化期间传递给WASI实例( stdout: fdstderr: fd )。
    • QuickJS WASM 模块将其输出写入这些描述符,然后由 WASI 路由到临时文件。
    • 执行完成后,服务器关闭文件句柄并读取临时文件的内容。
    • 临时目录和文件已被清理。
    • (注意:尝试使用内存管道或虚拟文件系统(如memfs失败,因为node:wasi目前需要 stdio 的真实 OS 文件描述符。)
  4. **MCP 通信:**服务器使用@modelcontextprotocol/sdk通过stdio监听 MCP 请求,并以根据协议格式化的执行结果进行响应。

先决条件

  • Node.js (建议使用 v23.x 或更高版本,请检查node:wasi与您的特定版本的兼容性)
  • npmyarn
  • QuickJS WASM 文件 ( qjs-wasi.wasm ) 必须与已编译的服务器脚本位于同一目录中(例如, ./dist/qjs-wasi.wasm相对于./dist/server.js )。您可能需要单独获取或编译该文件。

安装

  1. 克隆存储库(如果适用)。
  2. 安装依赖项:
    npm install

用法

node server.ts
-
security - not tested
-
license - not tested
-
quality - not tested

在沙盒 QuickJS WASM 环境中提供任意 JavaScript 代码的安全执行,允许语言模型或其他 MCP 客户端安全地运行 JavaScript 代码片段,而不会损害主机系统。

  1. Description
    1. Features
      1. How it Works
        1. Prerequisites
          1. Installation
            1. Usage
              ID: eb22brd6ru