Pular para o conteúdo principal
marketplace.json é o arquivo que define um marketplace de plugins. Ele contém o nome do marketplace, seu proprietário e uma entrada por plugin. A origem do plugin de cada entrada diz onde Claude Code busca esse plugin. Uma origem de marketplace é um objeto separado que diz onde Claude Code busca o próprio arquivo marketplace. Você escreve um nas configurações, ou Claude Code constrói um quando você executa claude plugin marketplace add. Esta referência é para mantenedores de marketplace que precisam de um nome de campo ou valor exato, e para administradores que precisam saber quais valores de source são válidos em extraKnownMarketplaces, strictKnownMarketplaces e blockedMarketplaces.
Estes casos são cobertos em outras páginas:
Encontre a seção para o que você está escrevendo ou lendo:

Arquivo marketplace

Salve o arquivo marketplace em .claude-plugin/marketplace.json no diretório do seu marketplace. Se você manter o arquivo em outro lugar no repositório, os usuários precisam declarar o marketplace em extraKnownMarketplaces com path definido em sua origem, porque claude plugin marketplace add não tem opção para isso. O diretório que contém .claude-plugin/ é chamado de raiz do marketplace, e toda origem de plugin relativa se resolve a partir dele, não a partir de .claude-plugin/. Cada usuário registra um marketplace por name, então um usuário não pode ter dois marketplaces com o mesmo nome registrados ao mesmo tempo. Claude Code ignora uma chave de nível superior desconhecida ou uma chave de entrada de plugin em vez de rejeitá-la, então um erro de digitação carrega silenciosamente. claude plugin validate relata cada chave desconhecida como um aviso.

Nomes reservados

Você não pode dar ao seu marketplace nenhum dos seguintes nomes:
  • Nomes de marketplace oficial: 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 e claude-tag-plugins. Reservado a menos que o marketplace venha de uma origem de marketplace github ou git sob github.com/anthropics/.
  • Nomes de marketplace comunitário: claude-community, claude-plugins-community e healthcare. Reservado sob a mesma regra que os nomes oficiais.
  • Nomes de diretório de plugins: anthropic-plugin-directory e claude-plugin-directory. Reservado sob a mesma regra que os nomes oficiais.
  • Nomes que se passam por um marketplace oficial: nomes como official-claude-plugins ou claude-plugins-v2, e qualquer nome contendo um caractere não-ASCII. O erro é Marketplace name impersonates an official Anthropic/Claude marketplace. Um caractere de controle ou formatação bidirecional em um nome também relata Marketplace name cannot contain control or bidirectional-formatting characters. Um marketplace já registrado sob tal nome para de carregar, junto com seus plugins.
  • Outra grafia de um nome reservado: um nome que difere de um nome reservado apenas por um ponto final, ou por um símbolo diferente de um sublinhado no lugar de um hífen, então claude.code.plugins conta como claude-code-plugins. Adicionar o marketplace falha com is another spelling of "<reserved>", a reserved marketplace name, e um marketplace já registrado sob um para de carregar. Esta verificação requer Claude Code v2.1.280 ou posterior.
  • Nomes que Claude Code usa para plugins que não vêm de um marketplace: inline para plugins carregados com --plugin-dir, builtin para plugins integrados, skills-dir para plugins carregados automaticamente de .claude/skills/ e synced para plugins sincronizados de sua conta claude.ai. claude-plugin-test também é reservado. skills-dir também aparece como {"source": "skills-dir"} em strictKnownMarketplaces e blockedMarketplaces, descrito em Source values valid only in policy lists.
  • npm, pip, uv, cargo, github e gh: reservado em qualquer capitalização. Esta verificação requer Claude Code v2.1.275 ou posterior.
  • Nomes de membros que todo objeto JavaScript possui: constructor, hasOwnProperty, isPrototypeOf, propertyIsEnumerable, toLocaleString, toString e valueOf. claude plugin marketplace add recusa um marketplace que use um deles com Claude Code reserves this name and cannot register a marketplace under it. Esta verificação requer Claude Code v2.1.296 ou posterior.
  • Nomes começando com claudeai-: reservado para marketplaces hospedados em claude.ai. claude plugin marketplace add recusa qualquer outro marketplace que use um com Cannot add marketplace "<name>": names starting with "claudeai-" are reserved for marketplaces hosted on claude.ai.
  • A pasta de download de um marketplace GitHub registrado, <owner>-<repo>: Claude Code baixa um marketplace adicionado de uma origem github como acme/x-tools por meio de uma pasta chamada acme-x-tools, qualquer que seja o name próprio desse marketplace. Enquanto esse marketplace estiver registrado sob um nome diferente de acme-x-tools, claude plugin marketplace add recusa um marketplace diferente chamado acme-x-tools após baixá-lo e relata Can't use the marketplace name "acme-x-tools". Esta verificação requer Claude Code v2.1.290 ou posterior.
Quando um marketplace registrado para de carregar porque seu nome imita um oficial, claude plugin list e /plugin relatam Claude Code refuses the marketplace name "<name>". A mensagem informa você a remover o marketplace. Removê-lo também desinstala seus plugins e exclui seus dados, opções e segredos. Esta mensagem de recusa nomeada requer Claude Code v2.1.282 ou posterior. Se um arquivo de configurações declarar o marketplace inline, a mensagem informa você a renomear sua entrada antes de remover o nome antigo. Para as etapas, consulte Claude Code refuses the marketplace name. A mensagem as lista no Claude Code v2.1.292 ou posterior.

Top-level fields

A tabela lista cada chave que Claude Code lê de marketplace.json. name, owner e plugins são obrigatórios.

Plugin entries

Cada objeto no array plugins de nível superior de marketplace.json nomeia um plugin e diz onde buscá-lo. name e source são obrigatórios. Além dos campos de listagem do diretório, uma entrada também aceita cada campo de plugin.json, como description, version, author, commands e hooks. Para quando esses campos se aplicam, veja How an entry combines with plugin.json. A tabela lista os campos próprios da entrada e os campos de manifesto cuja significação muda em uma entrada.

How an entry combines with plugin.json

Os campos da entrada se aplicam diferentemente a um plugin buscado que tem seu próprio .claude-plugin/plugin.json e a um que não tem:
  • Sem plugin.json: a entrada é o manifesto independentemente de strict. Cada campo de manifesto que a entrada aceita se aplica, incluindo mcpServers, lspServers, userConfig e channels.
  • plugin.json presente: plugin.json é o manifesto. Strict mode decide se os seis campos de componente da entrada, commands, agents, skills, hooks, outputStyles e themes, são combinados com ele ou rejeitados como um conflito. Entrada mcpServers, lspServers, userConfig e channels não se aplicam. Declare-os em plugin.json.

Hooks in an entry

Escreva hooks de entrada como um objeto inline que mapeia nomes de eventos de hook para arrays de matcher. Se você escrever um caminho de arquivo ou um array em vez disso, claude plugin validate o passa. Esses hooks nunca são executados, e Claude Code relata um erro not yet supported in a marketplace entry para o plugin. Coloque hooks baseados em arquivo no próprio hooks/hooks.json do plugin ou plugin.json.

Display fields

Tanto a entrada quanto o próprio plugin.json do plugin podem definir os campos de exibição displayName, description, author, homepage, repository, license e keywords. Os usuários veem esses valores em listagens e detalhes de plugins, antes e depois da instalação:
  • Para um campo que você define na entrada, os usuários veem o valor da entrada, mesmo quando plugin.json define um diferente.
  • Para um campo que a entrada deixa indefinido, os usuários veem o valor de plugin.json.
Antes da instalação, Claude Code pode ler plugin.json apenas para entradas com uma origem de caminho relativo, cujos arquivos de plugin estão dentro do próprio marketplace. Para uma entrada com qualquer outro tipo de origem, os usuários veem apenas os campos próprios da entrada até instalarem o plugin.

Strict mode

strict decide o que acontece quando o plugin buscado tem seu próprio plugin.json e a entrada também declara qualquer um dos campos de componente: commands, agents, skills, hooks, outputStyles ou themes. Com strict: true, o padrão, Claude Code anexa os campos de componente da entrada a plugin.json, exceto hooks, cujos matchers substituem os do manifesto por evento. Com strict: false, uma entrada que declara qualquer campo de componente é um conflito, e o plugin falha ao carregar. A tabela mostra cada combinação de strict, plugin.json e campos de componente da entrada.

Plugin sources

A source de uma entrada de plugin diz onde Claude Code busca esse plugin. É uma string de caminho relativo ou um objeto cuja própria chave source nomeia o tipo, então uma entrada se parece com "source": { "source": "github", "repo": "your-org/formatter" }. A tabela lista cada tipo de origem de plugin e seus campos. Os nomes url e github também são tipos de origem de marketplace, onde url significa um link direto a um arquivo marketplace.json em vez de um repositório git. git existe apenas como uma origem de marketplace, e npm existe como ambos. git-subdir, archive e command existem apenas como origens de plugin. Use um caminho relativo para um plugin em um subdiretório do próprio repositório do marketplace. Use git-subdir para um subdiretório de algum outro repositório. As origens github, url e git-subdir compartilham os campos ref e sha:
  • ref: uma branch ou tag. Padrão para a branch padrão do repositório.
  • sha: um SHA de commit completo de 40 caracteres em minúsculas. Quando você define tanto ref quanto sha, Claude Code faz checkout de sha. Na maioria dos hosts git, incluindo GitHub, GitLab e Bitbucket, isso significa que a instalação é bem-sucedida mesmo se a branch ou tag nomeada por ref foi deletada upstream, desde que o commit ainda seja alcançável do repositório. Alguns servidores, como AWS CodeCommit, não suportam buscar commits por SHA. Nesses servidores, o ref ainda deve existir e o commit fixado deve ser alcançável a partir dele.
Para como cada tipo é buscado, armazenado em cache e versionado, veja Plugin loading reference.

Relative path plugin source

O caminho se resolve a partir da raiz do marketplace. ./plugins/formatter é <root>/plugins/formatter mesmo que o arquivo marketplace esteja em <root>/.claude-plugin/. Um caminho contendo .. falha na validação. Em macOS e Linux, Claude Code recusa um caminho de entrada que contém uma barra invertida em qualquer lugar após o ./ inicial, então escreva o caminho com barras para frente.
Um caminho relativo se resolve apenas quando Claude Code tem os arquivos do marketplace, então verifique o tipo de origem de marketplace:
  • github, git, file e directory: Claude Code tem os arquivos do marketplace.
  • url: Claude Code busca apenas marketplace.json, então caminhos relativos não podem se resolver. Dê a cada plugin uma origem de objeto em vez disso, como github ou git-subdir.
  • settings: caminhos relativos são rejeitados imediatamente.

Git submodules in the marketplace repository

Quando Claude Code clona um repositório de marketplace, ele busca apenas os submódulos git que contêm arquivos de plugin. Requer Claude Code v2.1.295 ou posterior. Versões anteriores buscam todos os submódulos, incluindo os aninhados. Se o repositório tiver um submódulo grande, Claude Code pode então ultrapassar o timeout de clone enquanto o busca. Para um plugin em um subdiretório, como ./plugins/formatter, Claude Code busca um submódulo nestes casos:
  • O plugin está dentro do submódulo: o submódulo é o diretório do plugin ou um diretório acima dele
  • O submódulo está dentro do plugin: o submódulo está em qualquer lugar sob o diretório do plugin
  • Um link simbólico aponta para dentro do submódulo: um link com commit no repositório tem seu destino no submódulo
Um plugin na raiz do marketplace, com "source": "./", recebe todos os submódulos do repositório ou nenhum deles. Claude Code busca todos os submódulos quando um destes aponta para dentro de qualquer submódulo:
  • Um diretório de componente: um diretório na raiz que contém componentes do plugin, como skills/, hooks/ ou bin/
  • Um caminho na configuração do plugin: um caminho na entrada de marketplace do plugin, em seu plugin.json ou em um arquivo de configuração como .mcp.json ou hooks/hooks.json
  • Um link simbólico: um link com commit no repositório
  • Texto nos arquivos do plugin: o caminho de um submódulo, como vendor/tool, escrito em um arquivo de configuração ou em um arquivo sob um diretório de componente
Quando nenhum deles aponta, Claude Code não busca nenhum submódulo para esse plugin. Um repositório que é ao mesmo tempo um projeto e um plugin frequentemente tem submódulos que apenas o build do projeto usa, e essa regra os deixa de fora. Claude Code também busca todos os submódulos quando não consegue determinar quais contêm arquivos de plugin, como:
  • Um SKILL.md na raiz: o repositório inteiro é então o diretório de uma skill
  • Um arquivo que Claude Code não consegue ler: o arquivo do marketplace, um dos arquivos de configuração do plugin ou .gitmodules
Se você adicionar um marketplace com --sparse, ou se sua origem definir sparsePaths, Claude Code faz checkout apenas dos diretórios nomeados ali e não busca nenhum submódulo. Versões anteriores fazem o mesmo. Para manter fora do clone um submódulo que seus plugins não usam, veja Keep unused submodules out of the clone.

Bare names under pluginRoot

Um nome simples é um único nome de diretório sem /, como "formatter". Para escrever nomes simples em vez de caminhos ./, defina metadata.pluginRoot para o diretório que eles se resolvem sob. Com "pluginRoot": "./plugins", "source": "formatter" se resolve para ./plugins/formatter. Requer Claude Code v2.1.239 ou posterior. metadata.pluginRoot tem estes limites:
  • Ele próprio deve ser um caminho relativo dentro do marketplace.
  • Não tem efeito em uma origem que já começa com ./.
  • Uma origem que contém um /, como team-a/formatter, não é um nome simples e ainda precisa do prefixo ./, mesmo quando metadata.pluginRoot está definido.

github plugin source

repo leva owner/repo. ref e sha são opcionais.

url plugin source

url é uma URL git completa: https://, http://, file:// ou git@. Um sufixo .git não é obrigatório, então URLs do Azure DevOps e AWS CodeCommit funcionam como escritas. Este tipo não leva o atalho owner/repo.

git-subdir plugin source

url aceita uma URL git completa ou atalho GitHub owner/repo. path é o subdiretório que contém o plugin, e Claude Code faz checkout apenas desse subdiretório. Sobre uma URL https ou SSH, Claude Code solicita ao servidor um clone parcial, então, a partir de um host que suporta clones parciais, um plugin em um monorepo grande é instalado sem baixar o restante do repositório.

npm plugin source

Uma origem npm leva estes campos:
  • package: um nome de pacote do registro, como @your-org/formatter, um nome com uma versão anexada, como @your-org/formatter@2.0.0, ou um link https para o arquivo tarball do pacote
  • version: uma versão, um intervalo semver ou uma dist-tag, usado quando package é um nome de pacote sem versão anexada. Omita-o para buscar latest
  • registry: uma URL de registro para um pacote que não está no registro padrão
Claude Code busca o pacote com seu cliente npm. Os scripts de instalação do pacote, como preinstall ou postinstall, nunca são executados, e suas dependências não são instaladas durante a busca. Se o pacote tiver um lockfile suportado ao lado de seu package.json, Claude Code instala essas dependências de pacote Node.js em uma etapa separada, também com scripts desabilitados. Claude Code verifica o valor de package antes de buscar qualquer coisa. Um valor recusado faz a instalação falhar com uma mensagem que nomeia o valor e o motivo. Os valores recusados incluem:
  • Um endereço git, uma pasta ou caminho file:, ou um alias npm:: use uma origem github, url ou git-subdir para um repositório git, um caminho relativo para uma pasta no marketplace e o próprio nome do pacote para um alias
  • Um link de tarball em github.com, gist.github.com, gitlab.com, bitbucket.org ou git.sr.ht: recusado mesmo quando o link é um download de release do GitHub, a menos que seja um link do registro npm do GitLab sob gitlab.com/api/v4/
  • Um link de tarball sobre http: recusado a menos que aponte para o próprio registro npm padrão do usuário que está instalando
A URL de registry deve usar https, a menos que seja o próprio registro npm padrão do usuário que está instalando. Com qualquer outro registro http, a instalação falha antes que o npm o contate.

archive plugin source

url deve usar https:// e não pode apontar para um host loopback, link-local ou cloud-metadata. Para os limites de tamanho, timeout, redirecionamento e extração no download, veja Stay within the download limits for hosted files. A raiz do plugin pode estar no topo do zip ou um diretório abaixo. sha256 é o resumo do arquivo como 64 caracteres hexadecimais, maiúsculos ou minúsculos. Quando você o define, Claude Code recusa um download que não corresponde.

command plugin source

Use uma origem command quando uma ferramenta instalada na máquina do usuário produz o diretório do plugin, como um IDE que renderiza seu plugin para a cadeia de ferramentas que o usuário selecionou. Claude Code executa o comando quando o usuário instala ou atualiza o plugin, e novamente uma vez por sessão, então os usuários obtêm a saída alterada da ferramenta sem reinstalar. Uma origem command leva estes campos:
  • command: um comando shell que imprime o caminho absoluto do diretório do plugin como uma linha e sai com 0. Claude Code mostra aos usuários a string inteira para revisão antes de executá-la. Escreva-a como ASCII imprimível, no máximo 500 caracteres, sem uma sequência de quatro ou mais espaços.
  • timeout: um número inteiro de segundos de 1 a 600. Padrão para 60.
  • mode: copy, o padrão, ou link. Veja Copy mode and link mode.
Para como os usuários aceitam o comando, veja Install from your shell. Para o que os usuários veem depois que você o alteram, veja Change the command of a command source. Administradores desligam origens de comando com disableCommandPluginSources.

What the command must do

Escreva o comando para atender a estes requisitos:
  • Shell e diretório de trabalho: Claude Code executa o comando através de sh, ou através de cmd.exe no Windows, a partir do diretório home do usuário. Dê um caminho absoluto ou um comando em PATH.
  • Saída: imprima exatamente uma linha em stdout, o caminho absoluto do diretório do plugin, e saia com 0 dentro de timeout segundos.
  • Conteúdo do diretório: o diretório contém o plugin completo no momento em que o comando sai. O caminho pode diferir de uma execução para a próxima.

Output that fails the install or update

A instalação ou atualização falha quando o comando sai com não-zero, executa mais tempo que timeout, ou imprime qualquer coisa diferente de um caminho absoluto. Também falha quando o diretório impresso é um destes:
  • Sem conteúdo de plugin: o diretório impresso não tem conteúdo de plugin em seu nível superior, como um diretório .claude-plugin/ ou um diretório skills/, commands/, agents/ ou hooks/.
  • O diretório da própria sessão: o diretório impresso é aquele em que Claude Code foi iniciado, ou um de seus pais.
  • Um caminho de rede: no Windows, o caminho impresso é um caminho UNC.
  • Muito grande para copiar: em modo copy, o diretório é maior que 256 MiB ou tem mais de 20.000 entradas.
mode decide se Claude Code copia o diretório impresso ou o usa no lugar:
  • copy: Claude Code copia o diretório para o cache de plugins e deriva a versão do plugin de um hash dos arquivos copiados. Sua ferramenta pode deletar ou reescrever o diretório após o comando sair. Uma re-execução que produz arquivos idênticos conta como atualizado.
  • link: Claude Code preenche a entrada de cache do plugin com um link para cada entrada de nível superior do diretório impresso e carrega os arquivos no lugar. Nada é copiado, conteúdos de arquivo não são hash, e os limites de tamanho não se aplicam. Use-o para um diretório muito grande para copiar, como uma exportação de SDK renderizada.
Um plugin em modo link tem estes requisitos:
  • Mantenha o diretório no lugar: Claude Code carrega o plugin através dos links a cada inicialização, então o diretório impresso deve ficar onde está enquanto o plugin permanecer instalado.
  • Imprima um caminho diferente para sinalizar novo conteúdo: a versão vem do caminho real do diretório impresso e suas entradas de nível superior, não dos arquivos dentro deles.
  • Mantenha symlinks de nível superior dentro do diretório: a instalação falha se uma entrada de nível superior é um symlink que aponta para fora do diretório impresso.
  • Inclua node_modules: Claude Code pula a instalação de dependência de pacote Node.js para um plugin em modo link, então imprima um diretório que já contém os pacotes que o plugin precisa.
  • Sessões iniciadas dentro do diretório: uma sessão iniciada no diretório impresso ou em qualquer lugar abaixo dele não carrega o plugin.
  • Não no Windows: Claude Code recusa instalar um plugin em modo link no Windows. Declare "mode": "copy" lá.

Fontes do marketplace

Uma fonte do marketplace diz onde Claude Code busca um marketplace.json. A CLI constrói uma para você quando você adiciona um marketplace, e você escreve uma você mesmo nas configurações: Os nomes de tipo url, git e github significam algo diferente em uma fonte do marketplace do que em uma fonte de plugin: A tabela lista cada tipo de fonte do marketplace com seus campos, a entrada claude plugin marketplace add que a produz, e o que ela faz em cada uma das três chaves de configurações.

Campos por tipo

A tabela lista cada campo de fonte do marketplace que tem um padrão, uma restrição ou um significado específico para seu tipo.

Valores de fonte válidos apenas em listas de política

hostPattern, pathPattern, skills-dir e a forma owner/* de repo são válidos apenas nas duas listas de política, strictKnownMarketplaces e blockedMarketplaces:
  • hostPattern e pathPattern: expressões regulares que Claude Code testa contra uma fonte antes de buscar dela.
  • skills-dir: não é uma fonte. Se você definir strictKnownMarketplaces sem uma entrada {"source": "skills-dir"}, plugins de diretório de skills param de carregar. Se você bloquear qualquer tipo de personalização com strictPluginOnlyCustomization, eles param de carregar independentemente de a entrada estar presente ou não.
  • owner/*: como um valor repo de github, corresponde a cada repositório sob exatamente esse proprietário do GitHub. Requer Claude Code v2.1.223 ou posterior.
Para ordem de correspondência, semântica exata de ref e receitas, veja Gerenciar plugins para sua organização.

Objetos de fonte nas configurações

Um valor extraKnownMarketplaces é um mapa do nome do marketplace para um objeto com source. Esta entrada registra um marketplace de um repositório git em seu branch main:
strictKnownMarketplaces e blockedMarketplaces são arrays de objetos de fonte. Esta lista de permissão admite um proprietário do GitHub e um host interno:

Validation messages

claude plugin validate <path> leva a raiz do marketplace ou o próprio arquivo marketplace. Para que esse arquivo seja validado como um marketplace em vez de um manifesto de plugin, nomeie-o como marketplace.json. Para códigos de saída e --strict, veja plugin validate. Uma mensagem nomeia uma entrada de plugin por seu índice, escrito como plugins.1.source ou plugins[1].source. Uma mensagem prefixada com um índice de entrada e plugin.json →, como plugins[2] plugin.json →, é sobre os próprios arquivos desse plugin. claude plugin validate relata erros lista essas mensagens com suas correções. Avisos que mencionam nomes de sinalizadores Claude Desktop indicam nomes que Claude Desktop rejeita. A tabela mapeia mensagens de nível de marketplace para o campo que cada uma é sobre.

Invalid input on a source

Invalid input em uma source significa que o objeto não correspondeu a nenhum tipo de origem. Verifique estas causas:
  • Um package npm contendo ..
  • Um tipo de source que não é um das origens de plugin
  • Um tipo conhecido com um campo obrigatório faltando ou do tipo errado, como github sem repo
Um caminho relativo que não começa com ./, diferente de "." ou um nome simples sob metadata.pluginRoot, falha com Invalid string: must start with "./". Antes da v2.1.285, ele imprimia Invalid input como as causas acima.

Failures that validation doesn’t catch

claude plugin validate não relata cada falha. Uma entrada hooks escrita como um caminho de arquivo ou array passa na validação, e o erro aparece apenas quando o plugin carrega, como Hooks in an entry descreve. Erros buscando uma source também aparecem apenas após a instalação, não na validação. claude plugin list mostra um plugin que falhou ao carregar com seu erro, e Troubleshoot plugins cobre as strings de tempo de carregamento.

Next steps