Docker Hub MCPサーバーでClaudeにイメージを検索・選定させる
Docker Hub MCPサーバーをClaude Codeに接続し、自然言語でイメージ検索やリポジトリ管理をする手順と、PAT認証・HTTPトランスポートのセキュリティ注意点を扱います。
Docker Hub MCPサーバーで何ができるか
Docker Hub MCPサーバーは、Docker Hub APIをMCP経由でLLMに公開するサーバーです。イメージのタグ・脆弱性情報・リポジトリの統計といった構造化データをClaudeに直接渡せるため、「軽量なNode.jsイメージを探して」のような自然言語の依頼から、タグ名やリポジトリ名を覚えていなくても目的のイメージにたどり着けます。リポジトリの作成やDockerfileの更新といった書き込み操作も、PAT(パーソナルアクセストークン)を設定すれば自然言語の指示でこなせます。
Docker MCP Toolkitの一般的な接続手順を扱った記事とは違い、本記事はDocker Hub専用のMCPサーバーが提供する機能(イメージ検索・タグ管理・リポジトリ管理)とその認証まわりに絞って扱います。前提はDockerのインストールとNode.js 22以降(ローカルビルドする場合)、書き込み操作をさせたい場合はDocker Hubのパーソナルアクセストークンです。
このサーバーが解決する課題は、Dockerイメージを選ぶ場面で開発者が抱える情報不足です。Docker Hub上には無数のイメージが並んでいて、タグの命名規則やメンテナンス状況、公式イメージかどうかの判断材料はイメージごとにばらばらです。LLMに「適切なイメージを選んで」と頼んでも、モデル自身の学習データだけでは古い情報や存在しないタグ名を答えてしまうことがあります。Docker Hub MCPサーバーを経由させると、Claudeは実際のDocker Hub APIから最新のメタデータを取得したうえで回答するため、この種のハルシネーションを避けやすくなります。
セットアップは2通りある
Docker Hub MCPサーバーを使う方法は、Docker MCP Toolkit経由で追加する方法と、GitHubリポジトリをクローンしてローカルでビルドする方法の2つです。
| 方法 | 向いている場面 | 必要なもの |
|---|---|---|
| Docker MCP Toolkit経由 | 向いている場面Docker Desktopを既に使っている、GUIで設定を完結させたい | 必要なものDocker Desktop 4.62以降 |
| ローカルビルド | 向いている場面Docker Desktopを使わない、Claude Codeへ直接stdio接続したい | 必要なものNode.js 22以降、Docker Hub公式リポジトリのクローン |
Docker MCP Toolkit経由でセットアップする
Docker Desktopを使っている場合は、GUIから完結できます。
- Docker Desktopで「MCP Toolkit」→「Profiles」タブを開き、新規プロファイルを作成するか既存のプロファイルを選ぶ
- 「Catalog」タブで「Docker Hub」を検索し、プロファイルに追加する
- 「Profiles」タブで追加したプロファイルを選び、Docker Hub MCPサーバーの設定アイコンからDocker Hubのユーザー名とパーソナルアクセストークン(PAT)を入力する
- 同じプロファイルの「Clients」セクションでクライアントを接続する(既にクライアントが接続済みなら自動的に反映される)
この経路で追加したサーバーは、docker mcp client connect claude-code --profile <id>を使えば、そのままClaude Codeから呼び出せます。このコマンドの前提となるclaude mcp addのスコープや認証の詳細は別記事にまとめています。
ローカルビルドしてClaude Codeに直接つなぐ
Docker Desktopを使わない、またはstdioで直接つなぎたい場合はソースからビルドします。
git clone https://github.com/docker/hub-mcp.git
cd hub-mcp
npm install
npm run buildビルドが終わったら、Claude Codeにclaude mcp addでstdioサーバーとして登録します。パブリックリポジトリの検索だけなら認証は不要です。
claude mcp add --transport stdio docker-hub \
-- node /FULL/PATH/TO/hub-mcp/dist/index.js --transport=stdio自分のリポジトリを検索・作成・更新するような書き込み操作までさせたい場合は、Docker Hubのユーザー名とPATを環境変数で渡します。
claude mcp add --env HUB_PAT_TOKEN=your_pat_token --transport stdio docker-hub \
-- node /FULL/PATH/TO/hub-mcp/dist/index.js \
--transport=stdio --username=your_hub_usernamePATを渡さない場合、このMCPサーバーはDocker Hub上の公開コンテンツしか扱えません。自分のnamespace配下のリポジトリ一覧取得やDockerfileの更新までさせたいときだけPATを設定します。
HTTPトランスポートを使うときのセキュリティ注意点
このサーバーはstdioに加えてHTTPトランスポートにも対応していますが、既定の安全策を理解せずにネットワークへ公開すると、Docker Hubアカウントの操作権限ごと他人に渡してしまうリスクがあります。
HTTPトランスポートでのツール呼び出しは、サーバー運用者のPAT(HUB_PAT_TOKEN)を使って実行されます。つまりHTTPエンドポイントに到達できる人は誰でも、そのDocker Hubアカウントとしてリポジトリの作成・変更まで行えてしまいます。この理由から、公式リポジトリはHTTPトランスポートを既定で厳しく制限しています。
- ループバックバインド:
--hostを指定しない限り、リスナーは127.0.0.1にしかバインドされない - 認証必須(フェイルクローズ): HTTPモードでは
MCP_AUTH_TOKEN環境変数でトークンを渡すか、--allow-unauthenticatedで明示的に無効化しない限り、サーバー自体が起動を拒否する - DNSリバインディング/CSRF対策: 許可されていない
HostヘッダーやOriginヘッダーを持つリクエストを拒否する(--allowed-hosts/--allowed-originsで拡張可能)
MCP_AUTH_TOKEN=<a_long_random_secret> npm start -- --transport=http--allow-unauthenticatedは認証を完全に無効化し、そのポートに到達できる誰にでもPATを渡すのと同じ状態になります。信頼できる隔離されたネットワーク以外では使わないでください。Claude Codeからの利用に限るなら、外部公開の必要がないstdioトランスポートの方がそもそもこの種のリスクを持ち込みません。コンテナ内からHTTPトランスポートを公開したい場合は、--host=0.0.0.0でリスナーのバインド先を広げつつ、--allowed-hostsと--allowed-originsでアクセス元を絞る組み合わせが、公式リポジトリが示す構成です。
自然言語でできる操作の例
セットアップが済めば、コマンドやタグ名を正確に覚えていなくても目的のイメージにたどり着けます。
- 「公式のnginxイメージを検索して」— 検索結果を
searchツールで取得 - 「フットプリントの小さいNode.jsイメージを探して」— サイズや用途で絞り込んだ検索
- 「自分のnamespaceで直近60日プッシュされていないリポジトリを教えて」— リポジトリ一覧とタグ情報を突き合わせた棚卸し
- 「my-web-appリポジトリにv1.2.0というタグが存在するか確認して」— タグの存在チェック
これらはすべて、search・list-repositories-by-namespace・list-repository-tags・check-repository-tagといった個別ツールの組み合わせで実現されています。ツール名を覚える必要はなく、自然な依頼文のままClaudeが適切なツールを選びます。
とくに「フットプリントの小さいイメージを探して」「本番運用に向いたデータベースイメージを探して」のような依頼は、単純なタグ検索では拾いにくい要求です。Docker Hub MCPサーバーはイメージのメタデータ(説明文・カテゴリ・アーキテクチャ対応状況など)を構造化データとしてClaudeに渡すため、こうした曖昧な条件からの絞り込みが自然文のまま成立します。Ubuntuのバージョン選びのように、複数の候補を比較して選ばせるような依頼にも向いています。
対応ツールの範囲
Docker Hub MCPサーバーが提供するツールは、大きく5つの系統に分かれます。
| 系統 | 主なツール | できること |
|---|---|---|
| 検索 | 主なツールsearch | できることアーキテクチャ・OS・カテゴリなどで絞り込んだ全文検索 |
| namespace管理 | 主なツールget-namespaces | できること所属している組織・namespaceの一覧取得 |
| リポジトリ管理 | 主なツールcreate-repository / get-repository-info / check-repository / update-repository-info | できることリポジトリの作成・情報取得・存在確認・更新 |
| タグ管理 | 主なツールlist-repository-tags / read-repository-tag / check-repository-tag | できることタグの一覧・詳細取得、特定タグの存在確認(アーキテクチャ・OSでの絞り込みに対応) |
| Docker Hardened Images | 主なツールdocker-hardened-images | できること指定namespace内のハードニング済みイメージ(DHI)の一覧取得 |
docker-hardened-imagesツールが返すDocker Hardened Imagesは、CVEの少ない最小構成イメージを提供する別製品で、利用には別途サブスクリプションが必要です。このツール自体は無料のセットアップで呼び出せますが、実際にハードニング済みイメージへアクセスするには契約が前提になる点は覚えておいてください。
よくあるつまずき
- ローカルビルドしたのにサーバーが起動しない:
npm run buildを実行し忘れているとdist/index.jsが存在せずエラーになります。クローン直後は必ずビルドしてからclaude mcp addします - 書き込み系のツールが動かない: PATを設定していないと、このサーバーは公開コンテンツの検索にしか使えません。リポジトリ作成や更新をさせたい場合は
HUB_PAT_TOKENを必ず設定します - HTTPトランスポートを使ったら起動しなかった:
--transport=httpは認証設定が無いと既定で起動を拒否します。エラーメッセージの指示どおりMCP_AUTH_TOKENを設定するか、必要な場合のみ--allow-unauthenticatedを使います(推奨はしません) - nvmでNode.jsを管理している:
commandにnodeとだけ書くと想定と違うバージョンが呼ばれることがあります。which nodeで確認したフルパスをcommandに指定すると安定します - VS Codeなど他クライアントの設定をそのまま流用したい: 公式ドキュメントのVS Code向け設定はUser Settings(JSON)の
mcpServersブロックとして書かれています。Claude Codeでは同じ内容をclaude mcp addの引数に読み替える必要があり、直接コピー&ペーストでは動きません
まとめ
Docker Hub MCPサーバーは、Docker DesktopのMCP Toolkit経由でGUIから設定するか、リポジトリをクローンしてローカルビルドしclaude mcp addで直接つなぐかの2通りでClaude Codeから使えます。検索だけなら認証不要ですが、リポジトリ管理までさせるならPATの設定が前提です。HTTPトランスポートを使う場合は、ループバックバインドと認証必須という既定の安全策を外さないことが、Docker Hubアカウントを守る最低条件になります。
まずは認証なしの検索用途から試し、リポジトリの棚卸しや更新作業まで任せたくなった段階でPATを追加する、という順番で導入すると、権限を必要以上に広げずに済みます。