@framingui/mcp-server 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/README.md +1027 -0
  2. package/dist/auth/cache.d.ts +28 -0
  3. package/dist/auth/cache.d.ts.map +1 -0
  4. package/dist/auth/cache.js +48 -0
  5. package/dist/auth/cache.js.map +1 -0
  6. package/dist/auth/guard.d.ts +22 -0
  7. package/dist/auth/guard.d.ts.map +1 -0
  8. package/dist/auth/guard.js +37 -0
  9. package/dist/auth/guard.js.map +1 -0
  10. package/dist/auth/state.d.ts +42 -0
  11. package/dist/auth/state.d.ts.map +1 -0
  12. package/dist/auth/state.js +96 -0
  13. package/dist/auth/state.js.map +1 -0
  14. package/dist/auth/theme-access.d.ts +21 -0
  15. package/dist/auth/theme-access.d.ts.map +1 -0
  16. package/dist/auth/theme-access.js +30 -0
  17. package/dist/auth/theme-access.js.map +1 -0
  18. package/dist/auth/verify.d.ts +44 -0
  19. package/dist/auth/verify.d.ts.map +1 -0
  20. package/dist/auth/verify.js +77 -0
  21. package/dist/auth/verify.js.map +1 -0
  22. package/dist/cli/agent-md-templates.d.ts +16 -0
  23. package/dist/cli/agent-md-templates.d.ts.map +1 -0
  24. package/dist/cli/agent-md-templates.js +311 -0
  25. package/dist/cli/agent-md-templates.js.map +1 -0
  26. package/dist/cli/credentials.d.ts +29 -0
  27. package/dist/cli/credentials.d.ts.map +1 -0
  28. package/dist/cli/credentials.js +66 -0
  29. package/dist/cli/credentials.js.map +1 -0
  30. package/dist/cli/guide-template.d.ts +10 -0
  31. package/dist/cli/guide-template.d.ts.map +1 -0
  32. package/dist/cli/guide-template.js +195 -0
  33. package/dist/cli/guide-template.js.map +1 -0
  34. package/dist/cli/index.d.ts +7 -0
  35. package/dist/cli/index.d.ts.map +1 -0
  36. package/dist/cli/index.js +41 -0
  37. package/dist/cli/index.js.map +1 -0
  38. package/dist/cli/init.d.ts +6 -0
  39. package/dist/cli/init.d.ts.map +1 -0
  40. package/dist/cli/init.js +319 -0
  41. package/dist/cli/init.js.map +1 -0
  42. package/dist/cli/login.d.ts +9 -0
  43. package/dist/cli/login.d.ts.map +1 -0
  44. package/dist/cli/login.js +121 -0
  45. package/dist/cli/login.js.map +1 -0
  46. package/dist/cli/logout.d.ts +9 -0
  47. package/dist/cli/logout.d.ts.map +1 -0
  48. package/dist/cli/logout.js +18 -0
  49. package/dist/cli/logout.js.map +1 -0
  50. package/dist/cli/status.d.ts +9 -0
  51. package/dist/cli/status.d.ts.map +1 -0
  52. package/dist/cli/status.js +31 -0
  53. package/dist/cli/status.js.map +1 -0
  54. package/dist/data/component-props.d.ts +30 -0
  55. package/dist/data/component-props.d.ts.map +1 -0
  56. package/dist/data/component-props.js +537 -0
  57. package/dist/data/component-props.js.map +1 -0
  58. package/dist/data/component-registry.d.ts +30 -0
  59. package/dist/data/component-registry.d.ts.map +1 -0
  60. package/dist/data/component-registry.js +320 -0
  61. package/dist/data/component-registry.js.map +1 -0
  62. package/dist/data/examples/screen-examples.d.ts +38 -0
  63. package/dist/data/examples/screen-examples.d.ts.map +1 -0
  64. package/dist/data/examples/screen-examples.js +500 -0
  65. package/dist/data/examples/screen-examples.js.map +1 -0
  66. package/dist/data/hint-generator.d.ts +16 -0
  67. package/dist/data/hint-generator.d.ts.map +1 -0
  68. package/dist/data/hint-generator.js +298 -0
  69. package/dist/data/hint-generator.js.map +1 -0
  70. package/dist/data/recipe-resolver.d.ts +48 -0
  71. package/dist/data/recipe-resolver.d.ts.map +1 -0
  72. package/dist/data/recipe-resolver.js +226 -0
  73. package/dist/data/recipe-resolver.js.map +1 -0
  74. package/dist/data/template-matcher.d.ts +50 -0
  75. package/dist/data/template-matcher.d.ts.map +1 -0
  76. package/dist/data/template-matcher.js +240 -0
  77. package/dist/data/template-matcher.js.map +1 -0
  78. package/dist/generators/core-resolver.d.ts +56 -0
  79. package/dist/generators/core-resolver.d.ts.map +1 -0
  80. package/dist/generators/core-resolver.js +490 -0
  81. package/dist/generators/core-resolver.js.map +1 -0
  82. package/dist/generators/css-generator.d.ts +49 -0
  83. package/dist/generators/css-generator.d.ts.map +1 -0
  84. package/dist/generators/css-generator.js +294 -0
  85. package/dist/generators/css-generator.js.map +1 -0
  86. package/dist/generators/index.d.ts +13 -0
  87. package/dist/generators/index.d.ts.map +1 -0
  88. package/dist/generators/index.js +16 -0
  89. package/dist/generators/index.js.map +1 -0
  90. package/dist/generators/llm-generator.d.ts +96 -0
  91. package/dist/generators/llm-generator.d.ts.map +1 -0
  92. package/dist/generators/llm-generator.js +296 -0
  93. package/dist/generators/llm-generator.js.map +1 -0
  94. package/dist/index.d.ts +3 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +965 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/prompts/getting-started.d.ts +18 -0
  99. package/dist/prompts/getting-started.d.ts.map +1 -0
  100. package/dist/prompts/getting-started.js +112 -0
  101. package/dist/prompts/getting-started.js.map +1 -0
  102. package/dist/prompts/screen-workflow.d.ts +17 -0
  103. package/dist/prompts/screen-workflow.d.ts.map +1 -0
  104. package/dist/prompts/screen-workflow.js +246 -0
  105. package/dist/prompts/screen-workflow.js.map +1 -0
  106. package/dist/schemas/mcp-schemas.d.ts +4342 -0
  107. package/dist/schemas/mcp-schemas.d.ts.map +1 -0
  108. package/dist/schemas/mcp-schemas.js +989 -0
  109. package/dist/schemas/mcp-schemas.js.map +1 -0
  110. package/dist/storage/blueprint-storage.d.ts +68 -0
  111. package/dist/storage/blueprint-storage.d.ts.map +1 -0
  112. package/dist/storage/blueprint-storage.js +135 -0
  113. package/dist/storage/blueprint-storage.js.map +1 -0
  114. package/dist/storage/timestamp-manager.d.ts +32 -0
  115. package/dist/storage/timestamp-manager.d.ts.map +1 -0
  116. package/dist/storage/timestamp-manager.js +59 -0
  117. package/dist/storage/timestamp-manager.js.map +1 -0
  118. package/dist/tools/export-screen.d.ts +34 -0
  119. package/dist/tools/export-screen.d.ts.map +1 -0
  120. package/dist/tools/export-screen.js +344 -0
  121. package/dist/tools/export-screen.js.map +1 -0
  122. package/dist/tools/generate-blueprint.d.ts +15 -0
  123. package/dist/tools/generate-blueprint.d.ts.map +1 -0
  124. package/dist/tools/generate-blueprint.js +165 -0
  125. package/dist/tools/generate-blueprint.js.map +1 -0
  126. package/dist/tools/generate-screen.d.ts +13 -0
  127. package/dist/tools/generate-screen.d.ts.map +1 -0
  128. package/dist/tools/generate-screen.js +82 -0
  129. package/dist/tools/generate-screen.js.map +1 -0
  130. package/dist/tools/get-screen-generation-context.d.ts +11 -0
  131. package/dist/tools/get-screen-generation-context.d.ts.map +1 -0
  132. package/dist/tools/get-screen-generation-context.js +325 -0
  133. package/dist/tools/get-screen-generation-context.js.map +1 -0
  134. package/dist/tools/list-components.d.ts +15 -0
  135. package/dist/tools/list-components.d.ts.map +1 -0
  136. package/dist/tools/list-components.js +46 -0
  137. package/dist/tools/list-components.js.map +1 -0
  138. package/dist/tools/list-icon-libraries.d.ts +12 -0
  139. package/dist/tools/list-icon-libraries.d.ts.map +1 -0
  140. package/dist/tools/list-icon-libraries.js +48 -0
  141. package/dist/tools/list-icon-libraries.js.map +1 -0
  142. package/dist/tools/list-screen-templates.d.ts +15 -0
  143. package/dist/tools/list-screen-templates.d.ts.map +1 -0
  144. package/dist/tools/list-screen-templates.js +61 -0
  145. package/dist/tools/list-screen-templates.js.map +1 -0
  146. package/dist/tools/list-themes.d.ts +13 -0
  147. package/dist/tools/list-themes.d.ts.map +1 -0
  148. package/dist/tools/list-themes.js +42 -0
  149. package/dist/tools/list-themes.js.map +1 -0
  150. package/dist/tools/list-tokens.d.ts +13 -0
  151. package/dist/tools/list-tokens.d.ts.map +1 -0
  152. package/dist/tools/list-tokens.js +92 -0
  153. package/dist/tools/list-tokens.js.map +1 -0
  154. package/dist/tools/preview-component.d.ts +18 -0
  155. package/dist/tools/preview-component.d.ts.map +1 -0
  156. package/dist/tools/preview-component.js +63 -0
  157. package/dist/tools/preview-component.js.map +1 -0
  158. package/dist/tools/preview-icon-library.d.ts +13 -0
  159. package/dist/tools/preview-icon-library.d.ts.map +1 -0
  160. package/dist/tools/preview-icon-library.js +63 -0
  161. package/dist/tools/preview-icon-library.js.map +1 -0
  162. package/dist/tools/preview-screen-template.d.ts +18 -0
  163. package/dist/tools/preview-screen-template.d.ts.map +1 -0
  164. package/dist/tools/preview-screen-template.js +99 -0
  165. package/dist/tools/preview-screen-template.js.map +1 -0
  166. package/dist/tools/preview-theme.d.ts +15 -0
  167. package/dist/tools/preview-theme.d.ts.map +1 -0
  168. package/dist/tools/preview-theme.js +172 -0
  169. package/dist/tools/preview-theme.js.map +1 -0
  170. package/dist/tools/validate-environment.d.ts +37 -0
  171. package/dist/tools/validate-environment.d.ts.map +1 -0
  172. package/dist/tools/validate-environment.js +153 -0
  173. package/dist/tools/validate-environment.js.map +1 -0
  174. package/dist/tools/validate-screen-definition.d.ts +10 -0
  175. package/dist/tools/validate-screen-definition.d.ts.map +1 -0
  176. package/dist/tools/validate-screen-definition.js +559 -0
  177. package/dist/tools/validate-screen-definition.js.map +1 -0
  178. package/dist/tools/validate-screen.d.ts +13 -0
  179. package/dist/tools/validate-screen.d.ts.map +1 -0
  180. package/dist/tools/validate-screen.js +106 -0
  181. package/dist/tools/validate-screen.js.map +1 -0
  182. package/dist/tools/whoami.d.ts +17 -0
  183. package/dist/tools/whoami.d.ts.map +1 -0
  184. package/dist/tools/whoami.js +65 -0
  185. package/dist/tools/whoami.js.map +1 -0
  186. package/dist/utils/dependency-extractor.d.ts +13 -0
  187. package/dist/utils/dependency-extractor.d.ts.map +1 -0
  188. package/dist/utils/dependency-extractor.js +232 -0
  189. package/dist/utils/dependency-extractor.js.map +1 -0
  190. package/dist/utils/error-handler.d.ts +29 -0
  191. package/dist/utils/error-handler.d.ts.map +1 -0
  192. package/dist/utils/error-handler.js +48 -0
  193. package/dist/utils/error-handler.js.map +1 -0
  194. package/dist/utils/logger.d.ts +8 -0
  195. package/dist/utils/logger.d.ts.map +1 -0
  196. package/dist/utils/logger.js +14 -0
  197. package/dist/utils/logger.js.map +1 -0
  198. package/dist/utils/package-json-reader.d.ts +37 -0
  199. package/dist/utils/package-json-reader.d.ts.map +1 -0
  200. package/dist/utils/package-json-reader.js +108 -0
  201. package/dist/utils/package-json-reader.js.map +1 -0
  202. package/dist/utils/tailwind-config-reader.d.ts +23 -0
  203. package/dist/utils/tailwind-config-reader.d.ts.map +1 -0
  204. package/dist/utils/tailwind-config-reader.js +81 -0
  205. package/dist/utils/tailwind-config-reader.js.map +1 -0
  206. package/package.json +103 -0
package/README.md ADDED
@@ -0,0 +1,1027 @@
1
+ # @tekton/mcp-server
2
+
3
+ Tekton MCP Server v2.0.0 - stdio-based MCP protocol implementation for Claude Code.
4
+
5
+ ## Overview
6
+
7
+ MCP (Model Context Protocol) server enabling AI-driven blueprint generation, theme preview, and production code export for the Tekton design system.
8
+
9
+ **SPEC**: [SPEC-MCP-002 v2.0.0](../../.moai/specs/SPEC-MCP-002/spec.md) - stdio-based MCP Standard
10
+
11
+ ## Features
12
+
13
+ - **🤖 stdio MCP Protocol**: Claude Code native tool registration via JSON-RPC 2.0 (16 tools)
14
+ - **🎨 Theme Preview**: 6 built-in OKLCH-based themes with CSS variable generation
15
+ - **📋 Blueprint Generation**: Natural language → Blueprint JSON with validation
16
+ - **💾 Data-Only Output**: No file system writes, Claude Code handles file operations
17
+ - **🚀 Production Export**: JSX, TSX, Vue code generation
18
+ - **🏗️ Screen Generation** (SPEC-LAYOUT-002): JSON screen definition → Production code
19
+ - **✅ Screen Validation**: Validate screen definitions with helpful error suggestions
20
+ - **🏷️ Layout Tokens**: List shell, page, and section tokens from SPEC-LAYOUT-001
21
+ - **🧩 Component Discovery** (SPEC-MCP-003): Browse 30+ UI components with props and examples
22
+ - **📄 Template Discovery** (SPEC-MCP-003): Explore 13 screen templates with customization boundaries
23
+ - **🔒 Secure Design**: No previewUrl/filePath exposure, input validation, path traversal protection
24
+
25
+ ## Installation
26
+
27
+ ```bash
28
+ pnpm install
29
+ ```
30
+
31
+ ## Authentication (Phase 4.1)
32
+
33
+ The MCP server supports optional API key authentication to enable access to premium themes.
34
+
35
+ ### Environment Variables
36
+
37
+ ```bash
38
+ # Required for premium theme access
39
+ TEKTON_API_KEY=tk_live_xxx...
40
+
41
+ # Optional: API endpoint (defaults to https://framingui.com)
42
+ TEKTON_API_URL=https://framingui.com # or http://localhost:3000 for dev
43
+ ```
44
+
45
+ ### Theme Access
46
+
47
+ **All Themes** (Requires valid API key and license):
48
+
49
+ - `classic-magazine` - Classic magazine style
50
+ - `dark-boldness` - Fitness & wellness
51
+ - `minimal-workspace` - Minimal workspace
52
+ - `neutral-workspace` - Neutral humanism
53
+ - `pebble` - Round minimal
54
+ - `square-minimalism` - Square minimalism
55
+
56
+ **Note:** All 6 themes require authentication. No free themes are available.
57
+
58
+ ### Authentication Behavior
59
+
60
+ **Without API Key**:
61
+
62
+ - Server starts normally
63
+ - All theme access attempts return authentication error
64
+ - Tools function but theme-related operations require auth
65
+
66
+ **With Valid API Key**:
67
+
68
+ - Server verifies key on startup (cached for 5 minutes)
69
+ - Licensed themes become accessible
70
+ - Unlicensed themes return license error
71
+
72
+ **With Invalid API Key**:
73
+
74
+ - Server logs error but continues running
75
+ - Falls back to no theme access
76
+ - Does not crash the server
77
+
78
+ ## Quick Start: `init` Command
79
+
80
+ 프로젝트에 FramingUI를 한 줄로 설정합니다.
81
+
82
+ ```bash
83
+ npx @framingui/mcp-server init
84
+ ```
85
+
86
+ 자동으로 수행되는 작업:
87
+
88
+ 1. **프로젝트 감지** - Next.js / Vite 자동 인식
89
+ 2. **패키지 설치** - `@framingui/ui`, `tailwindcss-animate` (패키지 매니저 자동 감지: pnpm/yarn/bun/npm)
90
+ 3. **Tailwind CSS 설정** - `tailwind.config.ts`에 content 경로 및 animate 플러그인 추가
91
+ 4. **CSS 토큰 임포트** - `globals.css`에 `@import '@framingui/ui/styles'` 추가
92
+ 5. **MCP 연결** - `.mcp.json`에 tekton 서버 등록 (프로젝트 루트)
93
+ 6. **가이드 생성** - `TEKTON-GUIDE.md` 프로젝트 루트에 생성
94
+ 7. **AI 에이전트 가이드** - `CLAUDE.md` 및 `AGENTS.md`에 Tekton 워크플로우 섹션 추가
95
+ 8. **완료 안내** - 인증 필요성 및 다음 단계 안내
96
+
97
+ 설정 완료 후 Claude Code를 재시작하면, AI에게 "로그인 화면 만들어줘"와 같이 자연어로 화면 생성을 요청할 수 있습니다.
98
+
99
+ ### CLI Commands
100
+
101
+ | Command | Description |
102
+ | -------------------------------- | --------------------- |
103
+ | `npx @framingui/mcp-server` | MCP stdio 서버 시작 |
104
+ | `npx @framingui/mcp-server init` | 프로젝트 초기 설정 |
105
+ | `tekton-mcp login` | 브라우저 OAuth 로그인 |
106
+ | `tekton-mcp logout` | 로그아웃 |
107
+ | `tekton-mcp status` | 인증 상태 확인 |
108
+
109
+ ## Development Quick Start
110
+
111
+ ### 1. Build the Server
112
+
113
+ ```bash
114
+ pnpm install
115
+ pnpm build
116
+ ```
117
+
118
+ ### 2. Test with MCP Inspector
119
+
120
+ ```bash
121
+ pnpm inspect
122
+ # Opens browser at http://localhost:6274
123
+ ```
124
+
125
+ ### 3. Integrate with Claude Code
126
+
127
+ See [Claude Code Integration Guide](../../.moai/specs/SPEC-MCP-002/CLAUDE-CODE-INTEGRATION.md) for complete setup instructions.
128
+
129
+ **Quick Config** (프로젝트 루트 `.mcp.json`):
130
+
131
+ ```json
132
+ {
133
+ "mcpServers": {
134
+ "tekton": {
135
+ "type": "stdio",
136
+ "command": "npx",
137
+ "args": ["-y", "@framingui/mcp-server"]
138
+ }
139
+ }
140
+ }
141
+ ```
142
+
143
+ ## MCP Tools
144
+
145
+ ### 1. Generate Blueprint
146
+
147
+ **Tool**: `generate-blueprint`
148
+
149
+ **Description**: Generate a UI blueprint from natural language description
150
+
151
+ **Input**:
152
+
153
+ ```json
154
+ {
155
+ "description": "User profile dashboard with avatar, bio, settings link",
156
+ "layout": "sidebar-left",
157
+ "themeId": "calm-wellness",
158
+ "componentHints": ["Card", "Avatar", "Button"]
159
+ }
160
+ ```
161
+
162
+ **Output** (Data-Only, v2.0.0):
163
+
164
+ ```json
165
+ {
166
+ "success": true,
167
+ "blueprint": {
168
+ "id": "bp-1738123456789-abc123",
169
+ "name": "User profile dashboard",
170
+ "themeId": "calm-wellness",
171
+ "layout": "sidebar-left",
172
+ "components": [...],
173
+ "timestamp": 1738123456789
174
+ }
175
+ }
176
+ ```
177
+
178
+ **Note**: `previewUrl` field removed in v2.0.0 (use SPEC-PLAYGROUND-001 for visual preview)
179
+
180
+ ### 2. Preview Theme
181
+
182
+ **Tool**: `preview-theme`
183
+
184
+ **Description**: Preview a Tekton theme and retrieve its design tokens
185
+
186
+ **Input**:
187
+
188
+ ```json
189
+ {
190
+ "themeId": "premium-editorial"
191
+ }
192
+ ```
193
+
194
+ **Output** (Data-Only, v2.0.0):
195
+
196
+ ```json
197
+ {
198
+ "success": true,
199
+ "theme": {
200
+ "id": "premium-editorial",
201
+ "name": "Premium Editorial",
202
+ "description": "Elegant magazine-style UI",
203
+ "cssVariables": {
204
+ "--color-primary": "oklch(0.2 0 0)",
205
+ "--color-secondary": "oklch(0.98 0 0)",
206
+ "--font-family": "Georgia",
207
+ "--border-radius": "0"
208
+ }
209
+ }
210
+ }
211
+ ```
212
+
213
+ **Note**: `previewUrl` field removed in v2.0.0
214
+
215
+ ### 3. Export Screen
216
+
217
+ **Tool**: `export-screen`
218
+
219
+ **Description**: Export a blueprint to production-ready code (TSX/JSX/Vue)
220
+
221
+ **Input** (v2.0.0: accepts blueprint object):
222
+
223
+ ```json
224
+ {
225
+ "blueprint": {
226
+ "id": "bp-1738123456789-abc123",
227
+ "name": "User Dashboard",
228
+ "themeId": "calm-wellness",
229
+ "layout": "sidebar-left",
230
+ "components": [],
231
+ "timestamp": 1738123456789
232
+ },
233
+ "format": "tsx"
234
+ }
235
+ ```
236
+
237
+ **Output** (Data-Only, v2.0.0):
238
+
239
+ ```json
240
+ {
241
+ "success": true,
242
+ "code": "import React from 'react';\n\nexport default function UserDashboard() { ... }"
243
+ }
244
+ ```
245
+
246
+ **Note**: `filePath` field removed in v2.0.0. Claude Code handles file writes.
247
+
248
+ ### 4. List Themes
249
+
250
+ **Tool**: `list-themes`
251
+
252
+ **Description**: List all available themes from `.moai/themes/generated/`
253
+
254
+ **Input**:
255
+
256
+ ```json
257
+ {}
258
+ ```
259
+
260
+ **Output**:
261
+
262
+ ```json
263
+ {
264
+ "success": true,
265
+ "themes": [
266
+ {
267
+ "id": "calm-wellness",
268
+ "name": "Calm Wellness",
269
+ "description": "Serene wellness applications",
270
+ "brandTone": "calm",
271
+ "schemaVersion": "2.1"
272
+ }
273
+ ],
274
+ "count": 13
275
+ }
276
+ ```
277
+
278
+ ## Screen Generation Tools (SPEC-LAYOUT-002 Phase 4)
279
+
280
+ ### 5. Generate Screen
281
+
282
+ **Tool**: `generate_screen`
283
+
284
+ **Description**: Generate production-ready code from JSON screen definition
285
+
286
+ **Input**:
287
+
288
+ ```json
289
+ {
290
+ "screenDefinition": {
291
+ "id": "user-dashboard",
292
+ "shell": "shell.web.dashboard",
293
+ "page": "page.dashboard",
294
+ "sections": [
295
+ {
296
+ "id": "header",
297
+ "token": "section.container",
298
+ "components": [
299
+ {
300
+ "type": "Heading",
301
+ "props": { "level": 1, "children": "Dashboard" }
302
+ }
303
+ ]
304
+ }
305
+ ]
306
+ },
307
+ "outputFormat": "react",
308
+ "options": {
309
+ "typescript": true,
310
+ "cssFramework": "styled-components"
311
+ }
312
+ }
313
+ ```
314
+
315
+ **Output**:
316
+
317
+ ```json
318
+ {
319
+ "success": true,
320
+ "code": "import React from 'react';\nimport styled from 'styled-components';\n\n...",
321
+ "cssVariables": ":root { --shell-header-height: 64px; ... }"
322
+ }
323
+ ```
324
+
325
+ **Output Formats**:
326
+
327
+ - `css-in-js`: Styled-components or Emotion
328
+ - `tailwind`: Tailwind CSS classes
329
+ - `react`: Pure React component with CSS variables
330
+
331
+ ### 6. Validate Screen
332
+
333
+ **Tool**: `validate_screen`
334
+
335
+ **Description**: Validate JSON screen definition with helpful feedback
336
+
337
+ **Input**:
338
+
339
+ ```json
340
+ {
341
+ "screenDefinition": {
342
+ "id": "test-screen",
343
+ "shell": "shell.web.app",
344
+ "page": "page.detail",
345
+ "sections": []
346
+ },
347
+ "strictMode": false
348
+ }
349
+ ```
350
+
351
+ **Output**:
352
+
353
+ ```json
354
+ {
355
+ "success": true,
356
+ "valid": true,
357
+ "errors": [],
358
+ "warnings": ["Optional field 'meta' not provided"],
359
+ "suggestions": [
360
+ {
361
+ "field": "shell",
362
+ "message": "Shell token must match pattern",
363
+ "suggestion": "Use format: shell.{platform}.{name}"
364
+ }
365
+ ]
366
+ }
367
+ ```
368
+
369
+ ### 7. List Tokens
370
+
371
+ **Tool**: `list_tokens`
372
+
373
+ **Description**: List available layout tokens from SPEC-LAYOUT-001
374
+
375
+ **Input**:
376
+
377
+ ```json
378
+ {
379
+ "tokenType": "shell",
380
+ "filter": "dashboard"
381
+ }
382
+ ```
383
+
384
+ **Output**:
385
+
386
+ ```json
387
+ {
388
+ "success": true,
389
+ "shells": [
390
+ {
391
+ "id": "shell.web.dashboard",
392
+ "name": "Web Dashboard Shell",
393
+ "description": "Dashboard application shell with header and sidebar",
394
+ "platform": "web"
395
+ }
396
+ ],
397
+ "metadata": {
398
+ "total": 1,
399
+ "filtered": 1
400
+ }
401
+ }
402
+ ```
403
+
404
+ **Token Types**:
405
+
406
+ - `shell`: Shell layout tokens (shell.web._, shell.mobile._)
407
+ - `page`: Page layout tokens (page.dashboard, page.detail, etc.)
408
+ - `section`: Section pattern tokens (section.grid-4, section.hero, etc.)
409
+ - `all`: All token types
410
+
411
+ ## Component & Template Discovery Tools (SPEC-MCP-003)
412
+
413
+ ### 8. List Components
414
+
415
+ **Tool**: `list-components`
416
+
417
+ **Description**: List all available UI components from @framingui component catalog
418
+
419
+ **Input**:
420
+
421
+ ```json
422
+ {
423
+ "category": "core",
424
+ "search": "button"
425
+ }
426
+ ```
427
+
428
+ **Parameters**:
429
+
430
+ - `category` (optional): Filter by category - `'core' | 'complex' | 'advanced' | 'all'` (default: `'all'`)
431
+ - `search` (optional): Search components by name or description
432
+
433
+ **Output**:
434
+
435
+ ```json
436
+ {
437
+ "success": true,
438
+ "components": [
439
+ {
440
+ "id": "button",
441
+ "name": "Button",
442
+ "category": "core",
443
+ "description": "Interactive button with variants",
444
+ "variantsCount": 6,
445
+ "hasSubComponents": false,
446
+ "tier": 1
447
+ }
448
+ ],
449
+ "count": 15,
450
+ "categories": {
451
+ "core": 15,
452
+ "complex": 10,
453
+ "advanced": 5
454
+ }
455
+ }
456
+ ```
457
+
458
+ **Component Categories**:
459
+
460
+ - **core** (Tier 1): Button, Input, Label, Card, Badge, Avatar, Separator, Checkbox, RadioGroup, Switch, Textarea, Skeleton, ScrollArea, Form, Select
461
+ - **complex** (Tier 2): Dialog, DropdownMenu, Table, Tabs, Toast, Tooltip, Popover, Sheet, AlertDialog, Progress
462
+ - **advanced** (Tier 3): Sidebar, NavigationMenu, Breadcrumb, Command, Calendar
463
+
464
+ **Total Components**: 30+
465
+
466
+ ### 9. Preview Component
467
+
468
+ **Tool**: `preview-component`
469
+
470
+ **Description**: Get detailed information about a specific UI component including props, variants, sub-components, and usage examples
471
+
472
+ **Input**:
473
+
474
+ ```json
475
+ {
476
+ "componentId": "button",
477
+ "includeExamples": true,
478
+ "includeDependencies": true
479
+ }
480
+ ```
481
+
482
+ **Parameters**:
483
+
484
+ - `componentId` (required): Component ID (lowercase with hyphens, e.g., `'button'`, `'card'`, `'dialog'`)
485
+ - `includeExamples` (optional): Include usage examples (default: `true`)
486
+ - `includeDependencies` (optional): Include dependency information (default: `true`)
487
+
488
+ **Output**:
489
+
490
+ ```json
491
+ {
492
+ "success": true,
493
+ "component": {
494
+ "id": "button",
495
+ "name": "Button",
496
+ "category": "core",
497
+ "description": "Interactive button with variants",
498
+ "tier": 1,
499
+ "props": [
500
+ {
501
+ "name": "variant",
502
+ "type": "'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'",
503
+ "required": false,
504
+ "defaultValue": "'default'",
505
+ "description": "Visual style variant"
506
+ },
507
+ {
508
+ "name": "size",
509
+ "type": "'default' | 'sm' | 'lg' | 'icon'",
510
+ "required": false,
511
+ "defaultValue": "'default'",
512
+ "description": "Button size"
513
+ }
514
+ ],
515
+ "variants": [
516
+ {
517
+ "name": "variant",
518
+ "value": "default",
519
+ "description": "Default blue button"
520
+ },
521
+ {
522
+ "name": "variant",
523
+ "value": "destructive",
524
+ "description": "Red destructive action"
525
+ }
526
+ ],
527
+ "importStatement": "import { Button } from '@framingui';",
528
+ "dependencies": {
529
+ "internal": [],
530
+ "external": ["@radix-ui/react-slot"]
531
+ },
532
+ "examples": [
533
+ {
534
+ "title": "Basic Usage",
535
+ "code": "import { Button } from '@framingui';\n\n<Button variant=\"default\">Click me</Button>",
536
+ "description": "Simple button with default variant"
537
+ }
538
+ ],
539
+ "accessibility": "Supports keyboard navigation and ARIA attributes"
540
+ }
541
+ }
542
+ ```
543
+
544
+ **Error Handling**: When component not found, returns error with list of available components
545
+
546
+ ### 10. List Screen Templates
547
+
548
+ **Tool**: `list-screen-templates`
549
+
550
+ **Description**: List all available screen templates from the Tekton template registry
551
+
552
+ **Input**:
553
+
554
+ ```json
555
+ {
556
+ "category": "auth",
557
+ "search": "login"
558
+ }
559
+ ```
560
+
561
+ **Parameters**:
562
+
563
+ - `category` (optional): Filter by category - `'auth' | 'dashboard' | 'form' | 'marketing' | 'feedback' | 'all'` (default: `'all'`)
564
+ - `search` (optional): Search templates by name or description
565
+
566
+ **Output**:
567
+
568
+ ```json
569
+ {
570
+ "success": true,
571
+ "templates": [
572
+ {
573
+ "id": "auth.login",
574
+ "name": "Login",
575
+ "category": "auth",
576
+ "description": "User authentication login screen",
577
+ "requiredComponentsCount": 5,
578
+ "layoutType": "centered",
579
+ "version": "1.0.0",
580
+ "tags": ["authentication", "form"]
581
+ }
582
+ ],
583
+ "count": 4,
584
+ "categories": {
585
+ "auth": 4,
586
+ "dashboard": 1,
587
+ "form": 0,
588
+ "marketing": 3,
589
+ "feedback": 5
590
+ }
591
+ }
592
+ ```
593
+
594
+ **Template Categories**:
595
+
596
+ - **auth**: login, signup, forgot-password, verification
597
+ - **marketing**: landing, preferences, profile
598
+ - **feedback**: loading, error, empty, confirmation, success
599
+ - **dashboard**: overview
600
+
601
+ **Total Templates**: 13
602
+
603
+ ## MCP Prompts (Universal Guidance)
604
+
605
+ The MCP server provides 2 built-in prompts that work across all MCP clients:
606
+
607
+ ### 1. getting-started
608
+
609
+ **Purpose**: Complete onboarding guide for FramingUI
610
+
611
+ **Content**:
612
+
613
+ - Authentication setup (tekton-mcp login)
614
+ - Theme exploration workflow
615
+ - Component availability checking
616
+ - 4-step screen generation workflow
617
+ - Common mistakes and troubleshooting
618
+
619
+ **When to use**: First-time users, onboarding, workflow overview
620
+
621
+ ### 2. screen-workflow
622
+
623
+ **Purpose**: Detailed 4-step production workflow
624
+
625
+ **Content**:
626
+
627
+ - Step 1/4: get-screen-generation-context
628
+ - Step 2/4: validate-screen-definition
629
+ - Step 3/4: generate_screen
630
+ - Step 4/4: validate-environment
631
+ - Complete examples and troubleshooting
632
+
633
+ **When to use**: Production screen generation, workflow clarification
634
+
635
+ **Note**: These prompts are platform-agnostic and work with Claude Code, OpenAI Codex, Cursor, Windsurf, and any MCP-compatible client.
636
+
637
+ **Total Prompts**: 2
638
+
639
+ ### 11. Preview Screen Template
640
+
641
+ **Tool**: `preview-screen-template`
642
+
643
+ **Description**: Get detailed information about a specific screen template including skeleton structure, layout configuration, and customization boundaries
644
+
645
+ **Input**:
646
+
647
+ ```json
648
+ {
649
+ "templateId": "auth.login",
650
+ "includeLayoutTokens": true
651
+ }
652
+ ```
653
+
654
+ **Parameters**:
655
+
656
+ - `templateId` (required): Template ID in format `category.name` (e.g., `'auth.login'`, `'feedback.loading'`)
657
+ - `includeLayoutTokens` (optional): Include responsive layout tokens (default: `true`)
658
+
659
+ **Output**:
660
+
661
+ ```json
662
+ {
663
+ "success": true,
664
+ "template": {
665
+ "id": "auth.login",
666
+ "name": "Login",
667
+ "category": "auth",
668
+ "description": "User authentication login screen",
669
+ "version": "1.0.0",
670
+ "skeleton": {
671
+ "shell": "centered-card",
672
+ "page": "auth-page",
673
+ "sections": [
674
+ {
675
+ "id": "header",
676
+ "name": "Header",
677
+ "slot": "logo",
678
+ "required": true
679
+ },
680
+ {
681
+ "id": "form",
682
+ "name": "Form",
683
+ "slot": "main",
684
+ "required": true
685
+ }
686
+ ]
687
+ },
688
+ "layout": {
689
+ "type": "centered",
690
+ "responsive": {
691
+ "mobile": {
692
+ "padding": "1rem",
693
+ "gap": "1rem",
694
+ "columns": 1
695
+ },
696
+ "tablet": {
697
+ "padding": "2rem",
698
+ "gap": "1.5rem",
699
+ "columns": 1
700
+ },
701
+ "desktop": {
702
+ "padding": "2rem",
703
+ "gap": "2rem",
704
+ "columns": 1
705
+ }
706
+ }
707
+ },
708
+ "customizable": {
709
+ "texts": ["title", "subtitle", "button_label"],
710
+ "optional": ["social_login", "remember_me"],
711
+ "slots": ["logo", "footer", "socialLogin"]
712
+ },
713
+ "requiredComponents": ["Input", "Button", "Card", "Form", "Label"],
714
+ "importStatement": "import { LoginTemplate } from '@framingui';",
715
+ "exampleProps": {
716
+ "texts": {
717
+ "title": "Welcome Back",
718
+ "subtitle": "Sign in to your account"
719
+ },
720
+ "options": {
721
+ "social_login": true,
722
+ "remember_me": true
723
+ }
724
+ },
725
+ "created": "2026-01-15",
726
+ "updated": "2026-01-20",
727
+ "tags": ["authentication", "form"]
728
+ }
729
+ }
730
+ ```
731
+
732
+ **Error Handling**: When template not found, returns error with list of available templates
733
+
734
+ **Use Cases**:
735
+
736
+ - AI agents exploring available templates
737
+ - Template integration planning
738
+ - Understanding customization boundaries
739
+ - Component dependency analysis
740
+
741
+ ## Usage Examples
742
+
743
+ ### From Claude Code
744
+
745
+ **Blueprint & Theme Workflows**:
746
+
747
+ ```
748
+ User: "Create a user dashboard with profile card using calm-wellness theme"
749
+ → Claude Code calls generate-blueprint
750
+ → Blueprint JSON returned
751
+
752
+ User: "Show me the premium-editorial theme"
753
+ → Claude Code calls preview-theme
754
+ → Theme metadata and CSS variables returned
755
+
756
+ User: "Export that dashboard as TypeScript React"
757
+ → Claude Code calls export-screen
758
+ → TSX code returned (ready to copy/paste)
759
+ ```
760
+
761
+ **Screen Generation Workflows**:
762
+
763
+ ```
764
+ User: "Generate a dashboard screen using shell.web.dashboard and page.dashboard"
765
+ → Claude Code calls generate_screen
766
+ → Production-ready React code with CSS variables returned
767
+
768
+ User: "What layout tokens are available for sections?"
769
+ → Claude Code calls list_tokens with tokenType='section'
770
+ → List of section tokens (grid-2, grid-3, hero, etc.) returned
771
+ ```
772
+
773
+ **Component Discovery Workflows** (SPEC-MCP-003):
774
+
775
+ ```
776
+ User: "What UI components are available?"
777
+ → Claude Code calls list-components
778
+ → List of 30+ components categorized by tier returned
779
+
780
+ User: "Show me details about the Button component"
781
+ → Claude Code calls preview-component with componentId='button'
782
+ → Props, variants, examples, and dependencies returned
783
+
784
+ User: "I need a dialog component. What are the props?"
785
+ → Claude Code calls preview-component with componentId='dialog'
786
+ → Complete Dialog component specification with sub-components returned
787
+ ```
788
+
789
+ **Template Discovery Workflows** (SPEC-MCP-003):
790
+
791
+ ```
792
+ User: "What screen templates are available for authentication?"
793
+ → Claude Code calls list-screen-templates with category='auth'
794
+ → 4 auth templates (login, signup, forgot-password, verification) returned
795
+
796
+ User: "Show me the login template structure"
797
+ → Claude Code calls preview-screen-template with templateId='auth.login'
798
+ → Skeleton, layout, customization boundaries, and required components returned
799
+
800
+ User: "What can I customize in the loading template?"
801
+ → Claude Code calls preview-screen-template with templateId='feedback.loading'
802
+ → Customizable texts, slots, and optional features returned
803
+ ```
804
+
805
+ See [Claude Code Integration Guide](../../.moai/specs/SPEC-MCP-002/CLAUDE-CODE-INTEGRATION.md) for complete examples.
806
+
807
+ ## Architecture
808
+
809
+ ```
810
+ packages/mcp-server/
811
+ ├── src/
812
+ │ ├── index.ts # stdio MCP server entry point (13 tools)
813
+ │ ├── tools/ # MCP tool implementations
814
+ │ │ ├── generate-blueprint.ts # Blueprint generation
815
+ │ │ ├── preview-theme.ts # Theme preview
816
+ │ │ ├── list-themes.ts # Theme listing
817
+ │ │ ├── list-icon-libraries.ts # Icon library listing
818
+ │ │ ├── preview-icon-library.ts # Icon library preview
819
+ │ │ ├── export-screen.ts # Blueprint export
820
+ │ │ ├── generate-screen.ts # Screen code generation (SPEC-LAYOUT-002)
821
+ │ │ ├── validate-screen.ts # Screen validation (SPEC-LAYOUT-002)
822
+ │ │ ├── list-tokens.ts # Layout token listing (SPEC-LAYOUT-002)
823
+ │ │ ├── list-components.ts # Component listing (SPEC-MCP-003)
824
+ │ │ ├── preview-component.ts # Component preview (SPEC-MCP-003)
825
+ │ │ ├── list-screen-templates.ts # Template listing (SPEC-MCP-003)
826
+ │ │ └── preview-screen-template.ts # Template preview (SPEC-MCP-003)
827
+ │ ├── data/ # Static data registries (SPEC-MCP-003)
828
+ │ │ ├── component-registry.ts # Component metadata registry
829
+ │ │ └── component-metadata.json # Static component metadata
830
+ │ ├── storage/ # Blueprint storage
831
+ │ │ ├── blueprint-storage.ts
832
+ │ │ └── timestamp-manager.ts
833
+ │ ├── schemas/ # Zod validation
834
+ │ │ └── mcp-schemas.ts
835
+ │ └── utils/ # Helper functions
836
+ │ ├── error-handler.ts
837
+ │ └── logger.ts # stderr-only logging
838
+ └── __tests__/ # Test suites
839
+ ├── tools/ # Tool tests
840
+ │ ├── generate-blueprint.test.ts
841
+ │ ├── preview-theme.test.ts
842
+ │ ├── export-screen.test.ts
843
+ │ ├── screen-tools.test.ts # SPEC-LAYOUT-002 Phase 4 tests
844
+ │ ├── list-components.test.ts # SPEC-MCP-003 tests
845
+ │ ├── preview-component.test.ts # SPEC-MCP-003 tests
846
+ │ ├── list-screen-templates.test.ts # SPEC-MCP-003 tests
847
+ │ └── preview-screen-template.test.ts # SPEC-MCP-003 tests
848
+ ├── mcp-protocol/ # JSON-RPC validation
849
+ ├── storage/ # Storage tests
850
+ └── utils/ # Utility tests
851
+ ```
852
+
853
+ **Key Changes in v2.0.0**:
854
+
855
+ - ✅ stdio transport (StdioServerTransport)
856
+ - ✅ JSON-RPC 2.0 protocol
857
+ - ✅ stderr-only logging (stdout reserved for MCP messages)
858
+ - ❌ HTTP endpoints removed (moved to SPEC-PLAYGROUND-001)
859
+ - ❌ previewUrl/filePath removed from outputs
860
+
861
+ ## Built-in Themes (6 Total)
862
+
863
+ 1. `classic-magazine` - Classic magazine style
864
+ 2. `dark-boldness` - Fitness & wellness
865
+ 3. `minimal-workspace` - Minimal workspace
866
+ 4. `neutral-workspace` - Neutral humanism
867
+ 5. `pebble` - Round minimal
868
+ 6. `square-minimalism` - Square minimalism
869
+
870
+ **CSS Format**: All color values use OKLCH format for perceptual uniformity
871
+
872
+ **Authentication**: All themes require valid API key and license
873
+
874
+ ## Quality Metrics (SPEC-MCP-002 v2.0.0)
875
+
876
+ | Metric | Target | Current | Status |
877
+ | ---------------------------- | ------- | ---------- | ------ |
878
+ | **Test Coverage** | ≥ 85% | **94.39%** | ✅ |
879
+ | **TypeScript Errors** | 0 | **0** | ✅ |
880
+ | **Critical Vulnerabilities** | 0 | **0** | ✅ |
881
+ | **Tool Response Time** | < 500ms | < 100ms | ✅ |
882
+ | **Server Startup** | < 1s | < 500ms | ✅ |
883
+
884
+ **Test Results**:
885
+
886
+ - 22 test files
887
+ - 214 test cases
888
+ - 100% pass rate
889
+ - Zero failures
890
+
891
+ ## Integration with @tekton/core
892
+
893
+ All MCP tools reuse `@tekton/core` functions:
894
+
895
+ **Blueprint & Theme Tools**:
896
+
897
+ - `loadTheme()` - Theme loading
898
+ - `listThemes()` - Theme enumeration
899
+ - `createBlueprint()` - Blueprint creation
900
+ - `validateBlueprint()` - Schema validation
901
+ - `generateCSSVariables()` - CSS variable extraction
902
+ - `render()` - Code generation
903
+
904
+ **Screen Generation Tools** (SPEC-LAYOUT-002):
905
+
906
+ - `validateScreenDefinition()` - Screen validation
907
+ - `resolveScreen()` - Layout and component resolution
908
+ - `generateStyledComponents()` - CSS-in-JS generation
909
+ - `generateTailwindClasses()` - Tailwind CSS generation
910
+ - `generateReactComponent()` - React component generation
911
+ - `getAllShellTokens()` - Shell token listing
912
+ - `getAllPageLayoutTokens()` - Page token listing
913
+ - `getAllSectionPatternTokens()` - Section token listing
914
+
915
+ **Component & Template Discovery** (SPEC-MCP-003):
916
+
917
+ - `templateRegistry` from `@framingui` - Template metadata and search
918
+ - Component metadata registry - Static component catalog with 30+ components
919
+ - Component type definitions - TypeScript interfaces for props and variants
920
+ - Template structure definitions - Skeleton, layout, and customization schemas
921
+
922
+ **Zero code duplication** - Single source of truth maintained.
923
+
924
+ ## Documentation
925
+
926
+ ### SPEC-MCP-002 v2.0.0 Documentation
927
+
928
+ - 📋 [Specification](../../.moai/specs/SPEC-MCP-002/spec.md) - Complete requirements
929
+ - 📐 [Implementation Plan](../../.moai/specs/SPEC-MCP-002/plan.md) - Development roadmap
930
+ - ✅ [Acceptance Criteria](../../.moai/specs/SPEC-MCP-002/acceptance.md) - AC-001 ~ AC-012
931
+ - 🔄 [Handover Document](../../.moai/specs/SPEC-MCP-002/HANDOVER.md) - Implementation details
932
+
933
+ ### SPEC-MCP-003 v1.0.0 Documentation (Component & Template Discovery)
934
+
935
+ - 📋 [Specification](../../.moai/specs/SPEC-MCP-003/spec.md) - Component & template discovery requirements
936
+ - 🧩 Component Registry - 30+ UI components with metadata
937
+ - 📄 Template Registry - 13 screen templates with customization boundaries
938
+
939
+ ### Integration Guides
940
+
941
+ - 🤖 [Claude Code Integration](../../.moai/specs/SPEC-MCP-002/CLAUDE-CODE-INTEGRATION.md) - Setup and usage
942
+ - ✅ [Phase 5 Results](../../.moai/specs/SPEC-MCP-002/PHASE-5-RESULTS.md) - MCP Inspector validation
943
+ - 🎯 [Phase 6 Completion](../../.moai/specs/SPEC-MCP-002/PHASE-6-COMPLETION.md) - Integration testing
944
+
945
+ ### Quick Links
946
+
947
+ - 🧪 [Test Coverage Report](./coverage/) - 94.39% coverage
948
+ - 🎨 [Theme System](../../packages/core/src/themes/) - 6 themes
949
+ - 🧩 [UI Component Library](../../packages/ui/) - 30+ production-ready components
950
+ - 📄 [Template Registry](../../packages/ui/src/templates/) - 13 screen templates
951
+ - 🔧 [MCP Inspector](https://modelcontextprotocol.io/docs/tools/inspector) - Protocol testing tool
952
+
953
+ ## Development
954
+
955
+ ```bash
956
+ # Install dependencies
957
+ pnpm install
958
+
959
+ # Build (TypeScript → dist/)
960
+ pnpm build
961
+
962
+ # Run tests
963
+ pnpm test
964
+
965
+ # Test with coverage
966
+ pnpm test:coverage
967
+
968
+ # Watch mode
969
+ pnpm dev
970
+
971
+ # Lint
972
+ pnpm lint
973
+
974
+ # Start MCP server (stdio)
975
+ pnpm start
976
+
977
+ # MCP Inspector (browser-based testing)
978
+ pnpm inspect
979
+ ```
980
+
981
+ ### Validation Scripts
982
+
983
+ ```bash
984
+ # Automated MCP protocol validation
985
+ node validate-mcp.mjs
986
+
987
+ # Manual testing with MCP Inspector
988
+ pnpm inspect
989
+ ```
990
+
991
+ ## Migration from v1.0.0 (HTTP) to v2.0.0 (stdio)
992
+
993
+ **Breaking Changes**:
994
+
995
+ - ❌ HTTP endpoints removed → stdio transport only
996
+ - ❌ `previewUrl` field removed from `generate-blueprint` and `preview-theme` outputs
997
+ - ❌ `filePath` field removed from `export-screen` output
998
+ - ❌ File system writes removed from `export-screen`
999
+ - ✅ `export-screen` now accepts `blueprint` object instead of `blueprintId`
1000
+
1001
+ **Why?**
1002
+
1003
+ - **Claude Code Integration**: stdio is the standard MCP transport
1004
+ - **Data-Only Philosophy**: Claude Code handles all file operations
1005
+ - **Security**: No file system side effects from MCP tools
1006
+
1007
+ **Visual Preview**: Use [SPEC-PLAYGROUND-001](../../.moai/specs/SPEC-PLAYGROUND-001/) for React-based rendering
1008
+
1009
+ ## Contributing
1010
+
1011
+ Contributions welcome! Please ensure:
1012
+
1013
+ - Tests pass (`pnpm test`)
1014
+ - Coverage ≥ 85% (`pnpm test:coverage`)
1015
+ - TypeScript strict mode compliance (`pnpm build`)
1016
+ - MCP protocol validation (`node validate-mcp.mjs`)
1017
+
1018
+ ## License
1019
+
1020
+ MIT
1021
+
1022
+ ---
1023
+
1024
+ **Version**: 3.0.0 (stdio-based MCP standard + Component & Template Discovery)
1025
+ **Last Updated**: 2026-02-01
1026
+ **SPEC**: SPEC-MCP-002 v2.0.0, SPEC-LAYOUT-002 Phase 4, SPEC-MCP-003 v1.0.0
1027
+ **Total Tools**: 13 (9 existing + 4 new discovery tools)