MCP QuickJS Runner

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 コードからstdoutstderrをキャプチャします。
  • エラー報告: QuickJS からの実行時エラーとゼロ以外の終了コードを報告します。
  • MCP 統合: stdio経由で標準 MCP ツールとして機能を公開します。
  • **TypeScript で構築:**開発中に型の安全性を提供します。

仕組み

  1. WASM モジュール: WebAssembly System Interface (WASI) をターゲットとした、事前コンパイルされた QuickJS エンジン ( qjs-wasi.wasm ) を使用します。
  2. Node.js WASI: Node.js のnode:wasiモジュールを活用して、WASM モジュールをインスタンス化して実行します。
  3. stdio リダイレクト (一時ファイル): WASM 環境からstdoutstderrをキャプチャするために、サーバーは現在、 node:wasiと互換性のある標準的なアプローチに依存しています。
    • node:fs/promisesnode:os使用して、ホスト ファイルシステム上に一時ディレクトリが作成されます。
    • このディレクトリ内でstdoutおよびstderrの一時ファイルが開かれます。
    • これらのファイルの**実際の OS ファイル記述子は、**初期化中にWASIインスタンスに渡されます ( stdout: fdstderr: fd )。
    • QuickJS WASM モジュールは出力をこれらの記述子に書き込み、WASI によって一時ファイルにルーティングされます。
    • 実行が終了すると、サーバーはファイル ハンドルを閉じ、一時ファイルの内容を読み取ります。
    • 一時ディレクトリとファイルがクリーンアップされます。
    • (注: node:wasi現在 stdio に実際の OS ファイル記述子を必要とするため、メモリ内パイプやmemfsなどの仮想ファイルシステムを使用する試みは失敗しました。)
  4. **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 )に配置する必要があります。このファイルは別途入手またはコンパイルする必要がある場合があります。

インストール

  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