关于 figma-mcp-rs
figma-mcp-rs 是用 Rust 编写的 Figma 和 FigJam MCP 服务,面向需要读取或修改设计文件的 AI 工具及其使用者。它通过运行在 Figma Desktop 中的插件桥接本地 WebSocket,支持读写文件而不调用 REST API。
主要功能
- 01读取文档、节点和选择内容
- 02创建及修改设计节点
- 03管理样式、变量和组件
- 04支持 FigJam 画板操作
- 05通过插件 API 执行代码
- 06内置插件并自动安装
适用场景
- 01根据文字描述创建 Figma 设计
- 02批量修改页面节点和文本
- 03读取 FigJam 画板并调整内容
- 04在文件中更新变量和样式
MCP 相关
作为 MCP 服务,它向兼容客户端提供 Figma 与 FigJam 的读写工具。服务通过本地 WebSocket 与 Figma Desktop 插件通信。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
84收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string|null | 否 | 新页面的名称(默认值为 'Page') |
| index | number|null | 否 | 插入页面的位置索引(0 = 第一页)。默认插入到最后。 |
详细介绍
figma-mcp-rs
使用 Rust 编写的 Figma/FigJam MCP 服务——免费且没有速率限制。它是 vkhanhqui/figma-mcp-go 的 Rust 移植版,重写了 SolidJS 插件并支持 FigJam。
开源 MCP 服务,通过插件全面读写 Figma 和 FigJam——无需 REST API,也没有速率限制。将文本转化为设计,再将设计转化为真实代码。兼容 Claude、Cursor、GitHub Copilot 及任何兼容 MCP 的 AI 工具。
亮点
- 无需 Figma API 令牌
- 没有速率限制——适合免费套餐
- 通过插件桥接实时读写 Figma/FigJam 数据——总计 87 个工具(包含 Go 参考实现中的 73 个,以及
get_status、execute_code、八个 FigJam 工具、use_figma逃生接口,以及四个设计系统工具:update_style、update_variable、set_variable_mode、bind_variable_to_style) - 全面的设计自动化——样式、变量(值、别名、作用域、模式)、组件、原型和内容
- 颜色可使用十六进制、
rgb()、hsl()或oklch()格式;get_styles和export_tokens可通过colorFormat输出上述任意格式 - 内置设计策略——包含 12 个 MCP 提示词
- 原生二进制文件,启动快、内存占用低
- 插件已打包在二进制文件中——服务会在首次运行时自动安装,无需下载
- 基于 rmcp 3.2 构建;会与每个客户端协商 MCP 协议修订版本
为什么要做这个项目
官方 Figma MCP 服务通过 REST API 调用,且会根据套餐限制速率:
| Figma 套餐 | REST 调用额度 |
|---|---|
| Starter | 每月 6 次调用 |
| Professional | 每天 200 次调用 |
| Enterprise | 每天 600 次调用 |
此服务从不调用 REST API。它通过本地 WebSocket 与在 Figma Desktop 中运行的插件通信,因此所有读取和写入操作都不受限制且免费——而且与 REST API 不同,插件可以写入当前打开的文件。
性能
在 Apple M4 Pro 上测得:空闲时 RSS 约为 6 MB;插件已连接并执行工具往返调用时约为 7 MB;启动时间小于 10 ms。Go 参考实现的内存占用约为 15–25 MB。
安装与设置
1. 配置你的 AI 工具
Claude Code CLI
claude mcp add -s project figma-mcp-rs -- npx -y figma-mcp-rs@latest
或从源码构建:
make build # cargo build --release + plugin build
claude mcp add -s project figma-mcp-rs -- /path/to/figma-mcp-rs/target/release/figma-mcp-rs
Codex CLI
codex mcp add figma-mcp-rs -- npx -y figma-mcp-rs@latest
Claude Code 插件市场(也会安装 15 个技能)
/plugin marketplace add <this-repo>
/plugin install figma-mcp-rs@figma-mcp-rs
.mcp.json(适用于 Claude 和其他兼容 MCP 的工具)
{
"mcpServers": {
"figma-mcp-rs": {
"command": "npx",
"args": ["-y", "figma-mcp-rs"]
}
}
}
.vscode/mcp.json(适用于 Cursor / VS Code / GitHub Copilot)
{
"servers": {
"figma-mcp-rs": {
"type": "stdio",
"command": "npx",
"args": ["-y", "figma-mcp-rs"]
}
}
}
Docker
docker build -t figma-mcp-rs .
docker run -i --rm -p 1998:1998 figma-mcp-rs
使用 Docker 时的 .mcp.json:
{
"mcpServers": {
"figma-mcp-rs": {
"command": "docker",
"args": ["run", "-i", "--rm", "-p", "1998:1998", "figma-mcp-rs"]
}
}
}
镜像监听 0.0.0.0:1998(已写入默认的 CMD),因此 Figma 插件仍可通过端口映射连接 ws://127.0.0.1:1998——将主机端口保持为 1998,或在插件界面中更新主机地址。每个插件连接运行一个容器;如果一台机器上有多个 MCP 客户端需要同时连接,建议使用原生二进制文件,其领导者选举机制可以共享一个插件连接。容器内自动安装的插件路径无法从主机访问——请从此仓库的 plugin/ 目录或发行版中的 plugin.zip 导入插件。
服务标志:--ip(默认 127.0.0.1)、--port(默认 1998)。
2. 安装 Figma 插件
插件已打包在服务二进制文件中,无需下载或构建。
- 启动一次服务(使用上述任意方法)。启动时,服务会将
manifest.json、dist/code.js和dist/index.html写入~/.figma-mcp-rs/plugin/(Windows:%USERPROFILE%\.figma-mcp-rs\plugin\),并在日志中记录路径。 - 在 Figma Desktop 中:插件 → 开发 → 从 manifest 导入插件 → 选择
~/.figma-mcp-rs/plugin/manifest.json - 在任意 Figma 或 FigJam 文件中运行插件 — 插件会通过
ws://127.0.0.1:1998连接到服务(可在插件界面中配置主机/端口)
如果某个工具报错 plugin not connected,请调用 get_status — 它会诊断连接桥接并返回设置说明。
运行多个服务实例是安全的:最先绑定端口的实例会成为主实例并拥有插件连接;其他实例会成为代理工具调用的从属实例,并在主实例退出时自动接管。
FigJam 和 Slides 支持
插件可在所有编辑器中加载(editorType: ["figma", "figjam", "slides", "dev"]):
- 读取在两者中均可用:
get_document/get_design_context会序列化 FigJam 节点类型(STICKER、CONNECTOR、MARKER、WIDGET、EMBED、MEDIA……) - FigJam 写入提供八个命名工具:
create_sticky、create_stickies、create_connector、create_shape_with_text、create_table、create_code_block、auto_arrange、get_board_contents - 仅适用于 Figma 的工具(样式、变量、组件、原型交互、自动布局)在 FigJam 文件中会返回清晰的错误信息
- 其余缺口 — Slides、团队库变量/样式(
figma.teamLibrary.*、importVariableByKeyAsync)以及其他未封装的功能:请使用use_figma
可用工具
状态
| 工具 | 描述 |
|---|---|
get_status | 检查插件连接桥接是否已连接;未连接时返回设置说明。如果任何工具报错 plugin not connected,请先调用此工具。 |
备用方案
| 工具 | 描述 |
|---|---|
use_figma | 在文件中运行 Plugin API JavaScript。代码是 async () => { … } 的函数体:支持顶层 await,且仅返回 return 的值(console.log 的输出会被丢弃;返回值必须可序列化为 JSON,因此应返回 ID/计数/名称,而非节点对象)。可用于命名工具未封装的功能:Slides、组件变体和属性、矢量网络、带样式的文本范围、变量作用域,以及在一次往返调用中批量编辑。 |
execute_code | 在同一沙盒中运行任意 Plugin API 代码 — 代码会作为异步函数体运行,并可选用 timeoutMs(1–25000 毫秒,默认 5000)为长时间运行的操作设置超时。在用户打开的文件中运行,并可通过 Cmd/Ctrl+Z 撤销。仅用于专用工具未覆盖的操作;如果有对应的专用工具,请优先使用。 |
写入 — 创建
| 工具 | 描述 |
|---|---|
create_frame | 创建一个框架,可选设置自动布局、填充和父级 |
create_rectangle | 创建一个矩形,可选设置填充和圆角半径 |
create_ellipse | 创建一个椭圆或圆形 |
create_text | 创建一个文本节点(自动加载字体) |
import_image | 解码 base64 图像并将其设为矩形填充 |
create_component | 将现有 FRAME 节点转换为可重复使用的组件 |
create_section | 创建一个 Figma Section 节点,用于在页面上整理框架 |
编写 — 修改
| 工具 | 描述 |
|---|---|
set_text | 更新现有 TEXT 或 STICKER 节点的文本内容 |
set_fills | 设置节点的纯色填充颜色(十六进制) |
set_strokes | 设置节点的纯色描边颜色和粗细 |
set_opacity | 设置一个或多个节点的不透明度(0 = 透明,1 = 不透明) |
set_corner_radius | 设置圆角半径 — 统一设置或逐角设置 |
set_auto_layout | 设置一个或多个节点的自动布局属性 — 方向、内边距、间距、对齐、换行、HUG/FILL 尺寸、自定义定位(仅限 Figma) |
set_visible | 显示或隐藏一个或多个节点 |
lock_nodes / unlock_nodes | 锁定/解锁一个或多个节点 |
rotate_nodes | 设置一个或多个节点的绝对旋转角度 |
reorder_nodes | 更改 z 轴顺序:bringToFront、sendToBack、bringForward、sendBackward |
set_blend_mode | 设置混合模式(MULTIPLY、SCREEN、OVERLAY、…) |
set_constraints | 设置一个或多个节点的响应式约束 |
move_nodes | 将节点移动到绝对 x/y 位置 |
resize_nodes | 调整节点的宽度和/或高度 |
rename_node | 重命名节点 |
clone_node | 克隆节点,可选择重新定位或更改父级 |
reparent_nodes | 将节点移动到其他父级画框、组或区段 |
group_nodes / ungroup_nodes | 将节点编组为 GROUP / 解散组 |
batch_rename_nodes | 通过查找/替换、正则表达式或前缀/后缀批量重命名 |
find_replace_text | 在子树或页面的 TEXT 节点中查找并替换文本;支持正则表达式 |
delete_nodes | 永久删除一个或多个节点 |
编写 — 原型(仅限 Figma)
| 工具 | 描述 |
|---|---|
set_reactions | 设置原型交互(触发条件 + 操作);模式为 replace 或 append |
remove_reactions | 按索引移除全部或指定的交互 |
编写 — 样式(仅限 Figma)
| 工具 | 描述 |
|---|---|
set_effects | 直接对节点应用投影/模糊效果 |
create_paint_style / create_text_style / create_effect_style / create_grid_style | 创建命名的本地样式 |
update_style | 就地更新任意样式 — 填充颜色、文本字体/大小/间距、效果、网格 — 以及名称和描述 |
bind_variable_to_style | 将变量绑定到样式,使样式本身由令牌驱动 |
apply_style_to_node | 将现有本地样式应用到节点 |
delete_style | 按 ID 删除任意样式 |
编写 — 变量(仅限 Figma)
| 工具 | 描述 |
|---|---|
create_variable_collection | 创建新的本地变量集合,可选择设置初始模式 |
add_variable_mode | 向现有集合添加新模式(例如 Light/Dark) |
create_variable | 在集合中创建变量(COLOR/FLOAT/STRING/BOOLEAN) |
set_variable_value | 设置变量在某个模式下的值 — 可以是字面值,也可以是指向另一个变量的别名 |
update_variable | 重命名变量或集合;设置描述、作用范围、Dev Mode 代码语法;重命名模式 |
set_variable_mode | 对节点或当前页面应用或清除集合的模式覆盖 |
bind_variable_to_node | 将变量绑定到节点属性(填充、描边、尺寸、间距、…);省略 variableId 可解除绑定 |
delete_variable | 删除变量、整个集合或单个模式 |
编写 — 页面
| 工具 | 描述 |
|---|---|
add_page | 添加新页面(可选名称和索引) |
delete_page | 按 ID 或名称删除页面 |
rename_page | 按 ID 或当前名称重命名页面 |
编写 — 组件与导航
| 工具 | 描述 |
|---|---|
navigate_to_page | 按 ID 或名称切换当前页面 |
swap_component | 替换 INSTANCE 节点的主组件 |
detach_instance | 将组件实例分离为普通画框 |
读取 — 文档与选区
| 工具 | 描述 |
|---|---|
get_document | 当前页面的完整树结构 |
get_metadata | 文件名、页面、当前页面 |
get_pages | 所有页面(ID + 名称)——轻量级 |
get_selection | 当前选中的节点 |
get_node / get_nodes_info | 按 ID 获取一个或多个节点 |
get_design_context | 深度受限的树结构,包含 detail 级别(minimal/compact/full) |
search_nodes | 按名称子字符串和/或类型查找节点 |
scan_text_nodes | 子树中的所有文本节点 |
scan_nodes_by_types | 与类型列表匹配的节点 |
get_viewport | 当前视口中心、缩放比例和可见范围 |
get_reactions | 节点上的原型反应 |
get_fonts | 当前页面使用的字体,按使用频率排序 |
读取 — 样式与变量
| 工具 | 描述 |
|---|---|
get_styles | 绘制、文本、效果和网格样式——包含描述、发布状态、绑定变量和 colorFormat |
get_variable_defs | 变量集合、模式、值、别名、作用域和代码语法 |
get_local_components | 所有组件和组件集 |
get_annotations | 开发模式注释 |
export_tokens | 将设计令牌(变量 + 绘制样式)导出为 JSON 或 CSS,包含别名 var() 引用和 colorFormat |
导出
| 工具 | 描述 |
|---|---|
get_screenshot | 任意节点的 Base64 图像导出 |
save_screenshots | 将图像导出到磁盘(服务端写入) |
export_frames_to_pdf | 将多个画框合并为一个多页 PDF(服务端合并) |
FigJam
| 工具 | 描述 |
|---|---|
create_sticky | 创建带文本的便利贴(仅限 FigJam) |
create_stickies | 一次创建多个便利贴,可选使用网格自动布局(仅限 FigJam) |
create_connector | 创建连接器,可选择连接两个节点(仅限 FigJam) |
create_shape_with_text | 创建带文本的形状——矩形、圆形、菱形等(仅限 FigJam) |
create_table | 创建表格,可选添加单元格文本内容(仅限 FigJam) |
create_code_block | 创建带语法高亮的代码块(仅限 FigJam) |
auto_arrange | 以网格、行或列布局自动排列对象(仅限 FigJam) |
get_board_contents | 当前 FigJam 页面上的所有对象和连接器,包含文本内容和连接数据 |
MCP 提示词(12 个)
read_design_strategy、design_strategy、text_replacement_strategy、annotation_conversion_strategy、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 技能(15 个)
skills/ 将 12 个提示词作为 Claude Code 技能提供,还包括 bridge-troubleshooting(连接诊断)、figjam-boards(FigJam 便利贴、形状、表格、连接器、自动排列)和 editor-compatibility(Figma/FigJam/Slides 工具矩阵)。通过插件市场自动安装;否则,将 skills/ 复制到项目的 .claude/skills/ 中。
开发
make test # cargo test + plugin bun test
make build # release binary + plugin dist
-
CI:每个 PR 都会运行 fmt + clippy + 测试(linux amd64/arm64、windows、macos)+ 插件类型检查/测试/构建。
-
发布:在 main 上使用约定式提交(
feat:、fix:)→ release-please 会打开版本升级 PR(Cargo.toml、Cargo.lock、npm/package.json、CHANGELOG);合并该 PR 后会打上vX.Y.Z标签,并由同一工作流构建五个二进制文件和 plugin.zip、发布 npm 包,并将多架构镜像推送到ghcr.io/jirayusueb/figma-mcp-rs。如需为现有标签重新运行发布构建,请执行gh workflow run "Release please" -f tag=vX.Y.Z。 -
服务端:Rust(tokio、axum、rmcp)。插件:TypeScript + SolidJS,使用 Vite 构建(UI 内联到
dist/index.html,核心 IIFE 为dist/code.js)。 -
工具链:Bun 1.4.2、TypeScript 7。
-
线路协议(桥接 WebSocket 帧、关注者
/rpc)保持与 Go 参考实现兼容,因此此服务端也可与原版 figma-mcp-go 插件配合使用。
致谢
本项目基于 vkhanhqui 的 figma-mcp-go 架构和工具设计进行分叉,并移植到 Rust,同时采用 SolidJS 插件并支持 FigJam。
相关项目
- vkhanhqui/figma-mcp-go — 本移植项目所遵循的 Go 参考实现
- alvinindra/figma-mcp-rust — 同一服务端的另一个 Rust 移植版本
- grab/cursor-talk-to-figma-mcp — 本项目沿袭的插件桥接方案
- gethopp/figma-mcp-bridge — 另一种插件桥接方案
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。