strictKnownMarketplacesで許可できるソースの種類と書式
strictKnownMarketplacesが許可できる9種類のソース書式と、完全一致・ワイルドカードの判定の違い、抜け道を塞ぐ関連設定をまとめます。
strictKnownMarketplacesは、組織のメンバーが/plugin marketplace addで追加できるマーケットプレイスのソースを、managed settingsで許可リスト化する設定キーです。許可する書式はソースの種類によって形が違い、GitHubリポジトリ1件を許可する書き方と、社内Gitサーバーをホスト単位でまとめて許可する書き方はまったく異なります。ここでは9種類のソース書式と、完全一致・ワイルドカード・正規表現で判定基準が変わる部分、そして許可リストだけでは塞ぎきれない抜け道までを扱います。
strictKnownMarketplacesの適用範囲
このキーはmanaged-settings.json(または各OSのMDM配布)でのみ有効です。プロジェクトの.claude/settings.jsonやユーザー設定に書いても効きません。
判定はマーケットプレイスの追加時だけでなく、プラグインのインストール・更新・refresh・自動更新のたびに、ネットワークやファイルシステムの操作より前に走ります。ポリシー設定前に追加済みのマーケットプレイスでも、ソースが許可リストに一致しなくなった時点で取得できなくなります。許可されていないユーザーには、該当のmanaged policyを名指しするエラーが表示されます。
strictKnownMarketplacesはmanaged settingsの中でも最上位の優先度を持ち、他のどの設定ファイルからも上書きできません。同じmanaged-settings.jsonに書けるextraKnownMarketplacesは役割が違い、マーケットプレイスを自動登録して配るための設定なので、より優先度の高い設定ファイルで上書きされる余地が残ります。制限はstrictKnownMarketplaces、配布はextraKnownMarketplacesという役割分担です。
設定する値によって挙動が3段階に分かれます。
| 値 | 挙動 |
|---|---|
| 未設定(既定) | 挙動制限なし。任意のマーケットプレイスを追加できる |
空配列 [] | 挙動完全ロックダウン。公式Anthropicマーケットプレイスを含む全ソースをブロック |
| ソースのリスト | 挙動許可リスト制。一致するソースだけ追加できる |
もう1点、strictKnownMarketplacesが見ているのはマーケットプレイスの出所であって、その中の個別プラグインの入手方法ではありません。許可済みのマーケットプレイスであっても、command sourceで配布されるプラグインはユーザーのマシンでマーケットプレイス側が指定したコマンドを実行してインストールされます。これを止めるには別の設定が要ります(後述)。
ソース種別ごとの許可書式
許可リストのエントリは9種類のソース種別に対応します。hostPatternとpathPatternだけが正規表現マッチで、それ以外は完全一致です。
| 種別 | 許可書式の例 | 対象 |
|---|---|---|
github | 許可書式の例{ "source": "github", "repo": "acme-corp/plugins", "ref": "main", "path": "marketplace" } | 対象repo必須。refはブランチ/タグ、pathはサブディレクトリ |
git | 許可書式の例{ "source": "git", "url": "https://gitlab.example.com/tools/plugins.git", "ref": "production" } | 対象url必須。ref・pathはgithubと同じ扱い |
url | 許可書式の例{ "source": "url", "url": "https://plugins.example.com/marketplace.json" } | 対象url必須。headersでHTTP認証ヘッダーを追加できる |
npm | 許可書式の例{ "source": "npm", "package": "@acme-corp/claude-plugins" } | 対象marketplace.jsonを含むnpmパッケージ名 |
file | 許可書式の例{ "source": "file", "path": "/opt/acme-corp/plugins/marketplace.json" } | 対象marketplace.jsonファイルへの絶対パス |
directory | 許可書式の例{ "source": "directory", "path": "/opt/acme-corp/approved-marketplaces" } | 対象.claude-plugin/marketplace.jsonを含むディレクトリの絶対パス |
hostPattern | 許可書式の例{ "source": "hostPattern", "hostPattern": "^github\\.example\\.com$" } | 対象ホスト名に対する正規表現 |
pathPattern | 許可書式の例{ "source": "pathPattern", "pathPattern": "^/opt/approved/" } | 対象file/directoryソースのパスに対する正規表現 |
skills-dir | 許可書式の例{ "source": "skills-dir" } | 対象フィールドなし。~/.claude/skills/のスキャンを許可リスト適用後も維持する |
urlソースはマーケットプレイスのmarketplace.jsonだけをダウンロードし、そのサーバーから相対パスでプラグイン本体を取得することはしません。相対パスを使うプラグインを配布したいなら、gitかgithubのマーケットプレイスにします。プラグインのsourceフィールド自体(github/git/npm/zip/コマンド)の書式は、マーケットプレイス側のこのソース種別とは別物です。詳しくはClaude Codeプラグインソースの使い分けにまとめています。
完全一致・ワイルドカード・正規表現の使い分け
githubとgitの完全一致はrepo(またはurl)・ref・pathのすべてが一致したときだけ成立します。refを指定したエントリは同じrefのソースにしかマッチせず、refを書いていないエントリはrefを指定しないソースにしかマッチしません。次の2つは別物として扱われます。
{ "source": "github", "repo": "acme-corp/plugins" }
{ "source": "github", "repo": "acme-corp/plugins", "ref": "main" }githubエントリのrepoだけは"acme-corp/*"のようなオーナーワイルドカードを使え、そのオーナー配下の全リポジトリにマッチします(Claude Code v2.1.223以降)。ワイルドカードが効くのはリポジトリ名の位置全体だけで、*/pluginsやacme-corp/tools-*のような部分ワイルドカードは文字どおり比較され、どのリポジトリにもマッチしません。
urlソースの完全一致は特に落とし穴があります。末尾スラッシュの有無・.gitサフィックスの有無・https://とssh://のスキーム違いは、すべて別のURLとして扱われます。同じマーケットプレイスを複数のURL形式でクローンできる組織は、リテラルなurlエントリではなくhostPatternにすると、https://・ssh://・user@host:pathのどの形式でもマッチします。ホスト名を取り出せる形式には条件があり、GHESやGitLabの自社ホストを丸ごと許可する具体的な設定例はGHESプラグインマーケットプレイスを許可リストで運用するで扱っています。
pathPatternはファイルシステム経由のマーケットプレイスに使います。".*"を指定すると任意のローカルパスを許可でき、hostPatternと組み合わせてネットワーク側とファイルシステム側を別々に制御できます。
公式マーケットプレイスだけを許可する
公式Anthropicマーケットプレイス以外を一切許可しない設定は、リポジトリを1件だけ書きます。
{
"strictKnownMarketplaces": [
{ "source": "github", "repo": "anthropics/claude-plugins-official" }
]
}このエントリがあると、すでに登録済みの公式マーケットプレイスは使い続けられます。まっさらなマシンでも、Claude Codeを最初に対話的に起動したタイミングで自動登録されます。
自動登録が効かないケースが2つあります。1つは、初回の対話的起動より前に動く非対話環境。もう1つは、そのマシンで過去に(空配列ロックダウンなど)マーケットプレイスをブロックするポリシーの下でClaude Codeがすでに動いていた場合です。Claude Codeはブロックされた試行を記録し、ポリシーが変わったあとも自動では再試行しません。
これらのマシンをカバーするには、同じmanaged-settings.jsonにextraKnownMarketplacesも設定して自動登録を促すか、claude plugin marketplace add anthropics/claude-plugins-officialを手動で実行します。extraKnownMarketplacesとの組み合わせ方や、社内マーケットプレイスを全員に配布する運用の詳細はClaude Codeプラグインマーケットプレイスの必須化と自動更新設定にまとめています。
blockedMarketplacesとの違い
許可リストのstrictKnownMarketplacesと拒否リストのblockedMarketplacesは、ソース書式こそ共通ですが、判定ルールが一部で異なります。
| 観点 | strictKnownMarketplaces(許可リスト) | blockedMarketplaces(拒否リスト) |
|---|---|---|
| 未設定の既定挙動 | strictKnownMarketplaces(許可リスト)制限なし | blockedMarketplaces(拒否リスト)ブロックなし |
| オーナー名の大文字小文字 | strictKnownMarketplaces(許可リスト)区別する | blockedMarketplaces(拒否リスト)区別しない |
ref未指定エントリ | strictKnownMarketplaces(許可リスト)refなしのソースにしかマッチしない | blockedMarketplaces(拒否リスト)そのリポジトリの全refをブロックする |
path未指定エントリ | strictKnownMarketplaces(許可リスト)pathなしのソースにしかマッチしない | blockedMarketplaces(拒否リスト)そのリポジトリの全pathをブロックする |
bareなgithub.com/gitlab.comのクローンURL | strictKnownMarketplaces(許可リスト)対象外(urlソースはmarketplace.jsonのホストURLと照合) | blockedMarketplaces(拒否リスト).gitサフィックスと#以降のrefを無視して照合(v2.1.232以降) |
どちらも設定できるのはmanaged settingsだけで、ユーザー設定やプロジェクト設定からは上書きできません。組織の運用としては、通常は許可リストだけで足り、特定のリポジトリだけを名指しで塞ぎたいときにblockedMarketplacesを併用する形が扱いやすくなります。
許可リストだけでは塞げない抜け道
strictKnownMarketplacesはマーケットプレイスの出所だけを見る設定なので、単体では塞げない経路が3つ残ります。
| 抜け道 | 塞ぐ設定 | 必要バージョン |
|---|---|---|
| 許可済みマーケットプレイス内のcommand sourceプラグインが任意コマンドを実行する | 塞ぐ設定disableCommandPluginSources: true | 必要バージョンv2.1.229以降 |
--plugin-dir / --plugin-url / --agents / --mcp-configのCLIフラグで単発サイドロードする | 塞ぐ設定disableSideloadFlags: true | 必要バージョンv2.1.193以降 |
| skills / agents / hooks / MCPサーバーをユーザーやプロジェクトの設定ファイルから追加する | 塞ぐ設定strictPluginOnlyCustomization | 必要バージョン— |
disableCommandPluginSourcesをtrueにすると、command sourceのコマンドを二度と実行せず、command sourceのプラグインをインストールも更新もせず、すでにインストール済みのものも読み込みを止めます。disableSideloadFlagsは起動時に対象フラグを拒否してエラーで終了する設定で、Cowork内のローカルセッションにも同じチェックが働き、クラウドセッションではサーバー経由で渡された--mcp-configのMCPサーバーを黙って除外したうえでセッションを続けます。
strictPluginOnlyCustomizationはマーケットプレイスとは別の軸の設定で、trueにするとskills・agents・hooks・MCPサーバーの4種類すべてを、プラグイン経由かmanaged settings経由でしか読み込まなくなります。["skills", "hooks"]のように対象を絞った配列も指定できます。strictKnownMarketplacesで入手経路を絞り、strictPluginOnlyCustomizationで読み込み元を絞ることで、カスタマイズの供給網全体を管理者の統制下に置けます。
なおpluginSuggestionMarketplacesは名前が似ていますが役割が違います。これはインストール可否ではなく、/pluginのDiscoverタブやスピナーのヒントに提案として表示してよいマーケットプレイスを絞るだけの設定です。抜け道を塞ぐ効果はないので、strictKnownMarketplacesの代わりにはなりません。
よくあるつまずき
- 許可リストを設定したら
~/.claude/skills/のスキルが読み込まれなくなった:strictKnownMarketplacesは空配列を含むどんな許可リストでも、~/.claude/skills/からの@skills-dirプラグインの読み込みを止めます。読み込みを維持したいなら{ "source": "skills-dir" }エントリを許可リストに加えます allowedMarketplacesという別名で書いたのに古いバージョンで無視される:strictKnownMarketplacesの別名allowedMarketplacesはClaude Code v2.1.232以降でしか読まれません。バージョンが混在するフリートに配るmanaged settingsファイルでは、正式名のstrictKnownMarketplacesを使いますhostPatternを書いたのにマッチしない: ホスト名を取り出せるのはスキーム付きURLと、gitがSSHアドレスと認識するuser@host:path形式だけです。それ以外のスキームなし形式にはホストが無く、どんなhostPatternエントリともマッチしません- 許可した
githubリポジトリなのに/plugin marketplace addが弾かれる:refやpathを付けて追加しようとしていないか確認します。完全一致の判定では、ref・pathのどちらも許可リスト側のエントリと厳密に一致している必要があります
「Marketplace is registered from an untrusted source」というエラーは、この許可リストとは別の、Claude Code組み込みの予約名チェックによるものです。両者の違いは「untrusted source」エラーの対処で扱っています。
まとめ
strictKnownMarketplacesは9種類のソース書式に対応し、githubとgitは完全一致(オーナーワイルドカードを除く)、hostPatternとpathPatternだけが正規表現マッチという判定基準の違いがあります。空配列は「未設定」ではなく完全ロックダウンである点と、この設定単体ではcommand sourceプラグインの実行やCLIフラグでのサイドロードを塞げない点が、運用で見落としやすいポイントです。マーケットプレイス全体の作り方や配布の基礎はClaude Codeプラグイン完全ガイドにまとめています。