@framingui/mcp-server 0.5.2 → 0.5.3
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.
- package/README.md +13 -13
- package/dist/auth/verify.d.ts +2 -2
- package/dist/auth/verify.d.ts.map +1 -1
- package/dist/auth/verify.js +7 -3
- package/dist/auth/verify.js.map +1 -1
- package/dist/cli/agent-md-templates.d.ts +1 -1
- package/dist/cli/agent-md-templates.js +4 -4
- package/dist/cli/credentials.d.ts +3 -5
- package/dist/cli/credentials.d.ts.map +1 -1
- package/dist/cli/credentials.js +20 -10
- package/dist/cli/credentials.js.map +1 -1
- package/dist/cli/guide-template.d.ts +2 -2
- package/dist/cli/guide-template.js +5 -5
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/init.js +21 -21
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/login.d.ts.map +1 -1
- package/dist/cli/login.js +5 -2
- package/dist/cli/login.js.map +1 -1
- package/dist/cli/logout.d.ts +1 -1
- package/dist/cli/logout.js +1 -1
- package/dist/cli/status.js +1 -1
- package/dist/cli/status.js.map +1 -1
- package/dist/data/examples/screen-examples.js +4 -4
- package/dist/data/examples/screen-examples.js.map +1 -1
- package/dist/generators/css-generator.js +1 -1
- package/dist/generators/css-generator.js.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/prompts/getting-started.d.ts +2 -2
- package/dist/prompts/getting-started.js +5 -5
- package/dist/prompts/screen-workflow.js +2 -2
- package/dist/schemas/mcp-schemas.d.ts +376 -376
- package/dist/schemas/mcp-schemas.js +1 -1
- package/dist/schemas/mcp-schemas.js.map +1 -1
- package/dist/storage/blueprint-storage.js +1 -1
- package/dist/storage/blueprint-storage.js.map +1 -1
- package/dist/utils/api-url.d.ts +17 -0
- package/dist/utils/api-url.d.ts.map +1 -0
- package/dist/utils/api-url.js +52 -0
- package/dist/utils/api-url.js.map +1 -0
- package/dist/utils/tailwind-config-reader.js +1 -1
- package/dist/utils/tailwind-config-reader.js.map +1 -1
- package/package.json +17 -16
- package/LICENSE +0 -21
package/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# @
|
|
1
|
+
# @framingui/mcp-server
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Framingui MCP Server v2.0.0 - stdio-based MCP protocol implementation for Claude Code.
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
7
|
-
MCP (Model Context Protocol) server enabling AI-driven blueprint generation, theme preview, and production code export for the
|
|
7
|
+
MCP (Model Context Protocol) server enabling AI-driven blueprint generation, theme preview, and production code export for the Framingui design system.
|
|
8
8
|
|
|
9
9
|
**SPEC**: [SPEC-MCP-002 v2.0.0](../../.moai/specs/SPEC-MCP-002/spec.md) - stdio-based MCP Standard
|
|
10
10
|
|
|
@@ -36,10 +36,10 @@ The MCP server supports optional API key authentication to enable access to prem
|
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
38
|
# Required for premium theme access
|
|
39
|
-
|
|
39
|
+
FRAMINGUI_API_KEY=tk_live_xxx...
|
|
40
40
|
|
|
41
41
|
# Optional: API endpoint (defaults to https://framingui.com)
|
|
42
|
-
|
|
42
|
+
FRAMINGUI_API_URL=https://framingui.com # or http://localhost:3000 for dev
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
### Theme Access
|
|
@@ -89,9 +89,9 @@ npx @framingui/mcp-server init
|
|
|
89
89
|
2. **패키지 설치** - `@framingui/ui`, `tailwindcss-animate` (패키지 매니저 자동 감지: pnpm/yarn/bun/npm)
|
|
90
90
|
3. **Tailwind CSS 설정** - `tailwind.config.ts`에 content 경로 및 animate 플러그인 추가
|
|
91
91
|
4. **CSS 토큰 임포트** - `globals.css`에 `@import '@framingui/ui/styles'` 추가
|
|
92
|
-
5. **MCP 연결** - `.mcp.json`에
|
|
93
|
-
6. **가이드 생성** - `
|
|
94
|
-
7. **AI 에이전트 가이드** - `CLAUDE.md` 및 `AGENTS.md`에
|
|
92
|
+
5. **MCP 연결** - `.mcp.json`에 framingui 서버 등록 (프로젝트 루트)
|
|
93
|
+
6. **가이드 생성** - `FRAMINGUI-GUIDE.md` 프로젝트 루트에 생성
|
|
94
|
+
7. **AI 에이전트 가이드** - `CLAUDE.md` 및 `AGENTS.md`에 Framingui 워크플로우 섹션 추가
|
|
95
95
|
8. **완료 안내** - 인증 필요성 및 다음 단계 안내
|
|
96
96
|
|
|
97
97
|
설정 완료 후 Claude Code를 재시작하면, AI에게 "로그인 화면 만들어줘"와 같이 자연어로 화면 생성을 요청할 수 있습니다.
|
|
@@ -131,7 +131,7 @@ See [Claude Code Integration Guide](../../.moai/specs/SPEC-MCP-002/CLAUDE-CODE-I
|
|
|
131
131
|
```json
|
|
132
132
|
{
|
|
133
133
|
"mcpServers": {
|
|
134
|
-
"
|
|
134
|
+
"framingui": {
|
|
135
135
|
"type": "stdio",
|
|
136
136
|
"command": "npx",
|
|
137
137
|
"args": ["-y", "@framingui/mcp-server"]
|
|
@@ -181,7 +181,7 @@ See [Claude Code Integration Guide](../../.moai/specs/SPEC-MCP-002/CLAUDE-CODE-I
|
|
|
181
181
|
|
|
182
182
|
**Tool**: `preview-theme`
|
|
183
183
|
|
|
184
|
-
**Description**: Preview a
|
|
184
|
+
**Description**: Preview a Framingui theme and retrieve its design tokens
|
|
185
185
|
|
|
186
186
|
**Input**:
|
|
187
187
|
|
|
@@ -547,7 +547,7 @@ See [Claude Code Integration Guide](../../.moai/specs/SPEC-MCP-002/CLAUDE-CODE-I
|
|
|
547
547
|
|
|
548
548
|
**Tool**: `list-screen-templates`
|
|
549
549
|
|
|
550
|
-
**Description**: List all available screen templates from the
|
|
550
|
+
**Description**: List all available screen templates from the Framingui template registry
|
|
551
551
|
|
|
552
552
|
**Input**:
|
|
553
553
|
|
|
@@ -888,9 +888,9 @@ packages/mcp-server/
|
|
|
888
888
|
- 100% pass rate
|
|
889
889
|
- Zero failures
|
|
890
890
|
|
|
891
|
-
## Integration with @
|
|
891
|
+
## Integration with @framingui/core
|
|
892
892
|
|
|
893
|
-
All MCP tools reuse `@
|
|
893
|
+
All MCP tools reuse `@framingui/core` functions:
|
|
894
894
|
|
|
895
895
|
**Blueprint & Theme Tools**:
|
|
896
896
|
|
package/dist/auth/verify.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* API Key verification for
|
|
2
|
+
* API Key verification for Framingui MCP Server
|
|
3
3
|
* SPEC-DEPLOY-001 Phase 4.1: MCP Server Authentication Layer
|
|
4
4
|
*/
|
|
5
5
|
export interface VerifyResponse {
|
|
@@ -23,7 +23,7 @@ export interface VerifyResponse {
|
|
|
23
23
|
error?: string;
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
-
* Verify API key with
|
|
26
|
+
* Verify API key with Framingui backend
|
|
27
27
|
* @param apiKey - The API key to verify
|
|
28
28
|
* @returns VerifyResponse with user data and licenses
|
|
29
29
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/auth/verify.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/auth/verify.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC,CAAC;IACH,MAAM,CAAC,EAAE;QACP,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,0CAA0C;QAC1C,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAoD1E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,cAAc,GAAG,MAAM,EAAE,CAM3E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CASjG"}
|
package/dist/auth/verify.js
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* API Key verification for
|
|
2
|
+
* API Key verification for Framingui MCP Server
|
|
3
3
|
* SPEC-DEPLOY-001 Phase 4.1: MCP Server Authentication Layer
|
|
4
4
|
*/
|
|
5
5
|
import { info, error as logError } from '../utils/logger.js';
|
|
6
|
+
import { resolveFraminguiApiUrl } from '../utils/api-url.js';
|
|
6
7
|
/**
|
|
7
|
-
* Verify API key with
|
|
8
|
+
* Verify API key with Framingui backend
|
|
8
9
|
* @param apiKey - The API key to verify
|
|
9
10
|
* @returns VerifyResponse with user data and licenses
|
|
10
11
|
*/
|
|
11
12
|
export async function verifyApiKey(apiKey) {
|
|
12
|
-
const apiUrl = process.env.FRAMINGUI_API_URL
|
|
13
|
+
const { apiUrl, reason } = resolveFraminguiApiUrl(process.env.FRAMINGUI_API_URL);
|
|
14
|
+
if (reason) {
|
|
15
|
+
info(reason);
|
|
16
|
+
}
|
|
13
17
|
const endpoint = `${apiUrl}/api/mcp/verify`;
|
|
14
18
|
try {
|
|
15
19
|
info(`Verifying API key with endpoint: ${endpoint}`);
|
package/dist/auth/verify.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/auth/verify.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAuB7D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc;IAC/C,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/auth/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Agent guidance templates for CLAUDE.md and AGENTS.md
|
|
3
|
-
* Provides framework-specific
|
|
3
|
+
* Provides framework-specific Framingui workflow instructions
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
6
|
* Generate CLAUDE.md section for Claude Code
|
|
@@ -13,7 +13,7 @@ export function generateClaudeMdSection(framework) {
|
|
|
13
13
|
|
|
14
14
|
### MCP Server Connection
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
Framingui MCP server is configured in \`.mcp.json\`. Claude Code automatically loads 15 tools for screen generation.
|
|
17
17
|
|
|
18
18
|
### Authentication (Step 1)
|
|
19
19
|
|
|
@@ -55,7 +55,7 @@ export default function Page() {
|
|
|
55
55
|
return (
|
|
56
56
|
<Card>
|
|
57
57
|
<CardHeader>
|
|
58
|
-
<CardTitle>Welcome to
|
|
58
|
+
<CardTitle>Welcome to Framingui</CardTitle>
|
|
59
59
|
</CardHeader>
|
|
60
60
|
<CardContent>
|
|
61
61
|
<Button variant="default" size="lg">Get Started</Button>
|
|
@@ -135,7 +135,7 @@ export function generateAgentsMdSection(framework) {
|
|
|
135
135
|
|
|
136
136
|
### Overview
|
|
137
137
|
|
|
138
|
-
|
|
138
|
+
Framingui MCP server provides 15 tools for screen generation via Model Context Protocol (MCP). This guide is for AI agents on platforms like OpenAI Codex, Cursor, Windsurf, and other MCP-compatible clients.
|
|
139
139
|
|
|
140
140
|
### Prerequisites
|
|
141
141
|
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 크레덴셜 파일 관리
|
|
3
3
|
* ~/.framingui/credentials.json 읽기/쓰기/삭제
|
|
4
|
-
* (하위 호환: ~/.tekton/credentials.json 폴백 지원)
|
|
5
4
|
*/
|
|
6
|
-
export interface
|
|
5
|
+
export interface FraminguiCredentials {
|
|
7
6
|
api_key: string;
|
|
8
7
|
api_url: string;
|
|
9
8
|
created_at: string;
|
|
@@ -15,14 +14,13 @@ export interface TektonCredentials {
|
|
|
15
14
|
export declare function getCredentialsPath(): string;
|
|
16
15
|
/**
|
|
17
16
|
* 크레덴셜 파일 로드
|
|
18
|
-
* 새 경로(~/.framingui) 우선, 없으면 레거시 경로(~/.tekton) 폴백
|
|
19
17
|
* @returns 크레덴셜 객체 또는 null (파일 없거나 파싱 실패 시)
|
|
20
18
|
*/
|
|
21
|
-
export declare function loadCredentials():
|
|
19
|
+
export declare function loadCredentials(): FraminguiCredentials | null;
|
|
22
20
|
/**
|
|
23
21
|
* 크레덴셜 저장 (chmod 600)
|
|
24
22
|
*/
|
|
25
|
-
export declare function saveCredentials(creds:
|
|
23
|
+
export declare function saveCredentials(creds: FraminguiCredentials): void;
|
|
26
24
|
/**
|
|
27
25
|
* 크레덴셜 파일 삭제
|
|
28
26
|
* @returns true면 삭제 성공, false면 파일 없음
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/cli/credentials.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/cli/credentials.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,oBAAoB,GAAG,IAAI,CA0C7D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAWjE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAY3C"}
|
package/dist/cli/credentials.js
CHANGED
|
@@ -1,30 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 크레덴셜 파일 관리
|
|
3
3
|
* ~/.framingui/credentials.json 읽기/쓰기/삭제
|
|
4
|
-
* (하위 호환: ~/.tekton/credentials.json 폴백 지원)
|
|
5
4
|
*/
|
|
6
5
|
import fs from 'node:fs';
|
|
7
6
|
import path from 'node:path';
|
|
8
7
|
import os from 'node:os';
|
|
8
|
+
import { resolveFraminguiApiUrl } from '../utils/api-url.js';
|
|
9
9
|
/**
|
|
10
10
|
* 크레덴셜 파일 경로 반환 (새 경로)
|
|
11
11
|
*/
|
|
12
12
|
export function getCredentialsPath() {
|
|
13
13
|
return path.join(os.homedir(), '.framingui', 'credentials.json');
|
|
14
14
|
}
|
|
15
|
-
/**
|
|
16
|
-
* 레거시 크레덴셜 파일 경로 (하위 호환용)
|
|
17
|
-
*/
|
|
18
|
-
function getLegacyCredentialsPath() {
|
|
19
|
-
return path.join(os.homedir(), '.tekton', 'credentials.json');
|
|
20
|
-
}
|
|
21
15
|
/**
|
|
22
16
|
* 크레덴셜 파일 로드
|
|
23
|
-
* 새 경로(~/.framingui) 우선, 없으면 레거시 경로(~/.tekton) 폴백
|
|
24
17
|
* @returns 크레덴셜 객체 또는 null (파일 없거나 파싱 실패 시)
|
|
25
18
|
*/
|
|
26
19
|
export function loadCredentials() {
|
|
27
|
-
const paths = [getCredentialsPath()
|
|
20
|
+
const paths = [getCredentialsPath()];
|
|
28
21
|
for (const credPath of paths) {
|
|
29
22
|
try {
|
|
30
23
|
if (!fs.existsSync(credPath)) {
|
|
@@ -36,7 +29,24 @@ export function loadCredentials() {
|
|
|
36
29
|
if (!data.api_key || !data.api_url) {
|
|
37
30
|
continue;
|
|
38
31
|
}
|
|
39
|
-
|
|
32
|
+
const { apiUrl, wasNormalized, reason } = resolveFraminguiApiUrl(data.api_url);
|
|
33
|
+
const normalizedCredentials = {
|
|
34
|
+
...data,
|
|
35
|
+
api_url: apiUrl,
|
|
36
|
+
};
|
|
37
|
+
if (wasNormalized) {
|
|
38
|
+
if (reason) {
|
|
39
|
+
console.warn(`[framingui-mcp] ${reason}`);
|
|
40
|
+
}
|
|
41
|
+
// 레거시/비정상 URL은 로드 시점에 즉시 정리해 재발을 방지
|
|
42
|
+
try {
|
|
43
|
+
saveCredentials(normalizedCredentials);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// 마이그레이션 저장 실패는 치명적이지 않으므로 무시
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return normalizedCredentials;
|
|
40
50
|
}
|
|
41
51
|
catch {
|
|
42
52
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/cli/credentials.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/cli/credentials.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAS7D;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,KAAK,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAErC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,SAAS;YACX,CAAC;YACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;YAErD,WAAW;YACX,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnC,SAAS;YACX,CAAC;YAED,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/E,MAAM,qBAAqB,GAAyB;gBAClD,GAAG,IAAI;gBACP,OAAO,EAAE,MAAM;aAChB,CAAC;YAEF,IAAI,aAAa,EAAE,CAAC;gBAClB,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,CAAC,IAAI,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;gBAC5C,CAAC;gBAED,oCAAoC;gBACpC,IAAI,CAAC;oBACH,eAAe,CAAC,qBAAqB,CAAC,CAAC;gBACzC,CAAC;gBAAC,MAAM,CAAC;oBACP,8BAA8B;gBAChC,CAAC;YACH,CAAC;YAED,OAAO,qBAAqB,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEnC,0BAA0B;IAC1B,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvC,qBAAqB;IACrB,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QAChE,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IAEtC,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* FRAMINGUI-GUIDE.md 콘텐츠 템플릿
|
|
3
3
|
* 프레임워크별 맞춤 가이드 생성
|
|
4
4
|
*/
|
|
5
5
|
export type Framework = 'nextjs' | 'vite';
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* FRAMINGUI-GUIDE.md 콘텐츠 생성
|
|
8
8
|
*/
|
|
9
9
|
export declare function generateGuide(framework: Framework): string;
|
|
10
10
|
//# sourceMappingURL=guide-template.d.ts.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* FRAMINGUI-GUIDE.md 콘텐츠 템플릿
|
|
3
3
|
* 프레임워크별 맞춤 가이드 생성
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* FRAMINGUI-GUIDE.md 콘텐츠 생성
|
|
7
7
|
*/
|
|
8
8
|
export function generateGuide(framework) {
|
|
9
9
|
const importExample = framework === 'nextjs'
|
|
@@ -47,13 +47,13 @@ export default App;`;
|
|
|
47
47
|
|
|
48
48
|
## Authentication
|
|
49
49
|
|
|
50
|
-
Before generating screens, authenticate with your
|
|
50
|
+
Before generating screens, authenticate with your Framingui account:
|
|
51
51
|
|
|
52
52
|
\`\`\`bash
|
|
53
53
|
framingui-mcp login
|
|
54
54
|
\`\`\`
|
|
55
55
|
|
|
56
|
-
This opens your browser for OAuth authentication. Your credentials are stored in \`~/.
|
|
56
|
+
This opens your browser for OAuth authentication. Your credentials are stored in \`~/.framingui/credentials.json\`.
|
|
57
57
|
|
|
58
58
|
**Why authentication is required:**
|
|
59
59
|
- All 6 themes require valid licenses
|
|
@@ -70,7 +70,7 @@ framingui-mcp status
|
|
|
70
70
|
|
|
71
71
|
## Screen Generation Workflow
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
Framingui provides a **3-step workflow** for production-ready screen generation:
|
|
74
74
|
|
|
75
75
|
### Step 1/3: Get Context
|
|
76
76
|
|
package/dist/cli/index.d.ts
CHANGED
package/dist/cli/index.js
CHANGED
package/dist/cli/init.js
CHANGED
|
@@ -9,8 +9,8 @@ import readline from 'node:readline';
|
|
|
9
9
|
import { generateGuide } from './guide-template.js';
|
|
10
10
|
import { generateClaudeMdSection, generateAgentsMdSection } from './agent-md-templates.js';
|
|
11
11
|
// ─── 상수 ──────────────────────────────────────────────
|
|
12
|
-
const
|
|
13
|
-
const
|
|
12
|
+
const FRAMINGUI_UI_CONTENT_PATH = './node_modules/@framingui/ui/dist/**/*.{js,mjs}';
|
|
13
|
+
const FRAMINGUI_STYLE_IMPORT = "@import '@framingui/ui/styles';";
|
|
14
14
|
const PACKAGES_TO_INSTALL = ['@framingui/ui', 'tailwindcss-animate'];
|
|
15
15
|
// ─── 유틸리티 ──────────────────────────────────────────
|
|
16
16
|
function log(step, total, message) {
|
|
@@ -87,7 +87,7 @@ function setupTailwind(cwd) {
|
|
|
87
87
|
let content = fs.readFileSync(configPath, 'utf-8');
|
|
88
88
|
// content 배열에 @framingui/ui 경로 추가
|
|
89
89
|
if (!content.includes('@framingui/ui')) {
|
|
90
|
-
content = content.replace(/(content\s*:\s*\[)/, `$1\n '${
|
|
90
|
+
content = content.replace(/(content\s*:\s*\[)/, `$1\n '${FRAMINGUI_UI_CONTENT_PATH}',`);
|
|
91
91
|
}
|
|
92
92
|
// plugins에 tailwindcss-animate 추가
|
|
93
93
|
if (!content.includes('tailwindcss-animate')) {
|
|
@@ -112,7 +112,7 @@ const config: Config = {
|
|
|
112
112
|
'./app/**/*.{js,ts,jsx,tsx}',
|
|
113
113
|
'./src/**/*.{js,ts,jsx,tsx}',
|
|
114
114
|
'./components/**/*.{js,ts,jsx,tsx}',
|
|
115
|
-
'${
|
|
115
|
+
'${FRAMINGUI_UI_CONTENT_PATH}',
|
|
116
116
|
],
|
|
117
117
|
plugins: [require('tailwindcss-animate')],
|
|
118
118
|
};
|
|
@@ -131,38 +131,38 @@ function setupCSS(cwd, framework) {
|
|
|
131
131
|
const cssFile = findFile(cwd, candidates);
|
|
132
132
|
if (!cssFile) {
|
|
133
133
|
logDetail('CSS 파일을 찾을 수 없습니다. 수동으로 추가해 주세요:');
|
|
134
|
-
logDetail(` ${
|
|
134
|
+
logDetail(` ${FRAMINGUI_STYLE_IMPORT}`);
|
|
135
135
|
return;
|
|
136
136
|
}
|
|
137
137
|
const cssPath = path.join(cwd, cssFile);
|
|
138
138
|
const content = fs.readFileSync(cssPath, 'utf-8');
|
|
139
|
-
if (content.includes(
|
|
139
|
+
if (content.includes(FRAMINGUI_STYLE_IMPORT)) {
|
|
140
140
|
logDetail(`${cssFile} (이미 설정됨, skip)`);
|
|
141
141
|
return;
|
|
142
142
|
}
|
|
143
143
|
// 파일 상단에 import 추가
|
|
144
|
-
fs.writeFileSync(cssPath, `${
|
|
144
|
+
fs.writeFileSync(cssPath, `${FRAMINGUI_STYLE_IMPORT}\n\n${content}`, 'utf-8');
|
|
145
145
|
logDetail(`${cssFile} 업데이트 완료`);
|
|
146
146
|
}
|
|
147
147
|
function setupMCP(cwd) {
|
|
148
148
|
const mcpPath = path.join(cwd, '.mcp.json');
|
|
149
|
-
const
|
|
149
|
+
const framinguiServer = {
|
|
150
150
|
type: 'stdio',
|
|
151
151
|
command: 'npx',
|
|
152
152
|
args: ['-y', '@framingui/mcp-server'],
|
|
153
153
|
};
|
|
154
154
|
if (fileExists(mcpPath)) {
|
|
155
|
-
// 기존 파일에
|
|
155
|
+
// 기존 파일에 framingui 서버 추가
|
|
156
156
|
const raw = fs.readFileSync(mcpPath, 'utf-8');
|
|
157
157
|
const config = JSON.parse(raw);
|
|
158
158
|
if (!config.mcpServers) {
|
|
159
159
|
config.mcpServers = {};
|
|
160
160
|
}
|
|
161
|
-
if ('
|
|
161
|
+
if ('framingui' in config.mcpServers) {
|
|
162
162
|
logDetail('.mcp.json (이미 설정됨, skip)');
|
|
163
163
|
return;
|
|
164
164
|
}
|
|
165
|
-
config.mcpServers['
|
|
165
|
+
config.mcpServers['framingui'] = framinguiServer;
|
|
166
166
|
fs.writeFileSync(mcpPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
167
167
|
logDetail('.mcp.json 업데이트 완료');
|
|
168
168
|
}
|
|
@@ -170,7 +170,7 @@ function setupMCP(cwd) {
|
|
|
170
170
|
// 새 파일 생성
|
|
171
171
|
const config = {
|
|
172
172
|
mcpServers: {
|
|
173
|
-
|
|
173
|
+
framingui: framinguiServer,
|
|
174
174
|
},
|
|
175
175
|
};
|
|
176
176
|
fs.writeFileSync(mcpPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
@@ -179,14 +179,14 @@ function setupMCP(cwd) {
|
|
|
179
179
|
}
|
|
180
180
|
// ─── Step 6: 가이드 문서 생성 ──────────────────────────
|
|
181
181
|
function setupGuide(cwd, framework) {
|
|
182
|
-
const guidePath = path.join(cwd, '
|
|
182
|
+
const guidePath = path.join(cwd, 'FRAMINGUI-GUIDE.md');
|
|
183
183
|
if (fileExists(guidePath)) {
|
|
184
|
-
logDetail('
|
|
184
|
+
logDetail('FRAMINGUI-GUIDE.md (이미 존재함, skip)');
|
|
185
185
|
return;
|
|
186
186
|
}
|
|
187
187
|
const content = generateGuide(framework);
|
|
188
188
|
fs.writeFileSync(guidePath, content, 'utf-8');
|
|
189
|
-
logDetail('
|
|
189
|
+
logDetail('FRAMINGUI-GUIDE.md 생성 완료');
|
|
190
190
|
}
|
|
191
191
|
// ─── Step 7: CLAUDE.md / AGENTS.md 설정 ────────────────
|
|
192
192
|
function setupAgentMd(cwd, framework) {
|
|
@@ -196,11 +196,11 @@ function setupAgentMd(cwd, framework) {
|
|
|
196
196
|
if (fileExists(claudeMdPath)) {
|
|
197
197
|
const existingContent = fs.readFileSync(claudeMdPath, 'utf-8');
|
|
198
198
|
if (existingContent.includes('## FramingUI Workflow')) {
|
|
199
|
-
logDetail('CLAUDE.md (이미
|
|
199
|
+
logDetail('CLAUDE.md (이미 Framingui 섹션 존재, skip)');
|
|
200
200
|
}
|
|
201
201
|
else {
|
|
202
202
|
fs.appendFileSync(claudeMdPath, `\n${claudeSection}`, 'utf-8');
|
|
203
|
-
logDetail('CLAUDE.md에
|
|
203
|
+
logDetail('CLAUDE.md에 Framingui 섹션 추가 완료');
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
206
|
else {
|
|
@@ -213,11 +213,11 @@ function setupAgentMd(cwd, framework) {
|
|
|
213
213
|
if (fileExists(agentsMdPath)) {
|
|
214
214
|
const existingContent = fs.readFileSync(agentsMdPath, 'utf-8');
|
|
215
215
|
if (existingContent.includes('## FramingUI Workflow')) {
|
|
216
|
-
logDetail('AGENTS.md (이미
|
|
216
|
+
logDetail('AGENTS.md (이미 Framingui 섹션 존재, skip)');
|
|
217
217
|
}
|
|
218
218
|
else {
|
|
219
219
|
fs.appendFileSync(agentsMdPath, `\n${agentsSection}`, 'utf-8');
|
|
220
|
-
logDetail('AGENTS.md에
|
|
220
|
+
logDetail('AGENTS.md에 Framingui 섹션 추가 완료');
|
|
221
221
|
}
|
|
222
222
|
}
|
|
223
223
|
else {
|
|
@@ -236,7 +236,7 @@ function printSuccess() {
|
|
|
236
236
|
1. 먼저 인증하세요: framingui-mcp login
|
|
237
237
|
2. Claude Code를 재시작하세요
|
|
238
238
|
3. AI에게 요청하세요: "로그인 화면 만들어줘"
|
|
239
|
-
4.
|
|
239
|
+
4. FRAMINGUI-GUIDE.md에서 전체 가이드를 확인하세요
|
|
240
240
|
|
|
241
241
|
중요: 모든 6개 테마는 인증이 필요합니다
|
|
242
242
|
|
|
@@ -286,7 +286,7 @@ export async function initCommand() {
|
|
|
286
286
|
}
|
|
287
287
|
catch {
|
|
288
288
|
console.error('CSS 설정에 실패했습니다. 수동으로 추가해 주세요:');
|
|
289
|
-
console.error(` ${
|
|
289
|
+
console.error(` ${FRAMINGUI_STYLE_IMPORT}`);
|
|
290
290
|
}
|
|
291
291
|
// Step 5: MCP 설정
|
|
292
292
|
log(5, totalSteps, 'Claude Code MCP 설정 중...');
|
package/dist/cli/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,aAAa,EAAkB,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAE3F,wDAAwD;AAExD,MAAM,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/login.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/cli/login.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiCH;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/cli/login.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiCH;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CA0GlD"}
|
package/dist/cli/login.js
CHANGED
|
@@ -6,8 +6,8 @@ import http from 'node:http';
|
|
|
6
6
|
import crypto from 'node:crypto';
|
|
7
7
|
import { exec } from 'node:child_process';
|
|
8
8
|
import { saveCredentials } from './credentials.js';
|
|
9
|
+
import { resolveFraminguiApiUrl } from '../utils/api-url.js';
|
|
9
10
|
const LOGIN_TIMEOUT_MS = 5 * 60 * 1000; // 5분
|
|
10
|
-
const DEFAULT_API_URL = 'https://framingui.com';
|
|
11
11
|
/**
|
|
12
12
|
* 플랫폼별 브라우저 열기
|
|
13
13
|
*/
|
|
@@ -34,7 +34,10 @@ function openBrowser(url) {
|
|
|
34
34
|
* OAuth 로그인 플로우 실행
|
|
35
35
|
*/
|
|
36
36
|
export async function loginCommand() {
|
|
37
|
-
const apiUrl = process.env.FRAMINGUI_API_URL
|
|
37
|
+
const { apiUrl, reason } = resolveFraminguiApiUrl(process.env.FRAMINGUI_API_URL);
|
|
38
|
+
if (reason) {
|
|
39
|
+
console.warn(`[framingui-mcp] ${reason}`);
|
|
40
|
+
}
|
|
38
41
|
// 1. CSRF state 생성
|
|
39
42
|
const state = crypto.randomBytes(32).toString('hex');
|
|
40
43
|
// 2. localhost 임시 서버 시작 (랜덤 포트)
|
package/dist/cli/login.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/cli/login.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/cli/login.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/logout.d.ts
CHANGED
package/dist/cli/logout.js
CHANGED
package/dist/cli/status.js
CHANGED
|
@@ -8,7 +8,7 @@ import { loadCredentials, getCredentialsPath } from './credentials.js';
|
|
|
8
8
|
*/
|
|
9
9
|
export function statusCommand() {
|
|
10
10
|
// 1. 환경변수 확인
|
|
11
|
-
const envKey = process.env.FRAMINGUI_API_KEY
|
|
11
|
+
const envKey = process.env.FRAMINGUI_API_KEY;
|
|
12
12
|
if (envKey) {
|
|
13
13
|
console.log('Authentication: FRAMINGUI_API_KEY environment variable');
|
|
14
14
|
console.log(` Key: ${envKey.substring(0, 15)}...`);
|