← 목록으로

스킬·MCP를 플러그인으로 묶기

흩어진 스킬과 자주 쓰는 MCP를 한 패키지로 묶어 팀에 배포합니다

AGENTS.md 나만의 Skill 만들기 스킬·MCP 플러그인
스킬, 그 다음

스킬 하나를 만들고 나면 마주치는 세 가지 벽

스킬 만드는 법은 익혔습니다. 그 다음에 막히는 자리들입니다

  • 벽 ① 나만 씁니다. 내 계정과 내 노트북에만 깔려 있어서, 팀원에게 알려주려면 SKILL.md 본문을 일일이 복사해 붙여넣게 해야 합니다.
  • 벽 ② 손발이 없습니다. 스킬은 "어떻게 일할지"를 알지만, DART에서 데이터를 가져오거나 구글 시트에 결과를 쓰는 일은 못 합니다.
  • 벽 ③ 흩어져 있습니다. 하나의 시나리오에 스킬 두세 개가 같이 쓰여도, 깔 때는 하나씩 따로 깝니다. 누가 어떤 버전을 갖고 있는지 알기 어렵습니다.
INSIGHT

세 벽의 답은 같습니다. 스킬에 도구(MCP)를 붙이고, 관련된 것끼리 한 폴더로 묶고, 한 줄 명령으로 깔 수 있게 만든다. 그 묶음의 이름이 플러그인입니다.

MCP는 짝꿍

MCP가 뭔가요?

AI에게 "이 도구를 쓸 수 있어"라고 알려주는 통로

스킬이 "이 일은 이렇게 해"라고 알려주는 매뉴얼이라면, MCP(Model Context Protocol)는 "이 도구를 쓸 수 있어"라고 연결해 주는 통로입니다. AI가 DART에서 공시 데이터를 가져오거나, 구글 시트에 표를 쓰거나, 내 PC 폴더의 파일을 읽을 수 있게 만드는 길입니다. Claude Code와 Codex가 같은 규격을 쓰기 때문에, MCP 서버 하나를 만들면 양쪽에 그대로 붙습니다.

스킬만 있을 때
"이런 양식으로 정리해줘"는 안다
그런데 데이터를 어디서 가져오지?
결과를 어디에 저장하지?
스킬 + MCP가 만났을 때
DART MCP가 데이터를 가져온다
스킬이 우리 회사 양식대로 정리한다
구글 시트 MCP가 자동으로 올린다
스킬과 MCP의 역할 분담
스킬 = 머리

어떻게 일할지
(절차·형식·톤)

MCP = 손발

무슨 도구를 쓸지
(API·파일·데이터)

플러그인 = 몸

머리와 손발을
한 단위로 묶음

자주 쓰는 MCP 예시

데이터 분야는 DART, OpenDart, Kensho(S&P), BigQuery, Snowflake가 자주 쓰입니다.
업무 도구 분야는 Google Sheets, Notion, Slack, Gmail, Calendar가 대표적입니다.
개발·파일 분야는 GitHub, Filesystem, Postgres, Playwright(브라우저 자동화)가 있습니다.
이 중 내가 자주 쓰는 두세 개를 골라 관련 스킬과 묶으면 그게 첫 플러그인입니다.

플러그인 해부

플러그인 폴더 구조

매니페스트 한 장에 이름을 적고, 나머지는 묶고 싶은 만큼만 넣습니다

구조는 두 도구가 거의 같습니다. 스킬은 skills/ 하위에 폴더째 넣고, MCP는 루트의 .mcp.json에 적습니다. 매니페스트가 들어가는 숨김 폴더의 이름만 다릅니다.

도구별 차이
my-plugin/ ├── .claude-plugin/ │ └── plugin.json # 이름·버전 (name만 필수) ├── .mcp.json # 같이 붙일 MCP 서버들 ├── skills/ # 묶고 싶은 스킬들 (skills.html에서 만든 것) │ ├── report-format/ │ │ └── SKILL.md │ └── data-clean/ │ └── SKILL.md ├── agents/ # 선택: 역할별 서브에이전트 ├── hooks/ # 선택: 이벤트 훅 (hooks.json) └── README.md # 받는 사람을 위한 설치·사용 안내

skills/, agents/, .mcp.json은 모두 플러그인 루트에 둡니다. .claude-plugin/ 안에 넣으면 읽히지 않습니다. 여기에 들어가는 건 plugin.json 하나뿐입니다.

매니페스트와 .mcp.json, 두 장으로 끝납니다

매니페스트는 이름표, .mcp.json은 같이 붙일 도구 목록입니다

매니페스트에는 이 묶음이 무엇인지만 적습니다. 실제로 붙일 MCP 서버는 루트의 .mcp.json에 따로 적습니다. 두 도구 모두 MCP 표기 형식은 같습니다.

# .mcp.json (Claude Code · Codex 공통 형식) { "mcpServers": { "dart": { "command": "npx", "args": ["-y", "@opendart/mcp-server"], "env": { "DART_API_KEY": "${DART_API_KEY}" } }, "google-sheets": { "command": "npx", "args": ["-y", "@google/sheets-mcp"] } } }

이 플러그인을 깔면 skills/ 안의 스킬 두 개와 DART MCP, 구글 시트 MCP가 한꺼번에 설정됩니다. API 키 같은 비밀은 반드시 ${ENV_VAR} 형태로 적어 설치하는 사람의 환경에서 읽도록 합니다. 파일에 직접 적으면 안 됩니다.

매니페스트가 다릅니다
.claude-plugin/plugin.json
{ "name": "report-suite", "version": "0.1.0", "description": "분기 실적 보고서: DART 데이터 + 우리 회사 양식", "author": { "name": "Jayden Kang" } }

필수는 name 하나입니다. 기본 폴더 이름을 그대로 쓰면 매니페스트 자체를 생략할 수도 있지만, 팀에 뿌릴 거라면 version은 적어 두는 편이 낫습니다. 이 값이 없으면 커밋 하나하나가 새 버전으로 잡힙니다.

MCP 실행 파일을 플러그인 안에 같이 넣었다면 ${CLAUDE_PLUGIN_ROOT}로 경로를 적습니다. 설치 위치가 사람마다 달라지기 때문입니다.

묶는 3단계
1
한 시나리오로 좁힌다
"무엇을 자동화하는 묶음인가"를 한 문장으로 정의

이미 만든 스킬을 다 넣고 싶은 유혹부터 끊습니다. 묶음의 정체성이 흐려지면 받는 사람이 무엇에 쓰는지 알 수 없습니다.

  • 한 문장 정의 예시. "DART 데이터로 분기 실적 보고서를 만든다"
  • 이 문장에 직접 쓰는 스킬만 skills/에 모읍니다.
  • 이 문장에 필요한 MCP만 mcpServers에 적습니다.
  • "있으면 좋을 것 같은" 자산은 다음 버전(0.2.0)으로 미룹니다.
2
매니페스트와 .mcp.json을 짠다
name · version · MCP 실행 명령이 핵심

위 예시를 그대로 복사해 세 칸만 바꿉니다.

  • name. 영문 소문자와 하이픈으로 짓습니다. 설치할 때 식별자가 되고, 스킬 이름 앞에도 이 이름이 붙습니다.
  • version. 처음에는 0.1.0으로 시작합니다. 스킬 본문이 바뀌면 끝자리(0.1.1), MCP 구성이 바뀌면 가운데(0.2.0), 사용법이 바뀌면 앞자리(1.0.0)를 올립니다.
  • mcpServers. .mcp.json에 묶을 MCP들의 실행 명령을 적습니다. 환경 변수는 ${...} 형태로 빼둡니다.
만들어 주는 도구

빈 폴더부터 손으로 만들 필요는 없습니다. claude plugin init 이름을 치면 매니페스트와 시작용 SKILL.md가 함께 만들어집니다.

다 짜고 나면 claude plugin validate ./my-plugin으로 매니페스트와 스킬 앞머리에 오타가 없는지 먼저 확인합니다.

3
깨끗한 환경에서 직접 깐다
"내 노트북에서만 동작하는 플러그인"을 거른다

가장 흔한 실수는 본인 환경에 이미 깔려 있는 무언가에 의존하는 플러그인을 만드는 일입니다. 마켓플레이스에 올리기 전에 새 폴더에서 한 번 돌려보면 누락된 환경 변수, 잘못된 경로가 바로 드러납니다.

  • 묶음 안의 스킬이 자동으로 호출되는지 확인합니다.
  • MCP가 붙었는지, 도구 목록에 노출되는지 확인합니다.
  • 안 되는 게 있으면 매니페스트를 고치고 버전을 0.1.1로 올립니다.
깔아 보는 방법

설치 없이 폴더를 그대로 물고 켭니다. claude --plugin-dir ./my-plugin

고친 내용을 반영할 때는 다시 띄우지 않고 /reload-plugins만 칩니다. 스킬은 /플러그인이름:스킬이름으로 불러 확인합니다.

같은 이름의 플러그인이 이미 깔려 있어도, 이 방식으로 띄운 로컬 폴더가 그 세션에서 먼저 잡힙니다. 지우고 다시 깔 필요가 없습니다.

팀에 뿌리기

배포 3가지 방법

팀 규모와 공개 범위에 따라 고릅니다

  • ① 폴더째 건네기. 사내 공유 드라이브에 올려둡니다. 한두 명 작은 팀이거나 한 번 써 보는 단계일 때만 씁니다. 버전 관리가 안 됩니다.
  • ② 사내 마켓플레이스. 비공개 저장소에 카탈로그 파일 한 장을 두고 팀원이 거기서 깝니다. 팀 단위 배포의 표준이고, 버전 관리와 자동 업데이트가 같이 따라옵니다.
  • ③ 공개 디렉터리. 외부 공개 자산입니다. 심사를 거쳐 다른 사람도 검색해서 깔 수 있는 형태로 풀립니다.

②가 실질적인 정답입니다. 저장소 하나에 카탈로그를 두면 새 버전을 올리는 일이 커밋 한 번으로 끝납니다. 그 카탈로그를 어디에 두고 어떻게 부르는지가 두 도구의 가장 큰 차이입니다.

사내 마켓플레이스 만들기
  • 카탈로그 위치. 마켓플레이스 저장소 루트의 .claude-plugin/marketplace.json에 플러그인 목록을 적습니다.
  • 팀원이 깔 때. /plugin marketplace add 조직/저장소로 등록하고, /plugin install 이름@마켓이름으로 깝니다.
  • 자동으로 붙이기. 프로젝트의 .claude/settings.jsonextraKnownMarketplacesenabledPlugins를 적어 두면, 저장소를 받은 사람이 폴더를 신뢰하는 순간 설치를 권합니다.
  • 비공개 유지. 마켓플레이스 저장소를 비공개로 두면 됩니다. 평소 쓰는 git 인증을 그대로 씁니다.
  • 공개할 때. claude plugin validate ./my-plugin을 통과시킨 뒤 커뮤니티 마켓플레이스에 심사를 넣습니다.

받는 사람을 위한 README 5줄

5줄짜리 README가 30분의 설치 안내를 대체합니다

  • 한 줄 정의. 이 플러그인이 무엇을 자동화하는지
  • 설치 방법. 어느 마켓플레이스에서 어떤 이름으로 까는지 한 줄
  • 필요한 환경 변수. API 키 등 사용자가 미리 준비할 것
  • 첫 사용 예시. 깐 직후 바로 칠 수 있는 한 마디
  • 업데이트 방법. 새 버전을 받는 한 줄

묶음 예시 4가지

스킬과 MCP가 한 묶음으로 만나는 실제 시나리오

분기 실적 리포트

스킬 · 보고서 양식 + 데이터 정리
MCP · DART OpenAPI
한 마디 · "삼성전자 4분기 실적 정리해줘"

콘텐츠 발행

스킬 · 한국어 윤문 + SEO 메타
MCP · Notion 또는 WordPress
한 마디 · "이 초고 다듬어서 올려줘"

5-Color Harness

스킬 · BLACK·RED·SILVER·BLUE·GOLD 5개
MCP · Filesystem (산출물 저장)
한 마디 · "이 보고서 5-Color로 평가해줘"

슬라이드 제작

스킬 · 슬라이드 라이브러리 + 카피 작성
MCP · pptx-maker
한 마디 · "이 주제로 10장짜리 덱 만들어줘"

한 장 대조표

한쪽 도구로 만든 플러그인을 반대편으로 옮길 때 이 표만 보면 됩니다

구분Claude CodeCodex (ChatGPT)
매니페스트.claude-plugin/plugin.json.codex-plugin/plugin.json
필수 항목name 하나name, version, description
MCP 선언루트 .mcp.json루트 .mcp.json, 등록된 커넥터는 .app.json
경로 표기${CLAUDE_PLUGIN_ROOT}루트 기준 ./
개발 중 테스트claude --plugin-dir ./폴더개인 마켓플레이스 등록 후 /plugins
카탈로그 파일.claude-plugin/marketplace.json.agents/plugins/marketplace.json
설치/plugin install 이름@마켓/plugins 브라우저에서 선택
설치 후/reload-plugins새 대화 시작
만들어 주는 도구claude plugin init$plugin-creator
공개 범위Claude Code 커뮤니티 마켓플레이스ChatGPT와 Codex 공용 디렉터리
옮길 때 실제로 하는 일

숨김 폴더 이름을 바꾸고, 매니페스트에 versiondescription을 채우고, 카탈로그 파일을 옮기면 끝입니다. 스킬 폴더와 .mcp.json은 손대지 않습니다. 정작 만드는 데 시간이 걸린 자산은 양쪽이 같은 형식을 씁니다.

체크리스트

플러그인 출시 전 7개 점검

항목을 클릭해서 체크하세요. 7개에 모두 체크가 되면 팀에 뿌릴 준비가 끝난 겁니다

플러그인까지 묶었다면, 다음은 하네스 엔지니어링입니다

스킬·플러그인은 AI에게 줄 도구였습니다. 이제 AI가 일하는 환경 전체를 설계하는 단계로 넘어가세요. Anthropic이 실제로 쓰는 방식을 봅니다.