dockertag について
dockertagは、レジストリへの接続やイメージの取得を行わず、コンテナイメージ参照と入力されたOCIラベルを監査します。公開前にタグの固定、リポジトリ名、メタデータ、MCP Registryのサーバー名ラベルを確認するメンテナーやCIワークフロー向けです。
主な機能
- 01イメージ参照の解析
- 02タグとダイジェストの固定確認
- 03大文字のリポジトリ名の検出
- 04ソースとライセンスラベルの確認
- 05MCPサーバー名ラベルの検証
活用シーン
- 01公開前のイメージ参照の監査
- 02CIでのOCIメタデータ確認
- 03MCP Registryサーバー名ラベルの検証
- 04監査結果と件数の確認
MCP 対応
MCPサーバーとしてaudit_image_tagsツールを提供し、イメージ参照と入力されたOCIラベルを確認します。任意の期待値に基づくMCPサーバー名ラベルの検証にも対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| images | array | はい | 監査するイメージ参照(1 つ以上) |
| expected_server_name | string | いいえ | io.modelcontextprotocol.server.name ラベルの期待値(任意) |
詳細
dockertag
イメージ参照は、よく見るまでは固定されているように見えます。
タグを付けずに repo と書くと、暗黙のうちに repo:latest を意味します。
latest 自体も変わり続けます。リポジトリ名に大文字が含まれていると、
小文字を必須とするレジストリへのプッシュに失敗します。また、
公開済みのイメージに、ソースの場所やライセンス、さらに MCP
サーバーの場合は、MCP Registry がイメージを掲載する前に確認する
サーバー名ラベルが欠けていることもあります。dockertag はその中間を
取ります。参照と見つかったラベルを渡すと、監査結果が返されます。
すべての参照は、同じ慎重な方法で解析されます。ダイジェストは
最後の @ 以降のすべてです。タグがあるのは、最後のパス要素に
: が含まれる場合だけです。そのため、localhost:5000 のコロンは
ポートを表し、タグではありません。タグは、その要素で最後に現れる
: の後の文字列です。レジストリは、. または : を含むか、
localhost と完全に一致する場合は最初の要素です。それ以外の場合、
レジストリは docker.io で、パス全体がリポジトリになります。
解析した参照と指定されたラベルに対して、次の 9 件のチェックが 固定順で実行されます。
- INVALID_REFERENCE(エラー) — 名前部分が空、リポジトリが空、 または指定されたタグが空です。このイメージに対する以降の チェックは実行されず、解析されたフィールドは null になります。
- INVALID_DIGEST(エラー) — ダイジェストが
sha256:の後に 64 個の小文字の 16 進数が続く形式ではありません。 - UPPERCASE_REPOSITORY(エラー) — リポジトリ内に大文字が 含まれています。
- UNPINNED(エラー) — タグもダイジェストもないため、
参照は変更可能な
latestタグに解決されます。 - LATEST_TAG(警告) — タグが正確に
latestで、 ダイジェストによる固定がありません。 - MISSING_SOURCE_LABEL(警告) —
org.opencontainers.image.sourceラベルがありません。 - MISSING_LICENSE_LABEL(警告) —
org.opencontainers.image.licensesラベルがありません。 - MISSING_SERVER_NAME_LABEL(エラー) —
expected_server_nameを 指定した場合にのみチェックされます。io.modelcontextprotocol.server.nameラベルがありません。 - SERVER_NAME_MISMATCH(エラー) — ラベルはありますが、 期待値と一致しません。
結果には、各イメージの解析済みレジストリ、リポジトリ、タグ、 ダイジェストと検出コード、入力されたイメージの順、次にチェックの 順で並ぶ検出結果のフラットなリスト(正確なメッセージ付き)、 およびイメージ数、エラー数、警告数、問題のないイメージ数が含まれます。
dockertag はレジストリに接続せず、イメージもプルしません。監査に
使用するのは指定されたラベルのため、プッシュ前に CI で監査できます。
不正な入力 — イメージリストがない、または空、参照がない、空、または
重複している、ラベルが文字列から文字列へのマップではない、
不正な expected_server_name — の場合は、問題のあるパスを示す
検証エラーになります(例:images[1].labels.custom must be a string)。
監査結果の一部だけが生成されることはありません。
CLI
npx @reneturcios/dockertag audit --input args.json
npx @reneturcios/dockertag --version
args.json には引数オブジェクト全体が含まれます。
{
"expected_server_name": "io.github.CloudCorpRecords/dockertag",
"images": [
{
"reference": "ghcr.io/cloudcorprecords/dockertag:0.1.0",
"labels": {
"org.opencontainers.image.source": "https://github.com/CloudCorpRecords/dockertag",
"org.opencontainers.image.licenses": "MIT",
"io.modelcontextprotocol.server.name": "io.github.CloudCorpRecords/dockertag"
}
},
{ "reference": "myteam/worker" }
]
}
監査結果は JSON として出力されます。
{
"images": [
{
"reference": "ghcr.io/cloudcorprecords/dockertag:0.1.0",
"registry": "ghcr.io",
"repository": "cloudcorprecords/dockertag",
"tag": "0.1.0",
"digest": null,
"findings": []
},
{
"reference": "myteam/worker",
"registry": "docker.io",
"repository": "myteam/worker",
"tag": null,
"digest": null,
"findings": ["UNPINNED", "MISSING_SOURCE_LABEL", "MISSING_LICENSE_LABEL", "MISSING_SERVER_NAME_LABEL"]
}
],
"findings": [
{
"reference": "myteam/worker",
"code": "UNPINNED",
"severity": "error",
"message": "no tag or digest: the reference resolves to the mutable latest tag"
}
],
"counts": { "images": 2, "errors": 2, "warnings": 2, "clean": 1 }
}
(上記のフラットな findings リストは省略形です。検出結果ごとに
1 件の項目が含まれます。)終了コード:成功時は 0、実行時エラー
(読み取り不能または無効な入力ファイル、無効な入力を含む)では 1、
使用方法のエラーでは 2 です。
MCP サーバー
npx -y @reneturcios/dockertag mcp
MCP クライアントの設定:
{
"mcpServers": {
"dockertag": {
"command": "npx",
"args": ["-y", "@reneturcios/dockertag", "mcp"]
}
}
}
ツール
-
audit_image_tags— コンテナイメージの参照と OCI ラベルを監査します: タグの固定、小文字のリポジトリ、ソースとライセンスのラベル、 MCP Registry のサーバー名ラベルを確認します。images(配列、必須、1 件以上) —{reference, labels?}オブジェクト としてのイメージ。referenceは記述どおりの完全なイメージ参照で、 セット内で一意です。labelsは文字列から文字列へのマップ形式の イメージの OCI ラベルです。expected_server_name(文字列、省略可能、空でない) —io.modelcontextprotocol.server.nameラベルの期待値です。 この値を指定した場合にのみ、サーバー名に関する 2 件のチェックが 実行されます。
{images, findings, counts}を返します。
Docker
docker run -i ghcr.io/cloudcorprecords/dockertag
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/dockertag audit --input /w/args.json
開発
npm install
npm run build # tsc -> dist/
npm test # tsx --test test/*.test.ts (pure local, no network)
npm run dev # run the CLI from source
ライセンス
MIT — Copyright (c) 2026 Rene Turcios
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。