Integrations
Provides secure code execution in isolated Docker containers, used for safely running user-provided code snippets.
Enables running JavaScript code snippets within isolated containers for secure execution.
Supports execution of Node.js code in secure, isolated containers with controlled resource limits.
アイソレータMCPサーバー
isolator-mcp
TypeScript で記述されたModel Context Protocol (MCP)サーバーです。組み込みのisolator
Go CLI ツールのラッパーとして機能し、MCP 経由でアクセス可能な安全なコード実行サンドボックスを提供します。
LLM アプリケーション (MCP ホスト) はこのサーバーに接続し、 execute_code
ツールを使用して、直接提供された、または事前定義されたスニペット ファイルから読み込まれた Python、Go、または JavaScript コード スニペットを安全に実行できます。
特徴
execute_code
MCP ツールを提供します。- 直接提供されたコード (
language
、entrypoint_code
) または名前付きスニペット (snippet_name
) 経由での実行をサポートします。 - 複数の言語 (Python、Go、JavaScript、構成可能) をサポートします。
- 組み込みの
isolator
Go CLI (isolator-cli/
) を使用して、Docker コンテナを安全に実行します。 isolator_config.json
を介して構成可能なセキュリティのデフォルト (タイムアウト、リソース制限、ネットワーク)。- コード実行のためにホスト上の一時ディレクトリを管理します。
- コンテナへのファイルのコピーを処理します (
isolator
CLI に指示することにより)。 - ツールレベルの失敗時に
isError: true
を設定し、MCP 経由で構造化された結果 (stdout、stderr、ステータス) を返します。
前提条件
- Docker:
isolator-cli
によるコンテナの作成と実行に必要です。Docker デーモンが実行中であることを確認してください。 - **Go:**組み込みの
isolator-cli
Go バイナリをビルドするために必要です。 - **Node.js および npm:**依存関係をインストールし、
isolator-mcp
TypeScript サーバーをビルドおよび実行するために必要です。
インストール
- **
isolator
Go CLI をビルドする:**埋め込まれた Go CLI ディレクトリに移動し、バイナリをビルドします。これにより、サーバーに必要なCopy./isolator-cli/isolator
実行可能ファイルが作成されます。 isolator-mcp
を設定します。isolator_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
) に移動して、次のコマンドを実行します。Copy - ビルドサーバー: TypeScript コードをコンパイルします。これによりCopy
build/index.js
に実行可能スクリプトが作成されます。 - MCP ホストを構成する: MCP クライアントの設定ファイル (例: VS Code 拡張機能の場合は
cline_mcp_settings.json
) にサーバーを追加します。(必要に応じてCopyargs
のパスを調整してください) 。MCPホストはサーバーを自動的に検出して起動します。
重要事項: isolator_config.json
で指定されているDockerイメージ(例: python:3.11-alpine
、 golang:1.21-alpine
)が、 docker pull <image_name>
。isolator isolator
は、不足しているイメージを自動的にダウンロードしません。
ローカル開発/テスト
開発またはテストのためにサーバーをローカルで実行するには(MCP ホスト設定でインストールせずに):
- Go CLI をビルドする:
isolator
Go CLI がサブディレクトリ内にビルドされていることを確認します。Copy - **TS サーバーのビルド:**このメイン ディレクトリ (
isolator-mcp
) で、npm install
とnpm run build
実行します。 - 構成:
isolator_config.json``isolatorPath
キーを介してビルドされた./isolator-cli/isolator
バイナリを正しく指していることを確認します (絶対パスを使用)。 - サーバーの実行: Node を使用して構築されたサーバーを直接実行します。サーバーが起動し、stdio 経由で接続し、ログ (Copy
index.ts
からのconsole.error
メッセージを含む) をコンソールに出力します。 - 操作(手動): JSON-RPCメッセージ(例:
tools/list
、tools/call
)をサーバーの標準入力に手動で送信し、レスポンスをテストできます。@modelcontextprotocol/inspector
などのツールも役立ちます(npm run inspector
)。
(MCP ホストに依存して設定ファイル経由でサーバーを起動する前に、手動で実行されているこのサーバーを必ず停止してください。)
アーキテクチャとフロー
- MCP ホスト要求: LLM は、MCP ホスト (VS Code 拡張機能など) に引数を指定して
isolator
サーバーのexecute_code
ツールを呼び出すように要求します。 - サーバー処理 (
index.ts
):- stdio 経由で
tools/call
要求を受信します。 - Zod を使用して引数を検証します。
isolator_config.json
から構成を読み込みます。- コード ソースを決定します。
snippet_name
が指定されている場合は、構成されたpromptsDir
から対応するファイルを読み取り、ファイル拡張子から言語を決定します。entrypoint_code
とlanguage
が指定されている場合は、それらを直接使用します。
- ホスト上に一時ディレクトリを作成します。
- エントリポイント コードとすべての
additional_files
を一時ディレクトリに書き込みます。 - 組み込み
isolator
Go CLI のコマンドライン引数を構築します。これには、構成からのセキュリティ フラグと一時ディレクトリへのパスが含まれます。 - Node.js
child_process.spawn
を使用してisolator
プロセスを生成します。
- stdio 経由で
- Go CLI 実行 (
isolator-cli/isolator run
):- フラグを解析します (新しい
--env
フラグを含む)。 - 一時ディレクトリの内容の tar ストリームを作成します。
- Docker SDK を使用して、指定されたイメージ、リソース制限、環境変数 (
--env
から)、およびセキュリティ設定 (バインドマウントなし) を持つコンテナーを作成します。 CopyToContainer
を使用して、tar ストリームをコンテナの作業ディレクトリにコピーします。- コンテナを起動し、要求されたコマンド (例:
python /workspace/hello_world.py
) を実行します。 - 完了を待機し、stdout/stderr をキャプチャします。
- コンテナを削除します。
- 結果 (ステータス、出力など) を JSON として stdout に出力します。
- フラグを解析します (新しい
- サーバー結果処理 (
index.ts
):- 完了した
isolator
プロセスの stdout から JSON 出力を読み取ります。 - JSON の結果を解析します。
CallToolResult
MCP 用にフォーマットし、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 を組み合わせた文字列。形式は次のようになります。実行中にエラーが発生した場合 (終了コードがゼロ以外、タイムアウト)、テキストの先頭にCopyExecution Failed (status): [error message]\n\n
追加されます。
isError
(ブール値):isolator
CLI によって報告された実行ステータスが「エラー」または「タイムアウト」の場合はtrue
、それ以外の場合はfalse
。
(無効な引数やプロセスの開始の失敗などのプロトコル レベルのエラーが発生すると、 CallToolResult
ではなく標準の MCP エラー応答が返されます) 。
You must be authenticated.
Tools
分離された Docker コンテナ内での安全なコード実行を提供するモデル コンテキスト プロトコルを実装した TypeScript サーバー。これにより、LLM アプリケーションは Python、Go、または JavaScript コード スニペットを安全に実行できます。