Claude Code 공식 마켓플레이스 플러그인 315개 전수 조사 — 세션을 시작할 때마다 명령을 실행하는 플러그인 36개, 정확한 버전이 고정되지 않은 MCP 서버 30개
외부 플러그인은 커밋으로 고정돼 있지만 한 달 전에도 있던 238개 중 71%의 고정 커밋이 바뀌었고, 2개는 구성요소 없이 설치됩니다
목차
Claude Code에는 Anthropic이 운영하는 공식 플러그인 마켓플레이스(claude-plugins-official)가 기본으로 등록돼 있습니다. 2026-10-02 기준 커밋(d182ca4)에 실린 플러그인 315개를 모두 내려받아, 설치하면 무엇이 실행되고 무엇이 사전 승인되는지 직접 집계했습니다. 외부 저장소에서 오는 262개는 전부 커밋 해시로 고정돼 있습니다. 그러나 MCP 서버가 실행 시점에 받는 패키지는 이 고정 범위 밖이고, 마켓플레이스의 고정 커밋 자체도 한 달 전에도 있던 외부 플러그인 238개 중 71%에서 바뀌었습니다.
핵심 요약
훅이 있는 61개 중, 직접 집계
@latest 20 · 버전 없음 9 · 범위 1
238개 중 169개, 9월 2일~10월 2일
allowed-tools를 직접 읽고 자동 업데이트를 따로 관리해야 합니다.
먼저 알아 둘 용어
- 플러그인은 스킬·명령·서브에이전트·훅·MCP 서버를 한 묶음으로 설치하는 단위입니다. 마켓플레이스는 플러그인 목록(
marketplace.json)을 담은 저장소입니다. Claude Code는 대화형 세션을 처음 열 때 공식 마켓플레이스를 자동으로 등록합니다. - 훅(hook)은 세션 시작, 도구 호출 전후 같은 정해진 시점에 Claude Code가 자동으로 실행하는 셸 명령입니다. 모델이 고르는 것이 아니라 시점이 오면 실행됩니다.
- MCP 서버는 Claude에게 도구를 제공하는 프로그램입니다. 내 컴퓨터에서 프로세스로 실행되는 로컬(stdio) 서버와, 개발사 서버에 HTTP로 붙는 원격 서버가 있습니다.
- 커밋 해시 고정은 저장소의 특정 커밋 하나(40자 해시)를 지정해, 그 커밋의 파일만 설치되게 하는 방식입니다.
allowed-tools는 스킬·명령 파일 헤더에 적는 항목으로, 그 스킬을 부른 턴 동안 적힌 도구를 사용자 확인 없이 쓰게 합니다.
조사 방법
2026-10-05에 공식 마켓플레이스 저장소(anthropics/claude-plugins-official)의 main 브랜치를 받았습니다. 받은 시점의 최신 커밋은 d182ca4(2026-10-02)이고, 목록에는 플러그인 315개가 있습니다.
| 출처 | 플러그인 수 | 내용물이 있는 곳 |
|---|---|---|
Anthropic이 만든 플러그인(plugins/) | 39 | 마켓플레이스 저장소 안 |
파트너 플러그인(external_plugins/) | 14 | 마켓플레이스 저장소 안 |
| 외부 저장소 플러그인 | 262 | GitHub 저장소 227곳. 목록에 적힌 커밋 해시로 받음 |
외부 저장소 플러그인은 목록에 적힌 커밋 그대로 내려받았습니다(저장소·커밋 조합 230개). 그다음 두 가지 방법으로 셌습니다.
- 정적 집계: 플러그인마다
hooks/hooks.json,.mcp.json, 매니페스트(plugin.json), 스킬·명령 파일 헤더의allowed-tools를 읽었습니다. 기본 위치와 매니페스트 항목의 해석은 공식 플러그인 참조 문서를 따랐습니다. - 공식 CLI 집계: 공식 보안 문서가 안내하는
claude plugin details로 315개 전부의 구성요소 목록과 토큰 추정치를 받았습니다. 301개는claude --plugin-dir <폴더> plugin details로 설치 없이 읽었고, 마켓플레이스 항목 자체에 구성요소(LSP 서버·스킬 경로)를 적은strict: false항목 14개와 아래 9장의 4개는 격리된 설정 폴더(CLAUDE_CONFIG_DIR)에 실제로 설치해 읽었습니다.
두 방법에서 훅이 있는 플러그인(61개)과 MCP 서버가 있는 플러그인(171개, 서버 217개)은 정확히 같았습니다. 스킬은 CLI가 명령까지 스킬로 합쳐 세므로 CLI 수치를 씁니다. 설치나 집계 과정에서 훅이나 MCP 서버를 실행하지는 않았습니다. 실행 시 동작은 코드를 읽어 판단했으며, 실제로 실행해 본 것은 아닙니다.
| 구성요소 | 가진 플러그인 | 개수 |
|---|---|---|
| 스킬(명령 포함) | 265 | 2,758 |
| MCP 서버 | 171 | 217 (원격 142 · 로컬 75) |
| 훅 | 61 | 224 (셸 명령 222 · 프롬프트 2) |
| 서브에이전트 | 37 | 116 |
| LSP 서버 | 14 | 14 |
bin/ 실행 파일 폴더 | 2 | clay, salesforce-development |
훅 개수는 정적 집계의 명령 단위입니다. CLI의 "Hooks (N)"은 명령 수가 아니라 이벤트 종류 수를 셉니다. 정적 집계 2,978개와 CLI 2,758개의 스킬 수 차이는 CLI가 실제로 불러오는 경로만 세기 때문입니다.
커밋은 고정돼 있지만, 한 달 사이 238개 중 169개의 고정 커밋이 바뀌었습니다
외부 저장소 플러그인 262개는 하나도 빠짐없이 커밋 해시(sha)가 적혀 있습니다. 공식 마켓플레이스 참조 문서에 따르면 sha가 있으면 Claude Code는 그 커밋을 받습니다. 저장소 주인이 나중에 같은 브랜치에 코드를 올려도, 마켓플레이스가 고정 커밋을 바꾸지 않는 한 사용자에게 전달되지 않습니다.
그런데 고정 커밋 자체가 자주 바뀝니다. 마켓플레이스 저장소 이력에서 2026-09-02 커밋(fd5820a)과 2026-10-02 커밋(d182ca4)의 목록을 비교했습니다.
| 항목 | 값 |
|---|---|
그 사이 marketplace.json을 바꾼 커밋 | 731개 (그중 388개는 github-actions[bot]의 "bump" 커밋) |
| 플러그인 수 | 291 → 315 (24개 추가, 삭제 0) |
| 두 시점에 모두 있던 외부 플러그인 중 고정 커밋이 바뀐 것 | 238개 중 169개 (71.0%) |
공식 문서는 claude-plugins-official을 자동 업데이트가 기본으로 켜진 마켓플레이스로 분류합니다. 자동 업데이트가 켜져 있으면 세션이 시작된 뒤 마켓플레이스를 새로 받아 설치된 플러그인의 디스크 사본을 갱신하고, 다음 세션부터 새 버전을 불러옵니다. 공식 보안 문서도 "자동 업데이트가 켜져 있으면 검토한 파일이 디스크에서 바뀔 수 있다"고 적습니다.
실행할 때 받는 패키지는 커밋 고정 범위에 포함되지 않습니다
로컬 MCP 서버 75개 가운데 51개는 플러그인 안의 코드가 아니라, npx(npm 패키지)·uvx(파이썬 패키지)·docker(컨테이너 이미지)로 서버를 시작할 때 패키지를 받아 실행합니다. 이 패키지는 플러그인 저장소의 커밋과 무관하게 레지스트리에서 옵니다. 그래서 버전을 정확히 적었는지에 따라, 같은 고정 커밋에서도 실행되는 코드가 달라질 수 있습니다.
| 버전 지정 | 서버 수 | 예 |
|---|---|---|
| 정확한 버전 | 21 | @aikidosec/mcp@1.0.23, @toolbox-sdk/server@1.9.0, hashicorp/terraform-mcp-server:0.4.0 |
@latest | 20 | @azure/mcp@latest, @playwright/mcp@latest, firebase-tools@latest, awslabs.*-mcp-server@latest |
| 버전 없음 | 9 | @pinecone-database/mcp, prisma, grafana/mcp-grafana(태그 없는 이미지), git+https://github.com/oraios/serena |
| 범위 | 1 | mongodb-mcp-server@<3 |
러너별로는 npx 33개, uvx 16개, docker 2개입니다. 정확한 버전이 아닌 30개는 패키지 26종이고, 이 서버를 하나라도 가진 플러그인은 27개입니다. 그중 3개(playwright, firebase, serena)는 마켓플레이스 저장소 안에 있는 파트너 플러그인입니다. Anthropic이 만든 39개에는 MCP 서버가 없습니다. 플러그인 안의 코드를 bun run·uv --directory로 실행하는 서버는 이 표에서 뺐습니다.
@latest는 실행할 때 레지스트리의 최신 버전을 받으라는 뜻입니다. 버전을 적지 않으면 받아 둔 사본이 있는지와 도구의 캐시 규칙에 따라 받는 버전이 정해집니다. 어느 쪽이든 패키지 개발사가 새 버전을 올리면, 마켓플레이스의 고정 커밋이 그대로여도 다음 실행에서 다른 코드가 실행될 수 있습니다.
훅에도 같은 형태가 있습니다. jfrog 플러그인은 세션 시작 훅과 도구 호출 전 훅에서 npx --yes ... @jfrog/agent-guard를 버전 없이 실행합니다. README에 따르면 이 훅은 Claude가 부르는 스킬을 조직의 JFrog 정책에 비춰 검사하고 위반하면 막는 용도이며, 레지스트리 주소는 환경 변수로 바꿀 수 있습니다. 같은 README는 세션 시작·파일 변경 훅이 설치된 다른 플러그인의 .mcp.json을 고쳐 로컬 MCP 서버가 Agent Guard를 거쳐 실행되게 한다고도 밝힙니다. 조직의 통제를 위한 설계이고 개발사가 스스로 밝힌 동작입니다. 다만 한 플러그인의 훅이 다른 플러그인의 설정을 바꿀 수 있다는 점은, 플러그인을 하나씩 따로 검토하는 방식으로는 드러나지 않습니다.
훅 — 플러그인을 쓰지 않아도 세션마다 실행되는 명령
공식 보안 문서는 훅을 이렇게 설명합니다. "명령 훅은 사용자의 전체 권한으로 셸 명령을 실행한다." 그리고 "Claude Code의 권한 규칙과 샌드박스는 Claude가 하는 도구 호출에 적용되고, 플러그인이 스스로 실행하는 코드에는 적용되지 않는다. 훅과 MCP 서버는 샌드박스 밖에서 실행된다." 또 플러그인은 설치하는 순간 켜집니다(매니페스트가 defaultEnabled: false를 적은 경우 제외).
| 훅 이벤트 | 플러그인 수 | 언제 실행되나 |
|---|---|---|
SessionStart | 36 | 세션을 새로 열거나 이어 열 때마다. 문서: "SessionStart는 모든 세션에서 실행된다" |
PostToolUse | 26 | 도구 호출이 끝난 뒤 |
PreToolUse | 25 | 도구 호출 전. 12개는 Bash 호출을 대상으로 지정 |
UserPromptSubmit | 18 | 사용자가 메시지를 보낼 때마다 |
Stop | 14 | Claude가 응답을 마칠 때 |
SessionEnd | 8 | 세션을 끝낼 때 |
훅 224개 중 222개가 셸 명령입니다. 훅이 있는 61개 가운데 54개가 외부 저장소 플러그인이고, Anthropic이 만든 것은 7개입니다. 세션 시작 훅이 하는 일은 대부분 평범합니다. 프로젝트 정보를 컨텍스트에 넣고, API 토큰이 설정됐는지 확인하고, 다음 실행이 빠르도록 패키지 캐시를 미리 채웁니다.
핵심은 실행 시점입니다. 세션 시작 훅은 그 플러그인의 스킬이나 도구를 한 번도 쓰지 않는 세션에서도 실행됩니다. 예를 들어 Anthropic의 code-modernization 플러그인 README는 텔레메트리 항목에서, 세션 시작 때 플러그인 버전과 기기당 한 번 실행 환경 정보를 숫자로 보내며 "이것이 플러그인을 쓰지 않아도 보내는 유일한 숫자"라고 밝힙니다. 같은 README는 끄는 방법(플러그인의 Usage counts 옵션, CODE_MODERNIZATION_TELEMETRY=0, DISABLE_TELEMETRY=1, CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1)도 적어 두었습니다. 이렇게 스스로 밝힌 경우는 드물고, 대부분은 훅 스크립트를 직접 읽어야 무엇을 하는지 알 수 있습니다.
/plugin 상세 화면은 훅이 "있다"는 것만 보여 주고 무엇을 실행하는지는 보여 주지 않습니다. 외부 저장소 플러그인은 구성요소 요약 대신 "Component summary not available for remote plugin"이 표시될 수 있습니다. 실제 명령은 플러그인 폴더의 hooks/hooks.json과 그 안에서 부르는 스크립트를 열어야 보입니다.
사전 승인되는 Bash — 30개 플러그인, 파일 199개
스킬·명령 파일 헤더에 allowed-tools를 적은 파일은 525개(플러그인 73개)였습니다. 그중 199개 파일(플러그인 30개)은 Bash를 명령 제한 없이 적었습니다. 공식 권한 문서에 따르면 괄호 없는 Bash는 Bash(*)와 같고 "모든 Bash 명령에 맞습니다". 30개 중 27개는 외부 저장소 플러그인이고, 3개(mcp-tunnels, plugin-dev, pr-review-toolkit)는 Anthropic이 만든 플러그인입니다. 예를 들어 pr-review-toolkit의 review-pr 명령에는 allowed-tools: ["Bash", "Glob", "Grep", "Read", "Task"]가 적혀 있습니다.
공식 문서와 변경 기록이 설명하는 동작은 이렇습니다.
- skills 문서: 승인은 그 스킬을 부른 턴 동안만 유효하고, 사용자가 다음 메시지를 보내면 풀립니다. 스킬을 다시 부르면 다시 적용됩니다.
- skills·설정 문서: 관리 설정
allowManagedPermissionRulesOnly를 켜면 저장소·개인 스킬과 스킬 폴더의 플러그인 매니페스트에 적힌allowed-tools는 무시됩니다(2.1.282부터). - 변경 기록 2.1.284: 마켓플레이스·claude.ai·npm 플러그인의 사전 승인도 막도록 고쳤다고 적혀 있지만, 같은 항목에 "공식 Anthropic 출처나 관리 설정이 신뢰하도록 지정한 출처의 플러그인은 사전 승인을 유지한다"는 단서가 붙어 있습니다.
/status로 무시된 스킬 목록을 직접 확인하세요.
매 세션에서 차지하는 컨텍스트 — 중앙값 416토큰, 최대 2만 2천 토큰
claude plugin details의 Always-on 값은 플러그인에 포함된 스킬·에이전트·명령의 이름과 설명이 플러그인을 켠 모든 세션에 추가하는 토큰 추정치입니다. 플러그인을 실제로 쓰는지와 상관없이 매 세션 차지합니다. MCP 서버의 도구 정의는 실행 시점에 정해지므로 이 값에 들어가지 않습니다.
| 항목 | 값 |
|---|---|
| 중앙값 / 평균 | 416 / 1,017 토큰 |
| 0토큰(스킬·에이전트 없음, 예: LSP·MCP 전용) | 49개 |
| 1,000토큰 이상 | 94개 |
| 2,000토큰 이상(설치 화면에서 강조 표시되는 기준) | 46개 |
| 가장 큰 플러그인 | posthog 22,077 (스킬 167개) · scandit-sdk 9,650 (86개) · salesforce-development 7,418 (50개) |
공식 문서에 따르면 공식 마켓플레이스 플러그인은 설치 전 상세 화면에 이 값을 "Every turn"으로 보여 주고, 2,000토큰 이상이면 강조 표시합니다. 또 스킬 목록에는 모델 컨텍스트 윈도우의 1%라는 예산이 있습니다. 넘치면 덜 쓰는 스킬의 설명부터 빠지므로, 큰 플러그인을 여러 개 켜면 비용보다 먼저 다른 스킬이 제때 불리지 않는 문제가 생길 수 있습니다. 이 마지막 부분은 문서의 동작 설명에서 끌어낸 해석이고, 이 글에서 측정하지는 않았습니다.
설치는 성공하지만 비어 있는 플러그인 2개
마켓플레이스 항목 4개(atomic-agents, rc, revenuecat, zilliz)는 출처 방식을 url로 적고 path를 함께 적었습니다. 공식 참조 문서의 출처 방식 표에서 url 방식이 받는 항목은 url·ref·sha뿐이고, 저장소의 하위 폴더를 지정하는 path는 git-subdir 방식의 항목입니다.
격리된 설정 폴더에 네 개를 실제로 설치해 보니, Claude Code는 path를 쓰지 않고 저장소 전체를 플러그인 폴더로 받았습니다. rc와 revenuecat은 저장소 최상위에도 플러그인 구성요소가 있어 정상(스킬 24개, MCP 서버 1개)으로 잡혔습니다. 그러나 zilliz와 atomic-agents는 구성요소가 하위 폴더에만 있어서, claude plugin details 결과에서 스킬·에이전트·훅·MCP 서버가 모두 0개로 표시됐습니다. zilliz는 마켓플레이스 설명에 "14 skills"라고 적혀 있습니다.
2.1.284와 그 시점 최신인 2.1.289(npx로 받아 격리 실행) 두 버전 모두에서 같았습니다. 설치 명령은 성공 메시지를 내므로, 사용자는 스킬이 왜 없는지 알기 어렵습니다. 원인이 마켓플레이스 항목인지 Claude Code의 처리인지는 이 글의 범위에서 정하지 않습니다. 문서의 표만 보면 항목 쪽이 git-subdir를 썼어야 맞습니다.
체크리스트
| 할 일 | 왜 |
|---|---|
설치 전에 플러그인 폴더의 hooks/hooks.json, .mcp.json, bin/을 직접 읽으세요 | 설치 화면은 훅이 있다는 것만 보여 줍니다. 61개 플러그인이 훅을, 그중 36개가 세션 시작 훅을 가지고 있습니다 |
claude --plugin-dir <폴더> plugin details <이름>으로 구성요소와 토큰 비용을 미리 보세요 | 세션을 열지 않고 읽기만 합니다. 공식 보안 문서가 안내하는 방법입니다 |
MCP 서버 명령에 @latest나 버전 없는 패키지가 있으면, 팀 배포용으로는 버전을 고정한 사본을 쓰세요 | 실행 시점에 받는 패키지 51개 중 30개가 정확한 버전이 없습니다. 커밋 고정이 이 부분을 지켜 주지 않습니다 |
| 팀에 배포한 플러그인은 자동 업데이트를 끄거나, 업데이트된 커밋을 다시 검토하는 절차를 두세요 | 공식 마켓플레이스는 자동 업데이트가 기본으로 켜져 있고, 한 달 전에도 있던 외부 플러그인 238개 중 71%의 고정 커밋이 바뀌었습니다 |
스킬·명령의 allowed-tools에 괄호 없는 Bash가 있는지 확인하세요 | 그 스킬을 부른 턴에는 모든 Bash 명령이 확인 없이 실행됩니다. 30개 플러그인이 해당합니다 |
allowManagedPermissionRulesOnly에 기대는 조직은 /status로 실제로 무시된 스킬 목록을 확인하세요 | 공식 출처 플러그인은 사전 승인을 유지한다고 적혀 있어, 공식 마켓플레이스 플러그인에 어떻게 적용되는지 직접 봐야 합니다 |
설치 후 스킬이 하나도 안 보이면 claude plugin details로 구성요소 수를 확인하세요 | zilliz·atomic-agents처럼 설치는 성공하지만 비어 있는 경우가 있습니다 |
아직 결론이 아닌 것
- 한 시점의 측정입니다. 마켓플레이스 커밋 d182ca4(2026-10-02) 기준이고, 고정 커밋이 한 달에 70% 넘게 바뀌므로 지금 받으면 숫자가 다를 수 있습니다. 측정 이후 플러그인이 추가·수정됐을 수 있습니다.
- 코드를 읽었을 뿐 실행하지 않았습니다. 훅과 MCP 서버를 실제로 돌려 네트워크 요청이나 파일 변경을 관찰하지 않았습니다. 훅이 "무엇을 하는지"에 대한 이 글의 설명은 명령과 스크립트를 읽고 내린 판단입니다.
- 위험하다는 판정이 아닙니다. 세션 시작 훅, 버전 없는 패키지, 사전 승인된 Bash는 각각 정당한 이유가 있을 수 있습니다. 이 글은 개수와 동작 조건을 셌고, 개별 플러그인의 악성 여부는 평가하지 않았습니다.
- Bash 사전 승인 집계는 파일 헤더(frontmatter)의 표기를 기준으로 했습니다. 괄호 없는
Bash,Bash(*),Bash(*:*)만 "제한 없음"으로 셌고, 넓은 패턴(예:Bash(npm *))은 제한 있음으로 분류했습니다. 헤더를 YAML로 읽지 못한 파일 2개는 빠졌습니다. - 관리 설정 아래 공식 마켓플레이스 플러그인의 사전 승인이 유지되는지는 변경 기록 문구로만 봤고 직접 확인하지 않았습니다.
- 토큰 값은 CLI의 추정치입니다. MCP 도구 정의가 빠져 있고, 스킬 목록 예산이 적용되기 전의 값입니다. 실제 사용량은 다를 수 있다고 CLI 출력에도 적혀 있습니다.
- 빈 채로 설치되는 2개의 원인이 마켓플레이스 항목의 오기인지 Claude Code가
url방식의path를 지원하지 않는 것인지는 문서의 표로 추정했을 뿐, 개발사의 확인은 없습니다.
참고자료
공식 문서는 Markdown 원본(URL 끝에 .md)으로 받아 2026-10-05에 대조했습니다.
| 출처 | 이 글이 가져온 것 | 구분 |
|---|---|---|
| anthropics/claude-plugins-official (커밋 d182ca4, fd5820a) | 플러그인 목록, 고정 커밋, 저장소 안 플러그인 39+14개, README의 신뢰 경고, 30일 이력 | 1차(개발사) |
| 외부 플러그인 저장소 227곳 (목록에 고정된 커밋) | 훅·MCP 설정·allowed-tools·스크립트 원문 | 1차(각 개발사) |
| Plugin security and trust | 임의 코드 실행, 샌드박스 밖 실행, 설치 시 켜짐, 자동 업데이트, 설치 전 검토 절차 | 1차(개발사) |
| Plugin marketplace reference · Plugins reference | 출처 방식별 항목(url·git-subdir), sha 고정, 구성요소 기본 위치 | 1차(개발사) |
| Discover plugins · Measure what a plugin costs | 자동 업데이트 기본값, Always-on 정의, 2,000토큰 강조 기준 | 1차(개발사) |
| Skills · Permissions · Settings reference | allowed-tools의 범위와 신뢰 비적용, Bash = Bash(*), 스킬 목록 1% 예산, allowManagedPermissionRulesOnly | 1차(개발사) |
| Hooks reference · Changelog (2.1.282, 2.1.284~2.1.289) | SessionStart 실행 시점, 사전 승인 관련 수정 내역 | 1차(개발사) |
| 이 글의 집계 (2026-10-05) | 구성요소·훅·MCP·버전 지정·allowed-tools 집계, claude plugin details 315회, 격리 설치 시험(2.1.284·2.1.289) | 직접 측정 |
마켓플레이스 항목이 고쳐지거나 Claude Code의 동작이 바뀌면 이 글을 고치고 개정 날짜를 적겠습니다.