|
| 1 | +--- |
| 2 | +title: Storybook MCP 로 컴포넌트 문서화를 자동화하고 AI Context로 활용하기 |
| 3 | +createdAt: 2026-02-03 |
| 4 | +category: React |
| 5 | +description: 생성형 AI 가 발전함에 따라 MCP(Model Context Protocol)라는 새로운 개념이 등장했습니다. Storybook 에도 MCP 가 존재하는데, 이를 활용하면 컴포넌트 문서화를 자동화하거나, 컴포넌트 사용법을 AI 가 이해하고, context 로 활용할 수 있습니다. |
| 6 | +comment: true |
| 7 | +head: |
| 8 | + - - meta |
| 9 | + - name: keywords |
| 10 | + content: Storybook, MCP, Model Context Protocol, 컴포넌트 문서화, AI, 생성형 AI, 리액트, React, Storybook MCP |
| 11 | +--- |
| 12 | + |
| 13 | +사내에서 컴포넌트들이 점점 늘어나지만, 문서화가 잘 되지않아 어떤 공통 컴포넌트가 있고 어떻게 생겼는지 파악하기가 어려웠습니다. |
| 14 | + |
| 15 | +하지만, 빠른 스프린트 주기와 잦은 요구사항 변경으로 인해 문서화 작업은 자주 누락되었고, <br> |
| 16 | +결국 컴포넌트 사용법을 제대로 알지 못하고 무작정 코드를 복사해서 쓰는 일이 빈번해졌습니다. |
| 17 | + |
| 18 | +이번 글에서는 Storybook MCP(Model Context Protocol) 를 활용하여 <br> |
| 19 | +컴포넌트 문서화를 자동화하고, AI 코딩 도구가 컴포넌트를 이해하게 만드는 방법을 소개합니다. |
| 20 | + |
| 21 | +:::tip |
| 22 | +Storybook MCP 설정법에 대해서만 빠르게 읽고 싶다면<br>하단 ["Storybook MCP 설정하기" 섹션](#storybook-mcp-설정하기) 로 바로 이동하세요. |
| 23 | +::: |
| 24 | + |
| 25 | +<br><br> |
| 26 | + |
| 27 | +# AI 코딩 도구가 컴포넌트를 이해하게 만드는 방법 |
| 28 | + |
| 29 | +요즘 Cursor, Claude Code 같은 AI 코딩 도구를 쓰다 보면 이런 순간이 자주 옵니다. |
| 30 | + |
| 31 | +> "이 컴포넌트 구조를 이미 알고 있으면 훨씬 잘 만들어줄 텐데..." |
| 32 | +
|
| 33 | +문제는 AI가 우리 프로젝트의 컴포넌트 문맥을 모른다는 것입니다. <br> |
| 34 | +Props, 사용 의도, 변형 케이스, 디자인 가이드 같은 정보는 이미 Storybook에 다 있는데, 그동안은 사람이 읽는 문서에 가까웠습니다. |
| 35 | + |
| 36 | +Storybook 10.1 부터 제공된 [Component Manifest](https://github.com/storybookjs/storybook/pull/32751) 와 MCP(Model Context Protocol) 덕분에 AI 도구가 Storybook 에서 컴포넌트 정보를 쉽게 가져올 수 있게 되었습니다. |
| 37 | + |
| 38 | +이번 글에서는 Storybook MCP 를 직접 붙여보면서 정리한 설정방법과, 실제로 Storybook MCP 를 사용해서 어떤 기능을 활용할 수 있을지 기록해보았습니다. |
| 39 | + |
| 40 | +<br><br> |
| 41 | + |
| 42 | +# Storybook MCP 로 가능한 것들 |
| 43 | + |
| 44 | +Storybook MCP를 활성화하면, AI 코딩 도구는 Storybook을 문서 사이트가 아니라 <br> |
| 45 | +도구를 가진 서버로 인식하게 됩니다. |
| 46 | + |
| 47 | +즉, "스토리북을 읽는다"가 아니라 <br> |
| 48 | +정해진 MCP 도구를 호출해서 정보를 가져온다에 가깝습니다. |
| 49 | + |
| 50 | +현재 2026년 2월을 기준으로 Storybook MCP 가 제공하는 주요 도구는 다음과 같습니다. |
| 51 | + |
| 52 | + |
| 53 | + |
| 54 | +## 1. 전체 컴포넌트 / 문서 목록 조회 (`list-all-documentation`) |
| 55 | + |
| 56 | +- Storybook에 등록된 모든 UI 컴포넌트 |
| 57 | +- Docs 페이지 |
| 58 | +- Story 기반 문서 엔트리 |
| 59 | + |
| 60 | +의 전체 목록을 구조화된 데이터로 가져올 수 있습니다. |
| 61 | + |
| 62 | +덕분에 AI는 <br> |
| 63 | +"이 프로젝트에는 어떤 컴포넌트들이 있는지" 를 추측이 아니라 실제 데이터 기반으로 파악할 수 있습니다. |
| 64 | + |
| 65 | +## 2. 특정 컴포넌트의 상세 문서 조회 (`get-documentation`) |
| 66 | + |
| 67 | +- 특정 컴포넌트에 대한 Props 정의 |
| 68 | +- 각 Prop의 설명, 기본값 / 타입, 사용 예시 |
| 69 | +- 문서화된 스토리 정보 |
| 70 | + |
| 71 | +를 한 번에 가져올 수 있습니다. |
| 72 | + |
| 73 | +즉, |
| 74 | + |
| 75 | +- "이 컴포넌트는 어떤 Props를 받지?" |
| 76 | +- "이 옵션은 언제 쓰는 거지?" |
| 77 | + |
| 78 | +와같은 질문에 대해 AI가 Storybook 기준의 정답으로 응답하게 됩니다. |
| 79 | + |
| 80 | +## 3. 스토리 미리보기 렌더링 (`preview-stories`) |
| 81 | + |
| 82 | +- 하나 또는 여러 개의 Story를 지정하고 |
| 83 | +- 해당 스토리를 Storybook UI에서 직접 렌더링하거나 |
| 84 | +- 미리보기 URL을 반환받을 수 있습니다 |
| 85 | + |
| 86 | +이 덕분에 AI는 |
| 87 | + |
| 88 | +"이 상태의 컴포넌트를 실제로 보여줘", "이 Variant가 어떻게 생겼는지 확인하고 수정해줘" <br> |
| 89 | +와같은 요청을 시각적 맥락을 가진 상태로 처리할 수 있게 됩니다. |
| 90 | + |
| 91 | +## 4. Story 작성 규칙을 강제 (`get-storybook-story-instructions`) |
| 92 | + |
| 93 | +이게 생각보다 핵심이었습니다. |
| 94 | + |
| 95 | +Storybook MCP는 AI가 스토리를 생성하거나 수정하기 전에 <br> |
| 96 | +반드시 이 도구를 먼저 호출하도록 설계되어 있습니다. |
| 97 | + |
| 98 | +- 해당 프로젝트에서 사용하는 Story 구조 |
| 99 | +- Meta / StoryObj import 규칙 |
| 100 | +- 파일 네이밍 패턴 (`\*.stories.tsx` 등) |
| 101 | +- Play function, 테스트 유틸 사용 규칙 |
| 102 | +- Storybook 버전에 맞는 권장 패턴 |
| 103 | + |
| 104 | +즉, AI가 "대충 아는 Storybook 방식" 으로 코드를 쓰는 게 아니라 |
| 105 | +이 프로젝트의 Storybook 규칙을 먼저 학습한 뒤 작업하게 됩니다. |
| 106 | + |
| 107 | +<br><br> |
| 108 | + |
| 109 | +# Storybook MCP 설정하기 {#storybook-mcp-설정하기} |
| 110 | + |
| 111 | +## 요구사항 |
| 112 | + |
| 113 | +- Storybook 10.1+ 이상 |
| 114 | +- Storybook 을 로컬에서 실행할 수 있는 환경 |
| 115 | + |
| 116 | +## 1. `@storybook/addon-mcp` 설치 |
| 117 | + |
| 118 | +```bash |
| 119 | +npm install -D @storybook/addon-mcp |
| 120 | +``` |
| 121 | + |
| 122 | +설치 후, Storybook 관련 패키지들의 메이저, 마이너 버전을 10.1+ 이상으로 맞춰주는게 중요합니다. |
| 123 | + |
| 124 | +```json |
| 125 | +{ |
| 126 | + "devDependencies": { |
| 127 | + "@storybook/addon-docs": "^10.2.3", |
| 128 | + "@storybook/addon-mcp": "^0.2.2", |
| 129 | + "@storybook/nextjs": "^10.2.3", |
| 130 | + "storybook": "^10.2.3" |
| 131 | + } |
| 132 | +} |
| 133 | +``` |
| 134 | + |
| 135 | +## 2. `.storybook/main.ts` 에 MCP addon 추가 및 실험적 기능 활성화 |
| 136 | + |
| 137 | +```ts |
| 138 | +import type { StorybookConfig } from "@storybook/nextjs"; |
| 139 | + |
| 140 | +const config: StorybookConfig = { |
| 141 | + stories: ["../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"], |
| 142 | + addons: [ |
| 143 | + "@storybook/addon-mcp", // storybook mcp 애드온 추가 |
| 144 | + "@storybook/addon-docs", |
| 145 | + ], |
| 146 | + framework: { |
| 147 | + name: "@storybook/nextjs", |
| 148 | + options: {}, |
| 149 | + }, |
| 150 | + features: { |
| 151 | + // @ts-ignore storybook 10.1+ 실험적 기능 활성화 |
| 152 | + experimentalComponentsManifest: true, |
| 153 | + experimentalCodeExamples: true, |
| 154 | + }, |
| 155 | +}; |
| 156 | + |
| 157 | +export default config; |
| 158 | +``` |
| 159 | + |
| 160 | +여기서 중요한 포인트는 `@storybook/addon-mcp` 에드온을 추가하고, <br> |
| 161 | +`experimentalComponentsManifest`를 활성화함으로써 컴포넌트 메타데이터를 MCP 로 노출할 수 있습니다. |
| 162 | + |
| 163 | +## 3. MCP Client 연결 |
| 164 | + |
| 165 | +Storybook을 실행하면 `http://localhost:6006/mcp` 로 MCP 서버가 자동으로 활성화됩니다. <br> |
| 166 | +이제 생성형 AI 도구에서 이 URL을 MCP 엔드포인트로 지정하여 연결할 수 있습니다. |
| 167 | + |
| 168 | +### Antigravity (Gemini) |
| 169 | + |
| 170 | +`~/.gemini/antigravity/mcp_config.json` 경로에 |
| 171 | + |
| 172 | +```json |
| 173 | +{ |
| 174 | + "mcpServers": { |
| 175 | + "storybook-mcp": { |
| 176 | + "serverUrl": "http://localhost:6006/mcp" |
| 177 | + } |
| 178 | + } |
| 179 | +} |
| 180 | +``` |
| 181 | + |
| 182 | +와 같이 설정합니다. |
| 183 | + |
| 184 | +또는 Antigravity UI 에서 MCP Servers 설정으로 들어가서 `mcp_config.json` 을 찾을수도 있습니다 |
| 185 | + |
| 186 | +<div style="display: flex; gap: 12px; margin-top: 10px; margin-bottom: 10px;"> |
| 187 | +<img src="./img/storybook-mcp/1.png" style="width:50%; object-fit:cover; display:block;"/> |
| 188 | +<img src="./img/storybook-mcp/2.png" style="width:50%; object-fit:cover; display:block;"/> |
| 189 | +</div> |
| 190 | + |
| 191 | +### Claude Code |
| 192 | + |
| 193 | +프로젝트 루트의 `.mcp.json` 또는 `~/.claude.json` |
| 194 | + |
| 195 | +```json |
| 196 | +{ |
| 197 | + "mcpServers": { |
| 198 | + "storybook-mcp": { |
| 199 | + "url": "http://localhost:6006/mcp" |
| 200 | + } |
| 201 | + } |
| 202 | +} |
| 203 | +``` |
| 204 | + |
| 205 | +### Cursor |
| 206 | + |
| 207 | +`.cursor/mcp.json` (프로젝트) 또는 `~/.cursor/mcp.json` (글로벌) |
| 208 | + |
| 209 | +```json |
| 210 | +{ |
| 211 | + "mcpServers": { |
| 212 | + "storybook-mcp": { |
| 213 | + "url": "http://localhost:6006/mcp" |
| 214 | + } |
| 215 | + } |
| 216 | +} |
| 217 | +``` |
| 218 | + |
| 219 | +<br><br> |
| 220 | + |
| 221 | +# 마치며 |
| 222 | + |
| 223 | +Storybook MCP를 써보면서 가장 크게 느낀 점은, <br> |
| 224 | +Storybook의 역할이 단순한 컴포넌트 문서에서 AI가 참조하는 공식 컨텍스트 소스로 확장됐다는 점이었습니다. |
| 225 | + |
| 226 | +이전까지는 AI에게 컴포넌트 사용법을 설명하려면 |
| 227 | + |
| 228 | +- Props 구조를 따로 설명하고 |
| 229 | +- 디자인 의도를 문장으로 풀어서 쓰고 |
| 230 | +- 이 프로젝트에서는 이렇게 써 같은 맥락을 계속 반복해야 했습니다 |
| 231 | + |
| 232 | +Storybook MCP를 붙인 이후에는 그 설명의 상당 부분을 Storybook 자체에 위임할 수 있게 됩니다 |
| 233 | + |
| 234 | +AI는 더 이상 추측으로 코드를 생성하지 않고, 실제 프로젝트에 등록된 컴포넌트 목록을 기준으로 사고하고, Storybook에 정의된 Props와 규칙을 따르며 기존 스토리 패턴을 깨지 않는 방향으로 작업합니다. |
| 235 | + |
| 236 | +특히 다음과 같은 상황에서 체감이 컸습니다. |
| 237 | + |
| 238 | +- 컴포넌트 수가 많아질수록 |
| 239 | +- 디자인 시스템 / 공통 UI 레이어가 존재할수록 |
| 240 | +- Storybook 규칙이 어느 정도 정립된 프로젝트일수록 |
| 241 | + |
| 242 | +아직은 실험적인 기능도 많고, 모든 AI 도구가 동일하게 지원하는 단계는 아니지만, |
| 243 | +Storybook이 MCP를 공식적으로 밀고 있다는 점에서 앞으로의 활용 가능성은 충분히 열려 있다고 느꼈습니다. |
0 commit comments