figma-mcp-stdio 1.0.12 → 1.0.13

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 (2) hide show
  1. package/build/index.js +39 -9
  2. package/package.json +1 -1
package/build/index.js CHANGED
@@ -32,16 +32,23 @@ const taskList = [
32
32
  '【前期准备】:',
33
33
  "1. 使用能够获取Figma设计稿数据的工具提取页面的JSON结构数据,注入上下文中,数据名称 figmaJson",
34
34
  "2. 页面整体的nodeId节点ID需要转换,使用【Figma节点ID转换规则】来获取转换规则, 使用【下载Figma图片工具】下载页面截图",
35
- "3. 判断有无用户输入的图片描述,若无则【获取打标图片节点ID】,使用【下载Figma图片工具】下载图片,只下载打标图片节点,节点里面的图片不下载,入参的图片格式为png格式,语义化命名,用于替换生成页面中的节点,下载的图片保存到编辑文件同级的images目录下",
35
+ `3. 判断有无用户输入的图片描述
36
+ - 若有使用【下载Figma图片工具】下载对应图片
37
+ - 若无则执行【获取打标图片节点ID】工具,获取打标图片节点ID
38
+ - 若存在打标图片节点ID, 则使用【下载Figma图片工具】下载图片,仅下载这些打标图片节点(不下载其内部图片)
39
+ - 若不存在打标图片节点ID, 则不下载图片
40
+ 【注】下载图片时统一使用 PNG 格式,语义化命名,用于替换生成页面中的节点,下载的图片保存到编辑文件同级的images目录下`,
36
41
  "4. 使用【批量压缩图片工具】对下载的所有图片文件进行压缩优化,减少文件大小提升页面加载性能",
37
42
  "5. 调用【获取组件库信息任务】,从知识库中获取组件库信息",
38
- "6. 使用【获取图片详情工具】获取截图详情",
43
+ "6. 使用【获取图片详情工具】获取截图详情,并注入到上下文中,数据名称 imageDetails",
39
44
  "【生成页面】:",
40
- `7. 根据截图详情内容生成页面,结合 figmaJson数据优化样式,截图为主,figmaJson 数据为辅。分段生成代码,例如template、script、scss,防止任务过大超时
45
+ `7. 根据截图详情imageDetails内容生成页面,结合 figmaJson数据优化样式,截图为主,figmaJson 数据为辅。分段生成代码,例如template、script、scss,防止任务过大超时
41
46
  - ⚠️ 重要提示:样式生成时gap转换为margin、font-weight: 600转换为font-weight: bold
42
47
  `,
43
48
  "【自检流程】:",
44
49
  "8. 执行自检流程,利用截图详情执行【检查页面】工具自检",
50
+ "9. 执行UI还原度对比流程,执行【还原度对比】工具自检",
51
+ "10. 再次执行UI还原度对比流程,执行【还原度对比】工具自检",
45
52
  ];
46
53
  // 自动生成页面工具-印尼专用
47
54
  server.addTool({
@@ -114,7 +121,7 @@ server.addTool({
114
121
  // 优先使用参数中的 API 密钥,然后尝试环境变量
115
122
  const tinyApiKey = args.tinyApiKey || process.env.TINY_API_KEY;
116
123
  const compressionMethod = tinyApiKey ? "TinyPNG" : "Sharp压缩";
117
- console.log(`开始批量压缩 ${args.imagePaths.length} 个图片,使用 ${compressionMethod}`);
124
+ console.error(`开始批量压缩 ${args.imagePaths.length} 个图片,使用 ${compressionMethod}`);
118
125
  // 批量处理图片,支持并发
119
126
  const results = await processBatchImages(args.imagePaths, tinyApiKey, args.quality, args.concurrent);
120
127
  // 统计结果
@@ -190,6 +197,10 @@ server.addTool({
190
197
  imageAbsolutePath: z.string().describe("本地图片的绝对路径"),
191
198
  }),
192
199
  execute: async (args) => {
200
+ // 使用 console.error 输出调试信息,避免干扰 MCP 的 JSON-RPC 通信
201
+ console.error('=== get-image-to-base64 调试信息 ===');
202
+ console.error('参数:', JSON.stringify(args, null, 2));
203
+ console.error('图片路径:', args.imageAbsolutePath);
193
204
  const { imageAbsolutePath } = args;
194
205
  const base64 = await getImageToBase64(imageAbsolutePath);
195
206
  return {
@@ -201,13 +212,32 @@ server.addTool({
201
212
  };
202
213
  },
203
214
  });
204
- // 图片检查工具
215
+ // 还原度对比工具
205
216
  server.addTool({
206
- name: "check_image",
207
- description: "检查图片",
217
+ name: "check_ui",
218
+ description: "还原度对比工具",
208
219
  execute: async (args) => {
209
220
  return String(`
210
- 1. 检查图片节点是否为图片,如果为图片则内部的节点不需要生成
221
+ 你是一名专业的 UI/UX 设计师和前端开发质量评审专家
222
+ 使用能控制网页浏览器的工具@cursor/browser将当前 UI 与截图对比
223
+ 【前置准备】
224
+ - 可查看当前项目readme了解如何启动和访问
225
+ - 若是移动端项目,设计稿采用375px设计,选取一个对应的机型进行UI截图
226
+ - 若是官网项目,则无需选取机型,浏览器窗口宽度调整为1440px
227
+ 【重点对比场景】
228
+ - 调整间距、颜色和排版以保持一致
229
+ - 调用获取图片详情工具获取UI详情(右图)与截图详情imageDetails包含内容(左图)对比,与左图比右图相对应的按钮、文字是否都存在
230
+ - 若有按钮或文本不存在,检查滚动后截图详情是否存在,若存在截断,此时不要调整视口高度,检查容器实际情况调整样式,通过修改容器的高度或宽度,让内容自然撑开
231
+ - 【弹窗】:调整弹窗的高度,让内容展示全
232
+ - 【注意】:即使元素在 DOM 中存在,UI 详情中也可能未正确展示。
233
+ 在覆盖组件库样式时,应检查当前 CSS 的实现方式(如使用 style 内联样式或 style 模块化样式),以确保样式覆盖生效
234
+ 【不同机型兼容,检查排版】
235
+ - 调整为 iphone 5的尺寸
236
+ - 调整为 iPhone 12 pro的尺寸
237
+ -【注意】:若进行了兼容性检查并调整后需要在重新进行重点对比场景
238
+ 若是官网项目,则无需进行兼容性检查
239
+ 【忽略对比场景】
240
+ - 与截图对比,如果多出一个齿轮按钮忽略,该按钮为移动端调试icon
211
241
  `);
212
242
  },
213
243
  });
@@ -442,7 +472,7 @@ async function simpleImageCompress(imagePath, quality = 80) {
442
472
  .toBuffer();
443
473
  break;
444
474
  }
445
- console.log(`Sharp压缩完成: ${extension} 格式, 质量: ${quality}`);
475
+ console.error(`Sharp压缩完成: ${extension} 格式, 质量: ${quality}`);
446
476
  return compressedBuffer;
447
477
  }
448
478
  catch (error) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "figma-mcp-stdio",
3
- "version": "1.0.12",
3
+ "version": "1.0.13",
4
4
  "description": "A Model Context Protocol server",
5
5
  "private": false,
6
6
  "type": "module",