mcpField
D
Docker MCP Server

Docker MCP Server

ローカル
github.com/zaycruzクラウド・インフラ57 週間前に更新

Docker MCP Server について

Docker MCP Serverは、LLMにコマンドやスクリプトを実行させる用途向けに、Dockerコンテナ内でコードを隔離して実行します。複数言語の実行に加え、依存関係の導入とコンテナ管理に対応しています。

主な機能

  1. 01Dockerコンテナ内での隔離実行
  2. 02Dockerイメージを使った複数言語の実行
  3. 03パッケージ依存関係の導入と追加
  4. 04コマンドと複数行Pythonスクリプトの実行
  5. 05コンテナの一覧表示、作成、削除

活用シーン

  1. 01隔離環境でのコード片の実行
  2. 02PythonやNode.jsスクリプトへの依存関係の導入
  3. 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 ライブラリ

インストール

  1. このリポジトリをクローンします:

    git clone https://github.com/zaycruz/docker_mcp.git
    cd docker_mcp
    
  2. 仮想環境を作成します:

    python -m venv venv
    source venv/bin/activate  # On Windows: venv\Scripts\activate
    
  3. 必要なパッケージをインストールします:

    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攻撃を防ぐため、コンテナのリソース制限を検討してください

ライセンス

MITライセンス

貢献

皆様からの貢献を歓迎します!お気軽にプルリクエストを送信してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。