アイソレータMCPサーバー
isolator-mcp TypeScript で記述されたModel Context Protocol (MCP)サーバーです。組み込みのisolatorラッパーとして機能し、MCP 経由でアクセス可能な安全なコード実行サンドボックスを提供します。
LLM アプリケーション (MCP ホスト) はこのサーバーに接続し、 execute_codeツールを使用して、直接提供された、または事前定義されたスニペット ファイルから読み込まれた Python、Go、または JavaScript コード スニペットを安全に実行できます。
特徴
execute_codeMCP ツールを提供します。直接提供されたコード (
language、entrypoint_code) または名前付きスニペット (snippet_name) 経由での実行をサポートします。複数の言語 (Python、Go、JavaScript、構成可能) をサポートします。
組み込みの
isolatorGo CLI (isolator-cli/) を使用して、Docker コンテナを安全に実行します。isolator_config.jsonを介して構成可能なセキュリティのデフォルト (タイムアウト、リソース制限、ネットワーク)。コード実行のためにホスト上の一時ディレクトリを管理します。
コンテナへのファイルのコピーを処理します (
isolatorCLI に指示することにより)。ツールレベルの失敗時に
isError: trueを設定し、MCP 経由で構造化された結果 (stdout、stderr、ステータス) を返します。
Related MCP server: Hello World MCP Server
前提条件
Docker:
isolator-cliによるコンテナの作成と実行に必要です。Docker デーモンが実行中であることを確認してください。**Go:**組み込みの
isolator-cliGo バイナリをビルドするために必要です。**Node.js および npm:**依存関係をインストールし、
isolator-mcpTypeScript サーバーをビルドおよび実行するために必要です。
インストール
**
isolatorGo CLI をビルドする:**埋め込まれた Go CLI ディレクトリに移動し、バイナリをビルドします。cd isolator-cli go build -o isolator main.go cd ..これにより、サーバーに必要な
./isolator-cli/isolator実行可能ファイルが作成されます。isolator-mcpisolator_config.jsonを編集します。isolatorPathisolatorPath更新し、ビルドされたバイナリの絶対パス(例:/Users/ompragash/Documents/Cline/MCP/isolator-mcp/isolator-cli/isolator)を指定します。必要に応じて、デフォルトの制限、コンテナの作業ディレクトリ、言語イメージ、またはpromptsDir(スニペット用)の場所を調整します。promptsディレクトリが存在することを確認してください(デフォルト:./prompts)。コードスニペットファイル(例:hello_world.py)を追加します。ファイル名のベース(例:hello_world)がsnippet_nameとして使用されます。
**サーバーの依存関係をインストールします。**メイン ディレクトリ (
isolator-mcp) に移動して、次のコマンドを実行します。npm installビルドサーバー: TypeScript コードをコンパイルします。
npm run buildこれにより
build/index.jsに実行可能スクリプトが作成されます。MCP ホストを構成する: MCP クライアントの設定ファイル (例: VS Code 拡張機能の場合は
cline_mcp_settings.json) にサーバーを追加します。{ "mcpServers": { "isolator": { "command": "node", "args": ["/Users/ompragash/Documents/Cline/MCP/isolator-mcp/build/index.js"], "env": {}, "disabled": false, "autoApprove": [] } } }(必要に応じて 。MCPホストはサーバーを自動的に検出して起動します。
重要事項: isolator_config.jsonで指定されているDockerイメージ(例: python:3.11-alpine 、 golang:1.21-alpine )が、 docker pull <image_name> 。isolator isolatorは、不足しているイメージを自動的にダウンロードしません。
ローカル開発/テスト
開発またはテストのためにサーバーをローカルで実行するには(MCP ホスト設定でインストールせずに):
Go CLI をビルドする:
isolatorGo CLI がサブディレクトリ内にビルドされていることを確認します。cd isolator-cli go build -o isolator main.go cd ..**TS サーバーのビルド:**このメイン ディレクトリ (
isolator-mcp) で、npm installとnpm run build実行します。構成:
isolator_config.json``isolatorPathキーを介してビルドされた./isolator-cli/isolatorバイナリを正しく指していることを確認します (絶対パスを使用)。サーバーの実行: Node を使用して構築されたサーバーを直接実行します。
node build/index.jsサーバーが起動し、stdio 経由で接続し、ログ (
index.tsからのconsole.errorメッセージを含む) をコンソールに出力します。操作(手動): JSON-RPCメッセージ(例:
tools/list、tools/call)をサーバーの標準入力に手動で送信し、レスポンスをテストできます。@modelcontextprotocol/inspectorなどのツールも役立ちます(npm run inspector)。
(MCP ホストに依存して設定ファイル経由でサーバーを起動する前に、手動で実行されているこのサーバーを必ず停止してください。)
アーキテクチャとフロー
MCP ホスト要求: LLM は、MCP ホスト (VS Code 拡張機能など) に引数を指定して
isolatorサーバーのexecute_codeツールを呼び出すように要求します。サーバー処理 (
stdio 経由で
tools/call要求を受信します。Zod を使用して引数を検証します。
isolator_config.jsonから構成を読み込みます。コード ソースを決定します。
snippet_nameが指定されている場合は、構成されたpromptsDirから対応するファイルを読み取り、ファイル拡張子から言語を決定します。entrypoint_codeとlanguageが指定されている場合は、それらを直接使用します。
ホスト上に一時ディレクトリを作成します。
エントリポイント コードとすべての
additional_filesを一時ディレクトリに書き込みます。組み込み
isolatorGo CLI のコマンドライン引数を構築します。これには、構成からのセキュリティ フラグと一時ディレクトリへのパスが含まれます。Node.js
child_process.spawnを使用してisolatorプロセスを生成します。
Go CLI 実行 (
フラグを解析します (新しい
--envフラグを含む)。一時ディレクトリの内容の tar ストリームを作成します。
Docker SDK を使用して、指定されたイメージ、リソース制限、環境変数 (
--envから)、およびセキュリティ設定 (バインドマウントなし) を持つコンテナーを作成します。CopyToContainerを使用して、tar ストリームをコンテナの作業ディレクトリにコピーします。コンテナを起動し、要求されたコマンド (例:
python /workspace/hello_world.py) を実行します。完了を待機し、stdout/stderr をキャプチャします。
コンテナを削除します。
結果 (ステータス、出力など) を JSON として stdout に出力します。
サーバー結果処理 (
完了した
isolatorプロセスの stdout から JSON 出力を読み取ります。JSON の結果を解析します。
CallToolResultMCP 用にフォーマットし、stdout/stderr を結合し、Go CLI が非成功ステータスを報告した場合にisErrorを設定します。結果を MCP ホストに送り返します。
ホスト上の一時ディレクトリをクリーンアップします。
**MCP ホスト応答:**結果を LLM に中継し、LLM がユーザーへの応答を作成します。
execute_codeツール
説明
安全で分離されたコンテナ環境でコード (Python、Go、JavaScript) を実行します。
入力スキーマ( arguments )
language(文字列、オプション): プログラミング言語(例: "python"、"go"、"javascript")。snippet_nameが指定されていない場合は必須です。entrypoint_code(文字列、オプション):実行するメインコードの内容。snippet_nameが指定snippet_nameれていない場合は必須です。entrypoint_filename(文字列、オプション): メインコードのファイル名(例: "main.py"、"script.js")。指定されていない場合は、言語に基づいてデフォルトが設定されます。additional_files(配列、オプション): オブジェクトの配列。各オブジェクトには次の内容が含まれます。filename(文字列、必須): 追加ファイルの名前。content(文字列、必須): 追加ファイルの内容。
snippet_name(文字列、オプション): 設定されたpromptsDirにある、定義済みのコードスニペットファイル(拡張子なし)の名前。language およびentrypoint_codeとは相互language排他的です。
制約: snippet_nameいずれか、またはlanguageとentrypoint_codeの両方を指定する必要があります。
出力 ( CallToolResult )
content: 単一のTextContentオブジェクトを含む配列。type:「テキスト」text: 実行からの stdout と stderr を組み合わせた文字列。形式は次のようになります。--- stdout --- [Actual stdout output] --- stderr --- [Actual stderr output]実行中にエラーが発生した場合 (終了コードがゼロ以外、タイムアウト)、テキストの先頭に
Execution Failed (status): [error message]\n\n追加されます。
isError(ブール値):isolatorCLI によって報告された実行ステータスが「エラー」または「タイムアウト」の場合はtrue、それ以外の場合はfalse。
(無効な引数やプロセスの開始の失敗などのプロトコル レベルのエラーが発生すると、 。