アイソレータ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 ディレクトリに移動し、バイナリをビルドします。これにより、サーバーに必要な./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
) に移動して、次のコマンドを実行します。 - ビルドサーバー: TypeScript コードをコンパイルします。これにより
build/index.js
に実行可能スクリプトが作成されます。 - MCP ホストを構成する: MCP クライアントの設定ファイル (例: VS Code 拡張機能の場合は
cline_mcp_settings.json
) にサーバーを追加します。(必要に応じてargs
のパスを調整してください) 。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 がサブディレクトリ内にビルドされていることを確認します。 - **TS サーバーのビルド:**このメイン ディレクトリ (
isolator-mcp
) で、npm install
とnpm run build
実行します。 - 構成:
isolator_config.json``isolatorPath
キーを介してビルドされた./isolator-cli/isolator
バイナリを正しく指していることを確認します (絶対パスを使用)。 - サーバーの実行: Node を使用して構築されたサーバーを直接実行します。サーバーが起動し、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
ツールを呼び出すように要求します。 - サーバー処理 (
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 を組み合わせた文字列。形式は次のようになります。実行中にエラーが発生した場合 (終了コードがゼロ以外、タイムアウト)、テキストの先頭にExecution Failed (status): [error message]\n\n
追加されます。
isError
(ブール値):isolator
CLI によって報告された実行ステータスが「エラー」または「タイムアウト」の場合はtrue
、それ以外の場合はfalse
。
(無効な引数やプロセスの開始の失敗などのプロトコル レベルのエラーが発生すると、 CallToolResult
ではなく標準の MCP エラー応答が返されます) 。
local-only server
The server can only run on the client's local machine because it depends on local resources.
Tools
分離された Docker コンテナ内での安全なコード実行を提供するモデル コンテキスト プロトコルを実装した TypeScript サーバー。これにより、LLM アプリケーションは Python、Go、または JavaScript コード スニペットを安全に実行できます。
Related Resources
Related MCP Servers
- -securityFlicense-qualityA TypeScript-based server that provides a memory system for Large Language Models (LLMs), allowing users to interact with multiple LLM providers while maintaining conversation history and offering tools for managing providers and model configurations.Last updated -20JavaScript
- AsecurityFlicenseAqualityA template for creating Model Context Protocol (MCP) servers in TypeScript, offering features like container-based dependency injection, a service-based architecture, and integration with the LLM CLI for architectural design feedback through natural language.Last updated -15TypeScript
- -securityAlicense-qualityFacilitates isolated code execution within Docker containers, enabling secure multi-language script execution and integration with language models like Claude via the Model Context Protocol.Last updated -PythonMIT License
- -securityAlicense-qualityA TypeScript implementation of a Model Context Protocol server that provides a frictionless framework for developers to build and deploy AI tools and prompts, focusing on developer experience with zero boilerplate and automatic tool registration.Last updated -6TypeScriptMIT License