MCP QuickJS Runner

Ejecutor QuickJS de MCP

Un servidor que implementa el Protocolo de Contexto de Modelo (MCP) que proporciona una herramienta para ejecutar de forma segura código JavaScript arbitrario dentro de un motor QuickJS compilado en WebAssembly (WASM) y ejecutado utilizando la implementación WASI incorporada de Node.js.

Descripción

Este servidor actúa como proveedor de herramientas MCP. Expone una única herramienta, run_javascript_code , que recibe una cadena de código JavaScript como entrada. El código se ejecuta dentro de un entorno WASM QuickJS aislado. El servidor captura los flujos de salida estándar ( stdout ) y error estándar ( stderr ) de la ejecución y los devuelve, junto con cualquier error de ejecución, al cliente MCP.

Esto permite que los modelos de lenguaje u otros clientes MCP ejecuten de forma segura fragmentos de código JavaScript potencialmente no confiables sin comprometer el sistema host.

Características

  • Ejecución segura: ejecuta JavaScript en un entorno sandbox de WASM utilizando QuickJS y Node.js WASI.
  • Captura de E/S estándar: captura stdout y stderr del código JavaScript ejecutado.
  • Informe de errores: informa errores de tiempo de ejecución de QuickJS y códigos de salida distintos de cero.
  • Integración MCP: expone la funcionalidad como una herramienta MCP estándar sobre stdio .
  • Desarrollado con TypeScript: proporciona seguridad de tipos durante el desarrollo.

Cómo funciona

  1. Módulo WASM: utiliza un motor QuickJS precompilado ( qjs-wasi.wasm ) orientado a la interfaz del sistema WebAssembly (WASI).
  2. Node.js WASI: aprovecha el módulo node:wasi en Node.js para instanciar y ejecutar el módulo WASM.
  3. Redirección de Stdio (archivos temporales): para capturar stdout y stderr del entorno WASM, el servidor actualmente se basa en el enfoque estándar compatible con node:wasi :
    • Se crea un directorio temporal en el sistema de archivos del host utilizando node:fs/promises y node:os .
    • Los archivos temporales para stdout y stderr se abren dentro de este directorio.
    • Los descriptores de archivos del sistema operativo reales para estos archivos se pasan a la instancia WASI durante la inicialización ( stdout: fd , stderr: fd ).
    • El módulo WASM de QuickJS escribe su salida en estos descriptores, que son enrutados por WASI a los archivos temporales.
    • Una vez finalizada la ejecución, el servidor cierra los controladores de archivos y lee el contenido de los archivos temporales.
    • Se limpian el directorio y los archivos temporales.
    • (Nota: los intentos de utilizar tuberías en memoria o sistemas de archivos virtuales como memfs no tuvieron éxito porque node:wasi actualmente requiere descriptores de archivos del sistema operativo reales para stdio).
  4. Comunicación MCP: el servidor utiliza @modelcontextprotocol/sdk para escuchar las solicitudes MCP a través de stdio y responder con los resultados de la ejecución formateados de acuerdo con el protocolo.

Prerrequisitos

  • Node.js (se recomienda v23.x o posterior, verifique la compatibilidad node:wasi para su versión específica)
  • npm o hilo
  • El archivo WASM de QuickJS ( qjs-wasi.wasm ) debe estar en el mismo directorio que el script de servidor compilado (p. ej., ./dist/qjs-wasi.wasm en relación con ./dist/server.js ). Es posible que deba obtenerlo o compilarlo por separado.

Instalación

  1. Clonar el repositorio (si corresponde).
  2. Instalar dependencias:
    npm install

Uso

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

Proporciona la ejecución segura de código JavaScript arbitrario dentro de un entorno QuickJS WASM aislado, lo que permite que los modelos de lenguaje u otros clientes MCP ejecuten de forma segura fragmentos de código JavaScript sin comprometer el sistema host.

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