MCP QuickJS Runner
A server implementing the Model Context Protocol (MCP) that provides a tool to securely execute arbitrary JavaScript code within a QuickJS engine compiled to WebAssembly (WASM) and run using Node.js’s built-in WASI implementation.
Description
This server acts as an MCP tool provider. It exposes a single tool, run_javascript_code
, which takes a string of JavaScript code as input. The code is then executed inside a sandboxed QuickJS WASM environment. The server captures the standard output (stdout
) and standard error (stderr
) streams from the execution and returns them, along with any execution errors, back to the MCP client.
This allows language models or other MCP clients to safely execute potentially untrusted JavaScript code snippets without compromising the host system.
Features
- Secure Execution: Runs JavaScript in a WASM sandbox using QuickJS and Node.js WASI.
- Standard I/O Capture: Captures
stdout
andstderr
from the executed JavaScript code. - Error Reporting: Reports runtime errors from QuickJS and non-zero exit codes.
- MCP Integration: Exposes functionality as a standard MCP tool over
stdio
. - Built with TypeScript: Provides type safety during development.
How it Works
- WASM Module: Uses a pre-compiled QuickJS engine (
qjs-wasi.wasm
) targeting the WebAssembly System Interface (WASI). - Node.js WASI: Leverages the
node:wasi
module in Node.js to instantiate and run the WASM module. - Stdio Redirection (Temporary Files): To capture
stdout
andstderr
from the WASM environment, the server currently relies on the standard approach compatible withnode:wasi
:- A temporary directory is created on the host filesystem using
node:fs/promises
andnode:os
. - Temporary files for
stdout
andstderr
are opened within this directory. - The real OS file descriptors for these files are passed to the
WASI
instance during initialization (stdout: fd
,stderr: fd
). - The QuickJS WASM module writes its output to these descriptors, which gets routed by WASI to the temporary files.
- After execution finishes, the server closes the file handles and reads the content of the temporary files.
- The temporary directory and files are cleaned up.
- (Note: Attempts to use in-memory pipes or virtual filesystems like
memfs
were unsuccessful becausenode:wasi
currently requires real OS file descriptors for stdio.)
- A temporary directory is created on the host filesystem using
- MCP Communication: The server uses
@modelcontextprotocol/sdk
to listen for MCP requests viastdio
and respond with the execution results formatted according to the protocol.
Prerequisites
- Node.js (v23.x or later recommended, check
node:wasi
compatibility for your specific version) - npm or yarn
- The QuickJS WASM file (
qjs-wasi.wasm
) must be present in the same directory as the compiled server script (e.g.,./dist/qjs-wasi.wasm
relative to./dist/server.js
). You may need to obtain or compile this separately.
Installation
- Clone the repository (if applicable).
- Install dependencies:
npm install
Usage
node server.ts
MCP QuickJS Runner
Project Details
- jlucaso1/mcp-javascript-sandbox
- Last Updated: 4/14/2025
Recomended MCP Servers
Model Context Protocol for Text-to-Speech
This read-only MCP Server allows you to connect to Instagram data from Claude Desktop through CData JDBC Drivers....
An MCP server for managing `.clinerules` files using shared components and persona templates.
这是一个针对于MySQL开发的MCP,该项目旨在帮助用户快速且精确的查询MySQL数据库中的内容

Postgres MCP Pro supports you and your AI agents throughout the entire development process.
MCP Server for Windsurf
マナリンクのModel Context Protocol (MCP) サーバー実装です。AIアシスタントが先生検索などの機能を利用できるようにします(トライアル実装です)
A Model Context Protocol (MCP) server that provides web search capabilities through DuckDuckGo, with additional features for content...
Integrate librosa, whisper with LLMs to analyze music audio.
A2A MCP Server is a lightweight Python bridge that lets Claude Desktop or any MCP client talk to...
MCP implementation of https://linkd.inc/