MCP QuickJS ランナー
モデル コンテキスト プロトコル (MCP) を実装するサーバー。WebAssembly (WASM) にコンパイルされた QuickJS エンジン内で任意の JavaScript コードを安全に実行し、Node.js の組み込み WASI 実装を使用して実行するためのツールを提供します。
説明
このサーバーはMCPツールプロバイダーとして機能します。run_javascript_code run_javascript_code
単一のツールを公開しており、このツールはJavaScriptコードの文字列を入力として受け取ります。コードはサンドボックス化されたQuickJS WASM環境内で実行されます。サーバーは実行から標準出力( stdout
)と標準エラー( stderr
)ストリームをキャプチャし、実行エラーとともにMCPクライアントに返します。
これにより、言語モデルやその他の MCP クライアントは、ホスト システムを危険にさらすことなく、信頼できない可能性のある JavaScript コード スニペットを安全に実行できるようになります。
特徴
- 安全な実行: QuickJS と Node.js WASI を使用して、WASM サンドボックスで JavaScript を実行します。
- **標準 I/O キャプチャ:**実行された JavaScript コードから
stdout
とstderr
をキャプチャします。 - エラー報告: QuickJS からの実行時エラーとゼロ以外の終了コードを報告します。
- MCP 統合:
stdio
経由で標準 MCP ツールとして機能を公開します。 - **TypeScript で構築:**開発中に型の安全性を提供します。
仕組み
- WASM モジュール: WebAssembly System Interface (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 によって一時ファイルにルーティングされます。
- 実行が終了すると、サーバーはファイル ハンドルを閉じ、一時ファイルの内容を読み取ります。
- 一時ディレクトリとファイルがクリーンアップされます。
- (注:
node:wasi
現在 stdio に実際の OS ファイル記述子を必要とするため、メモリ内パイプやmemfs
などの仮想ファイルシステムを使用する試みは失敗しました。)
- **MCP 通信:**サーバーは
@modelcontextprotocol/sdk
を使用して、stdio
経由で MCP 要求をリッスンし、プロトコルに従ってフォーマットされた実行結果で応答します。
前提条件
- Node.js (v23.x 以降を推奨、特定のバージョンの
node:wasi
互換性を確認してください) - npmまたはyarn
- QuickJS WASMファイル(
qjs-wasi.wasm
)は、コンパイル済みのサーバースクリプトと同じディレクトリ(例:./dist/qjs-wasi.wasm``./dist/server.js
)に配置する必要があります。このファイルは別途入手またはコンパイルする必要がある場合があります。
インストール
- リポジトリをクローンします (該当する場合)。
- 依存関係をインストールします:Copy
使用法
Copy
This server cannot be installed
サンドボックス化された QuickJS WASM 環境内で任意の JavaScript コードを安全に実行できるため、言語モデルやその他の MCP クライアントは、ホスト システムを危険にさらすことなく、JavaScript コード スニペットを安全に実行できます。