Container-MCP

by 54rt1n
Verified

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

Integrations

  • Uses Docker for container isolation as a security layer when executing tools on behalf of AI systems.

  • Designed to run on Linux systems with features like AppArmor profiles and Firejail for sandboxing.

  • Uses Podman as an alternative to Docker for container isolation when executing tools on behalf of AI systems.

コンテナ-MCP

大規模言語モデルに代わってツールを実行するためのモデル コンテキスト プロトコル (MCP) の安全なコンテナー ベースの実装。

概要

Container-MCPは、コードの実行、コマンドの実行、ファイルへのアクセス、大規模言語モデルから要求されたWeb操作を安全に実行するためのサンドボックス環境を提供します。MCPプロトコルを実装することで、これらの機能をAIシステムが安全に検出・呼び出しできるツールとして公開します。

このアーキテクチャでは、多層セキュリティを備えたドメイン固有のマネージャー パターンを使用して、適切な制限のある分離された環境でツールが実行されるようにし、潜在的に有害な操作からホスト システムを保護します。

主な特徴

  • 多層セキュリティ
    • Podman/Docker を使用したコンテナの分離
    • アクセスを制限するためのAppArmorプロファイル
    • 追加の分離のためのFirejailサンドボックス
    • リソース制限(CPU、メモリ、実行時間)
    • パストラバーサル防止
    • 許可された拡張機能の制限
  • MCPプロトコルの実装
    • 標準化されたツールの検出と実行
    • リソース管理
    • 非同期実行のサポート
  • ドメイン固有のマネージャー
    • BashManager : 安全なコマンド実行
    • PythonManager : サンドボックス化された Python コード実行
    • FileManager : 安全なファイル操作
    • WebManager : 安全なウェブブラウジングとスクレイピング
  • 設定可能な環境
    • 環境変数による詳細な設定
    • カスタム環境のサポート
    • 開発と生産モード

利用可能なツール

システム操作

system_run_command

安全なサンドボックス環境で bash コマンドを実行します。

  • パラメータ:
    • command (文字列、必須): 実行するbashコマンド
    • working_dir (文字列、オプション): 作業ディレクトリ (サンドボックスでは無視されます)
  • 戻り値:
    • stdout (文字列): コマンドの標準出力
    • stderr (文字列): コマンドの標準エラー
    • exit_code (整数): コマンドの終了コード
    • success (ブール値): コマンドが正常に完了したかどうか
{ "stdout": "file1.txt\nfile2.txt\n", "stderr": "", "exit_code": 0, "success": true }

system_run_python

安全なサンドボックス環境で Python コードを実行します。

  • パラメータ:
    • code (文字列、必須): 実行するPythonコード
    • working_dir (文字列、オプション): 作業ディレクトリ (サンドボックスでは無視されます)
  • 戻り値:
    • output (文字列):コードからの出力を印刷する
    • error (文字列): コードからのエラー出力
    • result (任意): オプションの戻り値(コードが_変数を設定している場合に使用可能)
    • success (ブール値): コードが正常に実行されたかどうか
{ "output": "Hello, world!\n", "error": "", "result": 42, "success": true }

system_env_var

環境変数の値を取得します。

  • パラメータ:
    • var_name (文字列、オプション): 取得する特定の変数
  • 戻り値:
    • variables (オブジェクト): 環境変数の辞書
    • 要求されrequested_var変数の値(var_nameが指定されている場合)
{ "variables": { "MCP_PORT": "8000", "SANDBOX_ROOT": "/app/sandbox" }, "requested_var": "8000" }

ファイル操作

file_read

ファイルの内容を安全に読み取ります。

  • パラメータ:
    • path (文字列、必須): ファイルへのパス(サンドボックスのルートからの相対パス)
    • encoding (文字列、オプション): ファイルのエンコーディング(デフォルト: "utf-8")
  • 戻り値:
    • content (文字列): ファイルの内容
    • size (整数): ファイルサイズ(バイト単位)
    • modified (float): 最終更新日時
    • success (ブール値): 読み取りが成功したかどうか
{ "content": "This is the content of the file.", "size": 31, "modified": 1673452800.0, "success": true }

file_write

コンテンツを安全にファイルに書き込みます。

  • パラメータ:
    • path (文字列、必須): ファイルへのパス(サンドボックスのルートからの相対パス)
    • content (文字列、必須): 書き込むコンテンツ
    • encoding (文字列、オプション): ファイルのエンコーディング(デフォルト: "utf-8")
  • 戻り値:
    • success (ブール値): 書き込みが成功したかどうか
    • path (文字列): 書き込まれたファイルへのパス
{ "success": true, "path": "data/myfile.txt" }

file_list

ディレクトリの内容を安全に一覧表示します。

  • パラメータ:
    • path (文字列、オプション): ディレクトリへのパス (デフォルト: "/")
    • pattern (文字列、オプション):ファイルをフィルタリングするためのglobパターン
  • 戻り値:
    • entries (配列):メタデータを含むディレクトリエントリのリスト
    • path (文字列): リストされたディレクトリパス
    • success (boolean): リストが成功したかどうか
{ "entries": [ { "name": "file1.txt", "path": "file1.txt", "is_directory": false, "size": 1024, "modified": 1673452800.0 }, { "name": "data", "path": "data", "is_directory": true, "size": null, "modified": 1673452500.0 } ], "path": "/", "success": true }

file_delete

ファイルを安全に削除します。

  • パラメータ:
    • path (文字列、必須): 削除するファイルのパス
  • 戻り値:
    • success (ブール値): 削除が成功したかどうか
    • path (文字列): 削除されたファイルへのパス
{ "success": true, "path": "temp/old_file.txt" }

file_move

ファイルを安全に移動または名前を変更します。

  • パラメータ:
    • source (文字列、必須): ソースファイルのパス
    • destination (文字列、必須): 宛先ファイルパス
  • 戻り値:
    • success (ブール値): 移動が成功したかどうか
    • source (文字列): 元のファイルパス
    • destination (文字列):新しいファイルパス
{ "success": true, "source": "data/old_name.txt", "destination": "data/new_name.txt" }

ウェブオペレーション

検索エンジンを使用して Web 上の情報を検索します。

  • パラメータ:
    • query (文字列、必須): 検索するクエリ
  • 戻り値:
    • results (配列):検索結果のリスト
    • query (文字列): 元のクエリ
{ "results": [ { "title": "Search Result Title", "url": "https://example.com/page1", "snippet": "Text snippet from the search result..." } ], "query": "example search query" }

web_scrape

特定の URL をスクレイピングしてコンテンツを返します。

  • パラメータ:
    • url (文字列、必須): スクレイピングするURL
    • selector (文字列、オプション):特定のコンテンツを対象とする CSS セレクター
  • 戻り値:
    • content (文字列):スクレイピングされたコンテンツ
    • url (文字列): スクレイピングされたURL
    • title (文字列): ページのタイトル
    • success (boolean): スクレイピングが成功したかどうか
    • error (文字列): スクレイピングに失敗した場合のエラーメッセージ
{ "content": "This is the content of the web page...", "url": "https://example.com/page", "title": "Example Page", "success": true, "error": null }

web_browse

Playwright を使用して Web サイトをインタラクティブに閲覧します。

  • パラメータ:
    • url (文字列、必須): ブラウジングセッションの開始URL
  • 戻り値:
    • content (文字列): ページのHTMLコンテンツ
    • url (文字列): リダイレクト後の最終URL
    • title (文字列): ページのタイトル
    • success (ブール値): ブラウジングが成功したかどうか
    • error (文字列): 閲覧に失敗した場合のエラーメッセージ
{ "content": "<!DOCTYPE html><html>...</html>", "url": "https://example.com/after_redirect", "title": "Example Page", "success": true, "error": null }

実行環境

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秒)
    • サンドボックスへのディレクトリアクセスのみに制限
  • ネットワーク: ネットワークアクセスなし
  • ファイルシステム: データへの読み取り専用アクセス、サンドボックスへの読み取り/書き込み

許可されるコマンドの例:

ls, cat, grep, find, echo, pwd, mkdir, touch

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によるシンプルなスクレイピング
  • コンテンツのサニタイズ: すべてのコンテンツが解析され、サニタイズされます
  • ネットワーク分離: コンテナを介してネットワーク名前空間を分離する

建築

このプロジェクトはモジュール型アーキテクチャに従います。

container-mcp/ ├── cmcp/ # Main application code │ ├── managers/ # Domain-specific managers │ │ ├── bash_manager.py # Secure bash execution │ │ ├── python_manager.py # Secure python execution │ │ ├── file_manager.py # Secure file operations │ │ └── web_manager.py # Secure web operations │ ├── utils/ # Utility functions │ ├── config.py # Configuration system │ └── main.py # MCP server setup ├── apparmor/ # AppArmor profiles ├── config/ # Configuration files ├── bin/ # Build/run scripts ├── data/ # Data directory ├── logs/ # Log directory ├── sandbox/ # Sandboxed execution space │ ├── bash/ # Bash sandbox │ ├── python/ # Python sandbox │ ├── files/ # File operation sandbox │ └── browser/ # Web browser sandbox ├── temp/ # Temporary storage └── tests/ # Test suites

各マネージャーは一貫した設計パターンに従います。

  • 環境ベースの初期化のための.from_env()クラスメソッド
  • 非ブロッキング操作の非同期実行メソッド
  • 強力な入力検証とエラー処理
  • すべての業務においてセキュリティを最優先に考える

セキュリティ対策

Container-MCP は複数のセキュリティ層を実装します。

  1. コンテナ分離: コンテナ分離にPodman/Dockerを使用する
  2. AppArmor プロファイル: bash および Python 実行のためのきめ細かなアクセス制御
  3. Firejailサンドボックス:追加のプロセス分離
  4. リソース制限: メモリ、CPU、実行時間の制限
  5. パストラバーサル防止: すべてのファイルパスを検証し、正規化します
  6. 許可された拡張子の制限: アクセスできるファイルの種類を制御します
  7. ネットワーク制限: アクセス可能なドメインを制御します
  8. 最小権限: コンポーネントは最小限の必要な権限で実行されます

インストール

前提条件

  • Podman または Docker を使用した Linux システム
  • Python 3.12以上
  • Firejail ( apt install firejailまたはdnf install firejail )
  • AppArmor ( apt install apparmor apparmor-utilsまたはdnf install apparmor apparmor-utils )

クイックスタート

最も早く始める方法は、オールインワン スクリプトを使用することです。

git clone https://github.com/container-mcp/container-mcp.git cd container-mcp chmod +x bin/00-all-in-one.sh ./bin/00-all-in-one.sh

ステップバイステップのインストール

インストール手順を個別に実行することもできます。

  1. プロジェクトを初期化します:
    ./bin/01-init.sh
  2. コンテナをビルドします:
    ./bin/02-build-container.sh
  3. 環境を設定します:
    ./bin/03-setup-environment.sh
  4. コンテナを実行します:
    ./bin/04-run-container.sh
  5. テストを実行する(オプション):
    ./bin/05-run-tests.sh

使用法

コンテナが起動したら、任意のMCPクライアント実装を使用してコンテナに接続できます。サーバーはhttp://localhost:8000または設定で指定されたポートで利用できます。

重要: MCPクライアントを設定する際は、エンドポイントURLをhttp://127.0.0.1:<port>/sse sse( <port>はデフォルトの8000または設定したポート)に設定する必要があります。/sseパス/sseサーバー送信イベントの通信に必要です。

Pythonクライアントの例

from mcp.client.sse import sse_client from mcp import ClientSession import asyncio async def main(): # Connect to the Container-MCP server # Note the /sse endpoint suffix required for SSE communication sse_url = "http://127.0.0.1:8000/sse" # Or your configured port # Connect to the SSE endpoint async with sse_client(sse_url) as (read, write): async with ClientSession(read, write) as session: # Initialize the connection await session.initialize() # Discover available tools result = await session.list_tools() print(f"Available tools: {[tool.name for tool in result.tools]}") # Execute a Python script python_result = await session.execute_tool( "system_run_python", {"code": "print('Hello, world!')\nresult = 42\n_ = result"} ) print(f"Python result: {python_result}") # Execute a bash command bash_result = await session.execute_tool( "system_run_command", {"command": "ls -la"} ) print(f"Command output: {bash_result['stdout']}") if __name__ == "__main__": asyncio.run(main())

構成

Container-MCP は、 volume/config/custom.envで設定できる環境変数を通じて構成できます。

サーバー構成

# MCP Server Configuration MCP_HOST=127.0.0.1 MCP_PORT=9001 DEBUG=true LOG_LEVEL=INFO

Bash マネージャーの設定

# Bash Manager Configuration BASH_ALLOWED_COMMANDS=ls,cat,grep,find,echo,pwd,mkdir,touch BASH_TIMEOUT_DEFAULT=30 BASH_TIMEOUT_MAX=120

Python マネージャーの設定

# Python Manager Configuration PYTHON_MEMORY_LIMIT=256 PYTHON_TIMEOUT_DEFAULT=30 PYTHON_TIMEOUT_MAX=120

ファイルマネージャーの設定

# File Manager Configuration FILE_MAX_SIZE_MB=10 FILE_ALLOWED_EXTENSIONS=txt,md,csv,json,py

Webマネージャーの設定

# Web Manager Configuration WEB_TIMEOUT_DEFAULT=30 WEB_ALLOWED_DOMAINS=*

発達

開発環境の構築

  1. Python 仮想環境を作成します。
    python3.12 -m venv .venv source .venv/bin/activate
  2. 依存関係をインストールします:
    pip install -r requirements-dev.txt
  3. 開発モードでパッケージをインストールします。
    pip install -e .

テストの実行

# Run all tests pytest # Run only unit tests pytest tests/unit # Run only integration tests pytest tests/integration # Run with coverage report pytest --cov=cmcp --cov-report=term --cov-report=html

開発サーバー

MCP サーバーを開発モードで実行するには:

python -m cmcp.main --test-mode

ライセンス

このプロジェクトは、Apache License 2.0 に基づいてライセンスされています。

著者

マーティン・ブコウスキー

-
security - not tested
A
license - permissive license
-
quality - not tested

モデル コンテキスト プロトコル (MCP) の安全なコンテナーベースの実装であり、AI システムが安全にコードを実行し、コマンドを実行し、ファイルにアクセスし、Web 操作を実行するためのサンドボックス環境を提供します。

  1. Overview
    1. Key Features
      1. Available Tools
        1. System Operations
        2. File Operations
        3. Web Operations
      2. Execution Environment
        1. Container Environment
        2. Bash Execution Environment
        3. Python Execution Environment
        4. File System Environment
        5. Web Environment
      3. Architecture
        1. Security Measures
          1. Installation
            1. Prerequisites
            2. Quick Start
            3. Step-by-Step Installation
          2. Usage
            1. Example Python Client
          3. Configuration
            1. Server Configuration
            2. Bash Manager Configuration
            3. Python Manager Configuration
            4. File Manager Configuration
            5. Web Manager Configuration
          4. Development
            1. Setting Up a Development Environment
            2. Running Tests
            3. Development Server
          5. License
            1. Author

              Appeared in Searches

              ID: sz6c2rk27y