@tekton-ui/mcp-server 0.3.0 → 0.3.2

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.
@@ -0,0 +1,197 @@
1
+ /**
2
+ * TEKTON-GUIDE.md 콘텐츠 템플릿
3
+ * 프레임워크별 맞춤 가이드 생성
4
+ */
5
+ /**
6
+ * TEKTON-GUIDE.md 콘텐츠 생성
7
+ */
8
+ export function generateGuide(framework) {
9
+ const importExample = framework === 'nextjs'
10
+ ? `// app/page.tsx
11
+ import { Button, Card, CardHeader, CardTitle, CardContent } from '@tekton-ui/ui';
12
+
13
+ export default function HomePage() {
14
+ return (
15
+ <Card>
16
+ <CardHeader>
17
+ <CardTitle>Welcome</CardTitle>
18
+ </CardHeader>
19
+ <CardContent>
20
+ <Button variant="default" size="lg">Get Started</Button>
21
+ </CardContent>
22
+ </Card>
23
+ );
24
+ }`
25
+ : `// src/App.tsx
26
+ import { Button, Card, CardHeader, CardTitle, CardContent } from '@tekton-ui/ui';
27
+
28
+ function App() {
29
+ return (
30
+ <Card>
31
+ <CardHeader>
32
+ <CardTitle>Welcome</CardTitle>
33
+ </CardHeader>
34
+ <CardContent>
35
+ <Button variant="default" size="lg">Get Started</Button>
36
+ </CardContent>
37
+ </Card>
38
+ );
39
+ }
40
+
41
+ export default App;`;
42
+ return `# Tekton UI Guide
43
+
44
+ > AI-powered design system for building production-ready UIs.
45
+
46
+ ---
47
+
48
+ ## Authentication
49
+
50
+ Before generating screens, authenticate with your Tekton account:
51
+
52
+ \`\`\`bash
53
+ tekton-mcp login
54
+ \`\`\`
55
+
56
+ This opens your browser for OAuth authentication. Your credentials are stored in \`~/.tekton/credentials.json\`.
57
+
58
+ **Why authentication is required:**
59
+ - All 6 themes require valid licenses
60
+ - No free themes are available
61
+ - Authentication verifies your license status
62
+
63
+ **Check your authentication status:**
64
+
65
+ \`\`\`bash
66
+ tekton-mcp status
67
+ \`\`\`
68
+
69
+ ---
70
+
71
+ ## Screen Generation Workflow
72
+
73
+ Tekton provides a **4-step workflow** for production-ready screen generation:
74
+
75
+ ### Step 1/4: Get Context
76
+
77
+ Claude Code calls \`get-screen-generation-context\` with your screen description:
78
+
79
+ \`\`\`
80
+ "Create a user dashboard with profile card and recent activity"
81
+ \`\`\`
82
+
83
+ Returns: Template matches, component suggestions, Screen Definition schema
84
+
85
+ ### Step 2/4: Validate Definition
86
+
87
+ Claude Code generates a Screen Definition JSON and calls \`validate-screen-definition\`:
88
+
89
+ Returns: Validation results, errors (if any), improvement suggestions
90
+
91
+ ### Step 3/4: Generate Code
92
+
93
+ Claude Code calls \`generate_screen\` with the validated definition:
94
+
95
+ Returns: Production React code, CSS variables, dependencies list
96
+
97
+ ### Step 4/4: Validate Environment
98
+
99
+ Claude Code calls \`validate-environment\` to check your project:
100
+
101
+ Returns: Missing packages, install commands, Tailwind CSS config validation
102
+
103
+ **Important:** Always check the dependencies and Tailwind configuration before running generated code.
104
+
105
+ ---
106
+
107
+ ## Quick Start
108
+
109
+ ### Using Components
110
+
111
+ \`\`\`tsx
112
+ ${importExample}
113
+ \`\`\`
114
+
115
+ ### AI Screen Generation
116
+
117
+ Claude Code에서 MCP 서버가 연결되어 있으면, 자연어로 화면을 생성할 수 있습니다:
118
+
119
+ \`\`\`
120
+ "로그인 화면 만들어줘"
121
+ "대시보드 페이지를 카드 레이아웃으로 만들어줘"
122
+ "사용자 프로필 페이지를 만들어줘"
123
+ \`\`\`
124
+
125
+ ---
126
+
127
+ ## Components (30+)
128
+
129
+ ### Core
130
+ Button, Input, Label, Card, Badge, Avatar, Separator, Checkbox, RadioGroup, Switch, Textarea, Skeleton, ScrollArea, Select, Progress
131
+
132
+ ### Complex
133
+ Dialog, DropdownMenu, Table, Tabs, Toast, Tooltip, Popover, Sheet, AlertDialog, NavigationMenu
134
+
135
+ ### Advanced
136
+ Sidebar, Breadcrumb, Command, Calendar, Form
137
+
138
+ ### Usage
139
+
140
+ \`\`\`tsx
141
+ import { Button, Dialog, DialogTrigger, DialogContent } from '@tekton-ui/ui';
142
+ \`\`\`
143
+
144
+ ---
145
+
146
+ ## Screen Templates (13)
147
+
148
+ 프로덕션에서 바로 사용할 수 있는 완성된 화면 템플릿:
149
+
150
+ | Category | Templates |
151
+ |----------|-----------|
152
+ | Auth | Login, Signup, ForgotPassword, Verification |
153
+ | Core | Landing, Preferences, Profile |
154
+ | Feedback | Loading, Error, Empty, Confirmation, Success |
155
+ | Dashboard | Dashboard |
156
+
157
+ ---
158
+
159
+ ## Themes (6)
160
+
161
+ | Theme ID | Description |
162
+ |----------|-------------|
163
+ | \`classic-magazine\` | Classic magazine style |
164
+ | \`equinox-fitness\` | Fitness & wellness |
165
+ | \`minimal-workspace\` | Minimal workspace |
166
+ | \`neutral-humanism\` | Neutral humanism |
167
+ | \`round-minimal\` | Round minimal |
168
+ | \`square-minimalism\` | Square minimalism |
169
+
170
+ ### Applying a Theme
171
+
172
+ \`\`\`tsx
173
+ import { themeToCSS, injectThemeCSS } from '@tekton-ui/ui';
174
+
175
+ // Inject theme CSS at runtime
176
+ injectThemeCSS(themeData);
177
+ \`\`\`
178
+
179
+ ---
180
+
181
+ ## Utility: cn()
182
+
183
+ \`\`\`tsx
184
+ import { cn } from '@tekton-ui/ui';
185
+
186
+ <div className={cn('p-4 bg-white', isActive && 'bg-blue-500', className)} />
187
+ \`\`\`
188
+
189
+ ---
190
+
191
+ ## Links
192
+
193
+ - [npm: @tekton-ui/ui](https://www.npmjs.com/package/@tekton-ui/ui)
194
+ - [npm: @tekton-ui/mcp-server](https://www.npmjs.com/package/@tekton-ui/mcp-server)
195
+ `;
196
+ }
197
+ //# sourceMappingURL=guide-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guide-template.js","sourceRoot":"","sources":["../../src/cli/guide-template.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,SAAoB;IAChD,MAAM,aAAa,GACjB,SAAS,KAAK,QAAQ;QACpB,CAAC,CAAC;;;;;;;;;;;;;;EAcN;QACI,CAAC,CAAC;;;;;;;;;;;;;;;;oBAgBY,CAAC;IAEnB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsEP,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmFd,CAAC;AACF,CAAC"}
package/dist/cli/index.js CHANGED
@@ -26,6 +26,11 @@ switch (command) {
26
26
  statusCommand();
27
27
  break;
28
28
  }
29
+ case 'init': {
30
+ const { initCommand } = await import('./init.js');
31
+ await initCommand();
32
+ break;
33
+ }
29
34
  default: {
30
35
  // 서브커맨드 없음 → MCP stdio 서버 시작 (기존 동작 유지)
31
36
  await import('../index.js');
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAIH,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,OAAO,CAAC,CAAC,CAAC;QACb,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,YAAY,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM;IACR,CAAC;IAED,KAAK,QAAQ,CAAC,CAAC,CAAC;QACd,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACtD,aAAa,EAAE,CAAC;QAChB,MAAM;IACR,CAAC;IAED,KAAK,QAAQ,CAAC,CAAC,CAAC;QACd,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACtD,aAAa,EAAE,CAAC;QAChB,MAAM;IACR,CAAC;IAED,OAAO,CAAC,CAAC,CAAC;QACR,wCAAwC;QACxC,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAC5B,MAAM;IACR,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAIH,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,OAAO,CAAC,CAAC,CAAC;QACb,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,YAAY,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM;IACR,CAAC;IAED,KAAK,QAAQ,CAAC,CAAC,CAAC;QACd,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACtD,aAAa,EAAE,CAAC;QAChB,MAAM;IACR,CAAC;IAED,KAAK,QAAQ,CAAC,CAAC,CAAC;QACd,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACtD,aAAa,EAAE,CAAC;QAChB,MAAM;IACR,CAAC;IAED,KAAK,MAAM,CAAC,CAAC,CAAC;QACZ,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,WAAW,EAAE,CAAC;QACpB,MAAM;IACR,CAAC;IAED,OAAO,CAAC,CAAC,CAAC;QACR,wCAAwC;QACxC,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAC5B,MAAM;IACR,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * tekton-mcp init 명령어
3
+ * 프로젝트에 Tekton UI 디자인 시스템을 한 줄로 설정
4
+ */
5
+ export declare function initCommand(): Promise<void>;
6
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2SH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAkFjD"}
@@ -0,0 +1,319 @@
1
+ /**
2
+ * tekton-mcp init 명령어
3
+ * 프로젝트에 Tekton UI 디자인 시스템을 한 줄로 설정
4
+ */
5
+ import fs from 'node:fs';
6
+ import path from 'node:path';
7
+ import { execSync } from 'node:child_process';
8
+ import readline from 'node:readline';
9
+ import { generateGuide } from './guide-template.js';
10
+ import { generateClaudeMdSection, generateAgentsMdSection } from './agent-md-templates.js';
11
+ // ─── 상수 ──────────────────────────────────────────────
12
+ const TEKTON_UI_CONTENT_PATH = './node_modules/@tekton-ui/ui/dist/**/*.{js,mjs}';
13
+ const TEKTON_STYLE_IMPORT = "@import '@tekton-ui/ui/styles';";
14
+ const PACKAGES_TO_INSTALL = ['@tekton-ui/ui', 'tailwindcss-animate'];
15
+ // ─── 유틸리티 ──────────────────────────────────────────
16
+ function log(step, total, message) {
17
+ console.log(`\n[${step}/${total}] ${message}`);
18
+ }
19
+ function logDetail(message) {
20
+ console.log(` ${message}`);
21
+ }
22
+ function fileExists(filePath) {
23
+ return fs.existsSync(filePath);
24
+ }
25
+ function findFile(dir, candidates) {
26
+ return candidates.find(c => fileExists(path.join(dir, c)));
27
+ }
28
+ /**
29
+ * stdin에서 사용자 선택을 받음
30
+ */
31
+ async function askUser(question, options) {
32
+ const rl = readline.createInterface({
33
+ input: process.stdin,
34
+ output: process.stdout,
35
+ });
36
+ const prompt = options.map((opt, i) => ` ${i + 1}) ${opt}`).join('\n');
37
+ return new Promise(resolve => {
38
+ rl.question(`${question}\n${prompt}\n> `, answer => {
39
+ rl.close();
40
+ const index = parseInt(answer, 10) - 1;
41
+ const selected = options[index];
42
+ resolve(selected ?? options[0]);
43
+ });
44
+ });
45
+ }
46
+ // ─── Step 1: 프로젝트 감지 ─────────────────────────────
47
+ function detectFramework(cwd) {
48
+ const nextConfigs = ['next.config.ts', 'next.config.js', 'next.config.mjs'];
49
+ const viteConfigs = ['vite.config.ts', 'vite.config.js', 'vite.config.mjs'];
50
+ if (findFile(cwd, nextConfigs)) {
51
+ return 'nextjs';
52
+ }
53
+ if (findFile(cwd, viteConfigs)) {
54
+ return 'vite';
55
+ }
56
+ return null;
57
+ }
58
+ function detectPackageManager(cwd) {
59
+ if (fileExists(path.join(cwd, 'pnpm-lock.yaml'))) {
60
+ return 'pnpm';
61
+ }
62
+ if (fileExists(path.join(cwd, 'yarn.lock'))) {
63
+ return 'yarn';
64
+ }
65
+ if (fileExists(path.join(cwd, 'bun.lock')) || fileExists(path.join(cwd, 'bun.lockb'))) {
66
+ return 'bun';
67
+ }
68
+ return 'npm';
69
+ }
70
+ function installPackages(cwd, pm) {
71
+ const cmd = `${pm} add ${PACKAGES_TO_INSTALL.join(' ')}`;
72
+ logDetail(cmd);
73
+ execSync(cmd, { cwd, stdio: 'inherit' });
74
+ }
75
+ // ─── Step 3: Tailwind CSS 설정 ──────────────────────────
76
+ const TAILWIND_CONFIG_CANDIDATES = [
77
+ 'tailwind.config.ts',
78
+ 'tailwind.config.js',
79
+ 'tailwind.config.mjs',
80
+ 'tailwind.config.cjs',
81
+ ];
82
+ function setupTailwind(cwd) {
83
+ const configName = findFile(cwd, TAILWIND_CONFIG_CANDIDATES);
84
+ if (configName) {
85
+ // 기존 파일 수정
86
+ const configPath = path.join(cwd, configName);
87
+ let content = fs.readFileSync(configPath, 'utf-8');
88
+ // content 배열에 @tekton-ui/ui 경로 추가
89
+ if (!content.includes('@tekton-ui/ui')) {
90
+ content = content.replace(/(content\s*:\s*\[)/, `$1\n '${TEKTON_UI_CONTENT_PATH}',`);
91
+ }
92
+ // plugins에 tailwindcss-animate 추가
93
+ if (!content.includes('tailwindcss-animate')) {
94
+ // plugins 배열이 있는 경우
95
+ if (/plugins\s*:\s*\[/.test(content)) {
96
+ content = content.replace(/(plugins\s*:\s*\[)/, `$1\n require('tailwindcss-animate'),`);
97
+ }
98
+ else {
99
+ // plugins가 없으면 content 닫는 ] 뒤에 추가
100
+ content = content.replace(/(content\s*:\s*\[[\s\S]*?\]\s*,?)/, `$1\n plugins: [require('tailwindcss-animate')],`);
101
+ }
102
+ }
103
+ fs.writeFileSync(configPath, content, 'utf-8');
104
+ logDetail(`${configName} 업데이트 완료`);
105
+ }
106
+ else {
107
+ // 새 파일 생성
108
+ const template = `import type { Config } from 'tailwindcss';
109
+
110
+ const config: Config = {
111
+ content: [
112
+ './app/**/*.{js,ts,jsx,tsx}',
113
+ './src/**/*.{js,ts,jsx,tsx}',
114
+ './components/**/*.{js,ts,jsx,tsx}',
115
+ '${TEKTON_UI_CONTENT_PATH}',
116
+ ],
117
+ plugins: [require('tailwindcss-animate')],
118
+ };
119
+
120
+ export default config;
121
+ `;
122
+ fs.writeFileSync(path.join(cwd, 'tailwind.config.ts'), template, 'utf-8');
123
+ logDetail('tailwind.config.ts 생성 완료');
124
+ }
125
+ }
126
+ // ─── Step 4: CSS 임포트 추가 ────────────────────────────
127
+ function setupCSS(cwd, framework) {
128
+ const candidates = framework === 'nextjs'
129
+ ? ['app/globals.css', 'src/app/globals.css', 'styles/globals.css']
130
+ : ['src/index.css', 'src/main.css', 'index.css'];
131
+ const cssFile = findFile(cwd, candidates);
132
+ if (!cssFile) {
133
+ logDetail('CSS 파일을 찾을 수 없습니다. 수동으로 추가해 주세요:');
134
+ logDetail(` ${TEKTON_STYLE_IMPORT}`);
135
+ return;
136
+ }
137
+ const cssPath = path.join(cwd, cssFile);
138
+ const content = fs.readFileSync(cssPath, 'utf-8');
139
+ if (content.includes(TEKTON_STYLE_IMPORT)) {
140
+ logDetail(`${cssFile} (이미 설정됨, skip)`);
141
+ return;
142
+ }
143
+ // 파일 상단에 import 추가
144
+ fs.writeFileSync(cssPath, `${TEKTON_STYLE_IMPORT}\n\n${content}`, 'utf-8');
145
+ logDetail(`${cssFile} 업데이트 완료`);
146
+ }
147
+ function setupMCP(cwd) {
148
+ const mcpPath = path.join(cwd, '.mcp.json');
149
+ const tektonServer = {
150
+ type: 'stdio',
151
+ command: 'npx',
152
+ args: ['-y', '@tekton-ui/mcp-server'],
153
+ };
154
+ if (fileExists(mcpPath)) {
155
+ // 기존 파일에 tekton 서버 추가
156
+ const raw = fs.readFileSync(mcpPath, 'utf-8');
157
+ const config = JSON.parse(raw);
158
+ if (!config.mcpServers) {
159
+ config.mcpServers = {};
160
+ }
161
+ if ('tekton' in config.mcpServers) {
162
+ logDetail('.mcp.json (이미 설정됨, skip)');
163
+ return;
164
+ }
165
+ config.mcpServers['tekton'] = tektonServer;
166
+ fs.writeFileSync(mcpPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
167
+ logDetail('.mcp.json 업데이트 완료');
168
+ }
169
+ else {
170
+ // 새 파일 생성
171
+ const config = {
172
+ mcpServers: {
173
+ tekton: tektonServer,
174
+ },
175
+ };
176
+ fs.writeFileSync(mcpPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
177
+ logDetail('.mcp.json 생성 완료');
178
+ }
179
+ }
180
+ // ─── Step 6: 가이드 문서 생성 ──────────────────────────
181
+ function setupGuide(cwd, framework) {
182
+ const guidePath = path.join(cwd, 'TEKTON-GUIDE.md');
183
+ if (fileExists(guidePath)) {
184
+ logDetail('TEKTON-GUIDE.md (이미 존재함, skip)');
185
+ return;
186
+ }
187
+ const content = generateGuide(framework);
188
+ fs.writeFileSync(guidePath, content, 'utf-8');
189
+ logDetail('TEKTON-GUIDE.md 생성 완료');
190
+ }
191
+ // ─── Step 7: CLAUDE.md / AGENTS.md 설정 ────────────────
192
+ function setupAgentMd(cwd, framework) {
193
+ // CLAUDE.md 섹션 추가 (기존 파일이 있으면 append, 없으면 생성)
194
+ const claudeMdPath = path.join(cwd, 'CLAUDE.md');
195
+ const claudeSection = generateClaudeMdSection(framework);
196
+ if (fileExists(claudeMdPath)) {
197
+ const existingContent = fs.readFileSync(claudeMdPath, 'utf-8');
198
+ if (existingContent.includes('## Tekton UI Workflow')) {
199
+ logDetail('CLAUDE.md (이미 Tekton 섹션 존재, skip)');
200
+ }
201
+ else {
202
+ fs.appendFileSync(claudeMdPath, `\n${claudeSection}`, 'utf-8');
203
+ logDetail('CLAUDE.md에 Tekton 섹션 추가 완료');
204
+ }
205
+ }
206
+ else {
207
+ fs.writeFileSync(claudeMdPath, `# Project Instructions\n${claudeSection}`, 'utf-8');
208
+ logDetail('CLAUDE.md 생성 완료');
209
+ }
210
+ // AGENTS.md 섹션 추가 (기존 파일이 있으면 append, 없으면 생성)
211
+ const agentsMdPath = path.join(cwd, 'AGENTS.md');
212
+ const agentsSection = generateAgentsMdSection(framework);
213
+ if (fileExists(agentsMdPath)) {
214
+ const existingContent = fs.readFileSync(agentsMdPath, 'utf-8');
215
+ if (existingContent.includes('## Tekton UI Workflow')) {
216
+ logDetail('AGENTS.md (이미 Tekton 섹션 존재, skip)');
217
+ }
218
+ else {
219
+ fs.appendFileSync(agentsMdPath, `\n${agentsSection}`, 'utf-8');
220
+ logDetail('AGENTS.md에 Tekton 섹션 추가 완료');
221
+ }
222
+ }
223
+ else {
224
+ fs.writeFileSync(agentsMdPath, `# AI Agent Instructions\n${agentsSection}`, 'utf-8');
225
+ logDetail('AGENTS.md 생성 완료');
226
+ }
227
+ }
228
+ // ─── Step 8: 완료 메시지 (인증 안내 강화) ─────────────────
229
+ function printSuccess() {
230
+ console.log(`
231
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
232
+
233
+ Tekton UI 설정 완료!
234
+
235
+ 다음 단계:
236
+ 1. 먼저 인증하세요: tekton-mcp login
237
+ 2. Claude Code를 재시작하세요
238
+ 3. AI에게 요청하세요: "로그인 화면 만들어줘"
239
+ 4. TEKTON-GUIDE.md에서 전체 가이드를 확인하세요
240
+
241
+ 중요: 모든 6개 테마는 인증이 필요합니다
242
+
243
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
244
+ }
245
+ // ─── 메인 ──────────────────────────────────────────────
246
+ export async function initCommand() {
247
+ const cwd = process.cwd();
248
+ const totalSteps = 8;
249
+ console.log('\n@tekton-ui/mcp-server init\n');
250
+ // package.json 확인
251
+ if (!fileExists(path.join(cwd, 'package.json'))) {
252
+ console.error('package.json을 찾을 수 없습니다. 프로젝트 루트에서 실행해 주세요.');
253
+ process.exit(1);
254
+ }
255
+ // Step 1: 프로젝트 감지
256
+ log(1, totalSteps, '프로젝트 감지 중...');
257
+ let framework = detectFramework(cwd);
258
+ if (!framework) {
259
+ const answer = await askUser('프로젝트 유형을 감지할 수 없습니다. 프레임워크를 선택해 주세요:', ['Next.js', 'Vite']);
260
+ framework = answer === 'Vite' ? 'vite' : 'nextjs';
261
+ }
262
+ const frameworkLabel = framework === 'nextjs' ? 'Next.js' : 'Vite';
263
+ logDetail(`${frameworkLabel} 프로젝트`);
264
+ // Step 2: 패키지 설치
265
+ log(2, totalSteps, '패키지 설치 중...');
266
+ const pm = detectPackageManager(cwd);
267
+ try {
268
+ installPackages(cwd, pm);
269
+ }
270
+ catch {
271
+ console.error('패키지 설치에 실패했습니다. 수동으로 설치해 주세요:');
272
+ console.error(` ${pm} add ${PACKAGES_TO_INSTALL.join(' ')}`);
273
+ }
274
+ // Step 3: Tailwind CSS 설정
275
+ log(3, totalSteps, 'Tailwind CSS 설정 중...');
276
+ try {
277
+ setupTailwind(cwd);
278
+ }
279
+ catch {
280
+ console.error('Tailwind CSS 설정에 실패했습니다. 수동으로 설정해 주세요.');
281
+ }
282
+ // Step 4: CSS 토큰 임포트
283
+ log(4, totalSteps, 'CSS 토큰 임포트 추가 중...');
284
+ try {
285
+ setupCSS(cwd, framework);
286
+ }
287
+ catch {
288
+ console.error('CSS 설정에 실패했습니다. 수동으로 추가해 주세요:');
289
+ console.error(` ${TEKTON_STYLE_IMPORT}`);
290
+ }
291
+ // Step 5: MCP 설정
292
+ log(5, totalSteps, 'Claude Code MCP 설정 중...');
293
+ try {
294
+ setupMCP(cwd);
295
+ }
296
+ catch {
297
+ console.error('MCP 설정에 실패했습니다. 수동으로 .mcp.json을 생성해 주세요.');
298
+ }
299
+ // Step 6: 가이드 문서 생성
300
+ log(6, totalSteps, '가이드 문서 생성 중...');
301
+ try {
302
+ setupGuide(cwd, framework);
303
+ }
304
+ catch {
305
+ console.error('가이드 문서 생성에 실패했습니다.');
306
+ }
307
+ // Step 7: CLAUDE.md / AGENTS.md 설정
308
+ log(7, totalSteps, 'AI 에이전트 가이드 설정 중...');
309
+ try {
310
+ setupAgentMd(cwd, framework);
311
+ }
312
+ catch {
313
+ console.error('AI 에이전트 가이드 설정에 실패했습니다.');
314
+ }
315
+ // Step 8: 완료 메시지
316
+ log(8, totalSteps, '설정 완료');
317
+ printSuccess();
318
+ }
319
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
3
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
- import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js';
4
+ import { ListToolsRequestSchema, CallToolRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
5
5
  import { info, error as logError } from './utils/logger.js';
6
6
  import { verifyApiKey } from './auth/verify.js';
7
7
  import { setAuthData } from './auth/state.js';
@@ -23,6 +23,8 @@ import { previewScreenTemplateTool } from './tools/preview-screen-template.js';
23
23
  import { getScreenGenerationContextTool } from './tools/get-screen-generation-context.js';
24
24
  import { validateScreenDefinitionTool } from './tools/validate-screen-definition.js';
25
25
  import { validateEnvironmentTool } from './tools/validate-environment.js';
26
+ import { getGettingStartedPrompt } from './prompts/getting-started.js';
27
+ import { getScreenWorkflowPrompt } from './prompts/screen-workflow.js';
26
28
  import { GenerateBlueprintInputSchema, PreviewThemeInputSchema, ListThemesInputSchema, ExportScreenInputSchema, GenerateScreenInputSchema, ValidateScreenInputSchema, ListTokensInputSchema, ListIconLibrariesInputSchema, PreviewIconLibraryInputSchema, ListComponentsInputSchema, PreviewComponentInputSchema, ListScreenTemplatesInputSchema, PreviewScreenTemplateInputSchema, GetScreenGenerationContextInputSchema, ValidateScreenDefinitionInputSchema, ValidateEnvironmentInputSchema, } from './schemas/mcp-schemas.js';
27
29
  const server = new Server({
28
30
  name: 'tekton-mcp-server',
@@ -30,9 +32,45 @@ const server = new Server({
30
32
  }, {
31
33
  capabilities: {
32
34
  tools: {},
35
+ prompts: {},
33
36
  },
34
37
  });
35
38
  // ============================================================================
39
+ // MCP Prompts: ListPromptsRequestSchema Handler
40
+ // ============================================================================
41
+ server.setRequestHandler(ListPromptsRequestSchema, async () => {
42
+ info('ListPrompts request received');
43
+ return {
44
+ prompts: [
45
+ {
46
+ name: 'getting-started',
47
+ description: 'Complete getting started guide for Tekton UI including authentication, theme exploration, and screen generation workflow',
48
+ arguments: [],
49
+ },
50
+ {
51
+ name: 'screen-workflow',
52
+ description: 'Detailed 4-step screen generation workflow: get-screen-generation-context → validate-screen-definition → generate_screen → validate-environment',
53
+ arguments: [],
54
+ },
55
+ ],
56
+ };
57
+ });
58
+ // ============================================================================
59
+ // MCP Prompts: GetPromptRequestSchema Handler
60
+ // ============================================================================
61
+ server.setRequestHandler(GetPromptRequestSchema, async (request) => {
62
+ const { name } = request.params;
63
+ info(`GetPrompt request: ${name}`);
64
+ switch (name) {
65
+ case 'getting-started':
66
+ return getGettingStartedPrompt();
67
+ case 'screen-workflow':
68
+ return getScreenWorkflowPrompt();
69
+ default:
70
+ throw new Error(`Unknown prompt: ${name}`);
71
+ }
72
+ });
73
+ // ============================================================================
36
74
  // Task #9: ListToolsRequestSchema Handler
37
75
  // ============================================================================
38
76
  server.setRequestHandler(ListToolsRequestSchema, async () => {