Claude Code 팀 마켓플레이스 구축기 ⚡
소개
Claude Code를 팀에서 적극 활용한 지 몇 달, 자연스럽게 개개인들이 만든 스킬, 에이전트, 커맨드를 처음에는 Slack에 공유하고, Notion 에 정리하고, GitHub에 올리고... 그런데 문제가 생겼어요.
"그 스킬 어디 있어?"
"어떻게 설치해?"
"이런 것도 있나?"
매번 같은 질문이 반복되고, 좋은 스킬이 있어도 팀원들이 찾지 못해서 재사용이 안 되는 상황이었습니다. 그래서 생각했어요. 팀 전용 Claude Code 마켓플레이스를 만들자! 그런데 여기서 한 발 더 나갔습니다.
"마켓플레이스 등록만 하면 Claude Code가 알아서 필요한 스킬을 찾아서 쓰게 할 수 없을까?"
목표
이상적으로 생각한 구조는 이랬습니다:
검색 가능 - 스킬/에이전트/커맨드를 키워드로 바로 찾기
원클릭 설치 - CLI 명령어 복사해서 바로 설치
팀별 분류 - 개발팀, 디자인팀, 마케팅팀 등 담당 조직별 필터
MCP 서버 연동 - Claude Code가 작업 중 자동으로 관련 스킬을 찾아서 사용
특히 4번이 핵심이었어요. 단순히 카탈로그를 보여주는 게 아니라, Claude Code가 스스로 필요한 스킬을 검색하고 그 내용을 바탕으로 작업하는 것.
진행 방법
1. 기술 스택 선정
Next.js App Router 기반으로 빠르게 구축했습니다.
역할
기술
선택 이유
프레임워크
Next.js 16
App Router + React 19, Server Components
DB
Neon PostgreSQL
서버리스, 무료 티어 넉넉, Drizzle ORM과 궁합 좋음
ORM
Drizzle
타입 안전, drizzle-kit으로 마이그레이션 편함
인증
NextAuth v5
Google OAuth + 도메인 제한 (@gpters.org만 허용)
스타일
Tailwind CSS v4
다크모드 기본, CSS 변수 활용
2. 카탈로그 시스템 구축
아이템 타입 분류
Claude Code 리소스를 4가지로 분류했습니다:
⚡ Skill - 특정 작업을 수행하는 프롬프트/가이드 (
.claude/skills/)◈ Agent - 서브에이전트로 실행되는 자동화 (
.claude/agents/)▸ Command - 슬래시 명령어 (
/commit,/review등)📚 Guide - 사용법/튜토리얼 문서
검색 & 필터 기능
⌘K로 빠른 검색이 가능하고, 다양한 필터를 제공합니다:
팀별: 개발팀, 디자인팀, 마케팅팀, 운영팀, 컨텐츠팀
난이도: 쉬움/보통/어려움
태그: 코드, 분석, Git, 테스트, SQL 등
Drizzle ORM으로 필터 쿼리를 구성하니 타입 안전하게 복합 조건을 처리할 수 있었어요.
const results = await db
.select()
.from(catalogItems)
.where(
and(
eq(catalogItems.type, 'skill'),
eq(catalogItems.teamTag, 'data'),
ilike(catalogItems.name, `%${query}%`)
)
)3. 팀원 기여 시스템 (Upload)
스킬을 만들었으면 공유할 수 있어야죠. 팀원들이 직접 스킬을 업로드할 수 있는 기능을 만들었습니다.
어두운 배 경의 웹사이트 스크린샷
주요 기능
드래그 앤 드롭:
.md파일을 드래그하면 frontmatter를 자동 파싱타입별 가이드: Skill/Agent/Command/Guide 선택 시 우측에 작성 가이드 표시
팀 태그: 개발팀, 디자인팀, 마케팅팀 등 담당 조직 지정
의존성 관리: 필요한 MCP 서버나 다른 스킬을 버튼 클릭으로 추가
실시간 미리보기: Frontmatter 자동 생성 + Markdown 미리보기
export async function POST(request: NextRequest) {
const body = await request.json()
const { id, type, name, content, teamTag, tags } = body
await db.insert(catalogItems).values({
id,
type: type as ItemType,
name,
content,
teamTag,
tags,
})
return NextResponse.json({ success: true })
}
4. 원클릭 설치 기능
가장 신경 쓴 부분입니다. 스킬을 찾았으면 바로 설치할 수 있어야 해요.
CLI 설치 (추천)
# 1. 마켓플레이스 추가 (최초 1회)
/plugin marketplace add your-org/your-marketplace
# 2. 플러그인 설치
/plugin install refactor-guide@your-marketplace
수동 설치
콘텐츠 복사 버튼 클릭
.claude/skills/스킬명/폴더 생성SKILL.md파일 저장Claude Code 재시작
Copy 버튼 하나로 끝나니 설치 허들이 확 낮아졌어요.
5. MCP 서버로 자동 스킬 발견 (핵심!)
문제: Claude Code는 동적 스킬 로딩을 지원하지 않음
Claude Code의 마켓플레이스는 정적 카탈로그일 뿐이에요. 작업 중에 "이 스킬이 필요하네?" 하고 자동으로 찾아서 쓰는 기능은 없습니다.
해결: MCP 서버로 우회
MCP(Model Context Protocol) 서버를 만들어서 Claude Code가 직접 플러그인을 검색하고 내용을 조회할 수 있게 했습니다.
Claude Code → MCP Server (/api/mcp) → PostgreSQL DB
↳ 자연어 요청 "DB 스키마 알려줘"
↳ search_plugins("database schema") 호출
↳ get_plugin_content(...) 호출
↳ 스킬 내용 기반으로 답변
MCP 도구 정의
export const MARKETPLACE_TOOLS = [
{
name: "search_plugins",
description: "마켓플레이스에서 플러그인 검색. 키워드와 매칭되는 플러그인 반환",
inputSchema: {
type: "object",
properties: {
query: { type: "string" },
category: { type: "string", enum: ["skill", "agent", "command", "all"] },
limit: { type: "number" }
},
required: ["query"]
}
},
{
name: "get_plugin_content",
description: "특정 플러그인의 전체 내용 조회",
inputSchema: {
type: "object",
properties: {
pluginId: { type: "string" }
},
required: ["pluginId"]
}
}
];
설정 예시
{
"mcpServers": {
"gpters-marketplace": {
"type": "http",
"url": "https://[팀내부URL]/api/mcp"
}
}
}
실제 사용 흐름 예시
"사내 DB 스키마 알려줘" → Claude Code 내부적으로:
search_plugins("database")호출
db-schema-reference스킬 발견
get_plugin_content("db-schema-reference")호출 → 답변 생성API 엔드포인트
# JSON-RPC 2.0 모드
POST /api/mcp
{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {...}}
# Simple REST 모드
POST /api/mcp?action=search
{"query": "database"}
마켓플레이스 vs MCP 서버 비교
항목
마켓플레이스 (프라이빗)
MCP 서버
팀원 초기 설정
GitHub 토큰 + env 설정
.mcp.json 복사
새 스킬 사용
설치 필요
설치 없이 검색/활용
업데이트
재설치 필요
서버에서 자동 반영
오프라인 사용
✅ 가능
❌ 불가
권장 용도
자주 쓰는 핵심 스킬
가끔 쓰는 레퍼런스
✅ 현재 선택: 저희는 MCP 서버 중심 사용 중입니다.
6. 관리자 도구
숫자 목록이 표시된 검은색 화면
아이템 타입별/팀별 필터링
View/Edit/Delete 액션
Create New 버튼으로 새 아이템 추가
작성자, 태그, MCP 서버 관리
Google OAuth (
@gpters.org) + 관리자 비밀번호 보호
결과와 배운 점
정량적 성과
지표
Before
After
스킬 검색 시간
~5분
⌘K → 검색 → 클릭 (30초)
신규 입사자 온보딩
반복 질문
링크 하나로 해결
스킬 재사용률
만든 사람만 사용
팀 전체가 사용
MCP 서버 등록 후
개별 설치 필요
자연어로 바로 활용
정성적 변화
"이런 게 있었어?" → "여기서 찾으면 되지"
팀원들이 자발적으로 스킬 공유 시작 (업로드 페이지 활용)
신규 입사자가 첫날부터 팀 스킬 활용
MCP 서버 덕분에 스킬 설치 없이도 Claude Code가 팀 지식 활용
실제 사용 예시
👤 "사내 DB의 users 테이블 구조 알려줘"
🤖 Claude Code 내부:
→ search_plugins("database") 호출
→ db-schema-reference 스킬 발견
→ get_plugin_content("db-schema-reference") 호출
→ 스킬 내용 기반으로 답변
💬 "users 테이블은 다음과 같은 구조입니다: id, email, name, ..."
보안 고려사항
적용한 보안 조치
로그인 제한: 회사 구글 계정(
@gpters.org)만 로그인 가능관리자 권한 분리: 콘텐츠 수정/삭제에는 별도 비밀번호 필요
데이터 보호: SQL Injection, XSS 차단, 기본 보안 설정 적용
현재 한계점
MCP 서버는 인증 없이 열려 있음 (Claude Code가 로그인 불가)
민감 정보는 포함되어 있지 않아 리스크는 낮음
향후 API 키 인증 및 요청 제한 기능 도입 예정
✅ 한 줄 요약: 회사 계정 + 관리자 분리로 기본 보안 확보, MCP는 인증 기능 추가 예정
현재 상황과 향후 계획
현재 상황 (MVP)
기능
상태
비고
카탈로그 검색/필터
✅ 완료
키워드, 타입, 팀별 필터
원클릭 설치 가이드
✅ 완료
CLI 명령어 + 수동 설치
팀원 업로드
✅ 완료
드래그앤드롭, frontmatter 자동 파싱
MCP 서버
✅ 완료
검색/조회 API, 자동 스킬 발견
관리자 도구
✅ 완료
CRUD, 태그/작성자 관리
Google OAuth
✅ 완료
@gpters.org 도메인 제한
단기 개선
MCP 인증 강화 - API 키 추가
검색 정확도 개선 - 복합 검색어 지원
팀원 온보딩 문서 -
.mcp.json설정 가이드 배포
중기 개선
시맨틱 검색 - 유사 의미 검색 지원
사용 통계 - 인기 스킬 파악
버전 관리 - 수정 이력 추적
장기 비전
AI 추천 - "이 작업엔 이 스킬이 좋아요" 자동 제안
Claude Code 네이티브 연동 - 동적 스킬 로딩 기능 대응
마무리
Claude Code를 팀에서 활발히 쓰고 있다면, 내부 마켓플레이스를 만들어보세요.
바이브코딩으로 2일이면 MVP 완성
MCP 서버까지 붙이면 Claude Code가 팀 스킬을 자동 검색 & 활용
설치 없이도 팀 지식이 바로 쓰이게 됩니다
스킬이 쌓일수록 팀 전체의 생산성이 올라가는 걸 체감할 수 있어요 💪
궁금한 점 있으시면 댓글 남겨주세요!