marketplace.json은 플러그인 마켓플레이스를 정의하는 파일입니다. 마켓플레이스의 이름, 소유자, 그리고 플러그인당 하나의 항목을 포함합니다. 각 항목의 플러그인 소스는 Claude Code가 해당 플러그인을 어디서 가져오는지를 나타냅니다.
마켓플레이스 소스는 Claude Code가 마켓플레이스 파일 자체를 어디서 가져오는지를 나타내는 별도의 객체입니다. 설정에서 작성하거나, claude plugin marketplace add를 실행할 때 Claude Code가 빌드합니다.
이 참조는 정확한 필드 이름이나 값이 필요한 마켓플레이스 유지보수자와 extraKnownMarketplaces, strictKnownMarketplaces, blockedMarketplaces에서 어떤 source 값이 유효한지 알아야 하는 관리자를 위한 것입니다.
다음 경우는 다른 페이지에서 다룹니다:
- 마켓플레이스 구축 또는 호스팅: 마켓플레이스 만들기 및 마켓플레이스 호스팅 및 유지보수 참조
- 허용 목록 및 차단 목록 레시피: 조직의 플러그인 관리 참조
- 마켓플레이스 파일: 최상위 필드 및 플러그인 항목
- 항목의
source: 플러그인 소스 - 설정의
source객체: 마켓플레이스 소스 claude plugin validate <path>의 출력: 검증 메시지 - 각 메시지를 이름이 지정된 필드에 매핑합니다
마켓플레이스 파일
마켓플레이스 파일을 마켓플레이스 디렉토리의.claude-plugin/marketplace.json에 저장합니다. 파일을 저장소의 다른 위치에 보관하는 경우, 사용자는 source에 path를 설정하여 extraKnownMarketplaces에서 마켓플레이스를 선언해야 합니다. claude plugin marketplace add에는 이에 대한 옵션이 없기 때문입니다.
.claude-plugin/을 포함하는 디렉토리를 마켓플레이스 루트라고 하며, 모든 상대 플러그인 소스는 .claude-plugin/이 아닌 마켓플레이스 루트에서 확인됩니다.
각 사용자는 name당 하나의 마켓플레이스를 등록하므로, 사용자는 동시에 같은 이름의 두 마켓플레이스를 등록할 수 없습니다.
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로 계산됩니다.claude plugin validate는 이러한 이름을 수락합니다. 마켓플레이스 추가는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은{"source": "skills-dir"}로도strictKnownMarketplaces및blockedMarketplaces에 나타나며, 소스 값이 정책 목록에서만 유효함에서 설명합니다. npm,pip,uv,cargo,github,gh: 모든 대소문자로 예약됨. 이 확인에는 Claude Code v2.1.275 이상이 필요합니다.claudeai-로 시작하는 이름: claude.ai에서 호스팅되는 마켓플레이스를 위해 예약됨.claude plugin marketplace add는Cannot add marketplace "<name>": names starting with "claudeai-" are reserved for marketplaces hosted on claude.ai로 이를 사용하는 다른 마켓플레이스를 거부합니다.
최상위 필드
표는 Claude Code가marketplace.json에서 읽는 모든 키를 나열합니다. name, owner, plugins는 필수입니다.
플러그인 항목
marketplace.json의 최상위 plugins 배열의 각 객체는 플러그인의 이름을 지정하고 가져올 위치를 나타냅니다. name 및 source는 필수입니다.
항목은 또한 description, version, author, commands, hooks와 같은 모든 plugin.json 필드를 수락합니다. 이러한 필드가 적용되는 경우는 항목이 plugin.json과 결합되는 방식을 참조하세요.
표는 항목의 자체 필드와 항목에서 의미가 변경되는 매니페스트 필드를 나열합니다.
항목이 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를 훅 이벤트 이름을 매처 배열에 매핑하는 인라인 객체로 작성하세요. 파일 경로나 배열을 작성하면, 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값을 봅니다.
plugin.json을 읽을 수 있습니다. 다른 소스 유형을 가진 항목의 경우, 사용자는 플러그인을 설치할 때까지 항목의 자체 필드만 봅니다.
엄격 모드
strict는 가져온 플러그인이 자체 plugin.json을 가지고 있고 항목도 구성 요소 필드 중 하나를 선언할 때 어떤 일이 발생하는지 결정합니다: commands, agents, skills, hooks, outputStyles, themes. strict: true(기본값)일 때, Claude Code는 항목의 구성 요소 필드를 plugin.json에 추가합니다. hooks 제외하고, 그 매처는 매니페스트의 이벤트별 매처를 대체합니다. strict: false일 때, 구성 요소 필드를 선언하는 항목은 충돌이며, 플러그인이 로드되지 않습니다. 표는 strict, plugin.json, 항목의 구성 요소 필드의 각 조합을 보여줍니다.
플러그인 소스
플러그인 항목의source는 Claude Code가 해당 플러그인을 어디서 가져오는지를 나타냅니다. 상대 경로 문자열이거나 자체 source 키가 유형을 지정하는 객체이므로, 항목은 "source": { "source": "github", "repo": "your-org/formatter" }와 같은 형태입니다.
아래 표는 각 플러그인 소스 유형과 해당 필드를 나열합니다.
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가 여전히 존재해야 하고 고정된 커밋이 이로부터 도달 가능해야 합니다.
상대 경로 플러그인 소스
경로는 마켓플레이스 루트에서 확인됩니다../plugins/formatter는 마켓플레이스 파일이 <root>/.claude-plugin/에 있더라도 <root>/plugins/formatter입니다.
..를 포함하는 경로는 검증에 실패합니다. macOS와 Linux에서 Claude Code는 선행 ./ 이후에 백슬래시를 포함하는 항목 경로를 거부하므로 경로를 슬래시로 작성합니다.
github,git,file,directory: Claude Code가 마켓플레이스의 파일을 가지고 있습니다.url: Claude Code는marketplace.json만 가져오므로 상대 경로를 확인할 수 없습니다. 각 플러그인에github또는git-subdir과 같은 객체 소스를 제공합니다.settings: 상대 경로는 완전히 거부됩니다.
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는 선택 사항입니다.
url 플러그인 소스
url은 전체 git URL입니다: https://, http://, file://, 또는 git@. .git 접미사는 필요하지 않으므로 Azure DevOps 및 AWS CodeCommit URL이 그대로 작동합니다. 이 유형은 owner/repo 단축형을 사용하지 않습니다.
git-subdir 플러그인 소스
url은 전체 git URL 또는 GitHub owner/repo 단축형을 허용합니다. path는 플러그인을 보유한 하위 디렉토리이며, Claude Code는 해당 하위 디렉토리만 다운로드합니다.
npm 플러그인 소스
npm 소스는 다음 필드를 사용합니다:
package: 패키지 이름 또는@your-org/formatter와 같은 스코프된 이름version: 버전 또는 범위registry: 기본 레지스트리에 없는 패키지의 레지스트리 URL
preinstall 또는 postinstall)는 절대 실행되지 않으며, 해당 종속성은 가져오기 중에 설치되지 않습니다. 패키지의 package.json 옆에 지원되는 lockfile이 있으면 Claude Code는 스크립트도 비활성화된 상태에서 별도의 단계에서 해당 Node.js 패키지 종속성을 설치합니다.
archive 플러그인 소스
url은 https://를 사용해야 하며 루프백, 링크-로컬 또는 클라우드 메타데이터 호스트를 가리킬 수 없습니다.
플러그인 루트는 zip의 맨 위 또는 한 디렉토리 아래에 있을 수 있습니다.
sha256은 아카이브의 다이제스트로 64개의 16진 문자(대문자 또는 소문자)입니다. 이를 설정하면 Claude Code는 일치하지 않는 다운로드를 거부합니다.
command 플러그인 소스
사용자의 머신에 설치된 도구가 플러그인 디렉토리를 생성할 때(예: 사용자가 선택한 도구 체인에 대해 플러그인을 렌더링하는 IDE)command 소스를 사용합니다. Claude Code는 사용자가 플러그인을 설치하거나 업데이트할 때 명령을 실행하고, 세션당 한 번 다시 실행하므로 사용자는 재설치 없이 도구의 변경된 출력을 얻습니다.
command 소스는 다음 필드를 사용합니다:
command: 플러그인 디렉토리의 절대 경로를 한 줄로 출력하고 0으로 종료하는 셸 명령입니다. Claude Code는 실행하기 전에 사용자에게 전체 문자열을 검토하도록 표시합니다. 인쇄 가능한 ASCII로 작성하고, 최대 500자이며, 4개 이상의 연속 공백이 없어야 합니다.timeout: 1에서 600 사이의 전체 초 수입니다. 기본값은 60입니다.mode:copy(기본값) 또는link입니다. 복사 모드 및 링크 모드를 참조하세요.
disableCommandPluginSources로 명령 소스를 비활성화합니다.
명령이 수행해야 할 작업
명령이 다음 요구 사항을 충족하도록 작성합니다:- 셸 및 작업 디렉토리: Claude Code는 사용자의 홈 디렉토리에서
sh또는 Windows의cmd.exe를 통해 명령을 실행합니다. 절대 경로 또는PATH의 명령을 제공합니다. - 출력: stdout에 정확히 한 줄(플러그인 디렉토리의 절대 경로)을 출력하고
timeout초 내에 0으로 종료합니다. - 디렉토리 내용: 디렉토리는 명령이 종료될 때까지 완전한 플러그인을 보유합니다. 경로는 실행마다 다를 수 있습니다.
설치 또는 업데이트를 실패하게 하는 출력
명령이 0이 아닌 값으로 종료되거나,timeout보다 오래 실행되거나, 하나의 절대 경로 이외의 것을 출력할 때 설치 또는 업데이트가 실패합니다. 또한 인쇄된 디렉토리가 다음 중 하나일 때도 실패합니다:
- 플러그인 콘텐츠 없음: 인쇄된 디렉토리의 최상위 수준에
.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에서 링크 모드 플러그인 설치를 거부합니다. 거기서
"mode": "copy"를 선언합니다.
마켓플레이스 소스
마켓플레이스 소스는 Claude Code가marketplace.json을 어디서 가져오는지를 나타냅니다. CLI는 마켓플레이스를 추가할 때 하나를 빌드하고, 설정에서 직접 작성합니다:
claude plugin marketplace add: Claude Code는 전달한 문자열에서 소스를 빌드합니다.extraKnownMarketplaces:source객체로 직접 작성합니다.strictKnownMarketplaces및blockedMarketplaces: 관리자가 이 두 정책 목록에 소스를 작성합니다.strictKnownMarketplaces는 허용 목록이고blockedMarketplaces는 차단 목록입니다.
url, git, github 유형 이름은 플러그인 소스에서와 마켓플레이스 소스에서 다른 의미를 가집니다:
표는 모든 마켓플레이스 소스 유형을 필드, 생성하는
claude plugin marketplace add 입력, 그리고 세 가지 설정 키 각각에서의 작동 방식과 함께 나열합니다.
유형별 필드
표는 기본값, 제약 또는 유형별 의미를 가진 각 마켓플레이스 소스 필드를 나열합니다.정책 목록에서만 유효한 소스 값
hostPattern, pathPattern, skills-dir, repo의 owner/* 형식은 두 정책 목록인 strictKnownMarketplaces 및 blockedMarketplaces에서만 유효합니다:
hostPattern및pathPattern: Claude Code가 가져오기 전에 소스에 대해 테스트하는 정규 표현식.skills-dir: 소스가 아닙니다.strictKnownMarketplaces를 설정하면, skills-directory 플러그인은 해당 목록에{"source": "skills-dir"}을 추가할 때까지 로드를 중지합니다.owner/*: 마켓플레이스 소스의githubrepo값으로, 정확히 해당 GitHub 소유자 아래의 모든 저장소와 일치합니다. Claude Code v2.1.223 이상 필요.
ref 의미론, 레시피는 조직의 플러그인 관리를 참조하세요.
설정의 소스 객체
extraKnownMarketplaces 값은 마켓플레이스 이름에서 source를 가진 객체로의 맵입니다. 이 항목은 main 분기의 git 저장소에서 마켓플레이스를 등록합니다:
strictKnownMarketplaces 및 blockedMarketplaces는 소스 객체의 배열입니다. 이 허용 목록은 하나의 GitHub 소유자와 하나의 내부 호스트를 허용합니다:
유효성 검사 메시지
claude plugin validate <path>는 마켓플레이스 루트 또는 마켓플레이스 파일 자체를 사용합니다. 오류 및 경고를 출력합니다. 종료 코드 및 --strict에 대해서는 plugin validate를 참조하십시오.
메시지는 플러그인 항목을 인덱스로 이름 지으며, plugins.1.source 또는 plugins[1].source로 작성됩니다.
항목 인덱스 및 plugin.json →으로 시작하는 메시지(예: plugins[2] plugin.json →)는 해당 플러그인의 자체 파일에 관한 것입니다. claude plugin validate 오류 보고에서 이러한 메시지와 해결 방법을 나열합니다.
Claude Desktop 플래그 이름을 언급하는 경고는 Claude Code가 허용하지만 Claude Desktop이 거부하는 것입니다. Claude Desktop의 이름 규칙이 더 엄격하기 때문입니다.
표는 마켓플레이스 수준의 메시지를 각 메시지가 관련된 필드에 매핑합니다.
source의 잘못된 입력
source의 Invalid input은 객체가 어떤 source 유형과도 일치하지 않음을 의미합니다. 다음 원인을 확인하십시오:
./로 시작하지 않는 상대 경로("."또는 metadata.pluginRoot 아래의 베어 이름 제외)..를 포함하는npmpackage- 플러그인 source 중 하나가 아닌
source유형 - 필수 필드가 누락되었거나 잘못된 유형의 알려진 유형(예:
repo없는github)
유효성 검사가 포착하지 못하는 오류
claude plugin validate는 모든 오류를 보고하지 않습니다. 파일 경로 또는 배열로 작성된 항목 hooks는 유효성 검사를 통과하며, 오류는 플러그인이 로드될 때만 나타나며, 항목의 Hooks에서 설명합니다. source를 가져오는 오류도 유효성 검사가 아닌 설치 후에만 나타납니다.
claude plugin list는 로드에 실패한 플러그인을 오류와 함께 표시하며, 플러그인 문제 해결에서 로드 시간 문자열을 다룹니다.
다음 단계
- 마켓플레이스 만들기: 이러한 필드에서 마켓플레이스를 빌드하고 로컬에서 설치
- 마켓플레이스 호스팅 및 유지보수: 파일을 어디에 넣을지, 사용자가 변경 사항을 받는 방식
- 플러그인 매니페스트 참조: 항목이 재정의할 수 있는
plugin.json필드 - 조직의 플러그인 관리: 이러한 소스 값을 사용하는 허용 목록 및 차단 목록 레시피