Skip to main content
Glama

コンテナ-MCP

ライセンス: Apache 2.0

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

概要

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

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

Related MCP server: Code Sandbox MCP Server

主な特徴

  • 多層セキュリティ

    • 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 (boolean): 書き込みが成功したかどうか

    • 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 (boolean): 移動が成功したかどうか

    • 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 (ブール値): スクレイピングが成功したかどうか

    • 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/54rt1n/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 に基づいてライセンスされています。

著者

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server that enables LLMs to run ANY code safely in isolated Docker containers.
    122
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    A secure Model Context Protocol server that allows AI assistants and LLM applications to safely execute Python and JavaScript code snippets in containerized environments.
    2
    204
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides secure, sandboxed terminal access for AI assistants via the Model Context Protocol, with multi-layer risk analysis and auditable command execution.
    13 npm
    8
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Runs AI-generated code in secure Firecracker microVMs with opt-in network policy enforcement, PII scanning, prompt injection defense, and audit logging. Exposes MCP tools for running commands, managing files, and the full sandbox lifecycle.
    7
    29 npm
    1
    Apache 2.0