Skip to main content
Glama
d7eeem

mcp-dockhand

by d7eeem

MCP Dockhand

CI License: MIT Docker

Dockhand API を MCP ツールとして公開する MCP(Model Context Protocol)サーバー。AI アシスタントを通じて Docker インフラ全体を管理できます。

API カバレッジ: 対象範囲内の Dockhand エンドポイントの 88.7%(282/318)に MCP ツールがあります — 分野別の完全な自動更新内訳は docs/coverage.md を参照してください。

Dockhand は、Hawser エージェントを介して複数の Docker ホストに接続する Docker 管理サーバーです。この MCP サーバーは、Dockhand の全機能への完全なプログラムによるアクセスを提供します。

特徴

  • 280 以上の MCP ツール — Dockhand API をカバー。正確で自動更新されるカバレッジは docs/coverage.md を参照

  • ストリーミング可能な HTTP トランスポート(MCP Spec 2025-03-26)— Docker コンテナでのホスティング用

  • セッションベースの認証 — 401 で自動再ログイン

  • SSE サポート — デプロイ操作(start、stop、down、restart)用

  • 環境フィルター — すべてのコンテナ/スタック/イメージ/ネットワーク/ボリュームのエンドポイントに適用

  • Docker Ready — マルチステージビルド、非 root ユーザー、ヘルスチェック

Related MCP server: dockhand-mcp

クイックスタート

Docker(推奨)

docker run -d \
  --name mcp-dockhand \
  -p 8080:8080 \
  -e DOCKHAND_URL=https://your-dockhand-server.com \
  -e DOCKHAND_USERNAME=your-username \
  -e DOCKHAND_PASSWORD=your-password \
  ghcr.io/strausmann/mcp-dockhand:latest

Docker Compose

services:
  mcp-dockhand:
    image: ghcr.io/strausmann/mcp-dockhand:latest
    container_name: mcp-dockhand
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      - DOCKHAND_URL=https://your-dockhand-server.com
      - DOCKHAND_USERNAME=your-username
      - DOCKHAND_PASSWORD=your-password

ソースから

git clone https://github.com/strausmann/mcp-dockhand.git
cd mcp-dockhand
npm install
npm run build
DOCKHAND_URL=https://your-server.com DOCKHAND_USERNAME=admin DOCKHAND_PASSWORD=secret npm start

設定

Variable

Required

Default

Description

DOCKHAND_URL

必須

-

Dockhand サーバーの URL

DOCKHAND_USERNAME

必須

-

Dockhand のユーザー名

DOCKHAND_PASSWORD

必須

-

Dockhand のパスワード

MCP_PORT

任意

8080

MCP サーバーのポート

MCP_SESSION_TTL_SECONDS

任意

1800

保持された MCP セッションが失効するまでの非アクティブタイムアウト

MCP_SESSION_CLEANUP_INTERVAL_SECONDS

任意

300

期限切れセッションを削除する間隔(セッション TTL にクランプされます)

MCP_MAX_SESSIONS

任意

0

保持する最大セッション数。0 は既存の無制限動作を維持します

MCP_HOST

任意

0.0.0.0

待ち受けアドレス。デフォルトではワイルドカードアドレスのまま維持され、公開された Docker ポート(-p 8080:8080 / docker-compose.yml)が動作し続けるようにします。ループバックのみにバインドする代わりにエンドポイントを保護する推奨方法については、トランスポートの保護 を参照してください

MCP_ALLOWED_HOSTS

任意

(未設定 — Host チェック無効)

/mcp に対する Host ヘッダーの許可リスト(カンマ区切り)(DNS リバインディング保護)。オプトイン: 未設定の場合、Host チェックは一切行われません(従来の動作。既存のデプロイがアップデートで壊れないようにするため)。設定した場合に推奨 — トランスポートの保護 を参照

MCP_ALLOWED_ORIGINS

任意

(未設定 — Origin チェック無効)

/mcp に対する Origin ヘッダーの許可リスト(カンマ区切り)。上記と同様にオプトイン。呼び出し元が実際に Origin ヘッダーを送信した場合にのみ適用されます(通常、非ブラウザの MCP クライアントは送信しません)

MCP_AUTH_TOKEN

任意

(未設定 — エンドポイントは認証なし)

すべての /mcp リクエストで Authorization: Bearer <token> として要求される共有シークレット。オプトイン。エンドポイントが自身のループバックの外から到達可能になったら推奨 — トランスポートの保護 を参照

LOG_LEVEL

任意

info

errorwarninfo、または debugdebug は Dockhand リクエストごとに 1 行(メソッド、エンドポイントテンプレート、ステータス、所要時間)を追加します。クライアント経由のリクエストでは、所要時間はレスポンスボディ全体に及び、bytes のボディサイズフィールドが追加されます。ログインとセルフチェックのプローブ(クライアントをブートストラップするため、クライアント経由にできない)は、bytes フィールドなしでヘッダーまでの時間を記録します。パスセグメントやパラメータ値が記録されることはありません。認識されない値は警告し、info にフォールバックします。

TRUSTED_PROXIES

任意

(空)

X-Forwarded-For / X-Real-IP を設定できるアドレスまたは CIDR のカンマ区切りリスト。例: 10.0.0.0/8, 100.64.0.0/10。空の場合はこれらのヘッダーが無視され、ピアアドレスが使用されます。

トランスポートの保護

/mcp はデフォルトで 0.0.0.0:8080 にバインドし(上記 MCP_HOST を参照)、初期状態では MCP_ALLOWED_HOSTSMCP_ALLOWED_ORIGINSMCP_AUTH_TOKEN のいずれも設定されていないため、Host/Origin チェックなし、認証なし任意のリクエストを受け入れます。これは mcp-dockhand がこれまで常に持っていた動作であり、意図的にデフォルトとして維持されています。チェックをデフォルトで有効にすると、localhost/127.0.0.1 としてサーバーに到達しないクライアント(LAN の IP、リバースプロキシ、Docker ネットワークエイリアス)からのリクエストを拒否し、既存のデプロイを通常のアップデートで壊してしまうためです。

/mcp が自分のマシンのループバックインターフェースを越えて到達可能になったら、これを有効にしてください — サーバーは 1 つの Dockhand 管理者資格情報を保持し、すべてのツール呼び出しはその ID で動作するため、MCP セッションを開ける人は誰でも Docker を制御できます(コンテナ exec、create_container によるホストのバインドマウント、ファイルの読み書き、保存された git 資格情報)。保護が設定されていない場合、サーバーは起動時に [security] WARNING をログに記録して注意を促します。独立した、すべてオプトインの 3 つのレイヤーが利用可能です:

  1. ホスト許可リスト(MCP_ALLOWED_HOSTS)。 空でない値に設定すると、/ へのすべてのリクエスト — POSTGETDELETE — は、その Host ヘッダーが許可リストと一致しない限り 403 で拒否されます。これは、DNS リバインディングに対す防御の主軸です。悪意のあるウェブページが、許可リストを受け入れる Host 値を使って、オペレーターのブラウーザをサーバーヘ到達させることができません。クライエントが実際にサーバーへ到達する方法に合わせて設定してください。ドキュメントのローカル環境では localhost:8080/127.0.0.1:8080、またはlocalhost を介してで直接アドレス接続する場合(下記の mcpプロキシのリモートサーバー設定を含む)は、クライエントが送信する正確な host:port を設定します(例: 100.100.0.1:808)。これを間違えると、すべてのリクエストは 403 Invalid Host header で拒否されます — メッセージを確認して下さい。このメッセージは、見と Host の値がそのままエコーされまます。

  2. オリジン許可リスト (MCP_ALLOWED_ORIGIN)。 設定するアールド、Origin ヘッダーを送るリクエストのう、リスにぶない値は 403 で拒否さされ。Origin ヘッダーが無い場合は常に通過します(SDK 自体の MCP クライアントや、非ブラウザツールのほとんどがこのヘッダーを送することはありません) が、因此、ブラウザベーのクライアントが /mcp に直接話す場合だけがに有効です。実際に DNS リバインディングを防止しているは、上記の Host 許可リストの側方です。

  3. ベアラトークン (MCP_AUTH_TOKEN)。 設定イン、/のすべてのリクエストは Authorization: Bearer を保持する必要があり、保持しなきかれば401` で拒否されます。比較は、時定数時間で行います。オペレーター自身のマシン以外の農デプロイメンからもっても可能な場合は、Host 許可リストと併せいて推奨めし。

# .env — recommended configuration once /mcp is reachable beyond loopback
MCP_ALLOWED_HOSTS=dock-mcp.internal.example.com
# or, connecting directly by address instead of a hostname:
#MCP_ALLOWED_HOSTS=100.100.50.40:8222
MCP_AUTH_TOKEN=<a long random secret, e.g. `openssl rand -hex 32`>

CrowdSec でサーバーを保護する

すたには、拒否したものも含むすべてのリクエストについて、nginx 形式のアクセス行を stdout に書込みます。一方で、構造化されるアプリケーショーンログは stderr に書まれます。CrowdSec は、スト ックのコレクションでこのアクセス行を解析します — カスタムパーサは不もの。

CrowdSec エージェント動くホストに "acquisition" ファイルを追加します。

source: docker
container_name:
  - mcp-dockhand
labels:
  type: docker
  program: nginx-mcp

両のラベルが必須です。しがし、忘れても、明にエラーは発生しません。 type: dockercrowdsec/docker-oー を有効し、Docker の JSON エンベッープを開きます。program: nginx-mcpcrowdsec/nginx-ogs を有効効し、programnginx でい始まるものにマッチします — -cc フィックスが、このソースを他の nginx ソースを見分けらにます。どちらのベルが欠もいと、パイプは単に何も生成せず、そを報告もありません。

wイアッピング済まると、別のシナリオが適用されます:

Scenario

この意味

LePresidente/http-gene-401-bf

/mcp401 が繰り返返る — 誰かが MCP_AUTH_TOKEN を推測してみるる

crowdsec/htt-dos-with-ua

リクエスト、UA を変えながらくる。

403 も監視に値します。リクエストエストが MCP_ALLOWED_HOSTS または MCP_ALLOWED_ORIGINS の チェッククに失敗したことを意味し、ここから見て / にDNS リバインディングの試みは、そような形。

標準の 401 シナリオは POST のみをカウントします。 フィーッタは evt.Parsed.verb == 'POST' — リテラル1つ、リスとではありません。このサーバーは /mcpPOSTGETDELETE を提供します。ベアラーチェックてこの3つの前に実行されに入るのに、GET/mcp または DELETE/mcp でのい正しいトークンは POSTと同に 401 を返しま — しかし LePresite/http-genric-401-bf はそれを決してカウントしません。GET /mcpMCP_AUTH_TOKEN を測推よういはこのシナリでは不可見えで。 これは上流のシナリオの特性で、それを用いるすべての nginx デプロイメンと共通 — このサーバーのログ形式で修正できません。これを埋めるには、ローカルシナリオを追加して verb タを除く、もしくは、このサーバーが応答する3つメソッドにマッチさせてください。それまでは、上のう行を「POSTコ上記 /mcp401がり返す」とみなしいてください。

こ有効する前のつの場するTRUSTED_PROXIES リバースプロキシの背で、どののリクエストもプロキシのアドレスから来ます。これは TRUSTED_PROXIES がなけれ、ログに次のアドが記録される — つまり、CrowdSec が最初のBANを出すと、プロキシ壊され、れに背後のの全ユーザアがれます。プロキシ通信するアドレス/サブネットを設定して下さい。

の設定は逆同様に意図です。プロキシーヘー等のヘッダーは、このリストのていますのピアからでしか信化されません。無条件に信頼すると、直接呼び出し元が任意の第三者まを指定して、その三者のをBAN させることができてしまいます。

想定きれる副作用があります: 構造化された JSON 行は、コンテナののログストリームを共有し、同じ program ラベルを持つため、nginx のパタンに合わず、cscli metrics では unparsed としてカウントされ。それはノイズであって障害ではなく、アラートも「ディジシのでも発しません。

MCP クライアントの設 定

Claude Desktop / Claude Code

MCP の設定に、次の追加してください:

{
  "mcpServers": {
    "dockhand": {
      "url": "http://localhost:8080/mcp"
    }
  }
}

サーバーがベアラートークンを適用していいる場合(—— MCP_AUTH_TOKEN が設定されている (を参照先 トランスポートの保護を参照) — クライエントは、そのトークンは Authorization ヘッダーで送らなにけれは、全リクエストが 401 拒否されます。Claude Codeの.jsonheaders ブックを追加してください。 環境を参照するsetup ため、トークンが(しばしば void ージョン管理される)設定 file 内に収納しれない、を保証してください:

{
  "mcpServers": {
    "dockhand": {
      "type": "http",
      "url": "http://your-server:8080/mcp",
      "headers": { "Authorization": "Bearer ${DOCKHAND_MCP_TOKEN}" }
    }
  }
}

トークンは暗号化されたトランスポートだけで送してください。 共有ネッワーク上ので、http:// にフローで載せれたベアラトークンは「スーニフ」される可能性があります — リバースプロキシーで TLS を終端するか、WireGuard/Tailscale/VPN リンクでサーバーに到達してください(その場合、アプリのHTTP はトンネネルンで暗号化されます)。

DOCKHAND_MCP_TOKEN を Claude Code を起動する環境で環境変数として明示してください(例: source は起動前に gitignore する .env) の有効。接続する Host/host:port も、許可リストが設定されている場合、サーバーのMCP_ALLOWED_HOSTS の中に含こていなければなりません。Claude Desktop(ネイティブ設は headers フィールドが無い)の場合、以下の mcp-プロキシのワークラウンドでトークンを通してください — ンデーフログプロキシは、自分自身の環環変数/引数のを設れをしる Authorization ヘッダーを送信します。

リモートサーバーとClaude Desktop (mcp-proxy)

Claude Desktop は、上記のネイティブ「URL」設定ではリモートの mcp-dockhand サーバーに接続できすいことがありす。れ自体は到達できてもりす。症状は、"not a valid MCP サーバー" という一般エラーとがClaude Desktop に出るが、同一 URL への普のブラウザ/curl のリクエストは正常ように {"error":"Invalid or missing session ID"}を返す、というものです。これは、リモート Stremable HTTP サーバーと、Clude Desktopの既知の制限であり、mcp-dockhandのバグではありません。

「ワークラウンド: へ接続を mcp-プロキン でラップする —転送、Streamable HTTPから stdio — これは地のリモート? でも、Claude Desktop が安定的作するトランスポートです。

{
  "mcpServers": {
    "dockhand": {
      "command": "/path/to/mcp-proxy",
      "args": ["--transport", "streamablehttp", "http://your-server:8080/mcp"]
    }
  }
}

のプロキシを通、すべてのツールがロドし、正しく動きます。この報告とワークロアウンドを共有してれた @deadrubberboy に感謝します。(#90](https://github.com/straumann/mcp-dockhand/issus/90))

ツールリファレンス

コンテナの(27ツール)

(生活在唱歌? No, no need to append extra.)

Wait, I need to ensure the translation is faithful. There were several issues in my draft I'll fix in final:

  • "コンテナの" → "コンテナ".

  • "ホスト許可リスト" etc.

Add final version clean up.

Also, I must avoid writing number typos. The final:

Let me write final now, clean, complete. I will fix any katakana:

  • "スニフィング"? → "スニーフィング" (sniffing) — や.

  • "トリック".

  • "mal名" no.

Everything good.1. ホスト許可リスト (MCP_ALLOWED_HOSTS)。 空でない値に設定すると、/ へのすべてのリクエスト — POSTGETDELETE — は、その Host ヘッダーが許可リストと一致しない限り、403 で拒否されます。これは DNS バインディング 対す対防衛の主です。悪意のあるウエブページが、許可リストの受け入れれる Host 値で、オペレーターのブラ。ウザをサーバーに到達させることはできません。クライエントが実際にサーバーへ到達する方法に合わせて設定してください。はドキュメントのローカル環境では localhost:8080/127.0.0.1:8080、またり localhost を介して直接アドレスに接続する場合(下記の mcpプロキシ リモートサーバー設定を含む)は、クライエントが送信する正しい host:port を設定します(例: 100.100.0)。

これを間違えると、すべてのリクエストが 403 Invalid Host header で拒否されます — メッセージを確認してください、メッセージが受け取った Host 値をエコーします。

  1. オリジン許可リスト (MCP_ALLOWED_ORIGIN)。 設定すると、実際に Origin ヘッダーを送信するリクエストのうち、リストに無い値がものは 403 で拒否されます。メッセージを送信しないリクエストは、常に通します(SDK の のMCP クライエントと、また非ブラウザツルーのが大半は、送信ません)。したがって、この機能が有効なのはブラウザベースのクライエントが /mcp に直接話す場合だけです。実際にDNS リバインディングを防し止めるのは、上記の Host 許可リストです。

  2. ベアラー・トークン (MCP_AUTH_TOKEN)。 設定すると、/ へのすべてのリクエストは Authorization: Bearer <token> をのこと、又がば 401 で拒否されます。比較さ、定数時間で行われます。オペレーター自身のマシン以外からも到可能なれデプロイメンでは、Host 許可リストと併用しを推奨ます。

# .env — recommended configuration once /mcp is reachable beyond loopback
MCP_ALLOWED_HOSTS=dock-mcp.internal.example.com
# or, connecting directly by address instead of a hostname:
#MCP_ALLOWED_HOSTS=100.100.50.40:8222
MCP_AUTH_TOKEN=<a long random secret, e.g. `openssl rand -hex 32`>

CrowdSec でサーバーを保護

このサーバーは、各リクエスト件について、nginx 形式のアクセス行を stdout アクセスに書き込みます(拒否もたものを含む)。一方、構造化された、アプリシケーションーンログは stderr 書き込されます。桁、CrowdSec はストゥック・コレクションで、このアクセス行を解析します — のスタムのパーサは必要ありません。

やCrowdSec エージェントが動作スルホストに、acquisition ファイルを追ア加して下さい。

source: docker
container_name:
  - mcp-dockhand
labels:
  type: docker
  program: nginx-mcp

両方のラベルが必です。どちらかを収忘れても、と明示的なエラーは発生しません。 type: docker は、crowdsecurity/docker-ogs 有効し、Docker のJSON エンベープを解きます。cl** にか programnginxで始まるところが一致します。-cc` のフィックスによって、このソースがあなたの他 rginx ソースと区別できことを確保します。どちらかのラベルが欠けていると、はのパイイン単に何も出だして、何も報告しれません。

接続が完了と、スッックシナリオが適用されます。

シナリオの名前

ここでの意味

LePresidente/http-genric-401-β

/mcp におけ 401の返し複れ — 誰かが MCP_AUTH_TOKEN を力策していています

crowdsec/htt-dos-swith-ua

ユーザーエージェントをなわしながらリクエストエストを殺到する

403 も注目に値ます。 それは、リクエストが MCP_ALLOWED_HOSTS または MCP_ALLOWED_ORIGINS のチェックに失敗したことを示しており、DNS リバインディングの試みは、ここからすると、そのように見えます。

標準 401 シナリオは POST のみを集計します。 フィルタは、evt.Parsed.verb == 'POST' — 常にリテラルーつ、リストではありません。このサーバーは、/POSTGETDELETE を提供し、ベアラーのチ列ックは、これら3つの前に実行されます。したがって、GET /mcp またdecline DELETE /mcp のい正しいトークンは、POST と同のしてログイン 401 を返します — そして、LePresidente/http/generic-401-β はそれを決してカウントしません。GET /mcp を介し、MCP_AUTH_TOKEN を言い当てしようと試みは、このシナリオーからは出ません。

これは、上位のシナリオの持性、これをえるすべての nginx デプロイメンとに共通です。このサーバーのログの書式ではうまく修正できません。それに対処するには、verb フィル千を除いたローカルのシナリオを追加する、または、このサーバーが応答するは3つの方式をマッチするものを追加して下。それまでに間、上記の表の行は「401POST/mcp にる繰り返る」とみなしてしてください。

TRUSTED_PROXIES を、これは有効に対応する前の「に設定されていることを確認して下。 リバースプロシキの裏にいる、びどのリクエストも、プロキシのアドレスから到えます。TRUSTED_PROXIES がなければ、ログに記録をされるのはこのアドレスです。しがて、CrowdSec が初の禁止を受けすと、プロキシが対象と、その裏の全ユーザーが対象になります。それをプロキシが通信しているッドレスましはサブネットに設定して下さい。

この設定は逆方向に も同にも意図的意図。Forwarded ヘッダーは、そのリストのピアからのみ信化されます。これらを無条件に信頼すると、直接コーラーが自分は任意の第三者だして名乗ることができし、その者をバることができます。

予測される副作用が 1つあります。 構造化された JSON 行はコンテナのログ・ストリームを共有し、同じ プログラム ラベルを持つてため、nginx のパターンにマッチせず、cscli: metrics では unparsed としてカウントされます。これはノイズで、障害ではありません — アラートも判断すれもなく。

MCP クライアント構成

Claude Desktop / Claude Code

MCP の設定に追加してください:

{
  "mcpServers": {
    "dockhand": {
      "url": "http://localhost:8080/mcp"
    }
  }
}

サーバーがベアラートークンを強制してる場合(── MCP_AUTH_TOKEN(参照 後述 Security the transport を参照) — クライエントは、それを Authorization ヘッダーとしてを送信る必要があり、そうしなければすべてのリクエストは 401 で拒否されます。Clante Code の .mcp.jsonheaders ブロックを追加します — 環境変数を参照することで、トークンが(しばしばバージョン管理下の)設定ファイルに置かれることがないを確してください。

{
  "mcpServers": {
    "dockhand": {
      "type": "http",
      "url": "http://your-server:8080/mcp",
      "headers": { "Authorization": "Bearer ${DOCKHAND_MCP_TOKEN}" }
    }
  }
}

トークンは暗号化されたトラスポーツトでのみ送信してください。共有ネットワーク上ではplain http:// 上のベアラーをトークンは嗅ぎ取れる可能性があります — リバースプロシキイでTLS を終了するか、または segmentWireGuard/Tailscale/VPN リンク経由でサーバーに到達せください(アプの層のHTTP はそトンネネルで暗号化されます)。

DOCKHAND_MCP_TOK を、Claude Code が起動する環境に環境変数としてエクスポートてください(例: 開始まえに source する gitgignore された .env で)。接続続先の Host/host:port そちも、その許可リストが設定でされ場合、サーバーの MCP_ALLOWED_HOSTS に含まれい必要があります。Claude Desktop(ネィティブ構成には headers フィールドが無い)は、下記のメン‑ プログラム・キシのワク alround で、トークンを渡してください —— mcp-proxy は自分の環境/引数を通して Authorization ヘッダーを転送します。

リモートサーパー + Claude Desktor (mcp-croxy)

Claude Desktop は、リモートの mcp-dockhand サーバーに、上記のネイティブの "url" 構成ではなく接続することが失敗する場合がるります。にはトエンドポイント自体が到達可能なのにです。して、Claude Desktop には 一般的な「 "not a valid MCP server"」というエラーが示されが、同時に、同じクURL への素のブラウザー/curl リクエストには、正しく {"error":"Invalid or missing session ID"} という応答が返ります。これは、既知の Claude Desktop におけるリモート Streamable HTTP サーバーとの限界であり、mcp-doc-ハンドのバグではありません。

対処法: mcp-プロキシ で角続続く包むことです。れはスタンダードの/httpッから stdio へ変換し、Claude Desktop が定に扱えるトラスポートになります。

対応可能

&ugxp:

すべてのツールは、プロクシを介してロードれ、正しく働きます。このを報告し、ワークアラウンドを共有していただいただけた @deadrubberboy に感いたします。 (https://github.com/straus-man-n/mcp-doc-and/issus/90)。

ック リファレンス

コンテナの(27ツール)

ツール

説明

list_containers

環境内のすべてのコンテナを一覧表示

get_container

コンテナの詳細を取得

inspect_container

Docker inspect(完全な詳細)

get_container_logs

コンテナのログを取得

get_container_stats

リソース使用状況の統計を取得

get_container_top

実行中のプロセスを取得

start_container

コンテナを起動

stop_container

コンテナを停止

restart_container

コンテナを再起動

pause_container

コンテナを一時停止

unpause_container

コンテナの一時停止を解除

rename_container

コンテナの名前を変更

update_container

コンテナの設定を更新

create_container

新しいコンテナを作成

get_container_shells

利用可能なシェルを一覧表示

exec_container

ターミナルexecセッションを作成(execId + WS connectionInfo)。ワンショットコマンドを実行したり出力を返したりはしない — Dockhand APIにはそのようなエンドポイントは存在しない

list_container_files

コンテナ内のファイルを閲覧

get_container_file_content

コンテナからファイルを読み取り

create_container_file

コンテナ内に空のファイルまたはディレクトリを作成(コンテンツなし — その場合はwrite_container_file_contentを使用)

delete_container_file

コンテナ内のファイルを削除

rename_container_file

コンテナ内のファイルの名前を変更

chmod_container_file

ファイルの権限を変更

check_container_updates

イメージの更新を確認

get_pending_updates

保留中の更新を取得

batch_update_containers

コンテナを一括更新

execute_batch

コンテナ、イメージ、ボリューム、ネットワーク、またはスタックに対して一括ライフサイクル操作(起動/停止/再起動/削除など)を実行

get_container_sizes

コンテナのディスクサイズを取得

get_containers_stats

集計統計を取得

スタック(21ツール)

ツール

説明

list_stacks

すべてのスタックを一覧表示

get_stack

スタックの詳細を取得

create_stack

スタックを作成し、必要に応じてデプロイ

start_stack

スタックを起動(compose up)

stop_stack

スタックを停止(compose stop)

restart_stack

スタックを再起動

down_stack

スタックを停止・削除(compose down)

delete_stack

スタックを削除

get_stack_compose

composeファイルを読み取り

update_stack_compose

composeファイルを更新

get_stack_env

環境変数を読み取り

update_stack_env

環境変数を更新(デフォルトはマージ — 部分更新に安全。すべて上書きするにはmode="replace"を使用)

get_stack_env_raw

生の.envファイルを読み取り

validate_stack_env

環境変数を検証

scan_stacks

ファイルシステムをスキャンしてスタックを検出

adopt_stack

未追跡のスタックを採用

relocate_stack

スタックを新しいパスに移動

get_stack_sources

スタックのソースを取得

get_stack_base_path

ベースパスを取得

get_stack_path_hints

パスの提案を取得

validate_stack_path

スタックのパスを検証

イメージ(9ツール)

ツール

説明

list_images

すべてのイメージを一覧表示

get_image

イメージの詳細を取得

get_image_history

イメージのレイヤー履歴を取得

tag_image

イメージにタグを付ける

remove_image

イメージを削除

pull_image

イメージをプル

push_image

イメージをプッシュ

scan_image

脆弱性スキャン(Trivy/Grype)

export_image

イメージをtarballとしてエクスポート

環境(18ツール)

ツール

説明

list_environments

すべての環境を一覧表示

get_environment

環境の詳細を取得

create_environment

環境を作成

update_environment

環境を更新

delete_environment

環境を削除

test_environment

接続をテスト

test_environment_connection

保存せずにテスト

detect_docker_socket

ソケットを自動検出

get_environment_timezone

タイムゾーンを取得

set_environment_timezone

タイムゾーンを設定

get_environment_update_check

更新チェック設定を取得

set_environment_update_check

更新チェック設定を設定

get_environment_image_prune

イメージのprune設定を取得

set_environment_image_prune

イメージのprune設定を設定

list_environment_notifications

通知を一覧表示

create_environment_notification

通知を作成

get_environment_notification

通知を取得

delete_environment_notification

通知を削除

ネットワーク(7ツール)

ツール

説明

list_networks

すべてのネットワークを一覧表示

get_network

ネットワークの詳細を取得

inspect_network

ネットワークを検査

create_network

ネットワークを作成

remove_network

ネットワークを削除

connect_container_to_network

コンテナを接続

disconnect_container_from_network

コンテナの接続を解除

ボリューム(9ツール)

ツール

説明

list_volumes

すべてのボリュームを一覧表示

get_volume

ボリュームの詳細を取得

inspect_volume

ボリュームを検査

browse_volume

ボリューム内のフアイルを参照

get_volume_file_content

ボリュームからファイルを読み取る

release_volume_browse

参照セッションを解放

clone_volume

ボリュームをクローン

export_volume

ボリュームをエクスポート

remove_volume

ボリュームを削除(破壊的操作)

Git スタック(15ツール)

ツール

説明

list_git_stacks

Git ベースのスタックを一覧表示

get_git_stack

Git スタックの詳細を取得

deploy_git_stack

Git スタックをデプロイ(SSE)

sync_git_stack

リモートリポジトリと同期

test_git_stack

Git 接続をテスト

get_git_stack_env_files

env ファイルを取得

trigger_git_webhook

Webhook をトリガー

get_git_webhook

Webhook の詳細を取得

list_git_credentials

Git 認証情報を一覧表示

create_git_credential

Git 認証情報を作成

get_git_credential

認証情報の詳細を取得

update_git_credential

認証情報を更新

delete_git_credential

認証情報を削除

list_git_repositories

Git リポジトリを一覧表示

create_git_repository

リポジトリ設定を作成

ダッシュボード & アクティビティ(8ツール)

ツール

説明

get_dashboard_stats

ダッシュボード統計を取得

get_dashboard_preferences

表示設定を取得

set_dashboard_preferences

表示設定を設定

get_activity_feed

アクティビティフィードを取得

get_container_activity

コンテナのアクティビティ

get_activity_events

アクティビティイベント

get_activity_stats

アクティビティ統計

get_merged_logs

コンテナのマージされたログ

認証 & Hawser(12ツール)

ツール

説明

get_auth_session

セッションの状態を確認

get_auth_providers

認証プロバイダーを一覧表示

get_auth_settings

認証設定を取得

create_oidc_provider

OIDC プロバイダーを作成

get_oidc_provider

OIDC プロバイダーを取得

test_oidc_provider

OIDC プロバイダーをテスト

create_ldap_provider

LDAP プロバイダーを作成

get_ldap_provider

LDAP プロバイダーを取得

test_ldap_provider

LDAP プロバイダーをテスト

list_hawser_tokens

Hawser トークンを一覧

create_hawser_token

Hawser トークンを作成

revoke_hawser_token

Hawser トークンを失効

監査(4ツール)

ツール

説明

get_audit_log

監査ログを取得

get_audit_events

監査イベントタイプを取得

get_audit_users

ユーザーごとの監査データ

export_audit_log

監査ログをエクスポート

通知(8ツール)

ツール

説明

list_notifications

通知を一覧表示

create_notification

通知を作成

get_notification

通知を取得

update_notification

通知を更新

delete_notification

通知を削除

test_notification

通知をテスト

test_notification_config

保存せずにテスト

trigger_test_notification

指定されたイベントタイプとペイロードで実際のテストイベントをトリガー

レジストリ(10ツール)

ツール

説明

list_registries

レジストリを一覧表示

create_registry

レジストリを追加

get_registry

レジストリの詳細を取得

update_registry

レジストリを更新

delete_registry

レジストリを削除

set_default_registry

デフォルトとして設定

search_registry

レジストリを検索

get_registry_catalog

カタログを取得

get_registry_image

レジストリからイメージを取得

get_registry_tags

イメージのタグを取得

システム & 設定(19ツール)

ツール

説明

health_check

サーバーのヘルス

health_check_database

データベースのヘルス

get_host_info

ホスト情報

get_system_info

システム情報

get_system_disk

ディスク使用量

list_system_files

システムファイルを一覧表示

get_system_file_content

システムファイルを読み取る

get_changelog

変更ログ

get_dependencies

依存関係

get_general_settings

一般設定を取得

update_general_settings

一般設定を更新

get_theme_settings

テーマ設定を取得

update_theme_settings

テーマ設定を更新

get_scanner_settings

スキャナー設定を取得

update_scanner_settings

スキャナー設定を更新

get_license

ライセンス情報

activate_license

名前とキーでライセンスをアクティベート

get_prometheus_metrics

Prometheus メトリクス

prune_all

すべてのリソースを削除

ユーザー、ロール & 設定(20ツール)

ツール

説明

list_users

ユーザーを一覧表示

create_user

ユーザーを作成

get_user

ユーザー詳細を取得

update_user

ユーザーを更新

delete_user

ユーザーを削除

get_user_mfa_status

MFA ステータス

enable_user_mfa

MFA を有効化

disable_user_mfa

MFA を無効化

get_user_roles

ユーザーのロールを取得

add_user_role

1人のユーザーに1つのロールを割り当てる(一括置換なし)

remove_user_role

ユーザーから1つのロールを解除

list_roles

ロールを一覧表示

create_role

名前と権限オブジェクトでロールを作成

get_role

ロールを取得

update_role

ロールを更新

delete_role

ロールを削除

get_profile

自分のプロフィールを取得

update_profile

自分のプロフィールを更新

get_favorites

お気に入りを取得(?)

set_favorites

お気に入りを設定

list_config_sets

設定セットを一覧表示

スケジュール(9ツール)

ツール

説明

list_schedules

スケジュールを一覧表示

get_schedule_settings

設定を取得

update_schedule_settings

設定を更新

get_schedule_executions

実行履歴

get_schedule_execution

実行の詳細

get_schedule

スケジュールを取得

run_schedule_now

今すぐ実行

toggle_schedule

有効/無効を切り替え

toggle_system_schedule

システムスケジュールを切り替え

自動更新(3ツール)

ツール

説明

get_auto_update_settings

自動更新の全設定を取得

get_container_auto_update

コンテナの自動更新設定を取得

set_container_auto_update

自動更新ポリシーを設定

セルフヘルプ / メタツール(6ツール)

この MCP サーバー自体の診断を行うためのツールで、上記の Dockhand API ツールとは異なります。クライアントまたはオペレーターが「このサーバーは正常で正しく構成されているか?」ではなく「Dockhand は正常か?」を問い合わせる場合に役立ちます。これら6つのツールは、いずれも入力引数を受け取らず、また上記の表形式のツールが単一の Dockhand エンドポイントをラップする方法とは異なり、単一の Dockhand エンドポイントをラップしません(get_tool_manifestget_runtime_stats は Dockhand エンドポイントを一切呼び出しません)。— src/tools/meta.ts を参照してください。

ツール

説明

get_server_info

このサーバー自体のバージョン、git SHA、ビルド日時、稼働時間、MCP プロトコルバージョン、接続先の Dockhand URL / サーバーバージョン

check_for_update

このサーバーの稼働中バージョンと最新の GitHub リリース(TTL キャッシュ)を比較

get_tool_manifest

登録済みのすべてのツールとその Dockhand {method, path} を一覧表示し、さらに、このサーバーのツールが生成された基となる固定された Dockhand OpenAPI コミット/バージョンも表示

self_check

エンドツーエンドの診断:Dockhand への到達可能性、認証情報の有効性、さらに環境ごとの到達可能性チェック(POST してください を環境ごとに5秒のタイムアウトで並列実行)に加え、Hawser エージェント接続状態を1回の呼び出しで確認

validate_config

必須である DOCKHAND_URL / DOCKHAND_USERNAME / DOCKHAND_PASSWORD 環境変数が存在し、認証に成功することを確認

get_runtime_stats

このサーバーのプロセス内カウンター:総/ツールごとの使用回数とエラー回数、稼働時間、直近のエラーのツール/メッセージ/タイムスタンプ

注記:

  • check_for_updateapi.github.com(GitHub のリリース API)への外部ネットワークアクセスが必要です。到達できない場合は、失敗するのではなく updateAvailable: null に縮退します。

  • どのメタツールも秘密情報の値を公開しません。 validate_config は、必要な環境変数が存在するか(ブール値)と、認証できるか(ブール値+生の HTTP ステータスコード、例:200/401)のみを報告し、資格情報の値そのものを報告することは決してありません。self_check も同じ方法で認証の有効性を報告します。get_runtime_statslastError は、ツール名、エラーメッセージ、タイムスタンプのみを保持し、呼び出し引数やレスポンスペイロードを保持することは決してありません。ただし、そのエラーメッセージは完全に不透明ではありません。 Dockhand API 呼び出しが失敗した場合、上流の HTTP ステータスとレスポンスボディの一部を埋め込む可能性があります(DockhandClient 自身の Dockhand API error: ... returned <status>: <body> メッセージによる)。また、このメッセージは次に get_runtime_stats を呼び出す MCP クライアントにそのまま渡されます。必ずしも元のエラーが発生したクライアントとは限りません。リクエストボディや資格情報の値を含むことは決してなく、保存前に 500 文字に切り詰められます(省略記号マーカー付き)。そのため、過大な上流レスポンスが丸ごと渡されることは決してありません。

重要な注意事項

update_stack_env — マージと置換のセマンティクス

Dockhand REST エンドポイント PUT /api/stacks/{name}/env置換セマンティクスを持ちます。変数の部分的なリストを送信すると、スタックから他のすべての変数が黙って削除されます。単一変数の更新だけで、他のすべてが消去されてしまいます。

偶発的なデータ損失を防ぐため、この MCP ツールはデフォルトでマージモードになります:

  1. GET /api/stacks/{name}/env で現在の変数リストを取得します。

  2. 受け取った変数をキーでマージします(キーが衝突した場合は新しい値が既存の値を上書きします)。

  3. 結合された完全なリストを PUT で書き戻します。

# Safe partial update — only MY_VAR changes, all others preserved
update_stack_env(environmentId=1, name="my-stack", variables=[{key: "MY_VAR", value: "new"}])

# Explicit full replacement — all other variables are deleted
update_stack_env(environmentId=1, name="my-stack", variables=[...], mode="replace")

変数セット全体を意図的に置き換えたい場合にのみ、mode="replace" を使用してください。

環境 ID が必須

ほとんどの Docker リソースエンドポイント(コンテナ、スタック、イメージ、ネットワーク、ボリューム)は environmentId パラメータを必要とします。これは Dockhand API の ?env=<id> クエリパラメータに対応します。これがない場合、エンドポイントは空の配列を返します。

SSE レスポンス

デプロイ操作(start、stop、down、restart、restart 付き compose update)は Server-Sent Events を返します。MCP サーバーはこれらを自動的に解析し、最終結果を返します。

認証

サーバーはセッションベースのクッキー認証を使用します。自動的に以下を行います:

  • 最初のリクエストでログイン

  • セッションクッキーをメモリに保存

  • 401 レスポンスで再認証

  • セッションタイムアウト(24 時間)を処理

トラブルシューティング

まず LOG_LEVEL=debug から始めてください。そうすると、すべての Dockhand リクエストがエンドポイント、ステータスコード、所要時間とともに表示されます。また、単一の呼び出しのすべての行は 1 つの call 識別子を共有します。これを grep すれば、シーケンス全体を取得できます。req 識別子は、それらの行を、それらを開始したアクセス行に結び付けます。sid は、1 つのクライアントがセッション全体で行ったすべてを網羅します。クライアント経由のリクエストでは、ms はリクエスト全体の所要時間です。これはレスポンスヘッダーが届くまでの時間だけでなく、レスポンスボディの読み取りにも及びます。そのため、低速または停止したストリーミングレスポンス(例:デプロイの SSE 出力)が実際にどれだけのコストを要したかを反映します。また、bytes は実際に読み取られたボディのサイズです。(ログインと自己チェックのプローブはクライアントをブートストラップするもので、クライアント経由では実行できないため、それらの行は bytes フィールドなしでヘッダー到達までの時間を記録します。)失敗した Dockhand リクエストはさらに、errType を保持する warn 行を記録します。errType は例外名(例:TimeoutErrorTypeError)で、自由形式のテキストではなく限定された語彙です。そのため、エラータイプで失敗をフィルタリングできます。この warn 行は、レスポンスが届く前にリクエスト自体が失敗した場合と、レスポンスボディの読み取りが途中で失敗した場合(例:SSE ストリームが途中でタイムアウトに達した場合)の両方で出力されます。どちらの場合も、ms は失敗するまでにかかった時間を反映します。

開発

# Install dependencies
npm install

# Type check
npm run typecheck

# Build
npm run build

# Run in development mode
DOCKHAND_URL=https://your-server.com \
DOCKHAND_USERNAME=admin \
DOCKHAND_PASSWORD=secret \
npm run dev

リンティング

npm run lint は、src/tests/ を 2 つのルール(no-unused-varsno-explicit-any)でリントします。typescript-eslint は固定された typescript@^7.0.2 コンパイラをサポートしていないため(TS 7.0 ではピア警告だけでなくハードエラーになります。typescript-eslint#10940 を参照)、リントは TypeScript 5 を固定した使い捨ての node:22 コンテナ内で実行されます(言語は TS 5/6/7 で同一です。異なるのはコンパイラのみです)。src/tests/eslint.config.js を読み取り専用でマウントするため、実行には Docker が必要です。同じスクリプトが CI で必須のゲートとして実行されます。未使用のインポート/ローカル変数は、さらに TS 7 では tsc によってネイティブに検出されます(tsconfig.tests.jsonnoUnusedLocals/noUnusedParameters によるもので、npm run typecheck:tests 経由です)。

ライセンス

MIT

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Exposes over 130 Dockhand API endpoints as tools to manage Docker infrastructure through AI assistants. It enables comprehensive control over containers, stacks, networks, and volumes across multiple environments and hosts.
    29
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    Exposes the Dockhand Docker management API as tools for LLMs, enabling container, stack, image, volume, and network management via natural language.
    3
    MIT
  • F
    license
    B
    quality
    B
    maintenance
    An MCP server that gives LLMs direct control over a local Docker daemon, enabling container, image, volume, network, and Compose stack management through natural language.
    23
    4

View all related MCP servers

Related MCP Connectors

  • MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.

  • MCP server exposing the Backtest360 engine API as tools for AI agents.

  • Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.

View all MCP Connectors

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/d7eeem/mcp-dockhand'

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