SpyBara
Go Premium

plugins/marketplace-reference.md 2026-11-11 22:59 UTC to 2026-11-12 22:01 UTC

No changes for this document in this history range.

2026
Fri 6 23:01 Tue 10 21:57

マーケットプレイスリファレンス

marketplace.json フィールド、プラグインエントリ、プラグインおよびマーケットプレイスソースオブジェクトの完全なリファレンス。各フィールドの有効な場所を含みます。

marketplace.json はプラグインマーケットプレイスを定義するファイルです。マーケットプレイスの名前、所有者、およびプラグインごとに 1 つのエントリが含まれます。各エントリのプラグインソースは、Claude Code がそのプラグインをどこから取得するかを指定します。

マーケットプレイスソースは、Claude Code が marketplace.json ファイル自体をどこから取得するかを指定する別のオブジェクトです。設定で記述するか、claude plugin marketplace add を実行するときに Claude Code が構築します。

このリファレンスは、正確なフィールド名または値が必要なマーケットプレイス管理者、および extraKnownMarketplaces、strictKnownMarketplaces、および blockedMarketplaces で有効な source 値を知る必要がある管理者向けです。

[!NOTE]

これらのケースは他のページで説明されています:

記述または読み取る内容のセクションを見つけてください:

マーケットプレイスファイル

マーケットプレイスファイルをマーケットプレイスのディレクトリの .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 つを記述します:

タイプ名 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/*: github repo 値として、正確にその 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 は、オブジェクトがどのソースタイプにも一致しなかったことを意味します。以下の原因をチェックしてください。

  • .. を含む npm package
  • プラグインソース の 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 は読み込みに失敗したプラグインをそのエラーとともに表示し、プラグインのトラブルシューティング は読み込み時の文字列をカバーしています。

次のステップ