@utopian426/redmine-figma-mcp 1.0.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.
package/.env.example ADDED
@@ -0,0 +1,6 @@
1
+ # Redmine Configuration
2
+ REDMINE_URL=https://your-redmine.com
3
+ REDMINE_API_KEY=your_redmine_api_key
4
+
5
+ # Figma Configuration
6
+ FIGMA_API_KEY=your_figma_api_key
package/README.md ADDED
@@ -0,0 +1,170 @@
1
+ # Redmine + Figma MCP Server
2
+
3
+ 一个集成了 Redmine 需求管理和 Figma 设计分析的 MCP (Model Context Protocol) Server。
4
+
5
+ ## 功能
6
+
7
+ - **redmine_get_issue**: 获取 Redmine 需求的详细信息
8
+ - **figma_get_file**: 获取 Figma 设计文件信息
9
+ - **figma_analyze_design**: 分析 Figma 设计文档结构
10
+ - **redmine_figma_analyze**: 综合分析需求和设计
11
+ - **extract_figma_key**: 从 Figma URL 提取文件 key
12
+ - **generate_figma_design**: 根据需求生成 Figma 设计结构
13
+ - **generate_vue_frontend**: 根据需求生成前端开发提示
14
+
15
+ ## 快速开始
16
+
17
+ ### 1. 安装依赖
18
+
19
+ ```bash
20
+ cd mcp-server
21
+ npm install
22
+ ```
23
+
24
+ ### 2. 配置环境变量
25
+
26
+ 复制 `.env.example` 为 `.env` 并填写你的 API Key:
27
+
28
+ ```env
29
+ REDMINE_URL=https://your-redmine.com
30
+ REDMINE_API_KEY=your_redmine_api_key
31
+ FIGMA_API_KEY=your_figma_api_key
32
+ ```
33
+
34
+ ### 3. 构建
35
+
36
+ ```bash
37
+ npm run build
38
+ ```
39
+
40
+ ### 4. 配置 MCP 客户端
41
+
42
+ #### Claude Desktop 配置
43
+
44
+ 在 `claude_desktop_config.json` 中添加:
45
+
46
+ ```json
47
+ {
48
+ "mcpServers": {
49
+ "redmine-figma": {
50
+ "command": "node",
51
+ "args": ["/path/to/mcp-server/dist/index.js"],
52
+ "env": {
53
+ "REDMINE_URL": "https://your-redmine.com",
54
+ "REDMINE_API_KEY": "your_redmine_api_key",
55
+ "FIGMA_API_KEY": "your_figma_api_key"
56
+ }
57
+ }
58
+ }
59
+ }
60
+ ```
61
+
62
+ #### Qoder 配置
63
+
64
+ 在 `.qoder/mcp.json` 中添加:
65
+
66
+ ```json
67
+ {
68
+ "servers": [
69
+ {
70
+ "name": "redmine-figma",
71
+ "command": "node",
72
+ "args": ["/path/to/mcp-server/dist/index.js"],
73
+ "env": {
74
+ "REDMINE_URL": "https://your-redmine.com",
75
+ "REDMINE_API_KEY": "your_redmine_api_key",
76
+ "FIGMA_API_KEY": "your_figma_api_key"
77
+ }
78
+ }
79
+ ]
80
+ }
81
+ ```
82
+
83
+ ## 使用示例
84
+
85
+ ### 获取 Redmine 需求
86
+
87
+ ```
88
+ 请帮我查看 Redmine 需求 #12345
89
+ ```
90
+
91
+ ### 分析 Figma 设计
92
+
93
+ ```
94
+ 请分析这个 Figma 设计: https://www.figma.com/file/ABC123/FileName
95
+ ```
96
+
97
+ ### 生成前端开发提示
98
+
99
+ ```
100
+ 帮我查看 Redmine 需求 #12762,生成前端开发提示
101
+ ```
102
+
103
+ ## 分享给他人使用
104
+
105
+ ### 方式一:直接分享代码
106
+
107
+ 1. 将整个 `mcp-server` 文件夹打包分享
108
+ 2. 对方解压后执行:
109
+ ```bash
110
+ cd mcp-server
111
+ npm install
112
+ npm run build
113
+ ```
114
+ 3. 修改 `.env` 文件中的 API Key
115
+ 4. 配置到对方的 MCP 客户端
116
+
117
+ ### 方式二:Git 仓库分享
118
+
119
+ 1. 将代码推送到 Git 仓库
120
+ 2. 他人克隆后安装依赖:
121
+ ```bash
122
+ git clone <your-repo-url>
123
+ cd mcp-server
124
+ npm install
125
+ npm run build
126
+ ```
127
+
128
+ ### 方式三:npm 包分享(高级)
129
+
130
+ 1. 发布到 npm:
131
+ ```bash
132
+ npm publish
133
+ ```
134
+ 2. 他人全局安装:
135
+ ```bash
136
+ npm install -g your-mcp-server
137
+ ```
138
+ 3. 配置时使用命令路径:
139
+ ```json
140
+ {
141
+ "command": "your-mcp-server"
142
+ }
143
+ ```
144
+
145
+ ## 开发
146
+
147
+ ```bash
148
+ # 安装依赖
149
+ npm install
150
+
151
+ # 构建
152
+ npm run build
153
+
154
+ # 开发模式
155
+ npm run dev
156
+ ```
157
+
158
+ ## 项目结构
159
+
160
+ ```
161
+ mcp-server/
162
+ ├── src/
163
+ │ ├── index.ts # MCP Server 入口
164
+ │ ├── redmine-client.ts # Redmine API 客户端
165
+ │ └── figma-client.ts # Figma API 客户端
166
+ ├── dist/ # 编译输出
167
+ ├── .env # 环境变量
168
+ ├── package.json
169
+ └── tsconfig.json
170
+ ```
@@ -0,0 +1,248 @@
1
+ /**
2
+ * Figma API Client
3
+ * 用于获取、创建和分析 Figma 设计文档
4
+ */
5
+ export interface FigmaPluginNode {
6
+ id: string;
7
+ name: string;
8
+ type: 'FRAME' | 'TEXT' | 'RECTANGLE' | 'COMPONENT' | 'INSTANCE' | 'GROUP';
9
+ x?: number;
10
+ y?: number;
11
+ width?: number;
12
+ height?: number;
13
+ fills?: Array<{
14
+ type: 'SOLID' | 'GRADIENT_LINEAR' | 'IMAGE';
15
+ color?: {
16
+ r: number;
17
+ g: number;
18
+ b: number;
19
+ a?: number;
20
+ };
21
+ }>;
22
+ characters?: string;
23
+ fontSize?: number;
24
+ fontName?: {
25
+ family: string;
26
+ style: string;
27
+ };
28
+ children?: FigmaPluginNode[];
29
+ layoutMode?: 'NONE' | 'HORIZONTAL' | 'VERTICAL';
30
+ primaryAxisAlignItems?: 'MIN' | 'CENTER' | 'MAX' | 'SPACE_BETWEEN';
31
+ counterAxisAlignItems?: 'MIN' | 'CENTER' | 'MAX';
32
+ itemSpacing?: number;
33
+ paddingLeft?: number;
34
+ paddingRight?: number;
35
+ paddingTop?: number;
36
+ paddingBottom?: number;
37
+ cornerRadius?: number;
38
+ strokes?: Array<{
39
+ type: 'SOLID';
40
+ color: {
41
+ r: number;
42
+ g: number;
43
+ b: number;
44
+ a?: number;
45
+ };
46
+ }>;
47
+ strokeWeight?: number;
48
+ }
49
+ export interface FigmaFile {
50
+ key: string;
51
+ name: string;
52
+ lastModified: string;
53
+ thumbnailUrl: string;
54
+ version: string;
55
+ document: FigmaNode;
56
+ }
57
+ export interface FigmaNode {
58
+ id: string;
59
+ name: string;
60
+ type: string;
61
+ children?: FigmaNode[];
62
+ fills?: Array<{
63
+ type: string;
64
+ color?: {
65
+ r: number;
66
+ g: number;
67
+ b: number;
68
+ a: number;
69
+ };
70
+ opacity?: number;
71
+ }>;
72
+ strokes?: unknown[];
73
+ strokeWeight?: number;
74
+ strokeAlign?: string;
75
+ cornerRadius?: number;
76
+ characters?: string;
77
+ style?: {
78
+ fontFamily?: string;
79
+ fontPostScriptName?: string;
80
+ fontWeight?: number;
81
+ fontSize?: number;
82
+ textAlignHorizontal?: string;
83
+ textAlignVertical?: string;
84
+ letterSpacing?: number;
85
+ lineHeightPx?: number;
86
+ lineHeightPercent?: number;
87
+ fills?: Array<{
88
+ type: string;
89
+ color?: {
90
+ r: number;
91
+ g: number;
92
+ b: number;
93
+ a: number;
94
+ };
95
+ }>;
96
+ };
97
+ absoluteBoundingBox?: {
98
+ x: number;
99
+ y: number;
100
+ width: number;
101
+ height: number;
102
+ };
103
+ constraints?: {
104
+ vertical: string;
105
+ horizontal: string;
106
+ };
107
+ componentId?: string;
108
+ componentPropertyDefinitions?: Record<string, unknown>;
109
+ }
110
+ export interface FigmaFileResponse {
111
+ document: FigmaNode;
112
+ components: Record<string, {
113
+ key: string;
114
+ name: string;
115
+ description: string;
116
+ }>;
117
+ schemaVersion: number;
118
+ styles: Record<string, {
119
+ key: string;
120
+ name: string;
121
+ styleType: string;
122
+ description: string;
123
+ }>;
124
+ name: string;
125
+ lastModified: string;
126
+ thumbnailUrl: string;
127
+ version: string;
128
+ role: string;
129
+ editorType: string;
130
+ linkAccess: string;
131
+ }
132
+ export interface FigmaComment {
133
+ id: string;
134
+ file_key: string;
135
+ parent_id?: string;
136
+ user: {
137
+ id: string;
138
+ handle: string;
139
+ img_url: string;
140
+ };
141
+ created_at: string;
142
+ resolved_at?: string;
143
+ message: string;
144
+ client_meta?: {
145
+ x: number;
146
+ y: number;
147
+ node_id?: string;
148
+ node_offset?: {
149
+ x: number;
150
+ y: number;
151
+ };
152
+ };
153
+ order_id: number;
154
+ }
155
+ export interface FigmaCommentsResponse {
156
+ comments: FigmaComment[];
157
+ }
158
+ export declare class FigmaClient {
159
+ private apiKey;
160
+ private baseUrl;
161
+ constructor(apiKey: string);
162
+ /**
163
+ * 获取 Figma 文件信息
164
+ * @param fileKey 文件 key(从 Figma URL 中提取)
165
+ * @returns 文件信息
166
+ */
167
+ getFile(fileKey: string): Promise<FigmaFileResponse>;
168
+ /**
169
+ * 获取 Figma 文件评论
170
+ * @param fileKey 文件 key
171
+ * @returns 评论列表
172
+ */
173
+ getComments(fileKey: string): Promise<FigmaComment[]>;
174
+ /**
175
+ * 从 Figma URL 中提取文件 key
176
+ * @param url Figma URL,如 https://www.figma.com/file/ABC123/FileName
177
+ * @returns 文件 key
178
+ */
179
+ extractFileKey(url: string): string | null;
180
+ /**
181
+ * 遍历节点树,收集所有文本内容
182
+ * @param node 节点
183
+ * @param texts 文本数组
184
+ */
185
+ private collectTextNodes;
186
+ /**
187
+ * 遍历节点树,收集所有组件
188
+ * @param node 节点
189
+ * @param components 组件数组
190
+ */
191
+ private collectComponents;
192
+ /**
193
+ * 遍历节点树,收集所有 frame/page 信息
194
+ * @param node 节点
195
+ * @param frames frame 数组
196
+ */
197
+ private collectFrames;
198
+ /**
199
+ * 分析 Figma 文件结构
200
+ * @param file 文件响应
201
+ * @returns 分析结果
202
+ */
203
+ analyzeFile(file: FigmaFileResponse): {
204
+ summary: string;
205
+ pages: Array<{
206
+ name: string;
207
+ nodeCount: number;
208
+ texts: string[];
209
+ }>;
210
+ components: string[];
211
+ styles: string[];
212
+ allTexts: string[];
213
+ };
214
+ /**
215
+ * 统计节点数量
216
+ * @param node 节点
217
+ * @returns 数量
218
+ */
219
+ private countNodes;
220
+ /**
221
+ * 格式化文件分析结果为字符串
222
+ * @param analysis 分析结果
223
+ * @returns 格式化字符串
224
+ */
225
+ formatAnalysisForPrompt(analysis: ReturnType<FigmaClient['analyzeFile']>): string;
226
+ /**
227
+ * 生成 Figma 设计节点结构(用于创建设计稿)
228
+ * @param requirementTitle 需求标题
229
+ * @param requirementDesc 需求描述
230
+ * @returns Figma 节点结构
231
+ */
232
+ generateDesignFromRequirement(requirementTitle: string, requirementDesc: string): FigmaPluginNode;
233
+ /**
234
+ * 解析需求描述,提取功能点
235
+ */
236
+ private parseFeatures;
237
+ /**
238
+ * 创建功能点设计框架
239
+ */
240
+ private createFeatureFrame;
241
+ /**
242
+ * 将设计节点转换为 Vue 组件代码建议
243
+ */
244
+ generateVueCodeSuggestion(node: FigmaPluginNode): string;
245
+ private generateVueElement;
246
+ private kebabCase;
247
+ }
248
+ //# sourceMappingURL=figma-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"figma-client.d.ts","sourceRoot":"","sources":["../src/figma-client.ts"],"names":[],"mappings":"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"}