mcpField
F
figma

figma

github.com/zenobi-us设计与 UI6851 次安装今天更新
代码仓库

关于 figma

figma 是指导通过 mcporter 使用 figma-desktop MCP 服务的自动化技能,面向需要从 Figma 设计获取代码、结构和令牌的开发与设计工作流。它还涵盖截图及 Code Connect 映射。

主要功能

  1. 01从设计生成 UI 代码
  2. 02获取截图与节点元数据
  3. 03提取设计变量
  4. 04管理 Code Connect 映射
  5. 05生成设计系统规则
  6. 06检查工具参数 Schema

适用场景

  1. 01将 Figma 组件转为代码
  2. 02提取颜色、字体和间距令牌
  3. 03为组件添加代码映射
  4. 04获取 FigJam 内容用于分析

MCP 相关

此技能通过 mcporter 调用 figma-desktop MCP 服务。该服务向 MCP 客户端提供设计上下文、截图、元数据、变量、FigJam 内容及 Code Connect 操作。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/zenobi-us/dotfiles --skill figma

安装后在 Claude Code 中输入/figma确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

scripts/
add_code_connect.sh
get_design_context.sh
get_screenshot.sh
get_variables.sh

详细介绍

Figma 技能

通过 mcporter 使用 figma-desktop MCP 服务,掌握 Figma 自动化与集成。此技能支持以编程方式访问 Figma 设计、生成代码、截取屏幕截图和映射 Code Connect。

[!CRITICAL] ⚠️ 重要 - 参数传递:

使用函数调用语法(不要使用标志语法)。参数放在函数调用中,而不是作为标志:

mise x node@20 -- mcporter call 'figma-desktop.get_design_context(nodeId: "123:456", clientLanguages: "typescript", clientFrameworks: "react")'

关键规则:

  • 函数调用中的参数使用 camelCase
  • 字符串值使用双引号:"value"
  • 布尔值使用裸写法:true 或 false
  • 环境变量在引号外插值:"'$VAR'"
  • 不使用 --flag 语法,也无需转义 JSON 字符串

前置条件

验证 Figma Desktop 连接
mise x node@20 -- mcporter call 'figma-desktop.get_metadata'

应返回当前选中节点的元数据。如果失败,请确保:

  1. Figma Desktop 正在运行
  2. 已在 mcporter 中配置 figma-desktop MCP 服务

快速设置

获取设计上下文(一次完成)

获取设计信息和生成代码的最快方式:

mise x node@20 -- ./scripts/get_design_context.sh "123:456"

也可以使用当前选中的节点:

mise x node@20 -- ./scripts/get_design_context.sh

指定框架上下文:

mise x node@20 -- ./scripts/get_design_context.sh "123:456" --languages "typescript" --frameworks "react"
从 URL 提取节点 ID

如果 Figma URL 类似于 https://figma.com/design/:fileKey/:fileName?node-id=1-2:

  • nodeId 为 1:2(将 - 替换为 :)

对于分支 URL,例如 https://figma.com/design/:fileKey/branch/:branchKey/:fileName:

  • 将 branchKey 用作 fileKey

核心操作

获取设计上下文(生成代码)

用于根据 Figma 设计生成 UI 代码的主要工具:

mise x node@20 -- mcporter call 'figma-desktop.get_design_context(nodeId: "123:456")'

指定技术上下文(推荐):

mise x node@20 -- mcporter call 'figma-desktop.get_design_context(nodeId: "123:456", clientLanguages: "typescript,css", clientFrameworks: "react")'

使用当前选中的节点:

mise x node@20 -- mcporter call 'figma-desktop.get_design_context()'

强制输出代码(适用于大型设计):

mise x node@20 -- mcporter call 'figma-desktop.get_design_context(nodeId: "123:456", forceCode: true)'

指定产物类型上下文:

mise x node@20 -- mcporter call 'figma-desktop.get_design_context(nodeId: "123:456", artifactType: "REUSABLE_COMPONENT", taskType: "CREATE_ARTIFACT")'

有效的 artifactType 值:

  • WEB_PAGE_OR_APP_SCREEN
  • COMPONENT_WITHIN_A_WEB_PAGE_OR_APP_SCREEN
  • REUSABLE_COMPONENT
  • DESIGN_SYSTEM

有效的 taskType 值:

  • CREATE_ARTIFACT
  • CHANGE_ARTIFACT
  • DELETE_ARTIFACT
获取屏幕截图

截取 Figma 节点的视觉屏幕截图:

mise x node@20 -- mcporter call 'figma-desktop.get_screenshot(nodeId: "123:456")'

使用当前选中的节点:

mise x node@20 -- mcporter call 'figma-desktop.get_screenshot()'
获取元数据(结构概览)

获取节点的 XML 结构概览(节点 ID、图层类型、名称、位置和尺寸):

mise x node@20 -- mcporter call 'figma-desktop.get_metadata(nodeId: "123:456")'

注意: 大多数情况下优先使用 get_design_context。仅在需要结构概览时使用 get_metadata。

获取变量定义

获取节点的设计令牌/变量(颜色、字体、尺寸、间距):

mise x node@20 -- mcporter call 'figma-desktop.get_variable_defs(nodeId: "123:456")'

返回类似以下映射:{'icon/default/secondary': '#949494'}

获取 FigJam 内容

用于 FigJam 文件(白板、图表):

mise x node@20 -- mcporter call 'figma-desktop.get_figjam(nodeId: "123:456")'

包含节点图像:

mise x node@20 -- mcporter call 'figma-desktop.get_figjam(nodeId: "123:456", includeImagesOfNodes: true)'

注意: 仅适用于 FigJam 文件,不适用于标准 Figma 设计文件。

Code Connect

Code Connect 将 Figma 组件映射到代码库中的代码组件。

获取 Code Connect 映射

检查节点现有的映射:

mise x node@20 -- mcporter call 'figma-desktop.get_code_connect_map(nodeId: "123:456")'

返回类似以下映射:

{
  "1:2": {
    "codeConnectSrc": "https://github.com/foo/components/Button.tsx",
    "codeConnectName": "Button"
  }
}
添加 Code Connect 映射

将 Figma 组件映射到代码组件:

mise x node@20 -- mcporter call 'figma-desktop.add_code_connect_map(nodeId: "123:456", source: "src/components/Button.tsx", componentName: "Button", label: "React")'

必需参数:

  • source:代码库中组件的路径
  • componentName:组件名称
  • label:框架/语言标签

有效的 label 值:

  • React、Web Components、Vue、Svelte、Storybook、Javascript
  • Swift UIKit、Objective-C UIKit、SwiftUI
  • Compose、Java、Kotlin、Android XML Layout
  • Flutter、Markdown
创建设计系统规则

为你的代码库生成设计系统规则:

mise x node@20 -- mcporter call 'figma-desktop.create_design_system_rules(clientLanguages: "typescript", clientFrameworks: "react")'

辅助脚本

脚本用途
./scripts/get_design_context.sh一次性获取设计上下文 - 获取设计信息和生成的代码(可选框架上下文)
./scripts/get_screenshot.sh截取屏幕截图 - 将节点截图保存到文件
./scripts/get_variables.sh获取设计令牌 - 提取变量(颜色、字体、尺寸、间距)
./scripts/add_code_connect.sh添加 Code Connect - 将 Figma 组件映射到代码组件

脚本帮助:

./scripts/get_design_context.sh --help
./scripts/get_screenshot.sh --help
./scripts/get_variables.sh --help
./scripts/add_code_connect.sh --help

常见工作流

1. 实现设计组件
# Get the node ID from Figma URL (node-id=1-2 → nodeId="1:2")
NODE_ID="1:2"

# Get design context with your tech stack
mise x node@20 -- mcporter call 'figma-desktop.get_design_context(nodeId: "'$NODE_ID'", clientLanguages: "typescript,css", clientFrameworks: "react")'

# Get variables/tokens for the component
mise x node@20 -- mcporter call 'figma-desktop.get_variable_defs(nodeId: "'$NODE_ID'")'
2. 在代码中记录组件
# Check existing mappings
mise x node@20 -- mcporter call 'figma-desktop.get_code_connect_map(nodeId: "123:456")'

# Add mapping
mise x node@20 -- mcporter call 'figma-desktop.add_code_connect_map(nodeId: "123:456", source: "src/components/Button/Button.tsx", componentName: "Button", label: "React")'
3. 提取设计系统令牌
# Get all variables for a design system frame
mise x node@20 -- mcporter call 'figma-desktop.get_variable_defs(nodeId: "0:1")'

# Generate design system rules
mise x node@20 -- mcporter call 'figma-desktop.create_design_system_rules(clientLanguages: "typescript,css", clientFrameworks: "react")'
4. 为文档截取屏幕截图
# Get screenshot of a component
mise x node@20 -- mcporter call 'figma-desktop.get_screenshot(nodeId: "123:456")' > component.png

常见问题与解决方案

问题解决方案
连接被拒绝确保 Figma Desktop 正在运行,并且已配置 figma-desktop MCP 服务
未找到节点确认 nodeId 格式为 123:456(使用冒号分隔)。检查文件中是否存在该节点。
大型设计没有输出使用 forceCode: true 参数强制生成代码
代码语言错误指定 clientLanguages 和 clientFrameworks 参数
“参数无效”或命令失败使用函数调用语法,而非标志语法。参数应放在 functionName(param: value) 中
FigJam 工具无法使用get_figjam 仅适用于 FigJam 文件,不适用于常规 Figma 设计文件
Code Connect 未显示确保节点是组件实例,而非普通画板

通过架构内省发现函数参数

mcporter CLI 可以对 MCP 服务架构进行内省,以发现正确的参数及其类型。

列出所有可用工具
mise x node@20 -- mcporter list figma-desktop --json | jq -r ".tools[].name"

返回:

get_design_context
get_variable_defs
get_screenshot
get_code_connect_map
add_code_connect_map
get_metadata
create_design_system_rules
get_figjam
检查特定工具的架构
mise x node@20 -- mcporter list figma-desktop --json | jq '.tools[] | select(.name == "get_design_context")'

这会返回完整的 JSON 架构,其中包括:

  • inputSchema.properties - 所有可用参数及其类型和说明
  • inputSchema.required - 必填参数

仅筛选必填参数:

mise x node@20 -- mcporter list figma-desktop --json | \
  jq '.tools[] | select(.name == "add_code_connect_map") | .inputSchema.required[]'

获取参数说明:

mise x node@20 -- mcporter list figma-desktop --json | \
  jq '.tools[] | select(.name == "get_design_context") | .inputSchema.properties | to_entries[] | "\(.key): \(.value.description)"'

提示

  • 从 URL 获取节点 ID: URL 中的 node-id=1-2 会转换为 nodeId: "1:2"(将 - 替换为 :)
  • 分支 URL: 对于分支 URL,请将 branchKey 用作 fileKey
  • 当前选中的节点: 省略 nodeId,即可使用 Figma Desktop 中当前选中的节点
  • 技术上下文: 始终指定 clientLanguages 和 clientFrameworks,以获得更好的代码生成效果
  • 大型设计: 如果输出被截断,请使用 forceCode: true
  • 在 shell 脚本中使用 jq 解析 JSON
  • 不确定参数时使用架构内省 - mcporter list figma-desktop --json | jq 是你的好帮手

可用工具参考

工具用途必需参数
get_design_context根据设计生成 UI 代码无(使用当前选择)
get_screenshot截取视觉屏幕截图无(使用当前选择)
get_metadata获取 XML 结构概览无(使用当前选择)
get_variable_defs获取设计令牌/变量无(使用当前选择)
get_code_connect_map获取现有代码映射无(使用当前选择)
add_code_connect_map将设计映射到代码组件source、componentName、label
create_design_system_rules生成设计系统规则无
get_figjam获取 FigJam 内容无(使用当前选择)

评论

支持 Markdown