.claude-plugin/plugin.json의 선택적 manifest 키(해당 폴더를 대체하거나 추가함), 그리고 사용자가 보는 이름을 가집니다. 각 키의 전체 필드 테이블은 manifest 참조를 참조하십시오.
이 페이지를 사용하여 이미 로드되는 플러그인에 컴포넌트를 추가합니다.
컴포넌트를 추가한 후, 실행 중인 세션에서 /reload-plugins를 실행하거나 새 세션을 시작하여 Claude Code가 이를 로드하도록 합니다. 로드하기 전에 컴포넌트의 파일을 확인하려면 플러그인 디렉토리에서 셸에서 claude plugin validate .를 실행합니다.
다음 경우는 다른 페이지에서 다룹니다:
- 첫 번째 플러그인 구축: 플러그인 생성으로 시작합니다
- 다른 사람의 플러그인 설치: 플러그인 설치를 참조합니다
- 플러그인의 사용자가 claude.ai 또는 Cowork에 있음: 다른 컴포넌트 세트가 로드됩니다. claude.ai 및 Cowork의 플러그인을 참조합니다
플러그인 디렉토리 탐색
탐색기는 기본 위치에 모든 종류의 컴포넌트 하나씩을 가진 예제 플러그인my-plugin을 보여줍니다:
- review skill과
about명령 - security-review 서브에이전트
- Claude가 파일을 편집한 후 파일을 포맷하는 hook, 그리고 이를 호출하는
scripts/폴더 - 로그 모니터
- 출력 스타일과 색상 테마
- route-audit 워크플로우
hello-plugin실행 파일- 기본 설정
- 로컬 MCP 서버와 Go 언어 서버
각 종류의 컴포넌트 추가
아래의 각 섹션은 한 종류의 컴포넌트를 다룹니다: 플러그인에서 파일이 어디로 가는지, 검증하는 예제, 플러그인이 로드된 후 사용자가 보는 것, 기본 위치를 변경하는 manifest 키. 플러그인이 필요한 것들을 추가합니다; 아무것도 필수가 아닙니다.Skills
skill은 설명이 작업과 일치할 때 Claude가 로드할 수 있는SKILL.md 파일입니다. 사용자는 또한 명령으로 실행할 수 있습니다. 각 skill을 skills/ 아래의 자신의 디렉토리에 저장합니다:
SKILL.md에 description을 제공하여 Claude가 언제 사용할지 알 수 있도록 합니다:
skills/review/SKILL.md
/my-plugin:review는 skill을 실행합니다. 명령 이름과 누가 호출할 수 있는지는 다음 규칙을 따릅니다:
- 명령 이름:
/<plugin>:<directory>, 따라서my-plugin의skills/review/SKILL.md는/my-plugin:review입니다. frontmatter에서name을 설정하면, 마지막 세그먼트를 대체하고 플러그인 접두사는 유지됩니다. skill이 명령 이름을 얻는 방법을 참조합니다 - 누가 호출하는가: Claude, 사용자, 또는 둘 다, frontmatter로 제어됩니다. skill 호출을 제어하는 사람을 참조합니다
skills/ 디렉토리 외부에 skills를 배치할 수도 있습니다:
- 추가 디렉토리:
skillsmanifest 키에 나열합니다. 이들은commands와agents와 달리 기본skills/스캔을 대체하지 않고 추가합니다 - 플러그인 루트의 단일 skill:
skills/디렉토리가 없고skillsmanifest 키가 없으면, 플러그인 루트의SKILL.md는 하나의 skill로 로드됩니다. frontmatter에서name을 설정합니다, 그렇지 않으면 마켓플레이스 설치가 플러그인 이름이 아닌 캐시 디렉토리 이름으로 skill을 이름 지정합니다
CLAUDE.md를 로드하지 않으며, claude plugin validate는 CLAUDE.md at the plugin root is not loaded as project context 경고를 표시합니다.
frontmatter 필드 및 지원 파일의 경우, Skills를 참조합니다.
명령
명령은 사용자가 이름으로 실행하는 단일 Markdown 파일입니다(예:/my-plugin:about).
명령은 이전 형식이며, skills는 새로운 작업을 위해 이를 대체합니다. skill은 같은 방식으로 이름으로 실행되고, 디렉토리에 지원 파일을 포함할 수도 있습니다.
.claude/commands/에서 이동하는 파일에 대해 commands/를 유지합니다.commands/<file>.md에 명령을 저장하면 /<plugin>:<file>이 됩니다. 서브디렉토리는 세그먼트를 추가하므로, commands/db/migrate.md는 /my-plugin:db:migrate입니다.
명령 파일은 skills와 동일한 frontmatter를 사용합니다.
manifest에서 명령 정의
명령 파일을commands/ 이외의 다른 곳에 유지하거나, 별도의 Markdown 파일 없이 plugin.json 내부에 짧은 명령을 정의하려는 경우에만 필요합니다. commands manifest 키를 설정하면, Claude Code는 commands/를 스캔하는 대신 이를 읽습니다. 키는 경로, 경로 배열, 또는 각 명령 이름을 source 파일 또는 인라인 content로 매핑하는 객체를 사용합니다.
이 manifest는 /my-plugin:about을 인라인으로 정의하며, Markdown 파일이 없습니다:
.claude-plugin/plugin.json
/my-plugin:about을 실행하여 로드되었는지 확인합니다.
전체 키 구문의 경우, commands를 참조합니다.
Agents
서브에이전트는 자신의 지침과 컨텍스트 윈도우를 가진 별도의 어시스턴트로, Claude가 작업을 위임할 수 있습니다.agents/ 아래의 각 Markdown 파일은 하나를 정의합니다:
agents/security-reviewer.md
my-plugin:security-reviewer로 이름 지정되고, 사용자는 @agent-my-plugin:security-reviewer로 명시적으로 호출할 수 있습니다. 이름 형식은 <plugin>:<name>이며, <name>은 frontmatter에서 오거나 없을 때 파일 이름에서 옵니다.
agents manifest 키는 agents/ 스캔을 대체합니다.
agents의 서브폴더에서 agents 구성
플러그인 agent 파일을agents/의 서브폴더에 넣을 수 있습니다. Claude Code는 재귀적으로 로드하고 플러그인 이름, 각 서브폴더 이름, 파일 이름을 콜론으로 결합하여 에이전트의 범위 지정 이름을 형성합니다. 예를 들어, my-plugin이라는 플러그인의 agents/review/security.md는 my-plugin:review:security로 로드됩니다. 두 가지 설정이 해당 이름을 변경합니다:
- Frontmatter
name: 파일 이름만 대체하므로,agents/review/security.md의name: audit은my-plugin:review:audit로 로드됩니다 - Manifest
agents필드: 거기에 나열한 파일은 서브폴더 이름 없이 로드되므로,"agents": "./custom/review/security.md"는my-plugin:security로 로드됩니다
플러그인 agents의 Frontmatter 필드
플러그인 agent의 frontmatter는 다음 규칙을 따릅니다:- 지원되는 필드:
name,description,model,effort,maxTurns,tools,disallowedTools,skills,memory,background,omitClaudeMd,isolation,color, 그리고experimental의cacheTtl키. 유일한 유효한isolation값은"worktree"입니다. 각각이 무엇을 하는지는 지원되는 frontmatter 필드를 참조합니다 - 무시되는 필드:
permissionMode,hooks,mcpServers,initialPrompt. agent 파일은 자신의 hooks나 MCP 서버를 추가할 수 없으므로, 이들을 플러그인 hooks와 MCP 서버로 추가합니다 - 파싱되지 않는 Frontmatter: agent는 여전히 모든 필드가 무시된 상태로 로드됩니다. 파일 이름으로 이름 지정되고, 설명은
Agent from my-plugin plugin을 읽습니다. 셸에서claude plugin validate를 실행하여 이러한 파일을 찾습니다
Hooks
hook은 Claude Code의 라이프사이클의 한 지점(예: 모든 파일 편집 후)에서 자동으로 무언가를 실행합니다: 셸 명령, HTTP 요청, MCP 도구 호출, 모델에 대한 프롬프트, 또는 서브에이전트. 플러그인의 hooks를 플러그인 루트의hooks/hooks.json에 저장하고, 최상위 "hooks" 키 아래에, settings.json의 hooks 객체와 동일한 형태로 저장합니다. 이를 통해 기존 설정 hook을 변경 없이 복사할 수 있습니다.
이 hook은 모든 Write 또는 Edit 후에 번들된 스크립트를 실행합니다:
hooks/hooks.json
scripts/format.sh에 스크립트를 저장하고 실행 가능하게 만듭니다.
플러그인을 로드하고 Claude에 파일을 편집하도록 요청합니다. 종료 코드 0인 PostToolUse hook은 트랜스크립트에 아무것도 표시하지 않으므로, 디버그 로깅으로 또는 스크립트 자체가 변경하는 것으로 실행되었는지 확인합니다.
hooks/hooks.json과 hooks manifest 키의 Hooks는 모두 로드됩니다. 모든 이벤트와 그 페이로드의 경우, Hook 이벤트를 참조합니다.
플러그인 hooks가 발생할 때
플러그인의 hooks는 플러그인의 skills나 명령 중 하나가 사용될 때까지 기다리지 않습니다. Claude Code는 세션이 플러그인을 로드할 때 이들을 등록하고, 그 이후로 이벤트에서 발생합니다. hook이 실행되는 시기를 제한하려면,matcher를 좁힙니다.
hook이 발생하지 않으면, 발생하지 않는 hooks를 참조합니다.
환경, 인용, MCP 도구 일치
hook의 환경,${CLAUDE_PLUGIN_ROOT}의 인용, 플러그인의 자신의 MCP 도구에 대한 매처는 다음과 같이 작동합니다:
- 환경: 모든 hook 프로세스는 환경에서
CLAUDE_PLUGIN_ROOT와CLAUDE_PLUGIN_DATA를 받고, 각 사용자 구성 값에 대해CLAUDE_PLUGIN_OPTION_<KEY>를 받으므로, 스크립트는 거기서 이들을 읽을 수 있습니다 - 인용:
command에args가 없으면, 셸을 통해 실행되므로,${CLAUDE_PLUGIN_ROOT}경로를 큰따옴표로 감싸십시오, Hooks 아래의hooks/hooks.json예제처럼, 확장된 경로를 하나의 셸 단어로 유지하려면.args를 대신 전달하면, 각 요소는 셸 없이 하나의 인수로 전달되고 인용이 필요하지 않습니다. exec 형식과 셸 형식을 참조합니다 - 플러그인의 자신의 MCP 도구 일치: 이 플러그인이 선언하는 MCP 서버의 도구는
mcp__plugin_<plugin>_<server>__<tool>로 이름 지정되므로, 매처에 전체 이름을 작성합니다. 서버 이름만의 매처는 발생하지 않습니다. MCP 도구 일치를 참조합니다
MCP 서버
MCP 서버는 Claude에 외부 시스템의 도구를 제공합니다. 플러그인 루트의.mcp.json에서 선언하고, 프로젝트 .mcp.json과 동일한 형태로 선언합니다. 이 .mcp.json은 db라는 하나의 서버를 선언합니다:
.mcp.json
mcpServers 래퍼를 생략하고 db를 파일의 최상위 수준에 넣을 수도 있습니다.
플러그인을 로드하고 /mcp를 실행하여 서버가 plugin:my-plugin:db로 나타나는지 확인합니다.
claude plugin validate는 .mcp.json을 확인하고 Claude Code가 로드 시간에 삭제할 서버 항목을 오류로 보고합니다. Claude Code v2.1.281 이상이 필요합니다.
잘못된 항목이 로드 시간에 나타나는 위치의 경우, 시작하지 않는 MCP 서버를 참조합니다.
mcpServers manifest 키는 인라인 서버 맵, JSON 파일 경로, 또는 이들의 배열을 사용합니다. manifest 서버가 .mcp.json의 것과 동일한 이름을 가지면, manifest 서버가 이를 대체합니다.
claude.ai 및 Cowork의 사용자에게 도달
db 서버 아래의 MCP 서버와 같은 로컬 stdio 서버는 Claude Code에서 실행되고 Claude Desktop 앱에서 머신에서 실행되는 Cowork 세션에서 실행되지만, claude.ai에서는 실행되지 않습니다. 거기에도 사용자에게 도달하려면, https:// URL로 원격 서버를 참조하십시오, 이는 claude.ai와 Cowork이 사용자에게 커넥터로 제공합니다.
서버 이름, 도구 이름, 재로드
서버의 이름, 변수 대체, 재로드 동작은 다음 규칙을 따릅니다:- 서버 이름:
plugin:<plugin>:<server>, 따라서my-plugin의db서버는/mcp에서plugin:my-plugin:db입니다.mcp_toolhook에서 서버를 이름 지정할 때 동일한 형식을 사용합니다 - 도구 이름:
mcp__plugin_<plugin>_<server>__<tool>, 따라서 해당db서버의query도구는mcp__plugin_my-plugin_db__query입니다. 이것은 권한 규칙과 hook 매처에서 사용할 이름입니다 - 대체:
${CLAUDE_PLUGIN_ROOT}와 다른 경로 변수는command,args,env에서 대체됩니다.args에서는 각 요소가 하나의 인수로 전달되므로 인용이 필요하지 않습니다 - 재로드: 사용자가
/reload-plugins를 실행하고 재로드가 적용되면, 구성이 변경되지 않은 서버는 연결을 유지합니다. 구성이 변경된 서버는 재연결되고, 제거한 서버는 연결을 끊습니다
패키지된 MCPB 서버 포함
mcpServers 키는 또한 MCPB 파일로 패키지된 서버를 수용하며, 확장자는 .mcpb 또는 이전 .dxt입니다. 키를 파일로 가리키십시오, 플러그인 내부의 경로 또는 https:// URL:
.claude-plugin/plugin.json
name을 가져옵니다.
전송 및 인증의 경우, MCP를 참조합니다.
LSP 서버
LSP 서버는 Claude에 언어에 대한 진단 및 코드 네비게이션을 제공합니다. 공식 코드 인텔리전스 플러그인이 이미 언어를 다루면, 하나을 작성하는 대신 설치합니다. 그렇지 않으면 플러그인 루트의.lsp.json에서 서버를 선언합니다:
.lsp.json
command는 바이너리의 이름이고, 인수는 args에 있습니다. extensionToLanguage는 최소한 하나의 확장이 필요하며, 각각은 .로 시작합니다.
claude plugin validate는 이 파일을 읽지 않습니다. 항목이 유효하지 않으면, 전체 파일은 로드 시 건너뛰고 Invalid LSP server config for ".lsp.json"이 /plugin Errors 탭에 나타납니다.
플러그인은 연결을 구성하지만 서버 바이너리를 설치하지 않으며, 각 파일 확장자는 하나의 서버를 가집니다:
- 누락된 바이너리: Claude Code는 사용자의
PATH에서 이름으로command를 시작합니다. 바이너리가 없으면, 서버는 시작하지 못하고claude --debug는LSP server <name> failed to start를 로깅합니다 - 확장자 충돌: 두 개의 활성화된 서버가 동일한 확장자를 주장하면, 처음 등록된 것이 해당 파일을 처리하고 다른 것은 이들에 대해 사용되지 않습니다, 서버가 하나의 플러그인에서 오든 두 개에서 오든.
/pluginErrors 탭은 경고LSP server "<name>" is not used for <ext> files를 표시합니다
lspServers manifest 키는 동일한 맵을 인라인으로, JSON 파일 경로로, 또는 이들의 배열로 사용하며, 서버는 .lsp.json의 것에 추가됩니다. manifest 서버가 .lsp.json의 것과 동일한 이름을 가지면, manifest 서버가 이를 대체합니다.
transport, 타임아웃, 재시작, 다른 필드의 경우, lspServers를 참조합니다.
로그 출력을 stdout이 아닌 stderr로 보냅니다. Claude Code는 서버의 stdout을 프로토콜 메시지로만 읽고, 메시지 헤더는 최대 64 KiB, 메시지 본문은 최대 32 MiB를 수용합니다.
Claude Code는 어느 한계를 초과하거나 stdout에 비프로토콜 출력을 작성하는 서버를 연결 해제하고, restartOnCrash와 maxRestarts에 대해 연결 해제를 충돌로 계산합니다. --debug로 실행하면, Claude Code는 원인을 이름 지정하는 오류를 디버그 로그에 작성합니다.
실행 파일
플러그인 루트의bin/ 파일은 플러그인이 활성화되어 있는 동안 Bash 도구의 셸의 PATH에 있으므로, Claude는 이들을 베어 명령으로 실행할 수 있습니다. 실행 가능한 스크립트를 추가합니다:
bin/hello-plugin
chmod +x bin/hello-plugin으로 실행 가능하게 만들고 플러그인을 로드합니다. Claude에 hello-plugin을 실행하도록 요청하면, Bash 도구 결과는 스크립트의 출력을 표시합니다.
플러그인 bin/ 디렉토리는 사용자의 자신의 PATH 항목 뒤에 오므로, 플러그인은 git, ls, 또는 다른 시스템 명령을 섀도우할 수 없습니다.
claude.ai와 Cowork은 최상위 bin/ 디렉토리를 가진 플러그인을 설치하지 않습니다, claude.ai 조직 설정을 통해 배포하는 것을 포함합니다.
기본 설정
플러그인이 활성화되어 있는 동안 적용되는 기본값을 설정하려면, 플러그인 루트에settings.json을 추가하거나, 동일한 객체를 settings manifest 키에 인라인으로 넣습니다. 두 개의 키가 효과를 발휘합니다, agent와 subagentStatusLine, 다른 모든 키는 삭제됩니다.
플러그인의 자신의 agents 중 하나를 주 스레드로 실행하도록 agent를 설정합니다:
settings.json
security-reviewer 에이전트의 시스템 프롬프트와 모델로 응답합니다.
키가 제어하는 모든 것의 경우, agent 설정을 참조합니다.
동일한 키가 하나 이상의 위치에서 설정되면, 이 규칙들이 어느 값이 적용되는지 결정합니다:
- 파일이 manifest보다 우선: 둘 다 존재하고
settings.json이 최소한 하나의 지원되는 키를 설정하면,settings.json이 적용되고 manifest의settings는 무시됩니다 - 사용자 설정이 플러그인 기본값보다 우선: 설정 소스 전체에서, 플러그인 기본값은 가장 낮은 계층이므로, 사용자의 자신의
agent는~/.claude/settings.json에서 당신의 것을 재정의합니다 - 두 개의 플러그인이 동일한 키를 설정: 마지막에 로드된 플러그인의 값이 적용되고,
claude --debug는overrides setting을 로깅합니다
subagentStatusLine 형태의 경우, 서브에이전트 상태 라인을 참조합니다.
테마 및 출력 스타일
플러그인은 색상 테마와 출력 스타일을 포함할 수 있습니다. 둘 다 사용자의 자신의 것과 동일한 선택기에 나타납니다. 둘 중 하나의 경우, manifest 키를 설정하면 폴더 스캔을 대체합니다.
플러그인 테마는 읽기 전용이므로, 사용자가
/theme에서 하나를 편집하면, 편집은 자신의 테마 디렉토리에 복사본으로 저장됩니다.
이 테마는 어두운 사전 설정에서 프롬프트 악센트와 오류 텍스트를 다시 칠합니다:
themes/dracula.json
채널
채널은 채팅 앱과 같은 외부 시스템이 메시지를 세션으로 보낼 수 있게 합니다. 플러그인에서, 채널은 MCP 서버 중 하나와 이를 바인딩하고 자신의 구성을 프롬프트할 수 있는channels 항목입니다. 이 manifest는 채널을 telegram 서버에 바인딩하고 봇 토큰을 요청합니다:
.claude-plugin/plugin.json
server는 mcpServers의 키와 일치해야 합니다. 채널별 userConfig는 최상위 userConfig 키와 동일한 형태를 사용합니다.
서버가 구현해야 하는 것과 사용자가 채널 플러그인을 활성화하는 방법의 경우, 채널 참조의 플러그인으로 패키지를 참조합니다. 필드 테이블의 경우, channels를 참조합니다.
모니터
모니터는 전체 세션 동안 백그라운드에서 실행되는 셸 명령입니다. 이것이 인쇄하는 것은 Claude에 알림으로 도달하므로, Claude는 보도록 요청받지 않고도 로그나 상태 변경에 반응할 수 있습니다. 항목을monitors/monitors.json에 저장합니다:
monitors/monitors.json
- 대화형 세션만: 플러그인 모니터는 대화형 세션에서 시작되고
-p플래그를 사용한 비대화형 모드에서는 시작되지 않습니다. 또한 Monitor 도구가 사용 가능한 곳에서만 시작됩니다 - 사용자 구성 없음:
command는 경로 변수와 환경의${ENV_VAR}을 가져오지만,${user_config.*}는 절대 가져오지 않습니다. 하나을 참조하는 모니터는 시작되지 않으며, 모니터 프로세스는CLAUDE_PLUGIN_OPTION_<KEY>도 받지 않습니다 - 세션 중 비활성화: 세션 중에 플러그인을 비활성화하면, Claude Code는 이미 실행 중인 모니터를 중지하지 않습니다. 세션이 끝날 때 중지됩니다
experimental.monitors manifest 키는 동일한 배열을 인라인으로 또는 JSON 파일 경로로 사용하고, monitors/monitors.json 대신 읽습니다.
when 트리거 및 다른 필드의 경우, monitors를 참조합니다.
사용자에게 구성 값을 요청합니다
플러그인이 사용자로부터 필요로 하는 값을userConfig manifest 키에서 선언하여, 사용자가 settings.json을 자신들이 편집하지 않도록 합니다. 각 옵션은 title을 레이블로 하고 description을 아래에 가진 대화 상자에 나타납니다.
토큰이나 비밀번호의 경우 "sensitive": true를 설정합니다. 대화 상자는 입력을 마스크하고, 값은 settings.json이 아닌 보안 저장소에 저장됩니다.
이 manifest는 엔드포인트와 토큰을 요청합니다:
.claude-plugin/plugin.json
구성 대화 상자가 나타날 때
대화 상자는 대화형/plugin 인터페이스에서만 나타납니다. 사용자가 다음 중 하나를 수행할 때 아직 설정되지 않은 옵션에 대해 열립니다:
/plugin에서 플러그인을 설치합니다- 세션 내에서
/plugin install <plugin>@<marketplace>를 실행합니다 /plugin의 Installed 탭에서 플러그인을 활성화합니다
/plugin configure <plugin>@<marketplace>를 실행합니다.
claude plugin install 셸 명령은 userConfig 값을 프롬프트하지 않습니다. 셸에서 값을 설정하려면, 각각을 --config KEY=VALUE로 전달합니다. 옵션이 설정되지 않으면, 명령은 userConfig options not yet set 라인을 인쇄하여 둘 다 설정하는 방법을 이름 지정합니다. The userConfig dialog never appears는 라인을 인용합니다.
옵션 필드, 각 값이 저장되는 위치, 컴포넌트가 저장된 값을 참조하는 방법, ${user_config.*}를 거부하는 필드의 경우, 사용자 구성을 참조합니다.
플러그인 경로 참조 및 데이터 저장
플러그인이 어디에 설치될지 모르므로, 고정 경로보다는 이 변수를 통해 파일과 데이터를 참조합니다. 이들은 skill, 명령, agent 콘텐츠에서, hook과 모니터 명령에서, MCP와 LSP 서버 구성에서 대체됩니다. 또한 hook, MCP, LSP 프로세스로 내보내집니다:${CLAUDE_PLUGIN_ROOT}: 플러그인의 설치 디렉토리. 각 버전은 자신의 캐시 디렉토리를 가지므로, 플러그인이 업데이트될 때 경로가 변경됩니다. 거기에 상태를 작성하지 마십시오${CLAUDE_PLUGIN_DATA}: 업데이트를 생존하는 디렉토리,node_modules, 가상 환경, 캐시용.~/.claude/plugins/data/<id>/로 해석되고 처음 참조될 때 생성됩니다${CLAUDE_PROJECT_DIR}: 프로젝트 루트, hooks가 받는 동일한 값
<id>는 문자, 숫자, _, - 이외의 모든 문자가 -로 대체된 플러그인 식별자이므로, my-plugin@my-marketplace는 my-plugin-my-marketplace가 됩니다.
Windows에서, 대체된 경로는 셸이 백슬래시를 이스케이프로 읽지 않도록 전진 슬래시를 사용합니다.
데이터 디렉토리에 종속성 설치
마켓플레이스 설치 플러그인의 경우, Claude Code는 플러그인을 캐시할 때 적격 Node.js 패키지 종속성을 자동으로 설치하므로, 자신이 설치할 필요가 없을 수 있습니다. 할 때, 이SessionStart hook은 첫 실행 시 ${CLAUDE_PLUGIN_DATA}에 node_modules를 설치하고 업데이트가 package.json을 변경한 후 다시 설치합니다:
hooks/hooks.json
~/.claude/plugins/data/<id>/node_modules이 존재합니다. MCP 서버는 그 다음 NODE_PATH를 ${CLAUDE_PLUGIN_DATA}/node_modules로 설정할 수 있습니다. 어느 필드가 어느 변수를 대체하는지의 경우, 환경 변수를 참조합니다.
다음 단계
- 플러그인 manifest 참조:
plugin.json필드, 경로 규칙, 표준 레이아웃 - evals로 플러그인 테스트: 추가한 컴포넌트가 Claude의 동작을 의도한 방식으로 변경하는지 확인합니다
- 플러그인 게시 및 배포: 플러그인을 버전 지정하고 마켓플레이스에 넣습니다
- 플러그인 문제 해결: 컴포넌트가 로드되지 않거나 hook이 발생하지 않을 때 수행할 작업