marketplace.json es el archivo que define un marketplace de plugins. Contiene el nombre del marketplace, su propietario y una entrada por cada plugin. La fuente de plugin de cada entrada indica dónde Claude Code obtiene ese plugin.
Una fuente de marketplace es un objeto separado que indica dónde Claude Code obtiene el archivo marketplace en sí. Usted escribe uno en la configuración, o Claude Code construye uno cuando ejecuta claude plugin marketplace add.
Esta referencia es para los mantenedores de marketplace que necesitan un nombre de campo o valor exacto, y para los administradores que necesitan saber qué valores de source son válidos en extraKnownMarketplaces, strictKnownMarketplaces y blockedMarketplaces.
Estos casos se cubren en otras páginas:
- Construir u alojar un marketplace: consulte Crear un marketplace y Alojar y mantener un marketplace
- Recetas de lista de permitidos y lista de bloqueados: consulte Administrar plugins para su organización
- El archivo marketplace: Campos de nivel superior y Entradas de plugins
- El
sourcede una entrada: Fuentes de plugins - Un objeto
sourceen la configuración: Fuentes de marketplace - Salida de
claude plugin validate <path>: Mensajes de validación, que asigna cada mensaje al campo que nombra
Archivo marketplace
Guarde el archivo marketplace en.claude-plugin/marketplace.json en el directorio de su marketplace. Si mantiene el archivo en otro lugar del repositorio, los usuarios tienen que declarar el marketplace en extraKnownMarketplaces con path establecido en su fuente, porque claude plugin marketplace add no tiene opción para ello.
El directorio que contiene .claude-plugin/ se llama raíz del marketplace, y cada fuente de plugin relativa se resuelve desde él, no desde .claude-plugin/.
Cada usuario registra un marketplace por name, por lo que un usuario no puede tener dos marketplaces con el mismo nombre registrados a la vez.
Claude Code ignora una clave de nivel superior desconocida o una clave de entrada de plugin en lugar de rechazarla, por lo que un error tipográfico se carga silenciosamente. claude plugin validate reporta cada clave desconocida como una advertencia.
Nombres reservados
No puede dar a su marketplace ninguno de los siguientes nombres:- Nombres 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-pluginsyclaude-tag-plugins. Reservado a menos que el marketplace provenga de una fuente de marketplacegithubogitbajogithub.com/anthropics/. - Nombres de marketplace comunitario:
claude-community,claude-plugins-communityyhealthcare. Reservado bajo la misma regla que los nombres oficiales. - Nombres de directorio de plugins:
anthropic-plugin-directoryyclaude-plugin-directory. Reservado bajo la misma regla que los nombres oficiales. - Nombres que suplanten un marketplace oficial: nombres como
official-claude-pluginsoclaude-plugins-v2, y cualquier nombre que contenga un carácter no ASCII. El error esMarketplace name impersonates an official Anthropic/Claude marketplace. Un carácter de control o de formato bidireccional en un nombre también reportaMarketplace name cannot contain control or bidirectional-formatting characters. - Otra ortografía de un nombre reservado: un nombre que difiere de un nombre reservado solo por un punto final, o por un símbolo distinto de un guión en lugar de un guión, por lo que
claude.code.pluginscuenta comoclaude-code-plugins.claude plugin validateacepta tal nombre; agregar el marketplace falla conis another spelling of "<reserved>", a reserved marketplace name, y un marketplace ya registrado bajo uno deja de cargarse. Esta verificación requiere Claude Code v2.1.280 o posterior. - Nombres que Claude Code usa para plugins que no provienen de un marketplace:
inlinepara plugins cargados con--plugin-dir,builtinpara plugins integrados,skills-dirpara plugins cargados automáticamente desde.claude/skills/ysyncedpara plugins sincronizados desde su cuenta claude.ai.claude-plugin-testtambién está reservado.skills-dirtambién aparece como{"source": "skills-dir"}enstrictKnownMarketplacesyblockedMarketplaces, descrito bajo Valores de fuente válidos solo en listas de políticas. npm,pip,uv,cargo,githubygh: reservado en cualquier mayúscula. Esta verificación requiere Claude Code v2.1.275 o posterior.- Nombres que comienzan con
claudeai-: reservado para marketplaces alojados en claude.ai.claude plugin marketplace addrechaza cualquier otro marketplace que use uno conCannot add marketplace "<name>": names starting with "claudeai-" are reserved for marketplaces hosted on claude.ai.
Campos de nivel superior
La tabla enumera cada clave que Claude Code lee demarketplace.json. name, owner y plugins son obligatorios.
Entradas de plugins
Cada objeto en el arrayplugins de nivel superior de marketplace.json nombra un plugin e indica dónde obtenerlo. name y source son obligatorios.
Una entrada también acepta cada campo de plugin.json, como description, version, author, commands y hooks. Para cuándo se aplican esos campos, consulte Cómo una entrada se combina con plugin.json.
La tabla enumera los campos propios de la entrada y los campos del manifiesto cuyo significado cambia en una entrada.
Cómo una entrada se combina con plugin.json
Los campos de la entrada se aplican de manera diferente a un plugin obtenido que tiene su propio.claude-plugin/plugin.json y a uno que no:
- Sin
plugin.json: la entrada es el manifiesto independientemente destrict. Cada campo de manifiesto en la entrada se aplica, incluidosmcpServers,lspServers,userConfigychannels. plugin.jsonpresente:plugin.jsones el manifiesto. Modo estricto decide si los seis campos de componente de la entrada,commands,agents,skills,hooks,outputStylesythemes, se combinan con él o se rechazan como un conflicto. La entradamcpServers,lspServers,userConfigychannelsno se aplican. Declárelos enplugin.json.
Hooks en una entrada
Escribahooks de entrada como un objeto en línea que asigne nombres de eventos de hook a arrays de coincidencia. Si escribe una ruta de archivo o un array en su lugar, claude plugin validate lo aprueba. Esos hooks nunca se ejecutan, y Claude Code reporta un error not yet supported in a marketplace entry para el plugin. Coloque hooks basados en archivos en el propio hooks/hooks.json del plugin o plugin.json.
Campos de visualización
Tanto la entrada como el propioplugin.json del plugin pueden establecer los campos de visualización displayName, description, author, homepage, repository, license y keywords. Los usuarios ven estos valores en los listados y detalles de plugins, antes y después de instalar:
- Para un campo que establece en la entrada, los usuarios ven el valor de la entrada, incluso cuando
plugin.jsonestablece uno diferente. - Para un campo que la entrada deja sin establecer, los usuarios ven el valor de
plugin.json.
plugin.json para entradas con una fuente de ruta relativa, cuyos archivos de plugin están dentro del marketplace en sí. Para una entrada con cualquier otro tipo de fuente, los usuarios ven solo los campos propios de la entrada hasta que instalen el plugin.
Modo estricto
strict decide qué sucede cuando el plugin obtenido tiene su propio plugin.json y la entrada también declara cualquiera de los campos de componente: commands, agents, skills, hooks, outputStyles o themes. Con strict: true, el predeterminado, Claude Code añade los campos de componente de la entrada a plugin.json, excepto hooks, cuyos coincidentes reemplazan los del manifiesto por evento. Con strict: false, una entrada que declara cualquier campo de componente es un conflicto, y el plugin falla al cargar. La tabla muestra cada combinación de strict, plugin.json y los campos de componente de la entrada.
Fuentes de plugins
Elsource de una entrada de plugin indica dónde Claude Code obtiene ese plugin. Es una cadena de ruta relativa u un objeto cuya propia clave source nombra el tipo, por lo que una entrada se ve como "source": { "source": "github", "repo": "your-org/formatter" }.
La tabla enumera cada tipo de fuente de plugin y sus campos.
Los nombres
url y github también son tipos de fuente de marketplace, donde url significa un enlace directo a un archivo marketplace.json en lugar de un repositorio git. git existe solo como una fuente de marketplace, y npm existe como ambas. git-subdir, archive y command existen solo como fuentes de plugins.
Use una ruta relativa para un plugin en un subdirectorio del repositorio del marketplace en sí. Use git-subdir para un subdirectorio de algún otro repositorio.
Las fuentes github, url y git-subdir comparten los campos ref y sha:
ref: una rama o etiqueta. Por defecto es la rama predeterminada del repositorio.sha: un SHA de commit completo de 40 caracteres en minúsculas. Cuando establece tantorefcomosha, Claude Code verificasha. En la mayoría de hosts git, incluidos GitHub, GitLab y Bitbucket, esto significa que la instalación tiene éxito incluso si la rama o etiqueta nombrada porrefha sido eliminada posteriormente, siempre que el commit aún sea alcanzable desde el repositorio. Algunos servidores, como AWS CodeCommit, no admiten obtener commits por SHA. En esos servidores, elrefaún debe existir y el commit fijado debe ser alcanzable desde él.
Fuente de plugin de ruta relativa
La ruta se resuelve desde la raíz del marketplace../plugins/formatter es <root>/plugins/formatter aunque el archivo marketplace esté en <root>/.claude-plugin/.
Una ruta que contiene .. falla la validación. En macOS y Linux, Claude Code rechaza una ruta de entrada que contiene una barra invertida en cualquier lugar después del ./ inicial, por lo que escriba la ruta con barras diagonales.
github,git,fileydirectory: Claude Code tiene los archivos del marketplace.url: Claude Code obtiene solomarketplace.json, por lo que las rutas relativas no pueden resolverse. Dé a cada plugin una fuente de objeto en su lugar, comogithubogit-subdir.settings: las rutas relativas se rechazan directamente.
Nombres desnudos bajo pluginRoot
Un nombre desnudo es un nombre de directorio único sin/, como "formatter". Para escribir nombres desnudos en lugar de rutas ./, establezca metadata.pluginRoot en el directorio bajo el cual se resuelven. Con "pluginRoot": "./plugins", "source": "formatter" se resuelve a ./plugins/formatter. Requiere Claude Code v2.1.239 o posterior.
metadata.pluginRoot tiene estos límites:
- Debe ser en sí una ruta relativa dentro del marketplace.
- No tiene efecto en una fuente que ya comienza con
./. - Una fuente que contiene un
/, comoteam-a/formatter, no es un nombre desnudo y aún necesita el prefijo./, incluso cuandometadata.pluginRootestá establecido.
Fuente de plugin github
repo toma owner/repo. ref y sha son opcionales.
Fuente de plugin url
url es una URL git completa: https://, http://, file:// o git@. Un sufijo .git no es obligatorio, por lo que las URL de Azure DevOps y AWS CodeCommit funcionan tal como están escritas. Este tipo no toma el atajo owner/repo.
Fuente de plugin git-subdir
url acepta una URL git completa o el atajo owner/repo de GitHub. path es el subdirectorio que contiene el plugin, y Claude Code descarga solo ese subdirectorio.
Fuente de plugin npm
Una fuentenpm toma estos campos:
package: un nombre de paquete, o un nombre con alcance como@your-org/formatterversion: una versión o rangoregistry: una URL de registro para un paquete que no está en el registro predeterminado
preinstall o postinstall, nunca se ejecutan, y sus dependencias no se instalan durante la obtención. Si el paquete tiene un archivo de bloqueo compatible junto a su package.json, Claude Code instala esas dependencias de paquetes Node.js en un paso separado, también con scripts deshabilitados.
Fuente de plugin archive
url debe usar https:// y no puede apuntar a un host de loopback, link-local o cloud-metadata.
La raíz del plugin puede estar en la parte superior del zip o un directorio hacia abajo.
sha256 es el resumen del archivo como 64 caracteres hexadecimales, mayúsculas o minúsculas. Cuando lo establece, Claude Code rechaza una descarga que no coincida.
Fuente de plugin command
Use una fuentecommand cuando una herramienta instalada en la máquina del usuario produce el directorio del plugin, como un IDE que renderiza su plugin para la cadena de herramientas que el usuario ha seleccionado. Claude Code ejecuta el comando cuando el usuario instala o actualiza el plugin, y nuevamente una vez por sesión, por lo que los usuarios obtienen la salida cambiada de la herramienta sin reinstalar.
Una fuente command toma estos campos:
command: un comando de shell que imprime la ruta absoluta del directorio del plugin como una línea y sale con 0. Claude Code muestra a los usuarios la cadena completa para revisión antes de ejecutarla. Escríbala como ASCII imprimible, como máximo 500 caracteres, sin una ejecución de cuatro o más espacios.timeout: un número entero de segundos de 1 a 600. Por defecto es 60.mode:copy, el predeterminado, olink. Consulte Modo de copia y modo de enlace.
disableCommandPluginSources.
Qué debe hacer el comando
Escriba el comando para cumplir con estos requisitos:- Shell y directorio de trabajo: Claude Code ejecuta el comando a través de
sh, o a través decmd.exeen Windows, desde el directorio de inicio del usuario. Dé una ruta absoluta o un comando enPATH. - Salida: imprima exactamente una línea en stdout, la ruta absoluta del directorio del plugin, y salga con 0 dentro de
timeoutsegundos. - Contenido del directorio: el directorio contiene el plugin completo en el momento en que el comando sale. La ruta puede diferir de una ejecución a la siguiente.
Salida que falla la instalación o actualización
La instalación o actualización falla cuando el comando sale con un código distinto de cero, se ejecuta más tiempo quetimeout, o imprime algo que no sea una ruta absoluta. También falla cuando el directorio impreso es uno de estos:
- Sin contenido de plugin: el directorio impreso no tiene contenido de plugin en su nivel superior, como un directorio
.claude-plugin/o un directorioskills/,commands/,agents/ohooks/. - El directorio de la propia sesión: el directorio impreso es el en el que se inició Claude Code, o uno de sus padres.
- Una ruta de red: en Windows, la ruta impresa es una ruta UNC.
- Demasiado grande para copiar: en modo de copia, el directorio es más grande que 256 MiB o tiene más de 20,000 entradas.
Modo de copia y modo de enlace
mode decide si Claude Code copia el directorio impreso o lo usa en su lugar:
copy: Claude Code copia el directorio en el caché de plugins y deriva la versión del plugin de un hash de los archivos copiados. Su herramienta puede eliminar o reescribir el directorio después de que el comando salga. Una re-ejecución que produce archivos idénticos cuenta como actualizado.link: Claude Code llena la entrada de caché del plugin con un enlace a cada entrada de nivel superior del directorio impreso y carga los archivos en su lugar. Nada se copia, los contenidos de los archivos no se hashean, y los límites de tamaño no se aplican. Úselo para un directorio demasiado grande para copiar, como una exportación de SDK renderizada.
- Mantenga el directorio en su lugar: Claude Code carga el plugin a través de los enlaces en cada inicio, por lo que el directorio impreso debe permanecer donde está mientras el plugin permanezca instalado.
- Imprima una ruta diferente para señalar contenido nuevo: la versión proviene de la ruta real del directorio impreso y sus entradas de nivel superior, no de los archivos dentro de ellas.
- Mantenga los enlaces simbólicos de nivel superior dentro del directorio: la instalación falla si una entrada de nivel superior es un enlace simbólico que apunta fuera del directorio impreso.
- Incluya
node_modules: Claude Code omite la instalación de dependencias de paquetes Node.js para un plugin en modo de enlace, por lo que imprima un directorio que ya contenga los paquetes que el plugin necesita. - Sesiones iniciadas dentro del directorio: una sesión iniciada en el directorio impreso o en cualquier lugar debajo de él no carga el plugin.
- No en Windows: Claude Code rechaza instalar un plugin en modo de enlace en Windows. Declare
"mode": "copy"allí.
Fuentes de marketplace
Una fuente de marketplace indica dónde Claude Code obtiene unmarketplace.json. La CLI construye uno para usted cuando agrega un marketplace, y usted escribe uno en la configuración:
claude plugin marketplace add: Claude Code construye la fuente a partir de la cadena que pasa.extraKnownMarketplaces: usted escribe la fuente en sí como el objetosource.strictKnownMarketplacesyblockedMarketplaces: los administradores escriben fuentes en estas dos listas de políticas.strictKnownMarketplaceses la lista de permitidos yblockedMarketplaceses la lista de bloqueados.
url, git y github significan algo diferente en una fuente de marketplace que en una fuente de plugin:
La tabla enumera cada tipo de fuente de marketplace con sus campos, la entrada de
claude plugin marketplace add que lo produce, y qué hace en cada una de las tres claves de configuración.
Campos por tipo
La tabla enumera cada campo de fuente de marketplace que tiene un predeterminado, una restricción o un significado específico de su tipo.Valores de fuente válidos solo en listas de políticas
hostPattern, pathPattern, skills-dir y la forma owner/* de repo son válidos solo en las dos listas de políticas, strictKnownMarketplaces y blockedMarketplaces:
hostPatternypathPattern: expresiones regulares que Claude Code prueba contra una fuente antes de obtener de ella.skills-dir: no es una fuente. Si establecestrictKnownMarketplacesen absoluto, los plugins del directorio de skills dejan de cargarse hasta que agregue{"source": "skills-dir"}a esa lista.owner/*: como un valorrepodegithub, coincide con cada repositorio bajo exactamente ese propietario de GitHub. Requiere Claude Code v2.1.223 o posterior.
ref y recetas, consulte Administrar plugins para su organización.
Objetos de fuente en la configuración
Un valorextraKnownMarketplaces es un mapa de nombre de marketplace a un objeto con source. Esta entrada registra un marketplace desde un repositorio git en su rama main:
strictKnownMarketplaces y blockedMarketplaces son arrays de objetos de fuente. Esta lista de permitidos admite un propietario de GitHub y un host interno:
Mensajes de validación
claude plugin validate <path> toma la raíz del marketplace o el archivo marketplace en sí. Imprime errores y advertencias. Para códigos de salida y --strict, consulte plugin validate.
Un mensaje nombra una entrada de plugin por su índice, escrito como plugins.1.source o plugins[1].source.
Un mensaje prefijado con un índice de entrada y plugin.json →, como plugins[2] plugin.json →, es sobre los propios archivos de ese plugin. claude plugin validate reporta errores enumera esos mensajes con sus correcciones.
Las advertencias que mencionan nombres de banderas de Claude Desktop señalan nombres que Claude Code acepta pero Claude Desktop rechaza, porque las reglas de nombre de Claude Desktop son más estrictas.
La tabla asigna mensajes de nivel de marketplace al campo sobre el que trata cada uno.
Entrada inválida en una fuente
Invalid input en un source significa que el objeto no coincidió con ningún tipo de fuente. Verifique estas causas:
- Una ruta relativa que no comienza con
./, que no sea"."o un nombre desnudo bajometadata.pluginRoot - Un
packagenpm que contiene.. - Un tipo de
sourceque no es uno de las fuentes de plugins - Un tipo conocido con un campo obligatorio faltante o de tipo incorrecto, como
githubsinrepo
Fallos que la validación no detecta
claude plugin validate no reporta cada fallo. Un hooks de entrada escrito como una ruta de archivo o array aprueba la validación, y el error aparece solo cuando el plugin se carga, como describe Hooks en una entrada. Los errores al obtener un source también aparecen solo después de instalar, no en la validación.
claude plugin list muestra un plugin que falló al cargar con su error, y Solucionar problemas de plugins cubre las cadenas de tiempo de carga.
Próximos pasos
- Crear un marketplace: construya un marketplace a partir de estos campos e instale desde él localmente
- Alojar y mantener un marketplace: dónde poner el archivo y cómo los usuarios reciben cambios
- Referencia de manifiesto de plugin: los campos
plugin.jsonque una entrada puede anular - Administrar plugins para su organización: recetas de lista de permitidos y lista de bloqueados que usan estos valores de fuente