mcpField
F
figma-mcp-rs

figma-mcp-rs

本地服务
github.com/jirayusueb媒体与设计07 周前更新

关于 figma-mcp-rs

figma-mcp-rs 是用 Rust 编写的 Figma 和 FigJam MCP 服务,面向需要读取或修改设计文件的 AI 工具及其使用者。它通过运行在 Figma Desktop 中的插件桥接本地 WebSocket,支持读写文件而不调用 REST API。

主要功能

  1. 01读取文档、节点和选择内容
  2. 02创建及修改设计节点
  3. 03管理样式、变量和组件
  4. 04支持 FigJam 画板操作
  5. 05通过插件 API 执行代码
  6. 06内置插件并自动安装

适用场景

  1. 01根据文字描述创建 Figma 设计
  2. 02批量修改页面节点和文本
  3. 03读取 FigJam 画板并调整内容
  4. 04在文件中更新变量和样式

MCP 相关

作为 MCP 服务,它向兼容客户端提供 Figma 与 FigJam 的读写工具。服务通过本地 WebSocket 与 Figma Desktop 插件通信。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"jirayusueb-figma-mcp-rs": {
"command": "npx",
"args": [
"-y",
"figma-mcp-rs"
]
}
}
}
启动命令npx -y figma-mcp-rs

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmfigma-mcp-rs0.1.0

工具

84

收录的工具列表 · 更新于 2 周前

参数类型必填说明
namestring|null否新页面的名称(默认值为 'Page')
indexnumber|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 工具。

npm license

亮点

  • 无需 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 插件

插件已打包在服务二进制文件中,无需下载或构建。

  1. 启动一次服务(使用上述任意方法)。启动时,服务会将 manifest.json、dist/code.js 和 dist/index.html 写入 ~/.figma-mcp-rs/plugin/(Windows:%USERPROFILE%\.figma-mcp-rs\plugin\),并在日志中记录路径。
  2. 在 Figma Desktop 中:插件 → 开发 → 从 manifest 导入插件 → 选择 ~/.figma-mcp-rs/plugin/manifest.json
  3. 在任意 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。

相关项目

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。