マーケットプレイスリファレンス
marketplace.json フィールド、プラグインエントリ、プラグインおよびマーケットプレイスソースオブジェクトの完全なリファレンス。各フィールドの有効な場所を含みます。
marketplace.json はプラグインマーケットプレイスを定義するファイルです。マーケットプレイスの名前、所有者、およびプラグインごとに 1 つのエントリが含まれます。各エントリのプラグインソースは、Claude Code がそのプラグインをどこから取得するかを指定します。
マーケットプレイスソースは、Claude Code が marketplace.json ファイル自体をどこから取得するかを指定する別のオブジェクトです。設定で記述するか、claude plugin marketplace add を実行するときに Claude Code が構築します。
このリファレンスは、正確なフィールド名または値が必要なマーケットプレイス管理者、および extraKnownMarketplaces、strictKnownMarketplaces、および blockedMarketplaces で有効な source 値を知る必要がある管理者向けです。
[!NOTE]
これらのケースは他のページで説明されています:
- マーケットプレイスの構築またはホスト: マーケットプレイスの作成 および マーケットプレイスのホストと保守 を参照してください
- 許可リストと拒否リストのレシピ: 組織のプラグインを管理する を参照してください
記述または読み取る内容のセクションを見つけてください:
- マーケットプレイスファイル: トップレベルフィールド および プラグインエントリ
- エントリの
source: プラグインソース - 設定の
sourceオブジェクト: マーケットプレイスソース claude plugin validate <path>からの出力: 検証メッセージ。各メッセージをそれが名前を付けるフィールドにマップします
マーケットプレイスファイル
マーケットプレイスファイルをマーケットプレイスのディレクトリの .claude-plugin/marketplace.json に保存します。ファイルをリポジトリ内の別の場所に保持する場合、ユーザーは extraKnownMarketplaces でマーケットプレイスを宣言する必要があり、その source に path を設定する必要があります。claude plugin marketplace add にはそのオプションがないためです。
.claude-plugin/ を含むディレクトリはマーケットプレイスルートと呼ばれ、すべての相対プラグインソースは .claude-plugin/ からではなく、そこから解決されます。
各ユーザーは name ごとに 1 つのマーケットプレイスを登録するため、ユーザーは同じ名前の 2 つのマーケットプレイスを同時に登録することはできません。
Claude Code は不明なトップレベルキーまたはプラグインエントリキーを無視し、拒否しないため、タイプミスは静かに読み込まれます。claude plugin validate は各不明なキーを警告として報告します。
予約名
マーケットプレイスに次の名前を付けることはできません:
- 公式マーケットプレイス名:
claude-code-marketplace、claude-code-plugins、claude-plugins-official、anthropic-marketplace、anthropic-plugins、agent-skills、anthropic-agent-skills、life-sciences、knowledge-work-plugins、claude-for-legal、claude-for-financial-services、financial-services-plugins、first-party-plugins、およびclaude-tag-plugins。マーケットプレイスがgithub.com/anthropics/の下のgithubまたはgitマーケットプレイスソース から来ない限り予約されています。 - コミュニティマーケットプレイス名:
claude-community、claude-plugins-community、およびhealthcare。公式名と同じルールの下で予約されています。 - プラグインディレクトリ名:
anthropic-plugin-directoryおよびclaude-plugin-directory。公式名と同じルールの下で予約されています。 - 公式マーケットプレイスになりすまし名:
official-claude-pluginsまたはclaude-plugins-v2などの名前、および非 ASCII 文字を含む任意の名前。エラーはMarketplace name impersonates an official Anthropic/Claude marketplaceです。名前内の制御文字または双方向フォーマット文字もMarketplace name cannot contain control or bidirectional-formatting charactersを報告します。マーケットプレイスが既にそのような名前の下で登録されている場合、そのマーケットプレイスとそのプラグインは読み込みを停止します。 - 予約名の別のスペル: 予約名と末尾のドット、またはハイフンの代わりにアンダースコア以外の記号によってのみ異なる名前。
claude.code.pluginsはclaude-code-pluginsとしてカウントされます。マーケットプレイスの追加はis another spelling of "<reserved>", a reserved marketplace nameで失敗し、そのような名前で既に登録されているマーケットプレイスは読み込みを停止します。このチェックには Claude Code v2.1.280 以降が必要です。 - Claude Code がマーケットプレイスから来ないプラグインに使用する名前:
--plugin-dirで読み込まれたプラグインのinline、組み込みプラグインのbuiltin、.claude/skills/から自動読み込みされたプラグインのskills-dir、および claude.ai アカウントから同期されたプラグインのsynced。claude-plugin-testも予約されています。skills-dirはstrictKnownMarketplacesおよびblockedMarketplacesで{"source": "skills-dir"}としても表示されます。ポリシーリストでのみ有効なソース値 で説明されています。 npm、pip、uv、cargo、github、およびgh: 任意の大文字小文字で予約されています。このチェックには Claude Code v2.1.275 以降が必要です。- すべての JavaScript オブジェクトが持つメンバー名:
constructor、hasOwnProperty、isPrototypeOf、propertyIsEnumerable、toLocaleString、toString、およびvalueOf。claude plugin marketplace addは、これらのいずれかを使用するマーケットプレイスをClaude Code reserves this name and cannot register a marketplace under itで拒否します。このチェックには Claude Code v2.1.296 以降が必要です。 claudeai-で始まる名前: claude.ai でホストされているマーケットプレイス用に予約されています。claude plugin marketplace addはCannot add marketplace "<name>": names starting with "claudeai-" are reserved for marketplaces hosted on claude.aiで他のマーケットプレイスを拒否します。- 登録済みの GitHub マーケットプレイスのダウンロードフォルダ
<owner>-<repo>: Claude Code は、acme/x-toolsなどのgithubソースから追加されたマーケットプレイスを、そのマーケットプレイス自体のnameに関係なく、acme-x-toolsという名前のフォルダを通じてダウンロードします。そのマーケットプレイスがacme-x-tools以外の名前で登録されている間、claude plugin marketplace addはacme-x-toolsという名前の別のマーケットプレイスをダウンロードした後にそれを拒否し、Can't use the marketplace name "acme-x-tools"を報告します。このチェックには Claude Code v2.1.290 以降が必要です。
登録されたマーケットプレイスが公式マーケットプレイスの名前を模倣しているため読み込みを停止する場合、claude plugin list および /plugin は Claude Code refuses the marketplace name "<name>" を報告します。メッセージはマーケットプレイスを削除するよう指示します。マーケットプレイスを削除すると、そのプラグインもアンインストールされ、プラグインのデータ、オプション、シークレットも削除されます。この名前付き拒否メッセージには Claude Code v2.1.282 以降が必要です。
設定ファイルでマーケットプレイスがインラインで宣言されている場合、メッセージは古い名前を削除する前にそのエントリの名前を変更するよう指示します。手順については、Claude Code refuses the marketplace name を参照してください。メッセージに手順が表示されるのは Claude Code v2.1.292 以降です。
トップレベルフィールド
テーブルは Claude Code が marketplace.json から読み取るすべてのキーをリストします。name、owner、および plugins は必須です。
| フィールド | 型 | 説明 |
|---|---|---|
name |
string | マーケットプレイス識別子。文字、数字、.、_、- で構成され、文字または数字で始まり、.. がありません。Claude Code はそれ以外の名前を使用するマーケットプレイスからプラグインをインストールできないため、claude plugin validate はそれ以外の名前では失敗します。ユーザーはプラグインをインストールする際、my-plugin@my-marketplace のような プラグイン ID の @ の後にこの名前を入力します。予約名 を参照してください |
owner |
object | 管理者情報。name は必須。email および url はオプション |
plugins |
array | プラグインエントリ。各エントリは独立して検証されるため、1 つの無効なエントリがマーケットプレイスを失敗させません |
$schema |
string | エディタオートコンプリート用の JSON Schema URL。読み込み時に無視されます |
description |
string | ユーザーに表示されるマーケットプレイスの説明。claude plugin validate は欠落時に警告します |
version |
string | マーケットプレイスマニフェストバージョン |
metadata.description、metadata.version |
string | description および version の代替位置 |
metadata.pluginRoot |
string | ベアプラグインソース名が解決される下のディレクトリ。相対パスプラグインソース を参照してください。Claude Code v2.1.239 以降が必要です |
forceRemoveDeletedPlugins |
boolean | true の場合、plugins から削除したプラグインはユーザーのマシンでアンインストールされます。マーケットプレイスのホストと保守 を参照してください |
allowCrossMarketplaceDependenciesOn |
array of strings | このマーケットプレイスのプラグインの依存関係としてインストールされる可能性があるマーケットプレイス名。プラグインをインストールするときは、そのプラグイン自身のマーケットプレイスのリストのみが適用され、その依存関係チェーン全体に適用されます。プラグイン依存関係 を参照してください |
renames |
object | 前のプラグイン name を現在の名前にマップするか、削除したプラグインの場合は null にマップします。マーケットプレイスのホストと保守 を参照してください |
プラグインエントリ
marketplace.json のトップレベル plugins 配列内の各オブジェクトはプラグインに名前を付け、そこからフェッチする場所を指定します。name および source は必須です。
ディレクトリリスティングフィールド のほかに、エントリは description、version、author、commands、および hooks などのすべての plugin.json フィールド も受け入れます。これらのフィールドが適用される場合については、エントリが plugin.json とどのように組み合わされるか を参照してください。
テーブルはエントリ自身のフィールドと、エントリ内での意味が変わるマニフェストフィールドをリストします。
| フィールド | 型 | 説明 |
|---|---|---|
name |
string | プラグイン識別子:文字、数字、.、_、および -。文字または数字で始まります。claude plugin validate は他の名前に失敗し、Claude Code はインストールできません。ユーザーはインストール時に @ の前に入力します。プラグイン自身の plugin.json が異なる name を設定している場合でも |
source |
string or object | プラグインをフェッチする場所。プラグインソース を参照してください |
description |
string | /plugin リストと詳細に表示されます |
version |
string | プラグインのバージョン文字列。plugin.json も version を設定する場合、plugin.json が優先され、claude plugin validate が警告します。プラグイン読み込みリファレンス を参照してください |
category |
string | カタログを整理するための自由形式のカテゴリ |
tags |
array of strings | 検索用の自由形式のタグ |
strict |
boolean | デフォルト true。plugin.json がプラグインのコンポーネントの決定的なソースであるかどうか。厳密モード を参照してください |
relevance |
object | Claude Code にプラグインをいつ提案するかを伝えるシグナル。組織のプラグインを推奨する を参照してください |
dependencies |
array | このプラグインが機能するために有効にする必要があるプラグイン。各項目は "name"、"name@marketplace"、またはオブジェクトです。プラグイン依存関係 を参照してください |
defaultEnabled |
boolean | デフォルト true。ユーザーが enabledPlugins で設定していない場合、プラグインが有効で開始するかどうか。エントリ値は plugin.json より優先されます |
displayName |
string | UI に表示される人間が読める名前。エントリもプラグインの plugin.json も設定しない場合、ユーザーはプラグインの name を見ます |
metadata |
object | 独自のフィールド用の自由形式のオブジェクト。Claude Code はそれを読み取りません |
headers |
object | Claude Code がこのエントリの アーカイブ をダウンロードするときに送信する HTTP ヘッダー。ここで設定されたヘッダーは、マーケットプレイスソースの headers から同じ名前のヘッダーを置き換えます。Claude Code v2.1.238 以降が必要です |
headersHelper |
string | このエントリのアーカイブダウンロードヘッダーを 1 つの JSON オブジェクトとして出力するコマンド。有効期限が切れる認証情報用です。エントリは "strict": false も設定する必要があります。Claude Code v2.1.238 以降が必要です。アーカイブダウンロードの認証 を参照してください |
エントリが plugin.json とどのように組み合わされるか
エントリのフィールドは、フェッチされたプラグインが独自の .claude-plugin/plugin.json を持つ場合と持たない場合で異なる方法で適用されます:
plugin.jsonなし: エントリはstrictに関係なくマニフェストです。mcpServers、lspServers、userConfig、およびchannelsを含む、エントリが受け入れるすべてのマニフェストフィールドが適用されます。plugin.json存在:plugin.jsonはマニフェストです。厳密モード は、エントリの 6 つのコンポーネントフィールドcommands、agents、skills、hooks、outputStyles、およびthemesが組み合わされるか、競合として拒否されるかを決定します。エントリmcpServers、lspServers、userConfig、およびchannelsは適用されません。plugin.jsonで宣言してください。
エントリ内のフック
エントリ hooks は、フックイベント名を matcher 配列にマップするインラインオブジェクトとして記述します。代わりにファイルパスまたは配列を記述した場合、claude plugin validate はそれを通過させます。しかし、これらのフックは実行されず、Claude Code はプラグインの not yet supported in a marketplace entry エラーを報告します。ファイルベースのフックはプラグイン自身の hooks/hooks.json または plugin.json に入れてください。
表示フィールド
エントリとプラグイン自身の plugin.json の両方が、表示フィールド displayName、description、author、homepage、repository、license、および keywords を設定できます。ユーザーはインストール前後のプラグインリストと詳細でこれらの値を見ます:
- エントリで設定したフィールドの場合、ユーザーはエントリの値を見ます。
plugin.jsonが異なる値を設定している場合でも。 - エントリが設定しないフィールドの場合、ユーザーは
plugin.json値を見ます。
インストール前に、Claude Code は 相対パスソース を持つエントリの plugin.json のみを読み取ることができます。そのプラグインファイルはマーケットプレイス内にあります。他のソースタイプを持つエントリの場合、ユーザーはプラグインをインストールするまでエントリ自身のフィールドのみを見ます。
厳密モード
strict は、フェッチされたプラグインが独自の plugin.json を持ち、エントリが コンポーネントフィールド のいずれかも宣言する場合に何が起こるかを決定します:commands、agents、skills、hooks、outputStyles、または themes。デフォルトの strict: true では、Claude Code はエントリのコンポーネントフィールドを plugin.json に追加します。ただし hooks は例外で、その matcher はマニフェストのイベントごとの matcher を置き換えます。strict: false では、コンポーネントフィールドを宣言するエントリは競合であり、プラグインは読み込みに失敗します。テーブルは strict、plugin.json、およびエントリのコンポーネントフィールドの各組み合わせを示します。
strict |
plugin.json |
エントリコンポーネントフィールド | 結果 |
|---|---|---|---|
| any | absent | any | エントリはマニフェストです |
true、デフォルト |
present | any | plugin.json が正式な基準です。Claude Code はエントリのコンポーネントフィールドをそれに追加します。ただし hooks は例外で、その matcher は マニフェストのイベントごとの matcher を置き換えます |
false |
present | none | true と同様に plugin.json はマニフェストです |
false |
present | one or more | 競合。プラグインは Plugin <name> has conflicting manifests: both plugin.json and marketplace entry specify components で読み込みに失敗します |
プラグインソース
プラグインエントリの source は、Claude Code がそのプラグインをどこから取得するかを示します。これは相対パスの文字列か、オブジェクト自身の source キーで種類を指定するオブジェクトのいずれかです。そのため、エントリは "source": { "source": "github", "repo": "your-org/formatter" } のようになります。
次の表に、各プラグインソースの種類とそのフィールドを示します。
| 種類 | フィールド | 備考 |
|---|---|---|
| 相対パス | 文字列そのもの | マーケットプレイス内のディレクトリで、マーケットプレイスのルートから解決されます。metadata.pluginRoot 配下のベア名を記述する場合を除き、./ で始める必要があります。"." 単体はルートそのものを意味します |
github |
repo、ref、sha |
owner/repo 形式の GitHub リポジトリ |
url |
url、ref、sha |
URL で指定する任意の git リポジトリ |
git-subdir |
url、path、ref、sha |
git リポジトリ内の 1 つのサブディレクトリで、スパースチェックアウトで取得されます |
npm |
package、version、registry |
npm レジストリのパッケージまたは tarball へのリンクで、npm クライアントで取得され、インストールスクリプトを実行せずに展開されます |
archive |
url、sha256 |
HTTPS 経由の Zip アーカイブ |
command |
command、timeout、mode |
Claude Code がユーザーのマシン上で実行するコマンドが出力するディレクトリ。Claude Code v2.1.229 以降が必要です |
url と github という名前はマーケットプレイスソースの種類でもあり、その場合の url は git リポジトリではなく marketplace.json ファイルへの直接リンクを意味します。git はマーケットプレイスソースとしてのみ存在し、npm は両方に存在します。git-subdir、archive、command はプラグインソースとしてのみ存在します。
マーケットプレイスリポジトリ自体のサブディレクトリにあるプラグインには相対パスを使用します。別のリポジトリのサブディレクトリには git-subdir を使用します。
github、url、git-subdir ソースは、ref フィールドと sha フィールドを共有します。
ref: ブランチまたはタグ。デフォルトはリポジトリのデフォルトブランチです。sha: 40 文字の小文字の完全なコミット SHA。refとshaの両方を設定すると、Claude Code はshaをチェックアウトします。GitHub、GitLab、Bitbucket を含むほとんどの git ホストでは、これにより、refで指定したブランチやタグがその後アップストリームで削除されていても、コミットがリポジトリから到達可能である限りインストールは成功します。AWS CodeCommit など一部のサーバーは、SHA によるコミットの取得をサポートしていません。そのようなサーバーでは、refが引き続き存在し、固定したコミットがそこから到達可能である必要があります。
各種類の取得、キャッシュ、バージョン管理の方法については、プラグイン読み込みリファレンスを参照してください。
相対パスのプラグインソース
パスはマーケットプレイスのルートから解決されます。マーケットプレイスファイルが <root>/.claude-plugin/ にあっても、./plugins/formatter は <root>/plugins/formatter になります。
.. を含むパスは検証に失敗します。macOS と Linux では、Claude Code は先頭の ./ より後のどこかにバックスラッシュを含むエントリパスを拒否するため、パスはスラッシュで記述してください。
{ "name": "formatter", "source": "./plugins/formatter" }
相対パスは Claude Code がマーケットプレイスのファイルを保持している場合にのみ解決されるため、マーケットプレイスソースの種類を確認してください。
github、git、file、directory: Claude Code はマーケットプレイスのファイルを保持しています。url: Claude Code はmarketplace.jsonのみを取得するため、相対パスは解決できません。代わりに、各プラグインにgithubやgit-subdirなどのオブジェクトソースを指定してください。settings: 相対パスはそのまま拒否されます。
マーケットプレイスリポジトリ内の Git サブモジュール
Claude Code はマーケットプレイスリポジトリをクローンする際、プラグインファイルを含む git サブモジュールのみを取得します。Claude Code v2.1.295 以降が必要です。
それより前のバージョンでは、ネストされたものも含めてすべてのサブモジュールを取得します。リポジトリに大きなサブモジュールがある場合、Claude Code はその取得中にクローンのタイムアウトを超過する可能性があります。
./plugins/formatter のようにサブディレクトリにあるプラグインの場合、Claude Code は次の場合にサブモジュールを取得します。
- プラグインがサブモジュール内にある: サブモジュールがプラグインのディレクトリそのもの、またはその上位のディレクトリである
- サブモジュールがプラグイン内にある: サブモジュールがプラグインのディレクトリ配下のいずれかの場所にある
- シンボリックリンクがサブモジュール内を指している: リポジトリにコミットされたリンクのターゲットがサブモジュール内にある
"source": "./" でマーケットプレイスのルートにあるプラグインは、リポジトリ内のすべてのサブモジュールを取得するか、まったく取得しないかのどちらかです。次のいずれかがいずれかのサブモジュール内を指している場合、Claude Code はすべてのサブモジュールを取得します。
- コンポーネントディレクトリ:
skills/、hooks/、bin/など、プラグインのコンポーネントを含むルートのディレクトリ - プラグインの設定内のパス: プラグインのマーケットプレイスエントリ、その
plugin.json、または.mcp.jsonやhooks/hooks.jsonなどの設定ファイル内のパス - シンボリックリンク: リポジトリにコミットされたリンク
- プラグインのファイル内のテキスト: 設定ファイルまたはコンポーネントディレクトリ配下のファイルに記述された、
vendor/toolなどのサブモジュールのパス
いずれも該当しない場合、Claude Code はそのプラグインのサブモジュールを取得しません。プロジェクトであると同時にプラグインでもあるリポジトリには、プロジェクトのビルドでのみ使用されるサブモジュールがあることが多く、このルールによってそれらは除外されます。
また、どのサブモジュールにプラグインファイルが含まれているかを判断できない場合にも、Claude Code はすべてのサブモジュールを取得します。たとえば次のような場合です。
- ルートにある
SKILL.md: この場合、リポジトリ全体が 1 つのスキルのディレクトリになります - Claude Code が読み取れないファイル: マーケットプレイスファイル、プラグインの設定ファイルのいずれか、または
.gitmodules
--sparse を指定してマーケットプレイスを追加した場合、またはそのソースで sparsePaths が設定されている場合、Claude Code はそこで指定されたディレクトリのみをチェックアウトし、サブモジュールは取得しません。それより前のバージョンでも同様です。
プラグインで使用しないサブモジュールをクローンから除外するには、未使用のサブモジュールをクローンから除外するを参照してください。
pluginRoot 配下のベア名
ベア名とは、"formatter" のように / を含まない単一のディレクトリ名です。./ パスの代わりにベア名を記述するには、metadata.pluginRoot に、ベア名の解決先となるディレクトリを設定します。"pluginRoot": "./plugins" の場合、"source": "formatter" は ./plugins/formatter に解決されます。Claude Code v2.1.239 以降が必要です。
metadata.pluginRoot には次の制限があります。
- それ自体がマーケットプレイス内の相対パスである必要があります。
- すでに
./で始まるソースには影響しません。 team-a/formatterのように/を含むソースはベア名ではないため、metadata.pluginRootが設定されていても./プレフィックスが必要です。
github プラグインソース
repo には owner/repo を指定します。ref と sha は省略可能です。
{
"name": "formatter",
"source": {
"source": "github",
"repo": "your-org/formatter",
"ref": "v2.0.0",
"sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
}
}
url プラグインソース
url は完全な git URL(https://、http://、file://、または git@)です。.git サフィックスは必須ではないため、Azure DevOps や AWS CodeCommit の URL はそのまま使用できます。この種類では owner/repo の省略形は使用できません。
{
"name": "formatter",
"source": {
"source": "url",
"url": "https://gitlab.example.com/your-group/formatter.git",
"ref": "main"
}
}
git-subdir プラグインソース
url には完全な git URL または GitHub の owner/repo 省略形を指定できます。path はプラグインを含むサブディレクトリで、Claude Code はそのサブディレクトリのみをチェックアウトします。https または SSH の URL では、Claude Code はサーバーに部分クローンを要求するため、部分クローンをサポートするホストからであれば、大規模なモノレポ内のプラグインをリポジトリの残りの部分をダウンロードせずにインストールできます。
{
"name": "formatter",
"source": {
"source": "git-subdir",
"url": "https://github.com/your-org/monorepo.git",
"path": "tools/formatter"
}
}
npm プラグインソース
npm ソースは次のフィールドを受け付けます。
package:@your-org/formatterのようなレジストリのパッケージ名、@your-org/formatter@2.0.0のようにバージョンを付加した名前、またはパッケージの tarball ファイルへのhttpsリンクversion: バージョン、semver 範囲、または dist-tag で、packageがバージョンを付加していないパッケージ名の場合に使用されます。省略するとlatestを取得しますregistry: デフォルトのレジストリにないパッケージのレジストリ URL
Claude Code はユーザーの npm クライアントでパッケージを取得します。preinstall や postinstall などのパッケージのインストールスクリプトは実行されず、取得中にその依存関係はインストールされません。パッケージの package.json の横にサポートされているロックファイルがある場合、Claude Code はそれらの Node.js パッケージの依存関係を、同じくスクリプトを無効にした状態で別のステップでインストールします。
Claude Code は何かを取得する前に package の値を確認します。拒否された値はインストールを失敗させ、その値と理由を示すメッセージが表示されます。拒否される値には次のものがあります。
- git アドレス、フォルダまたは
file:パス、あるいはnpm:エイリアス: git リポジトリにはgithub、url、またはgit-subdirソースを、マーケットプレイス内のフォルダには相対パスを、エイリアスにはパッケージ自身の名前を使用してください - github.com、gist.github.com、gitlab.com、bitbucket.org、または git.sr.ht 上の tarball リンク:
gitlab.com/api/v4/配下の GitLab npm レジストリのリンクでない限り、GitHub のリリースダウンロードのリンクであっても拒否されます http経由の tarball リンク: インストールするユーザー自身のデフォルト npm レジストリを指している場合を除き、拒否されます
registry の URL は、インストールするユーザー自身のデフォルト npm レジストリである場合を除き、https を使用する必要があります。それ以外の http レジストリでは、npm がそれに接続する前にインストールが失敗します。
{
"name": "formatter",
"source": {
"source": "npm",
"package": "@your-org/formatter",
"version": "^2.0.0",
"registry": "https://npm.example.com"
}
}
archive プラグインソース
url は https:// を使用する必要があり、ループバック、リンクローカル、またはクラウドメタデータのホストを指すことはできません。ダウンロードのサイズ、タイムアウト、リダイレクト、展開に関する制限については、ホストするファイルのダウンロード制限内に収めるを参照してください。
プラグインのルートは、zip の最上位または 1 つ下のディレクトリに配置できます。
sha256 は、アーカイブのダイジェストを 64 文字の 16 進数(大文字または小文字)で表したものです。これを設定すると、Claude Code は一致しないダウンロードを拒否します。
{
"name": "formatter",
"source": {
"source": "archive",
"url": "https://artifacts.example.com/formatter-2.0.0.zip",
"sha256": "6bfa50e3d2e00c052b46abe51fff89346ac803e45771f76dcf6df1ab74cca5e1"
}
}
command プラグインソース
ユーザーのマシンにインストールされたツールがプラグインディレクトリを生成する場合、たとえばユーザーが選択したツールチェーン向けにプラグインをレンダリングする IDE などの場合は、command ソースを使用します。Claude Code は、ユーザーがプラグインをインストールまたは更新するときにコマンドを実行し、さらにセッションごとに 1 回再実行するため、ユーザーは再インストールせずにツールの変更後の出力を受け取れます。
command ソースは次のフィールドを受け付けます。
command: プラグインディレクトリの絶対パスを 1 行で出力し、0 で終了するシェルコマンド。Claude Code は実行前に、確認のためにこの文字列全体をユーザーに表示します。印刷可能な ASCII 文字で、500 文字以内、かつ 4 つ以上連続するスペースを含めずに記述してください。timeout: 1 から 600 までの整数の秒数。デフォルトは 60 です。mode:copy(デフォルト)またはlink。コピーモードとリンクモードを参照してください。
{
"name": "formatter",
"source": {
"source": "command",
"command": "my-tool claude-plugin-path",
"timeout": 120
}
}
ユーザーがコマンドを承認する方法については、シェルからインストールするを参照してください。コマンドを変更した後にユーザーに表示される内容については、command ソースのコマンドを変更するを参照してください。管理者は disableCommandPluginSources で command ソースをオフにできます。
コマンドが満たすべき要件
コマンドは次の要件を満たすように記述してください。
- シェルと作業ディレクトリ: Claude Code はユーザーのホームディレクトリから、
sh(Windows ではcmd.exe)を介してコマンドを実行します。絶対パスまたはPATH上のコマンドを指定してください。 - 出力: stdout にプラグインディレクトリの絶対パスを正確に 1 行出力し、
timeout秒以内に 0 で終了します。 - ディレクトリの内容: コマンドが終了する時点で、ディレクトリには完全なプラグインが含まれている必要があります。パスは実行ごとに異なっていてもかまいません。
インストールまたは更新を失敗させる出力
コマンドが 0 以外で終了した場合、timeout より長く実行された場合、または 1 つの絶対パス以外のものを出力した場合、インストールまたは更新は失敗します。出力されたディレクトリが次のいずれかである場合も失敗します。
- プラグインのコンテンツがない: 出力されたディレクトリの最上位に、
.claude-plugin/ディレクトリやskills/、commands/、agents/、hooks/ディレクトリなどのプラグインのコンテンツがない。 - セッション自身のディレクトリ: 出力されたディレクトリが、Claude Code を起動したディレクトリまたはその親ディレクトリのいずれかである。
- ネットワークパス: Windows で、出力されたパスが UNC パスである。
- コピーするには大きすぎる: コピーモードで、ディレクトリが 256 MiB を超えているか、20,000 を超えるエントリを含んでいる。
コピーモードとリンクモード
mode は、Claude Code が出力されたディレクトリをコピーするか、その場で使用するかを決定します。
copy: Claude Code はディレクトリをプラグインキャッシュにコピーし、コピーしたファイルのハッシュからプラグインのバージョンを導出します。ツールはコマンドの終了後にディレクトリを削除または書き換えてもかまいません。同一のファイルを生成する再実行は、最新の状態とみなされます。link: Claude Code は、出力されたディレクトリの各最上位エントリへのリンクでプラグインのキャッシュエントリを埋め、ファイルをその場で読み込みます。何もコピーされず、ファイルの内容はハッシュ化されず、サイズ制限も適用されません。レンダリングされた SDK エクスポートなど、コピーするには大きすぎるディレクトリに使用してください。
リンクモードのプラグインには次の要件があります。
- ディレクトリをその場所に保持する: Claude Code は起動のたびにリンクを介してプラグインを読み込むため、プラグインがインストールされている限り、出力されたディレクトリはその場所にとどまる必要があります。
- 新しいコンテンツを示すには別のパスを出力する: バージョンは、内部のファイルからではなく、出力されたディレクトリの実パスとその最上位エントリから導出されます。
- 最上位のシンボリックリンクをディレクトリ内にとどめる: 最上位エントリが出力されたディレクトリの外を指すシンボリックリンクである場合、インストールは失敗します。
node_modulesを含める: Claude Code はリンクモードのプラグインに対して Node.js パッケージの依存関係のインストールをスキップするため、プラグインに必要なパッケージをすでに含むディレクトリを出力してください。- ディレクトリ内で開始したセッション: 出力されたディレクトリまたはその配下のいずれかの場所で開始したセッションでは、プラグインは読み込まれません。
- Windows では使用不可: Claude Code は Windows ではリンクモードのプラグインのインストールを拒否します。Windows では
"mode": "copy"を宣言してください。
マーケットプレイスソース
マーケットプレイスソースは Claude Code が marketplace.json をどこからフェッチするかを指定します。CLI はマーケットプレイスを追加するときにあなたのために 1 つを構築し、設定で自分で 1 つを記述します:
claude plugin marketplace add: Claude Code は渡した文字列からソースを構築します。extraKnownMarketplaces:sourceオブジェクトとして自分でソースを記述します。strictKnownMarketplacesおよびblockedMarketplaces: 管理者はこれら 2 つのポリシーリストでソースを記述します。strictKnownMarketplacesは許可リストで、blockedMarketplacesは拒否リストです。
タイプ名 url、git、および github は、プラグインソース とは異なるマーケットプレイスソースで異なる意味を持ちます:
| タイプ名 | マーケットプレイスソースとして | プラグインソースとして |
|---|---|---|
url |
marketplace.json ファイルへの直接リンク。フィールド url、headers、および headersHelper |
クローンする git リポジトリ。フィールド url、ref、および sha |
git |
クローンする git リポジトリ。フィールド url、ref、path、および sparsePaths |
存在しません |
github |
GitHub リポジトリ。フィールド repo、ref、path、および sparsePaths |
GitHub リポジトリ。フィールド repo、ref、および sha。path なし |
テーブルはすべてのマーケットプレイスソースタイプをそのフィールド、それを生成する claude plugin marketplace add 入力、および 3 つの設定キーのそれぞれでの動作とともにリストします。
| タイプ | フィールド | marketplace add 入力 |
extraKnownMarketplaces |
strictKnownMarketplaces |
blockedMarketplaces |
|---|---|---|---|---|---|
url |
url、headers、headersHelper |
git フォームに一致しない http:// または https:// URL |
読み込みます | 同じ URL を許可します | 同じ URL をブロックします |
github |
repo、ref、path、sparsePaths |
owner/repo、owner/repo@ref、または owner/repo#ref |
読み込みます | 同じ repo、ref、および path を許可します。repo は owner/* である可能性があります |
同じものをブロックし、同じリポジトリへの git URL をブロックします |
git |
url、ref、path、sparsePaths |
user@host:path URL、または .git で終わる http:// または https:// URL、/_git/ を含む、または github.com または gitlab.com リポジトリに名前を付ける。#ref は ref をピン留めします |
読み込みます | 同じ URL、ref、および path を許可します |
同じものをブロックし、同じ github.com リポジトリの他のスペルをブロックします |
npm |
package |
生成されません | 読み込みに失敗します:NPM marketplace sources not yet implemented |
解析されますが、何も登録されていないため何も一致しません。npm マーケットプレイス |
解析されますが何も一致しません |
file |
path |
.json ファイルへのパス |
読み込みます | 同じパスを許可します | 同じパスをブロックします |
directory |
path |
ディレクトリへのパス | 読み込みます | 同じパスを許可します | 同じパスをブロックします |
settings |
name、plugins、owner |
生成されません | 読み込みます | 同じ name と同じ plugins を持つエントリを許可します |
同じ name をブロックします |
skills-dir |
なし | 生成されません | 読み込みに失敗します:Unsupported marketplace source type |
スキルディレクトリプラグイン を許可します。ポリシーリストでのみ有効なソース値 を参照してください | スキルディレクトリプラグインの読み込みを停止します |
hostPattern |
hostPattern |
生成されません | 読み込みに失敗します:Unsupported marketplace source type |
ホストが一致する github、git、および url ソースを許可します |
これらのソースをブロックします |
pathPattern |
pathPattern |
生成されません | 読み込みに失敗します:Unsupported marketplace source type |
path が一致する file および directory ソースを許可します |
これらのソースをブロックします |
タイプ別フィールド
テーブルはデフォルト、制約、またはそのタイプに固有の意味を持つ各マーケットプレイスソースフィールドをリストします。
| フィールド | タイプ | 説明 |
|---|---|---|
url |
url |
marketplace.json ファイルへのリンク。Claude Code はそのファイルのみをダウンロードするため、マーケットプレイスのプラグインは 相対パスソース を使用できません。ホストされたファイルのダウンロード制限内に留まる を参照してください。サイズ、タイムアウト、およびリダイレクト制限があります |
url |
git |
クローンする git リポジトリ |
headers |
url |
Claude Code が認証されたホストのフェッチで送信する HTTP ヘッダーのマップ |
headersHelper |
url |
headers にリストするには短すぎる値を持つヘッダーを出力するコマンド。Claude Code v2.1.238 以降が必要です。アーカイブダウンロードの認証 を参照してください |
repo |
github |
marketplace add および extraKnownMarketplaces では、repo は 1 つのリポジトリに名前を付ける必要があります。marketplace add は owner/* を有効な owner/repo 短縮形として拒否します。extraKnownMarketplaces では Claude Code はそれを文字通りに取り、クローンは失敗します |
ref |
github、git |
ブランチまたはタグ。リポジトリのデフォルトブランチにデフォルト設定されます |
path |
github、git |
リポジトリ内のマーケットプレイスファイルのパス。デフォルトは .claude-plugin/marketplace.json |
path |
file |
マーケットプレイスファイル自体。Claude Code はそれを使用中に読み取り、2 レベル上のディレクトリをマーケットプレイスルートとして取ります。ファイルを <root>/.claude-plugin/marketplace.json に保つ |
path |
directory |
マーケットプレイスルート。.claude-plugin/marketplace.json を含むディレクトリ |
sparsePaths |
github、git |
スパースチェックアウト用のディレクトリの配列。[".claude-plugin", "plugins"] など。claude plugin marketplace add --sparse が設定します |
skipLfs |
github、git |
受け入れられ、効果がありません。プラグインファイルを Git LFS から除外 を参照してください |
name |
settings |
extraKnownMarketplaces キーと等しい必要があり、予約名 にすることはできません |
plugins |
settings |
インラインカタログ。ホストされたファイルなし。各項目は name、source、description、version、strict、headers、および headersHelper を取ります。相対パスには解決するリポジトリがないため、各項目の source をオブジェクトタイプとして記述してください |
ポリシーリストでのみ有効なソース値
hostPattern、pathPattern、skills-dir、および repo の owner/* フォームは、2 つのポリシーリスト strictKnownMarketplaces および blockedMarketplaces でのみ有効です:
hostPatternおよびpathPattern: Claude Code がソースをフェッチする前にテストする正規表現。skills-dir: ソースではありません。{"source": "skills-dir"}エントリなしでstrictKnownMarketplacesを設定すると、スキルディレクトリプラグイン は読み込まれなくなります。strictPluginOnlyCustomizationでいずれかのカスタマイズタイプをロックした場合は、エントリの有無にかかわらず読み込まれなくなります。owner/*:githubrepo値として、正確にその GitHub 所有者の下のすべてのリポジトリに一致します。Claude Code v2.1.223 以降が必要です。
マッチ順序、正確な ref セマンティクス、およびレシピについては、組織のプラグインを管理する を参照してください。
設定のソースオブジェクト
extraKnownMarketplaces 値はマーケットプレイス名から source を持つオブジェクトへのマップです。このエントリは main ブランチの git リポジトリからマーケットプレイスを登録します:
{
"extraKnownMarketplaces": {
"your-marketplace": {
"source": {
"source": "git",
"url": "https://git.example.com/your-org/your-marketplace.git",
"ref": "main"
}
}
}
}
strictKnownMarketplaces および blockedMarketplaces はソースオブジェクトの配列です。この許可リストは 1 つの GitHub 所有者と 1 つの内部ホストを許可します:
{
"strictKnownMarketplaces": [
{ "source": "github", "repo": "your-org/*" },
{ "source": "hostPattern", "hostPattern": "^git\\.example\\.com$" }
]
}
検証メッセージ
claude plugin validate <path> はマーケットプレイスのルートまたはマーケットプレイスファイル自体を受け取ります。そのファイルをプラグインマニフェストではなく マーケットプレイスとして検証 させるには、ファイル名を marketplace.json にしてください。終了コードと --strict については、plugin validate を参照してください。
メッセージはプラグインエントリをそのインデックスで名前付けします。plugins.1.source または plugins[1].source として記述されます。
plugins[2] plugin.json → などのエントリインデックスと plugin.json → で始まるメッセージは、そのプラグイン自体のファイルに関するものです。claude plugin validate がエラーを報告する にはそれらのメッセージと修正方法が記載されています。
Claude Desktop フラグ名に言及する警告は、Claude Desktop が拒否するものです。
表はマーケットプレイスレベルのメッセージを、各メッセージが関連するフィールドにマッピングしています。
| メッセージ | レベル | フィールド |
|---|---|---|
Marketplace must have a name |
エラー | name が空です |
Marketplace name cannot contain spaces. Use kebab-case (e.g., "my-marketplace") |
エラー | name |
Marketplace name cannot contain path separators (/ or \), ".." sequences, or be "." |
エラー | name |
Marketplace name impersonates an official Anthropic/Claude marketplace |
エラー | name。予約名 を参照してください |
Marketplace name cannot contain control or bidirectional-formatting characters |
エラー | name にエスケープまたは改行などの制御文字、または Unicode 双方向フォーマット文字が含まれています |
Marketplace name "inline" is reserved for --plugin-dir session plugins, and the builtin, skills-dir, synced, claude-plugin-test, npm, pip, uv, cargo, github, and gh variants |
エラー | name |
Author name cannot be empty |
エラー | owner.name |
Plugin name cannot contain spaces. Use kebab-case (e.g., "my-plugin") |
エラー | plugins[i].name |
Plugin name cannot contain control or bidirectional-formatting characters |
エラー | plugins[i].name |
Plugin name "x" is reserved: it passes as one of Anthropic's own |
エラー | plugins[i].name。マニフェストの name で予約名を参照してください |
Plugin name "x" reads as one of Anthropic's own |
警告 | plugins[i].name |
Claude Code cannot install plugins from marketplace "x". Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. Change the marketplace's "name". |
エラー | name |
Claude Code cannot install plugin "x". Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. Change this entry's "name". |
エラー | plugins[i].name |
Duplicate plugin name "x" found in marketplace |
エラー | 2 つのエントリが同じ name を共有しています |
plugins.i.source: Invalid input |
エラー | エントリの source がどのタイプにも一致しません。source の無効な入力 を参照してください |
plugins.i.source: Invalid string: must start with "./" |
エラー | 先頭の ./ がない相対パスの source。v2.1.285 より前は、このミスに対して代わりに Invalid input が出力されていました |
plugins[i].source: Path contains "..": <path> |
エラー | マーケットプレイスルートをエスケープする相対 source |
source.source: 'unsupported' is a parse-time placeholder and cannot be authored |
エラー | plugins[i].source |
Plugin "x" sets headersHelper but is not "strict": false |
エラー | plugins[i].headersHelper(archive エントリ上) |
chain does not resolve (<reason>) — target must be a name in plugins[], a key in renames, or null |
エラー | renames.<old> |
target "x" is not a valid plugin name (PluginIdSchema) |
エラー | renames.<old> |
Unknown field 'x'. Claude Code ignores it at load time. |
警告 | トップレベル、metadata の下、エントリ内、またはエントリの relevance の下の名前付きキー |
Marketplace has no plugins defined |
警告 | plugins が空です |
Plugin "x" sets headers/headersHelper, which only apply to "archive" sources; they have no effect on this entry. |
警告 | plugins[i].headers または plugins[i].headersHelper(source が archive ではないエントリ上) |
Plugin "x" fetches its archive with a headersHelper but sets no sha256 pin |
警告 | plugins[i].source.sha256 |
Header "x" is a request-routing/identity header that catalog entries may not set; Claude Code drops it at download time. |
警告 | plugins[i].headers.<name> |
Local source "x" is or traverses a symlink, so <path> was not read |
警告 | plugins[i].source |
No marketplace description provided. Adding a description helps users understand what this marketplace offers |
警告 | description |
Entry declares version "x" but <path>/plugin.json says "y". At install time, plugin.json wins |
警告 | plugins[i].version(相対パスエントリ上) |
'relevance' must be an object containing topic and signals; got <type>. It will be ignored at load time. |
警告 | plugins[i].relevance |
'metadata' must be a free-form object; got <type>. It will be ignored at load time. |
警告 | plugins[i].metadata |
'experimental' must be an object containing component declarations; got <type>. It will be ignored at load time. |
警告 | plugins[i].experimental |
Marketplace name "x" is reserved in Claude Desktop |
警告 | name が org、org-provisioned、または unknown です。Claude Desktop がマーケットプレイスを拒否します |
Marketplace name "x" is not accepted by Claude Desktop (letters, digits, ".", "_", "-"; must start alphanumeric; max 128 chars) |
警告 | name。Claude Desktop がマーケットプレイスを拒否します |
Plugin name "x" is not accepted by Claude Desktop (letters, digits, ".", "_", "-"; must start alphanumeric; max 128 chars) |
警告 | plugins[i].name。Claude Desktop がエントリをドロップします |
source の無効な入力
source の Invalid input は、オブジェクトがどのソースタイプにも一致しなかったことを意味します。以下の原因をチェックしてください。
..を含むnpmpackage- プラグインソース の 1 つではない
sourceタイプ githubにrepoがないなど、必須フィールドが欠落しているか、型が間違っている既知のタイプ
./ で始まらない相対パスは、"." または metadata.pluginRoot の下のベア名 を除き、Invalid string: must start with "./" で失敗します。v2.1.285 より前は、上記の原因と同様に Invalid input が出力されていました。
検証が検出しない失敗
claude plugin validate はすべての失敗を報告するわけではありません。ファイルパスまたは配列として記述されたエントリ hooks は検証に合格し、エラーはプラグインが読み込まれるときにのみ表示されます。エントリ内の Hooks で説明されているとおりです。source をフェッチするエラーも、検証時ではなく、インストール後にのみ表示されます。
claude plugin list は読み込みに失敗したプラグインをそのエラーとともに表示し、プラグインのトラブルシューティング は読み込み時の文字列をカバーしています。
次のステップ
- マーケットプレイスの作成: これらのフィールドからマーケットプレイスを構築し、ローカルからインストール
- マーケットプレイスのホストと保守: ファイルを配置する場所とユーザーが変更を受け取る方法
- プラグインマニフェストリファレンス: エントリがオーバーライドできる
plugin.jsonフィールド - 組織のプラグインを管理する: これらのソース値を使用する許可リストと拒否リストのレシピ