🚀 Figma MCP Bridge
Figma MCP Bridge 是一款基于模型上下文协议(MCP)的服务器,它借助 WebSocket 桥接至 Figma 插件,赋能 Claude 实时读取和操作 Figma 文档。
✨ 主要特性
- 62 种 Figma 操作:涵盖创建图形、修改样式、管理组件、导出资源等功能。
- 实时双向通信:操作更改可在 Figma 中即时呈现。
- 令牌优化查询:通过高效的变量搜索和节点遍历,提升与 AI 的交互效率。
- 全面访问 Figma API:支持样式、变量、自动布局、布尔运算等功能。
🏗️ 架构
Claude Code ←──stdio──→ MCP Server ←──WebSocket──→ Figma Plugin ←──→ Figma API
(Node.js) localhost:3055 (runs in Figma)
🚀 快速开始
🔍 前提条件
- Node.js 18 及以上版本
- Figma 桌面应用程序
- Claude Code CLI 或 Claude 桌面应用
📦 安装
选项 A:从 npm 安装(推荐)
针对 Claude Code CLI:
claude mcp add figma-mcp-bridge -- npx @magic-spells/figma-mcp-bridge
针对 Claude 桌面应用:
编辑配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"figma-mcp-bridge": {
"command": "npx",
"args": ["-y", "@magic-spells/figma-mcp-bridge"]
}
}
}
然后重启 Claude 桌面应用。
安装 Figma 插件:
- 从本仓库下载
plugin 文件夹。
- 在 Figma 中,选择 插件 → 开发 → 从清单导入插件。
- 选择
plugin/manifest.json 文件。
连接:
- 打开一个 Figma 文件。
- 运行插件:插件 → 开发 → Claude Figma Bridge。
- 状态应显示为“已连接”。
选项 B:从源代码安装
-
克隆仓库
git clone https://github.com/magic-spells/figma-mcp-bridge.git
cd figma-mcp-bridge
npm install
-
添加到 Claude Code
claude mcp add figma-mcp-bridge node /path/to/figma-mcp-bridge/src/index.js
-
安装 Figma 插件
- 在 Figma 中,选择 插件 → 开发 → 从清单导入插件。
- 选择克隆仓库中的
plugin/manifest.json 文件。
-
连接
- 打开一个 Figma 文件。
- 运行插件:插件 → 开发 → Claude Figma Bridge。
- 状态应显示为“已连接”。
⚙️ 配置
🌐 环境变量
| 变量 |
默认值 |
描述 |
FIGMA_BRIDGE_PORT |
3055 |
WebSocket 服务器端口(若端口繁忙,将自动递增) |
✅ 自动批准 Figma 工具
在 .claude/settings.local.json 中添加以下内容:
{
"permissions": {
"allow": ["mcp__figma-mcp-bridge__*"]
}
}
📄 命令参考
🔍 查询命令
figma_get_context
获取当前 Figma 文档的上下文信息,包括文件信息、当前页面和所选内容。
figma_list_pages
列出当前 Figma 文档中的所有页面。
figma_get_nodes
根据节点 ID 获取特定节点的详细信息。
| 参数 |
类型 |
是否必需 |
描述 |
nodeIds |
string[] |
是 |
节点 ID 数组(例如,["1:23", "4:56"]) |
depth |
string |
否 |
详细程度:minimal、compact 或 full(默认) |
figma_get_local_styles
列出文档中定义的所有本地样式。
| 参数 |
类型 |
是否必需 |
描述 |
type |
string |
否 |
过滤器:PAINT、TEXT、EFFECT、GRID 或 ALL(默认) |
figma_get_local_variables
获取所有本地变量和变量集合。
| 参数 |
类型 |
是否必需 |
描述 |
type |
string |
否 |
过滤器:COLOR、FLOAT、STRING、BOOLEAN 或 ALL(默认) |
注意:该命令可能返回超过 25000 个令牌。为提高效率,建议使用 figma_search_variables。
figma_get_children
获取节点的直接子节点。适用于逐层浏览节点层次结构。
| 参数 |
类型 |
是否必需 |
默认值 |
描述 |
parentId |
string |
是 |
|
要获取子节点的父节点 ID |
compact |
boolean |
否 |
true |
返回最少的数据 |
figma_search_nodes
在指定范围内按名称搜索节点。推荐用于查找特定的框架、部分或元素。
| 参数 |
类型 |
是否必需 |
默认值 |
描述 |
parentId |
string |
是 |
|
搜索范围(页面/框架/部分 ID) |
nameContains |
string |
否 |
|
不区分大小写的子字符串匹配 |
namePattern |
string |
否 |
|
带有通配符的全局模式(例如,*button*) |
types |
string[] |
否 |
|
按节点类型过滤:FRAME、TEXT、SECTION、COMPONENT、INSTANCE、GROUP 等 |
maxDepth |
number |
否 |
-1 |
搜索深度(-1 表示无限制,1 表示直接子节点) |
compact |
boolean |
否 |
true |
返回最少的数据 |
limit |
number |
否 |
50 |
最大结果数 |
每个节点返回约 50 个令牌,而完整节点数据约为 500 个令牌。
figma_search_components
按名称搜索本地组件。适用于查找特定的组件,如“Button”、“Header”等。
| 参数 |
类型 |
是否必需 |
默认值 |
描述 |
nameContains |
string |
否 |
|
不区分大小写的子字符串匹配 |
namePattern |
string |
否 |
|
带有通配符的全局模式 |
includeVariants |
boolean |
否 |
false |
是否包含组件集中的单个变体 |
compact |
boolean |
否 |
true |
返回最少的数据 |
limit |
number |
否 |
50 |
最大结果数 |
figma_search_styles
按名称搜索本地样式。在查找特定样式时,比 figma_get_local_styles 更高效。
| 参数 |
类型 |
是否必需 |
默认值 |
描述 |
nameContains |
string |
否 |
|
不区分大小写的子字符串匹配 |
type |
string |
否 |
"ALL" |
过滤器:PAINT、TEXT、EFFECT、GRID、ALL |
compact |
boolean |
否 |
true |
返回最少的数据 |
limit |
number |
否 |
50 |
最大结果数 |
🆕 创建命令
figma_create_rectangle
创建一个新的矩形。
| 参数 |
类型 |
是否必需 |
默认值 |
描述 |
x |
number |
否 |
0 |
X 坐标位置 |
y |
number |
否 |
0 |
Y 坐标位置 |
width |
number |
否 |
100 |
宽度(像素) |
height |
number |
否 |
100 |
高度(像素) |
name |
string |
否 |
"Rectangle" |
节点名称 |
fills |
color |
否 |
|
填充颜色 |
parentId |
string |
否 |
|
父节点 ID |
figma_create_ellipse
创建一个椭圆、圆形、弧形或环形。
| 参数 |
类型 |
是否必需 |
默认值 |
描述 |
x |
number |
否 |
0 |
X 坐标位置 |
y |
number |
否 |
0 |
Y 坐标位置 |
width |
number |
否 |
100 |
宽度(圆形的直径) |
height |
number |
否 |
100 |
高度 |
name |
string |
否 |
"Ellipse" |
节点名称 |
fills |
color |
否 |
|
填充颜色 |
parentId |
string |
否 |
|
父节点 ID |
arcData.startingAngle |
number |
否 |
|
起始角度(弧度) |
arcData.endingAngle |
number |
否 |
|
结束角度(弧度) |
arcData.innerRadius |
number |
否 |
|
环形的内半径比例(0 - 1) |
figma_create_line
创建一条线。
| 参数 |
类型 |
是否必需 |
默认值 |
描述 |
x |
number |
否 |
0 |
X 坐标位置 |
y |
number |
否 |
0 |
Y 坐标位置 |
length |
number |
否 |
100 |
线的长度 |
rotation |
number |
否 |
0 |
旋转角度(度) |
strokeWeight |
number |
否 |
1 |
线的粗细 |
strokes |
color |
否 |
|
线的颜色 |
strokeCap |
string |
否 |
"NONE" |
线的端点样式:NONE、ROUND、SQUARE、ARROW_LINES、ARROW_EQUILATERAL |
name |
string |
否 |
"Line" |
节点名称 |
parentId |
string |
否 |
|
父节点 ID |
figma_create_frame
创建一个框架容器(支持自动布局)。
| 参数 |
类型 |
是否必需 |
默认值 |
描述 |
x |
number |
否 |
0 |
X 坐标位置 |
y |
number |
否 |
0 |
Y 坐标位置 |
width |
number |
否 |
100 |
宽度 |
height |
number |
否 |
100 |
高度 |
name |
string |
否 |
"Frame" |
节点名称 |
fills |
color |
否 |
|
填充颜色 |
parentId |
string |
否 |
|
父节点 ID |
figma_create_text
创建一个文本节点。
| 参数 |
类型 |
是否必需 |
默认值 |
描述 |
x |
number |
否 |
0 |
X 坐标位置 |
y |
number |
否 |
0 |
Y 坐标位置 |
text |
string |
否 |
"Text" |
文本内容 |
fontSize |
number |
否 |
16 |
字体大小 |
fontFamily |
string |
否 |
"Inter" |
字体家族 |
fontStyle |
string |
否 |
"Regular" |
字体样式 |
fills |
color |
否 |
|
文本颜色 |
name |
string |
否 |
"Text" |
节点名称 |
parentId |
string |
否 |
|
父节点 ID |
figma_clone_nodes
克隆(复制)节点。
| 参数 |
类型 |
是否必需 |
默认值 |
描述 |
nodeIds |
string[] |
是 |
|
要克隆的节点 ID 数组 |
parentId |
string |
否 |
|
克隆节点的父节点 |
offset.x |
number |
否 |
20 |
相对于原始节点的 X 偏移量 |
offset.y |
number |
否 |
20 |
相对于原始节点的 Y 偏移量 |
figma_create_component
创建一个可重复使用的组件。
| 参数 |
类型 |
是否必需 |
默认值 |
描述 |
fromNodeId |
string |
否 |
|
将现有节点转换为组件 |
x |
number |
否 |
0 |
X 坐标位置 |
y |
number |
否 |
0 |
Y 坐标位置 |
width |
number |
否 |
100 |
宽度 |
height |
number |
否 |
100 |
高度 |
name |
string |
否 |
"Component" |
组件名称 |
fills |
color |
否 |
|
填充颜色 |
parentId |
string |
否 |
|
父节点 ID |
description |
string |
否 |
|
组件描述 |
figma_create_instance
创建一个组件的实例。
| 参数 |
类型 |
是否必需 |
描述 |
componentId |
string |
是 |
要实例化的组件 ID |
x |
number |
否 |
X 坐标位置 |
y |
number |
否 |
Y 坐标位置 |
parentId |
string |
否 |
父节点 ID |
name |
string |
否 |
实例名称 |
💅 样式命令
figma_set_fills
设置节点的填充颜色。
| 参数 |
类型 |
是否必需 |
描述 |
nodeId |
string |
是 |
要修改的节点 ID |
fills |
color |
是 |
填充颜色 |
颜色格式:
- 十六进制:
{ color: "#FF0000" } 或 { color: "#FF0000AA" }(包含透明度)
- RGB:
{ r: 1, g: 0, b: 0, a: 0.5 }
- 完整数组:
[{ type: "SOLID", color: { r, g, b }, opacity: 1 }]
figma_set_strokes
设置节点的描边颜色。
| 参数 |
类型 |
是否必需 |
描述 |
nodeId |
string |
是 |
要修改的节点 ID |
strokes |
color |
是 |
描边颜色 |
strokeWeight |
number |
否 |
描边粗细(像素) |
figma_set_text
设置文本节点的文本内容。
| 参数 |
类型 |
是否必需 |
描述 |
nodeId |
string |
是 |
要修改的文本节点 ID |
text |
string |
是 |
新的文本内容 |
figma_set_opacity
设置节点的透明度。
| 参数 |
类型 |
是否必需 |
描述 |
nodeId |
string |
是 |
要修改的节点 ID |
opacity |
number |
是 |
透明度(0 - 1) |
figma_set_corner_radius
设置节点的圆角半径。
| 参数 |
类型 |
是否必需 |
描述 |
nodeId |
string |
是 |
要修改的节点 ID |
radius |
number |
否 |
所有角的统一圆角半径 |
topLeft |
number |
否 |
左上角的圆角半径 |
topRight |
number |
否 |
右上角的圆角半径 |
bottomLeft |
number |
否 |
左下角的圆角半径 |
bottomRight |
number |
否 |
右下角的圆角半径 |
figma_set_effects
设置节点的效果(阴影、模糊等)。
| 参数 |
类型 |
是否必需 |
描述 |
nodeId |
string |
是 |
要修改的节点 ID |
effects |
array |
是 |
效果对象数组 |
阴影效果:
{
"type": "DROP_SHADOW",
"color": { "color": "#000000" },
"offset": { "x": 0, "y": 4 },
"radius": 8,
"spread": 0,
"visible": true
}
模糊效果:
{
"type": "LAYER_BLUR",
"radius": 10,
"visible": true
}
figma_apply_style
将本地样式应用到节点。
| 参数 |
类型 |
是否必需 |
描述 |
nodeId |
string |
是 |
要应用样式的节点 ID |
styleId |
string |
是 |
样式 ID |
property |
string |
是 |
属性:fills、strokes、text、effects、grid |
figma_set_variable
设置变量值或将变量绑定到节点属性。
| 参数 |
类型 |
是否必需 |
描述 |
variableId |
string |
是 |
变量 ID |
modeId |
string |
否 |
模式 ID(用于设置值) |
value |
any |
否 |
要设置的值 |
nodeId |
string |
否 |
节点 ID(用于绑定) |
field |
string |
否 |
要绑定的字段(opacity、cornerRadius、fills 等) |
paintIndex |
number |
否 |
填充/描边的绘制数组索引(默认 0) |
📐 布局命令
figma_set_auto_layout
配置框架的自动布局。
| 参数 |
类型 |
是否必需 |
描述 |
nodeId |
string |
是 |
要配置的框架 ID |
layoutMode |
string |
否 |
NONE、HORIZONTAL、VERTICAL |
primaryAxisSizingMode |
string |
否 |
FIXED、AUTO |
counterAxisSizingMode |
string |
否 |
FIXED、AUTO |
primaryAxisAlignItems |
string |
否 |
MIN、CENTER、MAX、SPACE_BETWEEN |
counterAxisAlignItems |
string |
否 |
MIN、CENTER、MAX、BASELINE |
paddingTop |
number |
否 |
顶部内边距 |
paddingRight |
number |
否 |
右侧内边距 |
paddingBottom |
number |
否 |
底部内边距 |
paddingLeft |
number |
否 |
左侧内边距 |
itemSpacing |
number |
否 |
项目之间的间距 |
counterAxisSpacing |
number |
否 |
换行时行与行之间的间距 |
layoutWrap |
string |
否 |
NO_WRAP、WRAP |
figma_set_layout_align
设置子节点在自动布局中的对齐方式。
| 参数 |
类型 |
是否必需 |
描述 |
nodeId |
string |
是 |
要修改的子节点 ID |
layoutAlign |
string |
否 |
MIN、CENTER、MAX、STRETCH、INHERIT |
layoutGrow |
number |
否 |
增长因子(0 - 1) |
layoutPositioning |
string |
否 |
AUTO、ABSOLUTE |
🚚 转换命令
figma_move_nodes
将节点移动到新的位置。
| 参数 |
类型 |
是否必需 |
描述 |
nodeIds |
string[] |
是 |
要移动的节点 ID 数组 |
x |
number |
否 |
X 坐标位置或偏移量 |
y |
number |
否 |
Y 坐标位置或偏移量 |
relative |
boolean |
否 |
如果为 true,x/y 为偏移量(默认 false) |
figma_resize_nodes
调整节点的大小。
| 参数 |
类型 |
是否必需 |
描述 |
nodeIds |
string[] |
是 |
要调整大小的节点 ID 数组 |
width |
number |
否 |
新的宽度 |
height |
number |
否 |
新的高度 |
figma_delete_nodes
删除节点。
| 参数 |
类型 |
是否必需 |
描述 |
nodeIds |
string[] |
是 |
要删除的节点 ID 数组 |
figma_group_nodes
将多个节点组合成一个组。
| 参数 |
类型 |
是否必需 |
默认值 |
描述 |
nodeIds |
string[] |
是 |
|
要组合的节点 ID 数组 |
name |
string |
否 |
"Group" |
组的名称 |
figma_ungroup_nodes
将组节点解组。
| 参数 |
类型 |
是否必需 |
描述 |
nodeIds |
string[] |
是 |
要解组的组节点 ID 数组 |
figma_rename_node
重命名节点。
| 参数 |
类型 |
是否必需 |
描述 |
nodeId |
string |
否 |
单个节点 ID |
nodeIds |
string[] |
否 |
批量节点 ID 数组 |
name |
string |
是 |
新的名称 |
figma_reorder_node
更改节点的 z 轴顺序(图层顺序)。
| 参数 |
类型 |
是否必需 |
描述 |
nodeId |
string |
是 |
要重新排序的节点 ID |
position |
string/number |
是 |
"front"、"back" 或索引数字 |
figma_set_constraints
设置调整大小的约束条件(仅适用于非自动布局的框架)。
| 参数 |
类型 |
是否必需 |
描述 |
nodeId |
string |
是 |
要配置的节点 ID |
horizontal |
string |
否 |
MIN、CENTER、MAX、STRETCH、SCALE |
vertical |
string |
否 |
MIN、CENTER、MAX、STRETCH、SCALE |
🧭 导航命令
figma_set_selection
设置当前的选择内容。
| 参数 |
类型 |
是否必需 |
描述 |
nodeIds |
string[] |
是 |
要选择的节点 ID 数组(为空则清除选择) |
figma_set_current_page
切换到不同的页面。
| 参数 |
类型 |
是否必需 |
描述 |
pageId |
string |
是 |
要切换到的页面 ID |
📤 导出命令
figma_export_node
将节点导出为图像。
| 参数 |
类型 |
是否必需 |
默认值 |
描述 |
nodeId |
string |
是 |
|
要导出的节点 ID |
format |
string |
否 |
"PNG" |
导出格式:PNG、SVG、JPG、PDF |
scale |
number |
否 |
1 |
导出比例(1 表示 100%) |
返回 base64 编码的数据。
🧩 组件命令
figma_detach_instance
将实例从组件中分离(转换为框架)。
| 参数 |
类型 |
是否必需 |
描述 |
nodeId |
string |
是 |
要分离的实例 ID |
🔍 令牌优化
变量查询
建议使用 figma_search_variables 替代 figma_get_local_variables:
figma_get_local_variables({ type: 'ALL' })
figma_search_variables({
namePattern: 'tailwind/orange/*',
type: 'COLOR',
compact: true,
limit: 50
})
figma_search_variables 参数:
| 参数 |
类型 |
默认值 |
描述 |
namePattern |
string |
|
通配符模式(* 表示任意字符) |
type |
string |
"ALL" |
变量类型过滤器 |
collectionName |
string |
|
集合名称过滤器 |
compact |
boolean |
true |
最少的数据(仅包含 ID、名称、值) |
limit |
number |
50 |
最大结果数 |
节点遍历
在 figma_get_nodes 中使用 depth 参数:
| 深度 |
属性数量 |
使用场景 |
minimal |
~5 |
树遍历、查找节点 |
compact |
~10 |
布局检查 |
full |
~40 |
详细的节点编辑 |
查找节点
使用搜索工具替代遍历整个树:
figma_search_nodes({
parentId: '1:2',
nameContains: 'button',
types: ['FRAME', 'COMPONENT'],
compact: true
})
figma_get_children({ parentId: '1:2' })
figma_search_components({ nameContains: 'Header' })
figma_search_styles({ nameContains: 'primary', type: 'PAINT' })
| 工具 |
使用场景 |
令牌效率 |
figma_search_nodes |
按名称查找框架/元素 |
每个节点约 50 个令牌 |
figma_get_children |
逐层浏览层次结构 |
每个节点约 50 个令牌 |
figma_search_components |
按名称查找特定组件 |
每个结果约 50 个令牌 |
figma_search_styles |
按名称查找特定样式 |
每个结果约 30 个令牌 |
❗ 已知限制
- 插件代码中不支持 ES6 扩展运算符
- 布尔运算要求节点具有相同的父节点
- 约束不适用于自动布局的子节点(请使用
layoutAlign)
- 线条的高度为 0,请使用
length 参数
- 向量仅支持 M、L、Q、C、Z 命令(不支持弧线)
detachInstance() 也会分离祖先实例
- 所有命令的超时时间为 30 秒
🛠️ 故障排除
插件无法连接
- 确保 MCP 服务器正在运行。
- 检查端口:默认端口为 3055,或设置
FIGMA_BRIDGE_PORT。
- 在 Figma 中重启插件。
- 点击插件 UI 中的“重新连接”按钮。
端口已被使用
服务器会自动尝试 3055 - 3070 之间的端口。若要使用特定端口,请执行以下命令:
FIGMA_BRIDGE_PORT=3057 node src/index.js
多个 Claude Code 实例
每个 Claude Code 实例可以通过使用不同的端口与不同的 Figma 文件配合使用:
- 第一个实例:使用默认端口 3055。
- 第二个实例:设置
FIGMA_BRIDGE_PORT=3056。
- 在 Figma 插件中:在插件 UI 中更改端口号以匹配。
插件 UI 中有一个端口输入字段,可通过更改该字段连接到不同的 MCP 服务器。
命令超时
- 命令的超时时间为 30 秒。
- 大型导出可能会超时,请尝试较小的导出比例。
- 检查插件是否仍处于连接状态(绿色状态)。
字体错误
文本操作需要加载字体。插件会自动处理此问题,但如果字体未安装,操作将失败。请使用系统中可用的字体。
📄 许可证
本项目采用 MIT 许可证。