Skip to main content
Glama

コンテナ-MCP

ライセンス: Apache 2.0

大規模言語モデルに代わってツールを実行するためのモデル コンテキスト プロトコル (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 (ブール値): コマンドが正常に完了したかどうか

{ "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 に基づいてライセンスされています。

著者

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

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

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/54rt1n/container-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server