コンテナ-MCP
大規模言語モデルに代わってツールを実行するためのモデル コンテキスト プロトコル (MCP) の安全なコンテナー ベースの実装。
概要
Container-MCPは、コードの実行、コマンドの実行、ファイルへのアクセス、大規模言語モデルから要求されたWeb操作を安全に実行するためのサンドボックス環境を提供します。MCPプロトコルを実装することで、これらの機能をAIシステムが安全に検出・呼び出しできるツールとして公開します。
このアーキテクチャでは、多層セキュリティを備えたドメイン固有のマネージャー パターンを使用して、適切な制限のある分離された環境でツールが実行されるようにし、潜在的に有害な操作からホスト システムを保護します。
Related MCP server: MCP Local File Reader
主な特徴
多層セキュリティ
Podman/Docker を使用したコンテナの分離
アクセスを制限するためのAppArmorプロファイル
追加の分離のためのFirejailサンドボックス
リソース制限(CPU、メモリ、実行時間)
パストラバーサル防止
許可された拡張機能の制限
MCPプロトコルの実装
標準化されたツールの検出と実行
リソース管理
非同期実行のサポート
ドメイン固有のマネージャー
BashManager: 安全なコマンド実行PythonManager: サンドボックス化された Python コード実行FileManager: 安全なファイル操作WebManager: 安全なウェブブラウジングとスクレイピング
設定可能な環境
環境変数による詳細な設定
カスタム環境のサポート
開発と生産モード
利用可能なツール
システム操作
system_run_command
安全なサンドボックス環境で bash コマンドを実行します。
パラメータ:
command(文字列、必須): 実行するbashコマンドworking_dir(文字列、オプション): 作業ディレクトリ (サンドボックスでは無視されます)
戻り値:
stdout(文字列): コマンドの標準出力stderr(文字列): コマンドの標準エラーexit_code(整数): コマンドの終了コードsuccess(ブール値): コマンドが正常に完了したかどうか
system_run_python
安全なサンドボックス環境で Python コードを実行します。
パラメータ:
code(文字列、必須): 実行するPythonコードworking_dir(文字列、オプション): 作業ディレクトリ (サンドボックスでは無視されます)
戻り値:
output(文字列):コードからの出力を印刷するerror(文字列): コードからのエラー出力result(任意): オプションの戻り値(コードが_変数を設定している場合に使用可能)success(ブール値): コードが正常に実行されたかどうか
system_env_var
環境変数の値を取得します。
パラメータ:
var_name(文字列、オプション): 取得する特定の変数
戻り値:
variables(オブジェクト): 環境変数の辞書要求され
requested_var変数の値(var_nameが指定されている場合)
ファイル操作
file_read
ファイルの内容を安全に読み取ります。
パラメータ:
path(文字列、必須): ファイルへのパス(サンドボックスのルートからの相対パス)encoding(文字列、オプション): ファイルのエンコーディング(デフォルト: "utf-8")
戻り値:
content(文字列): ファイルの内容size(整数): ファイルサイズ(バイト単位)modified(float): 最終更新日時success(ブール値): 読み取りが成功したかどうか
file_write
コンテンツを安全にファイルに書き込みます。
パラメータ:
path(文字列、必須): ファイルへのパス(サンドボックスのルートからの相対パス)content(文字列、必須): 書き込むコンテンツencoding(文字列、オプション): ファイルのエンコーディング(デフォルト: "utf-8")
戻り値:
success(boolean): 書き込みが成功したかどうかpath(文字列): 書き込まれたファイルへのパス
file_list
ディレクトリの内容を安全に一覧表示します。
パラメータ:
path(文字列、オプション): ディレクトリへのパス (デフォルト: "/")pattern(文字列、オプション):ファイルをフィルタリングするためのglobパターン
戻り値:
entries(配列):メタデータを含むディレクトリエントリのリストpath(文字列): リストされたディレクトリパスsuccess(boolean): リストが成功したかどうか
file_delete
ファイルを安全に削除します。
パラメータ:
path(文字列、必須): 削除するファイルのパス
戻り値:
success(ブール値): 削除が成功したかどうかpath(文字列): 削除されたファイルへのパス
file_move
ファイルを安全に移動または名前を変更します。
パラメータ:
source(文字列、必須): ソースファイルのパスdestination(文字列、必須): 宛先ファイルパス
戻り値:
success(boolean): 移動が成功したかどうかsource(文字列): 元のファイルパスdestination(文字列):新しいファイルパス
ウェブオペレーション
web_search
検索エンジンを使用して Web 上の情報を検索します。
パラメータ:
query(文字列、必須): 検索するクエリ
戻り値:
results(配列):検索結果のリストquery(文字列): 元のクエリ
web_scrape
特定の URL をスクレイピングしてコンテンツを返します。
パラメータ:
url(文字列、必須): スクレイピングするURLselector(文字列、オプション):特定のコンテンツを対象とする CSS セレクター
戻り値:
content(文字列):スクレイピングされたコンテンツurl(文字列): スクレイピングされたURLtitle(文字列): ページのタイトルsuccess(ブール値): スクレイピングが成功したかどうかerror(文字列): スクレイピングに失敗した場合のエラーメッセージ
web_browse
Playwright を使用して Web サイトをインタラクティブに閲覧します。
パラメータ:
url(文字列、必須): ブラウジングセッションの開始URL
戻り値:
content(文字列): ページのHTMLコンテンツurl(文字列): リダイレクト後の最終URLtitle(文字列): ページのタイトルsuccess(ブール値): ブラウジングが成功したかどうかerror(文字列): 閲覧に失敗した場合のエラーメッセージ
実行環境
Container-MCP は、それぞれ独自のセキュリティ対策とリソース制約を持つ、さまざまな種類の操作に対して分離された実行環境を提供します。
コンテナ環境
メインの Container-MCP サービスはコンテナ内で実行され (Podman または Docker を使用)、分離の最初のレイヤーを提供します。
ベースイメージ: Ubuntu 24.04
ユーザー: 非ルート Ubuntu ユーザー
Python : 3.12
ネットワーク: ローカルホストバインディングのみに制限されます
ファイルシステム: 構成、データ、ログ用のボリュームマウント
セキュリティ: AppArmor、Seccomp、および機能制限
Bash実行環境
Bash 実行環境は複数の分離レイヤーで構成されています。
許可されたコマンド:
BASH_ALLOWED_COMMANDSで設定された安全なコマンドに制限されますFirejail Sandbox : ファイルシステムへのアクセスを制限したプロセス分離
AppArmor プロファイル: きめ細かなアクセス制御
リソース制限:
実行タイムアウト(デフォルト: 30秒、最大: 120秒)
サンドボックスへのディレクトリアクセスのみに制限
ネットワーク: ネットワークアクセスなし
ファイルシステム: データへの読み取り専用アクセス、サンドボックスへの読み取り/書き込み
許可されるコマンドの例:
Python実行環境
Python 実行環境は、安全なコード実行のために設計されています。
Python バージョン: 3.12
メモリ制限: 設定可能なメモリ上限 (デフォルト: 256 MB)
実行タイムアウト: 設定可能な時間制限 (デフォルト: 30 秒、最大: 120 秒)
AppArmorプロファイル: システムリソースへのアクセスを制限します
Firejail Sandbox : プロセス分離
機能: すべての機能が削除されました
ネットワーク: ネットワークアクセスなし
利用可能なライブラリ: 標準ライブラリのみ
出力キャプチャ: stdout/stderr をリダイレクトしてサニタイズ
リソース制御: CPUとメモリの制限が強制される
ファイルシステム環境
ファイル システム環境は、サンドボックス内のファイルへのアクセスを制御します。
ベースディレクトリ: すべての操作はサンドボックスルートに制限されます
パス検証: すべてのパスが正規化され、トラバーサルの試行がチェックされます
サイズ制限: 最大ファイルサイズを強制 (デフォルト: 10 MB)
拡張子制御: 許可された拡張子のみ許可されます (デフォルト: txt、md、csv、json、py)
権限制御: 適切な読み取り/書き込み権限の適用
分離: ホストファイルシステムにアクセスできない
ウェブ環境
Web 環境では、外部リソースへの制御されたアクセスが提供されます。
ドメイン制御: 許可されたドメインのホワイトリスト化(オプション)
タイムアウト制御: 操作のタイムアウトを設定可能
ブラウザコントロール: Playwright 経由のヘッドレスブラウザでフルレンダリング
スクレイピング制御: リクエスト/BeautifulSoupによるシンプルなスクレイピング
コンテンツのサニタイズ: すべてのコンテンツが解析され、サニタイズされます
ネットワーク分離: コンテナを介してネットワーク名前空間を分離する
建築
このプロジェクトはモジュール型アーキテクチャに従います。
各マネージャーは一貫した設計パターンに従います。
環境ベースの初期化のための
.from_env()クラスメソッド非ブロッキング操作の非同期実行メソッド
強力な入力検証とエラー処理
すべての業務においてセキュリティを最優先に考える
セキュリティ対策
Container-MCP は複数のセキュリティ層を実装します。
コンテナ分離: コンテナ分離にPodman/Dockerを使用する
AppArmor プロファイル: bash および Python 実行のためのきめ細かなアクセス制御
Firejailサンドボックス:追加のプロセス分離
リソース制限: メモリ、CPU、実行時間の制限
パストラバーサル防止: すべてのファイルパスを検証し、正規化します
許可された拡張子の制限: アクセスできるファイルの種類を制御します
ネットワーク制限: アクセス可能なドメインを制御します
最小権限: コンポーネントは最小限の必要な権限で実行されます
インストール
前提条件
Podman または Docker を使用した Linux システム
Python 3.12以上
Firejail (
apt install firejailまたはdnf install firejail)AppArmor (
apt install apparmor apparmor-utilsまたはdnf install apparmor apparmor-utils)
クイックスタート
最も早く始める方法は、オールインワン スクリプトを使用することです。
ステップバイステップのインストール
インストール手順を個別に実行することもできます。
プロジェクトを初期化します:
./bin/01-init.shコンテナをビルドします:
./bin/02-build-container.sh環境を設定します:
./bin/03-setup-environment.shコンテナを実行します:
./bin/04-run-container.shテストを実行する(オプション):
./bin/05-run-tests.sh
使用法
コンテナが起動したら、任意のMCPクライアント実装を使用してコンテナに接続できます。サーバーはhttp://localhost:8000または設定で指定されたポートで利用できます。
重要: MCPクライアントを設定する際は、エンドポイントURLをhttp://127.0.0.1:<port>/sse sse( <port>はデフォルトの8000または設定したポート)に設定する必要があります。/sseパス/sseサーバー送信イベントの通信に必要です。
Pythonクライアントの例
構成
Container-MCP は、 volume/config/custom.envで設定できる環境変数を通じて構成できます。
サーバー構成
Bash マネージャーの設定
Python マネージャーの設定
ファイルマネージャーの設定
Webマネージャーの設定
発達
開発環境の構築
Python 仮想環境を作成します。
python3.12 -m venv .venv source .venv/bin/activate依存関係をインストールします:
pip install -r requirements-dev.txt開発モードでパッケージをインストールします。
pip install -e .
テストの実行
開発サーバー
MCP サーバーを開発モードで実行するには:
ライセンス
このプロジェクトは、Apache License 2.0 に基づいてライセンスされています。
著者
マーティン・ブコウスキー