Claude Media
strictKnownMarketplacesで許可できるソースの種類と書式

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種類のソース種別に対応します。hostPatternpathPatternだけが正規表現マッチで、それ以外は完全一致です。

種別許可書式の例対象
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必須。refpathgithubと同じ扱い
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だけをダウンロードし、そのサーバーから相対パスでプラグイン本体を取得することはしません。相対パスを使うプラグインを配布したいなら、gitgithubのマーケットプレイスにします。プラグインのsourceフィールド自体(github/git/npm/zip/コマンド)の書式は、マーケットプレイス側のこのソース種別とは別物です。詳しくはClaude Codeプラグインソースの使い分けにまとめています。

完全一致・ワイルドカード・正規表現の使い分け

githubgitの完全一致はrepo(またはurl)・refpathのすべてが一致したときだけ成立します。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以降)。ワイルドカードが効くのはリポジトリ名の位置全体だけで、*/pluginsacme-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.jsonextraKnownMarketplacesも設定して自動登録を促すか、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のクローンURLstrictKnownMarketplaces(許可リスト)対象外(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必要バージョン

disableCommandPluginSourcestrueにすると、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が弾かれる: refpathを付けて追加しようとしていないか確認します。完全一致の判定では、refpathのどちらも許可リスト側のエントリと厳密に一致している必要があります

「Marketplace is registered from an untrusted source」というエラーは、この許可リストとは別の、Claude Code組み込みの予約名チェックによるものです。両者の違いは「untrusted source」エラーの対処で扱っています。

まとめ

strictKnownMarketplacesは9種類のソース書式に対応し、githubgitは完全一致(オーナーワイルドカードを除く)、hostPatternpathPatternだけが正規表現マッチという判定基準の違いがあります。空配列は「未設定」ではなく完全ロックダウンである点と、この設定単体ではcommand sourceプラグインの実行やCLIフラグでのサイドロードを塞げない点が、運用で見落としやすいポイントです。マーケットプレイス全体の作り方や配布の基礎はClaude Codeプラグイン完全ガイドにまとめています。

この記事を共有:XはてブLinkedIn