Docker MCP Server について
Docker MCP Serverは、LLMにコマンドやスクリプトを実行させる用途向けに、Dockerコンテナ内でコードを隔離して実行します。複数言語の実行に加え、依存関係の導入とコンテナ管理に対応しています。
主な機能
- 01Dockerコンテナ内での隔離実行
- 02Dockerイメージを使った複数言語の実行
- 03パッケージ依存関係の導入と追加
- 04コマンドと複数行Pythonスクリプトの実行
- 05コンテナの一覧表示、作成、削除
活用シーン
- 01隔離環境でのコード片の実行
- 02PythonやNode.jsスクリプトへの依存関係の導入
- 03Dockerコンテナの確認とクリーンアップ
MCP 対応
MCPサーバーとして、MCP対応LLMにコンテナ管理、依存関係の導入、コード実行のツールを公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Docker MCP サーバー
コードを分離された Docker コンテナ内で実行し、その結果を Claude などの言語モデルに返す、強力な Model Context Protocol(MCP)サーバーです。
特長
- 分離されたコード実行:メインシステムから分離された Docker コンテナ内でコードを実行します
- 複数言語のサポート:Docker イメージがあれば、あらゆる言語でコードを実行できます
- 複雑なスクリプトのサポート:単純なコマンドから複数行のスクリプト全体まで実行できます
- パッケージ管理:pip、npm、apt-get、または apk を使って依存関係をインストールします
- コンテナ管理:Docker コンテナを簡単に作成、一覧表示、クリーンアップできます
- 堅牢なエラー処理:タイムアウトを適切に管理し、フォールバック機能を備えています
- カラフルな出力:見やすく、色分けされたコンソールのフィードバックを表示します
必要条件
- Python 3.9+
- Docker がインストールされ、実行されていること
- fastmcp ライブラリ
インストール
-
このリポジトリをクローンします:
git clone https://github.com/zaycruz/docker_mcp.git cd docker_mcp -
仮想環境を作成します:
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate -
必要なパッケージをインストールします:
pip install -r requirements.txt
使い方
MCP Inspector の実行
サーバーの機能をテストして確認するには:
python run_server.py
MCP Inspector のインターフェースが、http://localhost:5173 でブラウザーに表示されます。
利用可能なツール
Docker MCP サーバーでは、次のツールを利用できます:
1. コンテナの一覧表示
すべての Docker コンテナとその詳細を一覧表示します:
- パラメーター:
show_all:停止中のコンテナを含むすべてのコンテナを表示するかどうか(省略可、デフォルト:True)
2. コンテナの作成
オプションの依存関係を指定して Docker コンテナを作成し、起動します:
- パラメーター:
image:使用する Docker イメージ(例:"python:3.9-slim"、"node:16")container_name:コンテナに付ける一意の名前dependencies:インストールするパッケージをスペース区切りで指定したリスト(省略可、例:"numpy pandas"、"express lodash")
3. 依存関係の追加
既存の Docker コンテナに追加のパッケージをインストールします:
- パラメーター:
container_name:対象コンテナの名前dependencies:インストールするパッケージをスペース区切りで指定したリスト
4. コードの実行
実行中の Docker コンテナ内でコマンドを実行します:
- パラメーター:
container_name:対象コンテナの名前command:コンテナ内で実行するコマンド
5. Python スクリプトの実行
実行中の Docker コンテナ内で複数行の Python スクリプトを実行します:
- パラメーター:
container_name:対象コンテナの名前script_content:Python スクリプトの全内容script_args:スクリプトに渡す省略可能な引数
6. コンテナのクリーンアップ
Docker コンテナを停止して削除します:
- パラメーター:
container_name:クリーンアップするコンテナの名前
例
基本的なワークフローの例
# 1. List existing containers to see what's already running
list_containers()
# 2. Create a new container
create_container(
image="python:3.9-slim",
container_name="python-example",
dependencies="numpy pandas"
)
# 3. Execute a command in the container
execute_code(
container_name="python-example",
command="python -c 'import numpy as np; print(\"NumPy version:\", np.__version__)'"
)
# 4. Add more dependencies later
add_dependencies(
container_name="python-example",
dependencies="matplotlib scikit-learn"
)
# 5. List containers again to confirm status
list_containers(show_all=False) # Only show running containers
# 6. Clean up when done
cleanup_container(container_name="python-example")
Python によるデータ分析の例
# 1. Create a container with dependencies
create_container(
image="python:3.9-slim",
container_name="python-test",
dependencies="numpy pandas matplotlib"
)
# 2. Execute a Python script
script = """
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Create some data
data = pd.DataFrame({
'x': np.random.randn(100),
'y': np.random.randn(100)
})
print(f"Data shape: {data.shape}")
print(f"Data correlation: {data.corr().iloc[0,1]:.4f}")
"""
execute_python_script(container_name="python-test", script_content=script)
# 3. Add additional dependencies later if needed
add_dependencies(container_name="python-test", dependencies="scikit-learn")
# 4. Verify container is running
list_containers(show_all=False)
# 5. Clean up when done
cleanup_container(container_name="python-test")
Node.js の例
# 1. Check for existing Node.js containers
list_containers()
# 2. Create a Node.js container
create_container(
image="node:16",
container_name="node-test",
dependencies="express axios"
)
# 3. Execute a Node.js script
execute_code(
container_name="node-test",
command="node -e \"console.log('Node.js version: ' + process.version); console.log('Express installed: ' + require.resolve('express'));\""
)
# 4. Add more dependencies
add_dependencies(container_name="node-test", dependencies="lodash moment")
# 5. Clean up when done
cleanup_container(container_name="node-test")
パッケージマネージャーのサポート
Docker MCP サーバーは、適切なパッケージマネージャーを自動的に検出して使用します:
- Python コンテナ:
pipを使用します - Node.js コンテナ:
npmを使用します - Debian/Ubuntu コンテナ:
apt-getを使用します - Alpine コンテナ:
apkを使用します
イメージ名からパッケージマネージャーが明らかでないコンテナの場合、サーバーは利用可能なパッケージマネージャーの検出を試みます。
Claude およびその他の LLM との統合
この MCP サーバーは、Model Context Protocol をサポートする Claude およびその他の LLM と統合できます。fastmcp install コマンドを使って、Claude に登録してください:
fastmcp install src/docker_mcp.py
トラブルシューティング
- ポートがすでに使用中:"Address already in use" エラーが表示された場合は、他の MCP Inspector インスタンスが実行されていないことを確認してください。
- Docker 接続の問題:
docker --versionを実行し、Docker が起動していることを確認してください。 - コンテナのタイムアウト:サーバーには、想定時間内に応答しないコンテナ向けのフォールバック機能が備わっています。
- パッケージのインストール失敗:指定したパッケージマネージャーに対して、パッケージ名が正しいことを確認してください。
- コンテナが見つからない:list_containers の結果が空の場合、Docker でまだコンテナが作成されていない可能性があります。
セキュリティに関する考慮事項
このサーバーはDockerコンテナ内でコードを実行し、ホストシステムからの隔離を実現します。ただし、次の点に注意してください。
- 追加のセキュリティ対策を講じずに、このサーバーを公開しないでください
- コンテナにホストのボリュームをマウントする際は注意してください
- DoS攻撃を防ぐため、コンテナのリソース制限を検討してください
ライセンス
貢献
皆様からの貢献を歓迎します!お気軽にプルリクエストを送信してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。