公司动态

基于Figma MCP与Codex实现设计稿数据自动化提取与结构化输出

📅 2026/8/25 19:02:21
基于Figma MCP与Codex实现设计稿数据自动化提取与结构化输出
这次我们来看一个能直接打通 Figma 和 AI 工作流的前端提效工具。如果你经常需要在 Figma 中提取设计稿的图层、组件、文本等信息然后手动整理成 JSON 给开发或 AI 使用这个过程既繁琐又容易出错。现在通过 Figma 的 MCPModel Context Protocol协议和 Codex 工具我们可以实现自动化、结构化的设计数据读取将设计节点一次性转换为完整的 JSON 结构。这个方案的核心价值在于“提效”和“自动化”。它不是一个独立的软件而是一套基于现有生态Figma API、MCP 协议、Codex 服务的集成方案。开发者或 AI 助手可以通过标准的 MCP 接口直接向 Figma 发起查询获取设计文件的完整节点树并以高度结构化的 JSON 格式返回。这意味着前端工程师可以快速获取设计规范AI 智能体可以基于精确的设计数据生成代码产品经理也能自动化导出设计资产清单。对于前端和全栈开发者来说最关心的几个点通常是是否需要本地部署复杂的服务对网络环境有什么要求返回的 JSON 数据结构是否完整易用以及如何快速集成到现有的 CI/CD 或 AI 工作流中本文将围绕这些核心问题带你从零开始搭建一个 Figma MCP Codex 的实战环境并完成从授权、查询到数据解析的全流程验证。1. 核心能力速览在深入细节之前我们先通过一个表格快速了解这个技术方案的核心特性和要求。能力项说明与要求核心功能通过 MCP 协议调用 Codex 服务或兼容服务读取 Figma 设计文件节点输出结构化 JSON。技术栈Figma REST API, Model Context Protocol (MCP), Codex (或类似 AI 代码解释服务)HTTP 客户端。部署方式无需本地模型部署。核心是配置 MCP 服务器该服务器封装了对 Figma API 和 Codex 的调用。通常以命令行工具或后台服务形式运行。硬件/环境门槛较低。主要依赖网络能正常访问 Figma API 和你的 Codex 服务端点。本地只需能运行 Node.js/Python 脚本的环境。关键依赖1.Figma 个人访问令牌(Personal Access Token)。2.MCP 服务器实现(如figma-mcp-server)。3.Codex 服务端点或 兼容的 AI 代码解释 API。输出格式标准化的 JSON 结构包含文件信息、页面、图层节点含类型、名称、位置、样式、文本内容等属性。适合场景1. 设计稿转前端代码的自动化管道。2. AI 编程助手如 Cursor, Windsurf直接读取设计数据辅助开发。3. 设计系统资产颜色、字体、组件的自动同步与文档生成。4. 批量检查设计稿与实现代码的一致性。从表格可以看出这个方案的门槛主要在于前期的配置和授权而非硬件算力。一旦配置完成获取数据就是一次 HTTP 请求的事情。2. 适用场景与使用边界2.1 谁最适合使用前端/全栈工程师希望自动化提取设计稿中的尺寸、颜色、字体、间距等 Token用于生成 CSS 变量或主题配置。AI 辅助编程工具使用者在使用 Cursor、Windsurf、Claude Desktop 等集成了 MCP 客户端的工具时希望让 AI 助手能“看到”设计稿从而生成更精准的 UI 代码。设计系统管理者需要定期扫描 Figma 文件自动化生成设计系统文档或检查组件使用是否规范。产品经理与测试人员需要快速导出所有页面的文本内容进行评审或导出元素列表进行自动化测试用例的关联。2.2 它能解决什么问题消除手动复制粘贴无需在 Figma 中逐个图层查看属性并记录。提供机器可读的数据输出的 JSON 可以被其他程序如代码生成器、文档工具、测试脚本直接消费。赋能 AI 智能体为 AI 编程助手提供丰富的上下文使其能基于实际设计生成代码而不是凭空想象。实现流程自动化可以集成到 CI/CD 中在每次设计稿更新后自动同步设计数据到代码库。2.3 使用边界与注意事项需要设计稿编辑权限调用 Figma API 读取文件内容需要该文件的至少“可查看”权限并配置有效的访问令牌。网络要求你的运行环境必须能够访问api.figma.com以及你所使用的 Codex 服务地址可能在境内或境外需确保网络连通性。数据安全性访问令牌是最高权限凭证务必妥善保管不要泄露在客户端代码或公开仓库中。建议使用环境变量或安全的配置管理服务。API 调用限额Figma API 有调用频率限制大规模或高频扫描文件时需要注意。非实时同步这是一个“拉取”模型数据是请求时刻的快照并非与 Figma 实时双向同步。3. 环境准备与前置条件开始实战前请确保你的环境满足以下条件。3.1 基础账户与令牌准备Figma 账户拥有一个 Figma 账号并且是目标设计文件的项目成员至少拥有查看权限。Figma 个人访问令牌登录 Figma 官网进入Settings-Account。找到Personal access tokens部分点击Create new token。为令牌命名如MCP-Server权限至少勾选file_contents:read。根据需求也可以勾选team_libraries:read等。创建成功后立即复制并保存这个令牌字符串。它只会显示一次。3.2 本地开发环境Node.js 环境这是运行大多数 MCP 服务器的常见环境。建议安装 LTS 版本如 v18.x 或 v20.x。可以通过node --version检查。包管理工具npm 或 yarn。HTTP 测试工具推荐使用 curl 或图形化工具如 Postman 、 Bruno 用于测试 API。文本编辑器/IDE用于编写配置和查看 JSON 数据如 VS Code。3.3 可选MCP 客户端环境如果你想在 AI 助手如 Claude Desktop中直接使用此能力需要安装支持 MCP 的客户端如 Claude Desktop。在其配置中声明并指向你将要搭建的 Figma MCP 服务器。本文主要聚焦于服务器端的搭建和直接的 API 测试这是所有应用的基础。4. 安装部署与启动方式目前Figma MCP 服务器没有唯一的官方标准实现但社区已有一些开源项目。下面以一个典型的 Node.js 实现为例演示如何从零部署。4.1 方案一使用现有开源 MCP 服务器假设我们找到一个名为figma-mcp-server的开源项目此为示例实际项目名称可能不同。# 1. 克隆项目代码 git clone https://github.com/example/figma-mcp-server.git cd figma-mcp-server # 2. 安装依赖 npm install # 3. 配置环境变量 # 创建 .env 文件并填入你的 Figma 令牌和 Codex 端点 echo FIGMA_ACCESS_TOKENyour_personal_access_token_here .env echo CODEX_API_BASEhttp://your-codex-service.com/v1 .env echo CODEX_API_KEYyour_codex_api_key_here .env # 4. 启动 MCP 服务器 (通常使用 stdio 模式供客户端调用) node server.js服务器启动后通常会进入等待标准输入stdio的状态等待 MCP 客户端如 Claude Desktop的连接和指令。4.2 方案二手动构建一个简单的 MCP 服务如果找不到现成的我们可以理解其原理手动构建一个简化版。核心是创建一个 HTTP 服务接收符合 MCP 格式的请求内部调用 Figma API 和 Codex然后返回结果。下面是一个使用 Node.js 和 Express 的极简示例创建项目并安装依赖mkdir my-figma-mcp cd my-figma-mcp npm init -y npm install express axios创建服务器文件server.jsconst express require(express); const axios require(axios); const app express(); app.use(express.json()); // 从环境变量读取配置 const FIGMA_TOKEN process.env.FIGMA_ACCESS_TOKEN; const CODEX_ENDPOINT process.env.CODEX_API_BASE /completions; // 假设的 Codex 补全端点 const CODEX_API_KEY process.env.CODEX_API_KEY; // MCP 协议定义的工具get_figma_nodes app.post(/mcp/tools/call, async (req, res) { const { name, arguments: args } req.body; if (name get_figma_nodes) { try { const { fileKey, nodeIds } args; // 1. 调用 Figma API 获取节点数据 const figmaUrl https://api.figma.com/v1/files/${fileKey}/nodes?ids${nodeIds}; const figmaResponse await axios.get(figmaUrl, { headers: { X-Figma-Token: FIGMA_TOKEN } }); // 2. 将原始 Figma 数据发送给 Codex 进行结构化解释 const codexResponse await axios.post(CODEX_ENDPOINT, { model: codex-model, // 指定模型 prompt: 请将以下 Figma 节点数据解析为结构清晰的 JSON包含层级、类型、名称、尺寸、位置、样式颜色、字体等和文本内容。数据${JSON.stringify(figmaResponse.data)}, max_tokens: 2000 }, { headers: { Authorization: Bearer ${CODEX_API_KEY} } }); // 3. 假设 Codex 返回的文本是 JSON 字符串我们直接解析返回 const structuredJson JSON.parse(codexResponse.data.choices[0].text); res.json({ content: [{ type: text, text: JSON.stringify(structuredJson, null, 2) // 美化输出 }] }); } catch (error) { console.error(MCP tool error:, error); res.status(500).json({ error: error.message }); } } else { res.status(404).json({ error: Tool not found }); } }); // 启动服务器 const PORT process.env.PORT || 3000; app.listen(PORT, () { console.log(Figma MCP 服务器运行在 http://localhost:${PORT}); });启动服务FIGMA_ACCESS_TOKENft-xxx CODEX_API_BASEhttps://api.openai.com/v1 CODEX_API_KEYsk-xxx node server.js4.3 服务访问与验证启动后你可以使用 curl 快速测试服务是否正常curl -X POST http://localhost:3000/mcp/tools/call \ -H Content-Type: application/json \ -d { name: get_figma_nodes, arguments: { fileKey: your_figma_file_key, nodeIds: 0:1,0:2 } }如果返回了格式化的 JSON 数据说明服务基本打通。5. 功能测试与效果验证我们将分步测试从获取文件 Key 到拿到完整 JSON 的全流程。5.1 第一步获取 Figma 文件 KeyFigma 文件 Key 是文件 URL 中的一部分。例如URL 为https://www.figma.com/file/AbCdEfGhIjKlMnOp/My-Design则AbCdEfGhIjKlMnOp就是文件 Key。5.2 第二步获取节点 ID可选如果你想获取特定节点需要其 ID。在 Figma 中选中一个图层或画板浏览器地址栏的 URL 末尾会显示?node-id参数其值就是节点 ID。nodeIds参数可以传递多个用逗号分隔。如果不传nodeIds或传空通常代表获取整个文件的节点树。5.3 第三步通过 MCP 工具调用获取数据我们以集成到 Claude Desktop 为例假设已配置好 MCP 服务器。你可以在对话中直接使用自然语言请使用 get_figma_nodes 工具读取文件 Key 为 ‘AbCdEfGhIjKlMnOp’ 的整个文件结构。Claude 会通过 MCP 协议调用你的服务器并将返回的结构化 JSON 展示给你。5.4 第四步验证 JSON 输出结构一个理想的输出 JSON 应该具有清晰的层级例如{ file: { name: My-Design, lastModified: 2024-05-27T10:30:00Z, thumbnailUrl: ... }, document: { id: 0:0, name: Document, type: DOCUMENT, children: [ { id: 1:2, name: Page 1, type: CANVAS, children: [ { id: 3:4, name: Login Button, type: RECTANGLE, absoluteBoundingBox: { x: 100, y: 200, width: 200, height: 50 }, fills: [{ color: { r: 0.2, g: 0.4, b: 0.8, a: 1 } }], strokes: [], effects: [], characters: null }, { id: 5:6, name: Welcome Text, type: TEXT, absoluteBoundingBox: { x: 150, y: 100, width: 300, height: 40 }, style: { fontFamily: Inter, fontWeight: 600, fontSize: 24, textAlignHorizontal: CENTER }, characters: Welcome to Our App } ] } ] } }验证要点完整性是否包含了所有你关心的图层画板、组件、文本、形状等。属性丰富度关键属性如type,name,absoluteBoundingBox(位置尺寸),fills(填充色),style(文本样式),characters(文本内容) 是否存在。结构合理性children嵌套是否正确反映了 Figma 中的图层层级关系。5.5 第五步测试批量与特定节点查询批量查询不指定nodeIds查看返回的数据量是否与文件复杂度匹配。注意 Figma API 对返回数据大小有限制过大的文件可能需要分页或指定特定节点。特定节点查询传入具体的nodeIds验证返回的 JSON 是否只包含这些节点及其子节点响应速度是否更快。6. 接口 API 与批量任务将 Figma MCP 服务化后最大的优势是可以被其他系统程序化调用实现批量任务。6.1 标准化 API 接口设计一个设计良好的 MCP 服务器应提供清晰的 API。除了上面示例的POST /mcp/tools/call还可以扩展GET /mcp/tools列出服务器支持的所有工具如get_figma_nodes,extract_colors,extract_texts。POST /mcp/batch支持批量请求多个工具调用提高效率。6.2 批量处理设计稿文件你可以编写一个脚本遍历一个项目中的所有 Figma 文件 Key然后循环调用 MCP 接口获取数据并保存为 JSON 文件。// batch_figma_scan.js const axios require(axios); const fs require(fs).promises; const path require(path); const MCP_SERVER_URL http://localhost:3000; const FIGMA_FILE_KEYS [file_key_1, file_key_2, file_key_3]; // 从项目配置或 API 获取 const OUTPUT_DIR ./figma_outputs; async function fetchFigmaData(fileKey) { try { const response await axios.post(${MCP_SERVER_URL}/mcp/tools/call, { name: get_figma_nodes, arguments: { fileKey } }); return response.data.content[0].text; // 获取 JSON 字符串 } catch (error) { console.error(Failed to fetch ${fileKey}:, error.message); return null; } } async function main() { await fs.mkdir(OUTPUT_DIR, { recursive: true }); for (const fileKey of FIGMA_FILE_KEYS) { console.log(Processing ${fileKey}...); const jsonData await fetchFigmaData(fileKey); if (jsonData) { const outputPath path.join(OUTPUT_DIR, ${fileKey}.json); await fs.writeFile(outputPath, jsonData); console.log( - Saved to ${outputPath}); } // 避免请求过快触发 Figma API 限流 await new Promise(resolve setTimeout(resolve, 1000)); } console.log(Batch processing completed.); } main();运行此脚本node batch_figma_scan.js6.3 与 CI/CD 集成你可以将上述批量扫描脚本集成到 GitHub Actions、GitLab CI 或 Jenkins 中。例如在每次推送到main分支时自动扫描指定的 Figma 文件将输出的 JSON 与上一次的结果进行 diff如果检测到设计变更如颜色、字体、间距的修改可以自动生成 PR 评论或触发代码生成任务。7. 资源占用与性能观察由于本方案不涉及本地大模型推理因此资源占用主要集中在网络 I/O 和轻量的数据处理上。CPU/内存占用运行 Node.js 的 MCP 服务器进程本身占用极低通常 100 MB 内存CPU 可忽略不计。网络延迟性能瓶颈主要在于到api.figma.com的请求延迟取决于你的网络到 Figma 服务器的速度。到 Codex 服务端点的请求延迟如果 Codex 服务部署在境外延迟可能显著。考虑使用境内可访问的类似服务或代理。响应时间一次完整的get_figma_nodes调用时间 ≈ Figma API 响应时间 Codex 处理时间 网络往返开销。对于一个中等复杂度的页面通常在 2 到 10 秒之间。优化建议缓存对不常变动的设计文件数据可以在 MCP 服务器层添加缓存如 Redis避免重复调用 Figma API。分页/增量获取对于巨型文件不要一次性拉取全部节点。可以设计工具支持分页或先获取顶层节点 ID再按需获取详情。并行处理在批量任务中可以适当并行请求但要注意 Figma API 的速率限制。8. 常见问题与排查方法在搭建和使用过程中你可能会遇到以下问题。问题现象可能原因排查方式解决方案MCP 服务器启动失败1. 端口被占用。2. Node.js 版本不兼容。3. 依赖安装失败。1. 查看启动错误日志。2. 运行node --version检查版本。3. 检查package.json和node_modules。1. 更换端口修改PORT环境变量。2. 使用 nvm 切换 Node.js 版本至 LTS。3. 删除node_modules和package-lock.json重新npm install。调用接口返回 401/403 错误1. Figma 访问令牌无效或过期。2. 令牌权限不足缺少file_contents:read。3. Codex API Key 错误。1. 检查环境变量FIGMA_ACCESS_TOKEN是否正确设置。2. 在 Figma 账户设置中确认令牌权限。3. 检查 Codex 服务端的认证日志。1. 重新生成 Figma 令牌并更新环境变量。2. 确保令牌有读取目标文件的权限。3. 核对 Codex API Key 和服务端点。返回 “File not found” 或 “Node not found”1. 文件 Key 错误。2. 节点 ID 错误。3. 当前令牌无权访问该文件。1. 从 Figma 文件 URL 中复核文件 Key。2. 确认节点 ID 是否存在于该文件中。3. 尝试在浏览器中用该令牌直接访问 Figma API 测试。1. 使用正确的文件 Key。2. 通过 Figma API 先获取文件节点列表确认 ID。3. 让文件所有者将你加入项目成员。请求超时或响应缓慢1. 网络问题无法访问 Figma 或 Codex 服务。2. 设计文件过大API 处理时间长。3. Codex 服务负载高。1. 使用curl或ping测试网络连通性。2. 尝试获取一个简单文件或指定少量节点 ID。3. 查看 Codex 服务状态。1. 检查代理或防火墙设置。2. 优化请求只获取必要节点或实现分页。3. 联系 Codex 服务提供商或考虑使用备用服务。返回的 JSON 结构混乱或缺失字段1. Codex 服务提示词prompt不够精确。2. Figma API 返回的数据格式有变化。3. MCP 服务器中的数据处理逻辑有 bug。1. 检查发送给 Codex 的 prompt确保指令清晰。2. 直接调用 Figma API查看原始返回数据格式。3. 在 MCP 服务器代码中添加日志检查中间数据。1. 优化 prompt明确要求输出 JSON 的字段和结构。2. 更新代码以适应最新的 Figma API。3. 修复数据处理逻辑做好错误处理和字段过滤。Claude Desktop 等客户端无法连接 MCP 服务器1. MCP 服务器未以 stdio 模式启动。2. 客户端配置路径错误。3. 服务器与客户端协议版本不兼容。1. 确认启动命令是否正确通常是node server.js而非启动 HTTP 服务。2. 检查客户端的 MCP 配置 JSON 文件。3. 查看客户端和服务器日志。1. 使用社区推荐的 MCP 服务器实现并遵循其启动说明。2. 确保客户端配置中command指向正确的可执行文件或脚本。3. 查阅客户端文档确认支持的 MCP 协议版本。9. 最佳实践与使用建议为了稳定、高效、安全地使用 Figma MCP 方案请遵循以下建议令牌管理是重中之重永远不要将FIGMA_ACCESS_TOKEN硬编码在代码或提交到版本库。使用.env文件并加入.gitignore或云服务商提供的密钥管理服务如 AWS Secrets Manager, GCP Secret Manager。为不同的环境开发、测试、生产使用不同的令牌并定期轮换。设计清晰的工具Tools不要只做一个万能的get_figma_nodes。可以设计更细粒度的工具如extract_design_tokens: 专门提取颜色、字体、间距等设计变量。list_components: 列出文件中所有组件及其使用实例。get_text_content: 提取所有文本图层的内容用于国际化检查。这能让 AI 助手更精准地调用也便于后续维护。实施请求限流与重试在 MCP 服务器代码中对调用 Figma API 和 Codex 的请求添加限流逻辑避免触发速率限制。对于网络波动导致的临时失败实现指数退避的重试机制。输出标准化与版本化定义团队内部标准的 JSON 输出格式Schema确保不同文件、不同时间获取的数据结构一致。对输出的 JSON 文件进行版本管理便于追踪设计变更历史。关注数据安全与合规确保你的使用符合 Figma 的服务条款和 API 使用政策。如果处理的是公司内部敏感设计稿确保 MCP 服务器部署在受信任的内网环境并做好访问控制。定期审计 API 调用日志监控异常访问。从简单开始逐步迭代首先在一个简单的设计文件上跑通整个流程。然后尝试处理一个真实的、中等复杂度的项目文件。最后再考虑集成到 CI/CD 和 AI 助手等复杂场景中。10. 总结与下一步通过本文的实战演练你应该已经掌握了如何利用 Figma MCP 协议和 Codex 服务将设计稿数据自动化、结构化地提取为 JSON 的核心流程。这套方案的价值在于它像一座桥梁连接了设计Figma与开发/AICodex两个世界让设计数据真正成为机器可读、可处理的资产。最值得尝试的第一步是在一个你拥有权限的 Figma 文件上成功运行一次完整的“获取-解析”流程。哪怕最初返回的 JSON 不够完美这个闭环的打通意味着自动化提效的起点。最容易踩的坑通常是令牌权限和网络连通性按照第 8 节的排查方法基本都能解决。接下来你可以探索几个方向深化 AI 集成优化发送给 Codex 的提示词Prompt让它输出的 JSON 更贴合你的代码生成需求例如直接生成 Tailwind CSS 配置或 React 组件 Props 定义。扩展工具集基于 Figma API 的其他能力开发更多 MCP 工具如“评论管理”、“版本对比”等。构建内部平台将 MCP 服务器包装成一个简单的内部管理界面让非开发人员也能轻松导出设计数据。探索其他 MCP 服务将 Figma MCP 与 GitHub MCP、Jira MCP 等结合让 AI 助手拥有跨平台的上下文能力。工具的价值在于被使用。建议你立即选择一个当前项目中正在开发的功能页面用这套方法提取其设计数据并与手动获取的信息进行对比亲身感受其提效的威力。