关于 figma-mcp-rust
figma-mcp-rust 是 Rust 实现的 Figma MCP 服务,通过 Figma 插件桥接读写设计数据,不使用 REST API,因此无需 API 令牌且没有调用频率限制。它是 vkhanhqui/figma-mcp-go 的移植版,并对日志、请求关联和工具注册方式做了调整。
主要功能
- 01通过插件桥接读写 Figma 实时数据
- 02无需 Figma API 令牌,也无频率限制
- 03提供 73 个工具,涵盖创建、修改与导出
- 04支持样式、变量、组件与原型配置
- 05内置设计策略提示词与配套 Skills
适用场景
- 01由 AI 工具根据文本生成或修改 Figma 设计
- 02批量重命名节点、替换文本与整理设计令牌
- 03将设计导出为 PDF、截图或 JSON/CSS 令牌
MCP 相关
该项目是 MCP 服务,向 MCP 客户端暴露 73 个 Figma 工具与若干 MCP 提示词,由 Figma 插件作为桥接与设计文件通信。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
73收录的工具列表 · 更新于 2 周前
此工具无需参数。
详细介绍
figma-mcp-rust
vkhanhqui/figma-mcp-go 的高性能 Rust 移植版。 原始设计、Figma 插件桥接和工具目录的所有功劳都归于 @vkhanhqui。本仓库将同一 MCP 服务移植到 Rust, 并加入结构化日志记录、无竞态的请求关联和声明式工具表; 请参阅下文的“Rust 重写带来了哪些变化”。
Figma MCP:免费,无速率限制
开源 Figma MCP 服务,通过插件实现完整的读取和写入权限。无需 REST API,无速率限制。将文本转化为设计,并将设计转化为真实代码。适用于 Cursor、Claude、GitHub Copilot 及任何兼容 MCP 的 AI 工具。
亮点
- 无需 Figma API 令牌
- 无速率限制,适合免费套餐
- 通过插件桥接读取和写入实时 Figma 数据,共有 73 个工具
- 完整的设计自动化:样式、变量、组件、原型和内容
- 内置为 MCP 提示词的设计策略,以及相应的 Claude Code 技能
为什么要开发
大多数 Figma MCP 服务都依赖 Figma REST API。
这听起来不错,直到你遇到以下限制:
| 套餐 | 限制 |
|---|---|
| Starter / View / Collab | 每月 6 次工具调用 |
| Pro / Org(Dev 席位) | 每天 200 次工具调用 |
| Enterprise | 每天 600 次工具调用 |
如果你正在试用 AI 工具,几分钟内就会用完额度。
我没有足够的钱支付更高的额度。 所以我做了一个完全不使用 API的工具。
安装与设置
通过 npx 安装,无需构建。
1. 配置你的 AI 工具
Claude Code CLI
claude mcp add -s project figma-mcp-rust -- npx -y @alvinindra/figma-mcp-rust@latest
Claude Code 插件市场
/plugin marketplace add alvinindra/figma-mcp-rust
/plugin install figma-mcp-rust@figma-mcp-rust
安装插件还会添加 13 个技能,涵盖下方所述的工作流,包括读取设计、生成令牌以及排查桥接问题。
Codex CLI
codex mcp add figma-mcp-rust -- npx -y @alvinindra/figma-mcp-rust@latest
.mcp.json(Claude 和其他兼容 MCP 的工具)
{
"mcpServers": {
"figma-mcp-rust": {
"command": "npx",
"args": ["-y", "@alvinindra/figma-mcp-rust"]
}
}
}
.vscode/mcp.json(Cursor / VS Code / GitHub Copilot)
{
"servers": {
"figma-mcp-rust": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@alvinindra/figma-mcp-rust"
]
}
}
}
2. 安装 Figma 插件
- 在 Figma Desktop 中:Plugins → Development → Import plugin from manifest
- 从 plugin.zip 中选择
manifest.json - 在任意 Figma 文件中运行插件
可用工具
写入:创建
| 工具 | 描述 |
|---|---|
create_frame | 创建框架,可选设置自动布局、填充和父级 |
create_rectangle | 创建矩形,可选设置填充和圆角半径 |
create_ellipse | 创建椭圆或圆形 |
create_text | 创建文本节点(自动加载字体) |
import_image | 解码 base64 图像,并将其设为矩形填充 |
create_component | 将现有的 FRAME 节点转换为可复用组件 |
create_section | 创建 Figma Section 节点,用于在页面上整理框架 |
写入:修改
| 工具 | 描述 |
|---|---|
set_text | 更新现有 TEXT 节点的文本内容 |
set_fills | 设置节点的纯色填充(十六进制) |
set_strokes | 设置节点的纯色描边和粗细 |
set_opacity | 设置一个或多个节点的不透明度(0 = 透明,1 = 不透明) |
set_corner_radius | 设置圆角半径,可统一设置或逐角设置 |
set_auto_layout | 设置或更新框架的自动布局(弹性布局)属性 |
set_visible | 显示或隐藏一个或多个节点 |
lock_nodes | 锁定一个或多个节点,防止意外编辑 |
unlock_nodes | 解锁一个或多个节点 |
rotate_nodes | 设置一个或多个节点的绝对旋转角度 |
reorder_nodes | 更改 z 轴顺序:bringToFront、sendToBack、bringForward、sendBackward |
set_blend_mode | 为一个或多个节点设置混合模式(MULTIPLY、SCREEN、OVERLAY 等) |
set_constraints | 为一个或多个节点设置响应式约束 { horizontal, vertical } |
move_nodes | 将节点移动到绝对 x/y 位置 |
resize_nodes | 按宽度和/或高度调整节点大小 |
rename_node | 重命名节点 |
clone_node | 克隆节点,可选择重新定位或更改父级 |
reparent_nodes | 将节点移动到其他父框架、组或分区 |
batch_rename_nodes | 通过查找/替换、正则表达式或前缀/后缀批量重命名节点 |
find_replace_text | 在子树或页面的所有 TEXT 节点中查找并替换文本;支持正则表达式 |
写入:删除
| 工具 | 描述 |
|---|---|
delete_nodes | 永久删除一个或多个节点 |
写入:原型
| 工具 | 描述 |
|---|---|
set_reactions | 为节点设置原型响应(触发条件 + 操作);模式为 replace 或 append |
remove_reactions | 按节点中从零开始的索引移除所有或指定响应 |
写入:样式
| 工具 | 描述 |
|---|---|
set_effects | 直接为节点应用投影/模糊效果(无需样式) |
create_paint_style | 创建具有纯色的新命名绘画样式 |
create_text_style | 创建包含字体、字号和间距的新命名文本样式 |
create_effect_style | 创建新命名效果样式(投影、内阴影、模糊) |
create_grid_style | 创建新命名布局网格样式(列、行或网格) |
update_paint_style | 重命名或更改现有绘画样式的颜色 |
apply_style_to_node | 将现有本地样式应用到节点,并将其关联到该样式 |
delete_style | 按 ID 删除任意样式(绘画、文本、效果或网格) |
写入:变量
| 工具 | 描述 |
|---|---|
create_variable_collection | 创建新的本地变量集合,可选择设置初始模式 |
add_variable_mode | 为现有集合添加新模式(例如,浅色/深色) |
create_variable | 在集合中创建变量(COLOR/FLOAT/STRING/BOOLEAN) |
set_variable_value | 为特定模式设置变量值 |
bind_variable_to_node | 将变量绑定到节点属性;支持 fillColor、strokeColor、visible、opacity、rotation、width、height、圆角半径、间距等 |
delete_variable | 删除变量或整个集合 |
写入:页面
| 工具 | 描述 |
|---|---|
add_page | 向文档添加新页面(可选名称和索引) |
delete_page | 按 ID 或名称删除页面(无法删除唯一页面) |
rename_page | 按 ID 或当前名称重命名页面 |
写入:组件与导航
| 工具 | 描述 |
|---|---|
navigate_to_page | 按 ID 或名称切换当前 Figma 页面 |
group_nodes | 将两个或多个节点编组为 GROUP |
ungroup_nodes | 解散 GROUP 节点,并将子节点移至父级 |
swap_component | 替换 INSTANCE 节点的主组件 |
detach_instance | 分离组件实例,将其转换为普通框架 |
读取:文档与选区
| 工具 | 描述 |
|---|---|
get_document | 当前页面的完整树结构 |
get_metadata | 文件名、页面数、当前页面 |
get_pages | 所有页面(ID + 名称),轻量,不加载树结构 |
get_selection | 当前选中的节点 |
get_node | 按 ID 获取单个节点 |
get_nodes_info | 按 ID 获取多个节点 |
get_design_context | 深度受限的树结构,包含 detail 级别(minimal/compact/full) |
search_nodes | 在子树中按名称子字符串和/或类型查找节点 |
scan_text_nodes | 子树中的所有文本节点 |
scan_nodes_by_types | 匹配指定类型列表的节点 |
get_viewport | 当前视口中心、缩放比例和可见边界 |
读取:样式与变量
| 工具 | 描述 |
|---|---|
get_styles | 填充、文本、效果和网格样式 |
get_variable_defs | 变量集合和值 |
get_local_components | 所有组件和组件集,以及变体属性 |
get_annotations | 开发模式注释 |
get_fonts | 当前页面使用的所有字体,按使用频率排序 |
get_reactions | 节点上的原型/交互响应 |
导出
| 工具 | 描述 |
|---|---|
get_screenshot | 导出任意节点的 Base64 图像 |
save_screenshots | 将图像导出到磁盘(服务端执行,无需 API 调用) |
export_frames_to_pdf | 将多个画板导出为单个多页 PDF 文件并保存到磁盘 |
export_tokens | 将设计令牌(变量 + 填充样式)导出为 JSON 或 CSS |
MCP 提示词
| 提示词 | 描述 |
|---|---|
read_design_strategy | 阅读 Figma 设计的最佳实践 |
design_strategy | 创建和修改设计的最佳实践 |
text_replacement_strategy | 在整个设计中分块替换文本的方法 |
annotation_conversion_strategy | 将手动注释转换为原生 Figma 注释 |
swap_overrides_instances | 在组件实例之间转移覆盖项 |
reaction_to_connector_strategy | 将原型响应映射到交互流程图 |
style_audit_strategy | 查找使用原始值而非关联样式或变量的节点 |
bulk_rename_strategy | 按统一命名规范重命名节点 |
design_token_generation_strategy | 根据现有设计构建变量和样式令牌系统 |
generate_color_palette | 创建基础色阶,并将语义别名设为变量 |
generate_type_scale | 创建完整的排版比例并设为文本样式 |
generate_component_variants | 将组件克隆为尺寸、主题、状态或深色模式变体 |
通过插件市场安装服务后,每个提示词也可作为 Claude Code 技能使用;此外,还提供用于排查连接问题的 bridge-troubleshooting 技能。
相关项目
- vkhanhqui/figma-mcp-go,Go 原版
- magic-spells/figma-mcp-bridge
- grab/cursor-talk-to-figma-mcp
- gethopp/figma-mcp-bridge
Rust 重写中的变更
- 内存安全的 WebSocket 桥接:请求/响应关联使用
tokio::sync::oneshot,而不是由sync.Once保护的 Go 通道,从而消除了向已关闭通道发送数据的竞态条件。 - 声明式工具表:全部 73 个工具注册项都位于一个静态数组(
src/tools/definitions.rs)中,不再需要约 700 行重复的 Go 处理程序。添加新工具时,只需追加一项,并可选择添加一个 JSON Schema 构建器。 - 通过
tracing实现结构化日志记录:每个组件都会按目标(bridge、leader、follower、election、node)以可调级别生成事件。设置FIGMA_MCP_LOG=debug可获取详细输出。 - 基于
thiserror的错误类型,取代格式化字符串,因此调用方可以匹配特定故障模式(NotConnected、Timeout等)。 - 使用
lopdf以纯 Rust 方式合并 PDF,无需依赖外部 CLI。 - 通过
clap提供一流的 CLI,支持派生帮助文本和验证。
贡献
欢迎提交问题和 PR。
Star 历史
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。