marketplace.json 是定义插件 marketplace 的文件。它包含 marketplace 的名称、所有者和每个插件的一个条目。每个条目的插件源说明 Claude Code 从哪里获取该插件。
marketplace 源是一个单独的对象,说明 Claude Code 从哪里获取 marketplace 文件本身。你在设置中编写一个,或者当你运行 claude plugin marketplace add 时 Claude Code 会构建一个。
本参考适用于需要确切字段名称或值的 marketplace 维护者,以及需要了解哪些 source 值在 extraKnownMarketplaces、strictKnownMarketplaces 和 blockedMarketplaces 中有效的管理员。
这些情况在其他页面上有介绍:
- 构建或托管 marketplace:请参阅 创建 marketplace 和 托管和维护 marketplace
- 允许列表和阻止列表配方:请参阅 为你的组织管理插件
- marketplace 文件:顶级字段 和 插件条目
- 条目的
source:插件源 - 设置中的
source对象:Marketplace 源 - 来自
claude plugin validate <path>的输出:验证消息,它将每条消息映射到它命名的字段
Marketplace 文件
将 marketplace 文件保存在 marketplace 目录中的.claude-plugin/marketplace.json。如果你将文件保存在存储库中的其他位置,用户必须在 extraKnownMarketplaces 中声明 marketplace,并在其源上设置 path,因为 claude plugin marketplace add 没有该选项。
包含 .claude-plugin/ 的目录称为 marketplace 根目录,每个相对插件源都从它解析,而不是从 .claude-plugin/。
每个用户为每个 name 注册一个 marketplace,因此用户不能同时注册两个同名的 marketplace。
Claude Code 忽略未知的顶级键或插件条目键,而不是拒绝它,因此拼写错误会静默加载。claude plugin validate 将每个未知键报告为警告。
保留名称
你不能给你的 marketplace 以下任何名称:- 官方 marketplace 名称:
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。除非 marketplace 来自github.com/anthropics/下的github或gitmarketplace 源,否则保留。 - 社区 marketplace 名称:
claude-community、claude-plugins-community和healthcare。保留规则与官方名称相同。 - 插件目录名称:
anthropic-plugin-directory和claude-plugin-directory。保留规则与官方名称相同。 - 冒充官方 marketplace 的名称:名称如
official-claude-plugins或claude-plugins-v2,以及任何包含非 ASCII 字符的名称。错误是Marketplace name impersonates an official Anthropic/Claude marketplace。名称中的控制或双向格式化字符也会报告Marketplace name cannot contain control or bidirectional-formatting characters。已在这样的名称下注册的 marketplace 停止加载,连同其插件。 - 保留名称的另一种拼写:仅因尾部的点,或因用除下划线以外的符号代替连字符,而与保留名称不同的名称,因此
claude.code.plugins计为claude-code-plugins。添加 marketplace 失败,错误为is another spelling of "<reserved>", a reserved marketplace name,已使用此类名称注册的 marketplace 将停止加载。此检查需要 Claude Code v2.1.280 或更高版本。 - Claude Code 用于不来自 marketplace 的插件的名称:
inline用于使用--plugin-dir加载的插件,builtin用于内置插件,skills-dir用于从.claude/skills/自动加载的插件,synced用于从你的 claude.ai 账户同步的插件。claude-plugin-test也被保留。skills-dir也显示为{"source": "skills-dir"},在strictKnownMarketplaces和blockedMarketplaces中,如 仅在策略列表中有效的源值 下所述。 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 上的 marketplace 保留。claude plugin marketplace add拒绝任何其他使用一个的 marketplace,错误为Cannot add marketplace "<name>": names starting with "claudeai-" are reserved for marketplaces hosted on claude.ai。 - 已注册 GitHub 市场的下载文件夹名称
<owner>-<repo>:对于从github源(例如acme/x-tools)添加的市场,无论该市场自身的name是什么,Claude Code 都会通过名为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 是必需的。
插件条目
marketplace.json 的顶级 plugins 数组中的每个对象命名一个插件并说明从哪里获取它。name 和 source 是必需的。
除 目录列表字段 外,条目也接受每个 plugin.json 字段,如 description、version、author、commands 和 hooks。有关这些字段何时适用,请参阅 条目如何与 plugin.json 结合。
该表列出条目自己的字段和清单字段,其含义在条目中改变。
条目如何与 plugin.json 结合
条目的字段对获取的具有自己的.claude-plugin/plugin.json 的插件和没有的插件的应用方式不同:
- 没有
plugin.json:条目是清单,无论strict如何。条目中的每个清单字段都适用,包括mcpServers、lspServers、userConfig和channels。 plugin.json存在:plugin.json是清单。严格模式 决定条目的六个组件字段commands、agents、skills、hooks、outputStyles和themes是与其结合还是作为冲突被拒绝。条目mcpServers、lspServers、userConfig和channels不适用。在plugin.json中声明它们。
条目中的 Hooks
将条目hooks 写成内联对象,将 hook 事件名称映射到匹配器数组。如果您写文件路径或数组,claude plugin validate 会通过。这些 hook 永远不会运行,Claude Code 为插件报告 not yet supported in a marketplace entry 错误。将基于文件的 hook 放在插件自己的 hooks/hooks.json 或 plugin.json 中。
显示字段
条目和插件自己的plugin.json 都可以设置显示字段 displayName、description、author、homepage、repository、license 和 keywords。用户在插件列表和详情中看到这些值,在安装前后:
- 对于您在条目上设置的字段,用户看到条目的值,即使
plugin.json设置了不同的值。 - 对于条目未设置的字段,用户看到
plugin.json值。
plugin.json,其插件文件在市场内。对于具有任何其他源类型的条目,用户在安装插件之前只看到条目自己的字段。
严格模式
strict 决定当获取的插件具有自己的 plugin.json 且条目也声明任何 组件字段 时会发生什么:commands、agents、skills、hooks、outputStyles 或 themes。使用 strict: true(默认值),Claude Code 将条目的组件字段附加到 plugin.json,除了 hooks,其匹配器替换清单的每个事件。使用 strict: false,声明任何组件字段的条目是冲突,插件加载失败。该表显示 strict、plugin.json 和条目的组件字段的每个组合。
Plugin sources
一个插件条目的source 说明 Claude Code 从哪里获取该插件。它要么是一个相对路径字符串,要么是一个对象,其自身的 source 键命名类型,所以一个条目看起来像 "source": { "source": "github", "repo": "your-org/formatter" }。
该表列出了每种插件源类型及其字段。
名称
url 和 github 也是marketplace 源类型,其中 url 表示直接链接到 marketplace.json 文件而不是 git 仓库。git 仅作为 marketplace 源存在,npm 既作为 marketplace 源也作为插件源存在。git-subdir、archive 和 command 仅作为插件源存在。
对于 marketplace 仓库本身的子目录中的插件,使用相对路径。对于其他仓库的子目录,使用 git-subdir。
github、url 和 git-subdir 源共享 ref 和 sha 字段:
ref:一个分支或标签。默认为仓库的默认分支。sha:一个完整的 40 字符小写提交 SHA。当你同时设置ref和sha时,Claude Code 检出sha。在大多数 git 主机上,包括 GitHub、GitLab 和 Bitbucket,这意味着即使上游的分支或标签已被删除,只要提交仍然可从仓库到达,安装就会成功。某些服务器(如 AWS CodeCommit)不支持按 SHA 获取提交。在这些服务器上,ref必须仍然存在,固定的提交必须可从它到达。
Relative path plugin source
路径从 marketplace 根目录解析。./plugins/formatter 是 <root>/plugins/formatter,即使 marketplace 文件在 <root>/.claude-plugin/ 中。
包含 .. 的路径会验证失败。在 macOS 和 Linux 上,Claude Code 拒绝条目路径在前导 ./ 之后的任何地方包含反斜杠,所以用正斜杠写路径。
github、git、file和directory:Claude Code 拥有 marketplace 的文件。url:Claude Code 仅获取marketplace.json,所以相对路径无法解析。给每个插件一个对象源,如github或git-subdir。settings:相对路径被直接拒绝。
Git submodules in the marketplace repository
当 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
- 根目录下的
SKILL.md:此时整个仓库就是一个 skill 的目录 - Claude Code 无法读取的文件:市场文件、插件的某个配置文件或
.gitmodules
--sparse 添加市场,或其源设置了 sparsePaths,Claude Code 只检出其中指定的目录,不获取任何子模块。早期版本也是如此。
要将插件未使用的子模块排除在克隆之外,请参阅将未使用的子模块排除在克隆之外。
Bare names under pluginRoot
裸名是一个没有/ 的单个目录名,如 "formatter"。要写裸名而不是 ./ 路径,设置 metadata.pluginRoot 为它们解析的目录。使用 "pluginRoot": "./plugins","source": "formatter" 解析为 ./plugins/formatter。需要 Claude Code v2.1.239 或更高版本。
metadata.pluginRoot 有这些限制:
- 它本身必须是 marketplace 内的相对路径。
- 它对已经以
./开头的源没有影响。 - 包含
/的源,如team-a/formatter,不是裸名,即使设置了metadata.pluginRoot也仍然需要./前缀。
github plugin source
repo 采用 owner/repo 格式。ref 和 sha 是可选的。
url plugin source
url 是一个完整的 git URL:https://、http://、file:// 或 git@。不需要 .git 后缀,所以 Azure DevOps 和 AWS CodeCommit URL 可以按原样工作。此类型不采用 owner/repo 简写。
git-subdir plugin source
url 接受完整的 git URL 或 GitHub owner/repo 简写。path 是保存插件的子目录,Claude Code 仅检出该子目录。通过 https 或 SSH URL 时,Claude Code 会向服务器请求部分克隆,因此从支持部分克隆的主机获取时,大型 monorepo 中的插件无需下载仓库的其余部分即可安装。
npm plugin source
一个npm 源采用这些字段:
package:一个 registry 包名,如@your-org/formatter;一个附加了版本的名称,如@your-org/formatter@2.0.0;或一个指向包 tarball 文件的https链接version:一个版本、一个 semver 范围或一个 dist-tag,在package是未附加版本的包名时使用。省略它则获取latestregistry:一个不在默认 registry 上的包的 registry URL
preinstall 或 postinstall,永远不会运行,其依赖项在获取期间不会被安装。如果包在其 package.json 旁边有一个支持的 lockfile,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 链接:即使该链接是 GitHub release 下载链接也会被拒绝,除非它是
gitlab.com/api/v4/下的 GitLab npm registry 链接 - 通过
http的 tarball 链接:除非它指向安装用户自己的默认 npm registry,否则会被拒绝
registry URL 必须使用 https,除非它是安装用户自己的默认 npm registry。对于任何其他 http registry,安装会在 npm 与其联系之前失败。
archive plugin source
url 必须使用 https://,不能指向环回、链接本地或云元数据主机。有关下载的大小、超时、重定向和提取限制,请参阅保持在托管文件的下载限制内。
插件根可能在 zip 的顶部或下一个目录。
sha256 是存档的摘要,为 64 个十六进制字符,大写或小写。当你设置它时,Claude Code 拒绝不匹配的下载。
command plugin source
当安装在用户机器上的工具生成插件目录时,使用command 源,如一个为用户选择的工具链呈现其插件的 IDE。Claude Code 在用户安装或更新插件时运行该命令,并每个会话再运行一次,所以用户无需重新安装就能获得工具的更改输出。
一个 command 源采用这些字段:
command:一个 shell 命令,打印插件目录的绝对路径作为一行并退出 0。Claude Code 在运行前向用户显示整个字符串以供审查。将其写为可打印的 ASCII,最多 500 个字符,没有四个或更多空格的连续。timeout:从 1 到 600 的整数秒数。默认为 60。mode:copy(默认)或link。参见 Copy mode and link mode。
disableCommandPluginSources 关闭命令源。
What the command must do
编写命令以满足这些要求:- Shell 和工作目录:Claude Code 通过
sh运行命令,或在 Windows 上通过cmd.exe,从用户的主目录。给出绝对路径或PATH上的命令。 - 输出:在 stdout 上打印恰好一行,插件目录的绝对路径,并在
timeout秒内退出 0。 - 目录内容:该目录在命令退出时保存完整的插件。路径可能因运行而异。
Output that fails the install or update
当命令退出非零、运行时间超过timeout 或打印除一个绝对路径之外的任何内容时,安装或更新失败。当打印的目录是以下之一时,它也会失败:
- 没有插件内容:打印的目录在其顶级没有插件内容,如
.claude-plugin/目录或skills/、commands/、agents/或hooks/目录。 - 会话自己的目录:打印的目录是 Claude Code 启动的目录,或其父目录之一。
- 网络路径:在 Windows 上,打印的路径是 UNC 路径。
- 太大而无法复制:在复制模式下,目录大于 256 MiB 或有超过 20,000 个条目。
Copy mode and link mode
mode 决定 Claude Code 是复制打印的目录还是就地使用它:
copy:Claude Code 将目录复制到插件缓存中,并从复制文件的哈希值派生插件版本。你的工具可以在命令退出后删除或重写目录。产生相同文件的重新运行计为最新。link:Claude Code 用指向打印目录的每个顶级条目的链接填充插件的缓存条目,并就地加载文件。不复制任何内容,文件内容不被哈希,大小限制不适用。对于太大而无法复制的目录(如呈现的 SDK 导出),使用它。
- 保持目录就位:Claude Code 在每次启动时通过链接加载插件,所以打印的目录必须保持在原位,只要插件保持安装。
- 打印不同的路径以表示新内容:版本来自打印目录的真实路径及其顶级条目,而不是其中的文件。
- 保持顶级符号链接在目录内:如果顶级条目是指向打印目录外的符号链接,安装失败。
- 包含
node_modules:Claude Code 跳过链接模式插件的 Node.js 包依赖项安装,所以打印一个已经包含插件需要的包的目录。 - 在目录内启动的会话:在打印目录或其下方任何地方启动的会话不加载插件。
- 不在 Windows 上:Claude Code 拒绝在 Windows 上安装链接模式插件。在那里声明
"mode": "copy"。
Marketplace 源
marketplace 源说明 Claude Code 从哪里获取marketplace.json。CLI 在你添加 marketplace 时为你构建一个,你在设置中自己编写一个:
claude plugin marketplace add:Claude Code 从你传递的字符串构建源。extraKnownMarketplaces:你自己将源写成source对象。strictKnownMarketplaces和blockedMarketplaces:管理员在这两个策略列表中编写源。strictKnownMarketplaces是允许列表,blockedMarketplaces是阻止列表。
url、git 和 github 在 marketplace 源中的含义与在 插件源 中不同:
该表列出每个 marketplace 源类型及其字段、产生它的
claude plugin marketplace add 输入,以及它在三个设置键中的作用。
按类型的字段
该表列出每个具有默认值、约束或特定于其类型的含义的 marketplace 源字段。仅在策略列表中有效的源值
hostPattern、pathPattern、skills-dir 和 repo 的 owner/* 形式仅在两个策略列表中有效,strictKnownMarketplaces 和 blockedMarketplaces:
hostPattern和pathPattern:Claude Code 在获取前针对源测试的正则表达式。skills-dir:不是源。如果您设置了strictKnownMarketplaces但其中没有{"source": "skills-dir"}条目,skills-directory 插件将停止加载。如果您使用strictPluginOnlyCustomization锁定了任何自定义类型,无论该条目是否存在,它们都会停止加载。owner/*:作为githubrepo值,匹配恰好该 GitHub 所有者下的每个存储库。需要 Claude Code v2.1.223 或更高版本。
ref 语义和配方,请参阅 为你的组织管理插件。
设置中的源对象
extraKnownMarketplaces 值是从 marketplace 名称到具有 source 的对象的映射。此条目从其 main 分支的 git 存储库注册 marketplace:
strictKnownMarketplaces 和 blockedMarketplaces 是源对象的数组。此允许列表允许一个 GitHub 所有者和一个内部主机:
验证消息
claude plugin validate <path> 接受市场根目录或市场文件本身。若要让该文件作为市场进行验证而不是作为插件 manifest 进行验证,请将其命名为 marketplace.json。有关退出码和 --strict,请参阅 plugin validate。
消息通过索引命名插件条目,写作 plugins.1.source 或 plugins[1].source。
以条目索引和 plugin.json → 为前缀的消息,例如 plugins[2] plugin.json →,涉及该插件自己的文件。claude plugin validate 报告错误 列出这些消息及其修复。
提及 Claude Desktop 标志名称的警告,这些名称 Claude Desktop 拒绝。
该表将 marketplace 级别的消息映射到每个消息所涉及的字段。
Invalid input on a source
source 上的 Invalid input 意味着该对象与任何源类型都不匹配。检查这些原因:
- 包含
..的npmpackage - 不是 plugin sources 之一的
source类型 - 已知类型缺少必需字段或字段类型错误,例如没有
repo的github
./ 开头的相对路径("." 或 metadata.pluginRoot 下的裸名称 除外)会失败并显示 Invalid string: must start with "./"。在 v2.1.285 之前,它会像上述原因一样打印 Invalid input。
验证未捕获的失败
claude plugin validate 不会报告每个失败。写作文件路径或数组的条目 hooks 通过验证,错误仅在插件加载时出现,如 Hooks in an entry 所述。获取 source 的错误也仅在安装后出现,不在验证中出现。
claude plugin list 显示加载失败的插件及其错误,Troubleshoot plugins 涵盖加载时字符串。
后续步骤
- 创建 marketplace:从这些字段构建 marketplace 并在本地安装
- 托管和维护 marketplace:放置文件的位置以及用户如何接收更改
- 插件清单参考:条目可以覆盖的
plugin.json字段 - 为你的组织管理插件:使用这些源值的允许列表和阻止列表配方