Figma Mcp Rs

io.github.jirayusueb由 GitHub 账号 jirayusueb 发布v0.1.0更新于 Oct 24, 2026

Figma/FigJam MCP server with read/write via plugin — no API token, no limits. 78 tools.

发布方自己的服务:Figma MCP Server

已验证STDIO仅桌面开发者工具媒体与设计

概览

AI 生成的概览

一个本地 MCP 服务器,通过插件桥接让助手读写 Figma 和 FigJam 文件,无需 Figma API 令牌。

可以做什么
读取文档结构、页面、选区、节点、文本、样式、变量、组件和标注,并导出设计令牌、截图以及多页 PDF。创建和修改画框、形状、文本、图片、组件、分区、布局、填充、描边、效果和层级,并可删除节点。管理原型交互、本地样式和变量,包括模式和绑定。处理 FigJam 白板:便签、连接线、形状、表格、代码块和自动排列。通过逃生舱工具运行任意 Plugin API JavaScript,覆盖具名工具未封装的操作。
适用场景
适合让助手检查、生成或批量编辑已打开的 Figma 或 FigJam 文件,把设计转成代码、把文本转成布局,尤其在 REST API 配额紧张的免费方案下。
运行要求
以本地进程运行,通常通过 npx 或 Docker,需要装有 Figma Desktop 的桌面环境。需在 Figma 中一次性导入随附插件并在目标文件中运行,插件通过本地 WebSocket(默认 127.0.0.1:1998)连接服务器。未声明需要 API 令牌或环境变量。
安装前请注意
服务器可创建、修改并永久删除当前文件中的节点、页面、样式和变量,也可将截图和 PDF 写入磁盘。逃生舱工具会在用户文件中运行任意 Plugin API 代码。改动直接作用于实时文档,建议在副本上操作并尽量依赖撤销。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Figma Mcp Rs,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

figma-mcp-rs

Figma/FigJam MCP server in Rust — free, no rate limits. Rust port of vkhanhqui/figma-mcp-go with a rewritten SolidJS plugin and FigJam support.

Open-source MCP server with full read/write access to Figma and FigJam via plugin — no REST API, no rate limits. Turn text into designs and designs into real code. Works with Claude, Cursor, GitHub Copilot, and any MCP-compatible AI tool.

[npm] [license]

Highlights

  • No Figma API token required
  • No rate limits — free plan friendly
  • Read and Write live Figma/FigJam data via plugin bridge — 87 tools total (73 from the Go reference, plus get_status, execute_code, eight FigJam tools, the use_figma escape hatch, and four design-system tools: update_style, update_variable, set_variable_mode, bind_variable_to_style)
  • Full design automation — styles, variables (values, aliases, scopes, modes), components, prototypes, and content
  • Colors accepted anywhere as hex, rgb(), hsl(), or oklch(); get_styles and export_tokens emit any of them via colorFormat
  • Design strategies included — 12 MCP prompts built in
  • Native binary, fast startup, low memory
  • Plugin bundled in the binary — the server self-installs it on first run, no download step
  • Built on rmcp 3.2; negotiates MCP protocol revision with each client

Why this exists

The official Figma MCP servers go through the REST API, which is rate limited per plan:

Figma planREST budget
Starter6 calls/month
Professional200 calls/day
Enterprise600 calls/day

This server never calls the REST API. It talks to a plugin running inside Figma Desktop over a local WebSocket, so every read and write is unlimited and free — and unlike REST, the plugin can write to the open file.

Performance

Measured on Apple M4 Pro: ~6 MB RSS idle, ~7 MB with a plugin connected during tool round trips; startup < 10 ms. The Go reference runs ~15–25 MB.

Installation & Setup

1. Configure your AI tool

Claude Code CLI

bash
claude mcp add -s project figma-mcp-rs -- npx -y figma-mcp-rs@latest

Or build from source:

bash
make build   # cargo build --release + plugin buildclaude mcp add -s project figma-mcp-rs -- /path/to/figma-mcp-rs/target/release/figma-mcp-rs

Codex CLI

bash
codex mcp add figma-mcp-rs -- npx -y figma-mcp-rs@latest

Claude Code plugin marketplace (also installs the 15 skills)

/plugin marketplace add <this-repo>/plugin install figma-mcp-rs@figma-mcp-rs

.mcp.json (Claude and other MCP-compatible tools)

json
{  "mcpServers": {    "figma-mcp-rs": {      "command": "npx",      "args": ["-y", "figma-mcp-rs"]    }  }}

.vscode/mcp.json (Cursor / VS Code / GitHub Copilot)

json
{  "servers": {    "figma-mcp-rs": {      "type": "stdio",      "command": "npx",      "args": ["-y", "figma-mcp-rs"]    }  }}

Docker

bash
docker build -t figma-mcp-rs .docker run -i --rm -p 1998:1998 figma-mcp-rs

.mcp.json with Docker:

json
{  "mcpServers": {    "figma-mcp-rs": {      "command": "docker",      "args": ["run", "-i", "--rm", "-p", "1998:1998", "figma-mcp-rs"]    }  }}

The image listens on 0.0.0.0:1998 (baked into the default CMD), so the Figma plugin connects to ws://127.0.0.1:1998 as usual through the port mapping — keep the host port at 1998 or update the host in the plugin UI. Run one container per plugin connection; for multiple simultaneous MCP clients on one machine prefer the native binary, whose leader election shares a single plugin connection. The self-installed plugin path inside the container is not host-accessible — import the plugin from this repo's plugin/ directory or the release plugin.zip instead.

Server flags: --ip (default 127.0.0.1), --port (default 1998).

2. Install the Figma plugin

The plugin is bundled inside the server binary — no download or build step.

  1. Start the server once (any method above). On startup it writes manifest.json, dist/code.js, and dist/index.html to ~/.figma-mcp-rs/plugin/ (Windows: %USERPROFILE%\.figma-mcp-rs\plugin\) and logs the path.
  2. In Figma Desktop: Plugins → Development → Import plugin from manifest → select ~/.figma-mcp-rs/plugin/manifest.json
  3. Run the plugin inside any Figma or FigJam file — it connects to the server over ws://127.0.0.1:1998 (host/port configurable in the plugin UI)

If a tool fails with plugin not connected, call get_status — it diagnoses the bridge and returns setup instructions.

Multiple server instances are safe: the first to bind the port becomes leader and owns the plugin connection; others become followers that proxy tool calls and take over automatically if the leader dies.

FigJam & Slides support

The plugin loads in every editor (editorType: ["figma", "figjam", "slides", "dev"]):

  • Reads work in both: get_document/get_design_context serialize FigJam node types (STICKER, CONNECTOR, MARKER, WIDGET, EMBED, MEDIA…)
  • FigJam writes are eight named tools: create_sticky, create_stickies, create_connector, create_shape_with_text, create_table, create_code_block, auto_arrange, get_board_contents
  • Figma-only tools (styles, variables, components, prototype reactions, auto-layout) return a clear error in FigJam files
  • Remaining gaps — Slides, team-library variables/styles (figma.teamLibrary.*, importVariableByKeyAsync), and anything else unwrapped: use use_figma

Available Tools

Status

ToolDescription
get_statusCheck whether the plugin bridge is connected; returns setup instructions when it is not. Call this first if any tool fails with plugin not connected.

Escape hatch

ToolDescription
use_figmaRun Plugin API JavaScript inside the file. The code is the body of async () => { … }: top-level await works and only the return value comes back (console.log is discarded; the value must be JSON-serializable, so return IDs/counts/names, not node objects). Covers what the named tools don't wrap: Slides, component variants and properties, vector networks, styled text ranges, variable scopes, bulk edits in one round-trip.
execute_codeRun arbitrary Plugin API code in the same sandbox — the code runs as an async function body, with an optional timeoutMs (1–25000 ms, default 5000) for long-running operations. Runs in the user's open file and is undoable with Cmd/Ctrl+Z. Use only for operations the dedicated tools don't cover; prefer the specific tool when one exists.

Write — Create

ToolDescription
create_frameCreate a frame with optional auto-layout, fill, and parent
create_rectangleCreate a rectangle with optional fill and corner radius
create_ellipseCreate an ellipse or circle
create_textCreate a text node (font loaded automatically)
import_imageDecode base64 image and place it as a rectangle fill
create_componentConvert an existing FRAME node into a reusable component
create_sectionCreate a Figma Section node to organise frames on a page

Write — Modify

ToolDescription
set_textUpdate text content of an existing TEXT or STICKER node
set_fillsSet solid fill color (hex) on a node
set_strokesSet solid stroke color and weight on a node
set_opacitySet opacity of one or more nodes (0 = transparent, 1 = opaque)
set_corner_radiusSet corner radius — uniform or per-corner
set_auto_layoutSet auto-layout properties on one or more nodes — direction, padding, gap, alignment, wrap, HUG/FILL sizing, absolute positioning (Figma only)
set_visibleShow or hide one or more nodes
lock_nodes / unlock_nodesLock/unlock one or more nodes
rotate_nodesSet absolute rotation in degrees on one or more nodes
reorder_nodesChange z-order: bringToFront, sendToBack, bringForward, sendBackward
set_blend_modeSet blend mode (MULTIPLY, SCREEN, OVERLAY, …)
set_constraintsSet responsive constraints on one or more nodes
move_nodesMove nodes to an absolute x/y position
resize_nodesResize nodes by width and/or height
rename_nodeRename a node
clone_nodeClone a node, optionally repositioning or reparenting
reparent_nodesMove nodes to a different parent frame, group, or section
group_nodes / ungroup_nodesGroup nodes into a GROUP / dissolve groups
batch_rename_nodesBulk rename via find/replace, regex, or prefix/suffix
find_replace_textFind and replace text across TEXT nodes in a subtree or page; supports regex
delete_nodesDelete one or more nodes permanently

Write — Prototype (Figma only)

ToolDescription
set_reactionsSet prototype reactions (triggers + actions); mode replace or append
remove_reactionsRemove all or specific reactions by index

Write — Styles (Figma only)

ToolDescription
set_effectsApply drop shadow / blur effects directly on a node
create_paint_style / create_text_style / create_effect_style / create_grid_styleCreate named local styles
update_styleUpdate any style in place — paint color, text font/size/spacing, effects, grid — plus name and description
bind_variable_to_styleBind a variable to a style so the style itself is token-driven
apply_style_to_nodeApply an existing local style to a node
delete_styleDelete any style by ID

Write — Variables (Figma only)

ToolDescription
create_variable_collectionCreate a new local variable collection with an optional initial mode
add_variable_modeAdd a new mode to an existing collection (e.g. Light/Dark)
create_variableCreate a variable (COLOR/FLOAT/STRING/BOOLEAN) in a collection
set_variable_valueSet a variable's value for a mode — a literal or an alias to another variable
update_variableRename a variable or collection; set description, scopes, Dev Mode code syntax; rename a mode
set_variable_modeApply or clear a collection's mode override on a node or the current page
bind_variable_to_nodeBind a variable to a node property (fills, strokes, size, spacing, …); omit variableId to unbind
delete_variableDelete a variable, an entire collection, or a single mode

Write — Pages

ToolDescription
add_pageAdd a new page (optional name and index)
delete_pageDelete a page by ID or name
rename_pageRename a page by ID or current name

Write — Components & Navigation

ToolDescription
navigate_to_pageSwitch the active page by ID or name
swap_componentSwap the main component of an INSTANCE node
detach_instanceDetach component instances to plain frames

Read — Document & Selection

ToolDescription
get_documentFull current page tree
get_metadataFile name, pages, current page
get_pagesAll pages (IDs + names) — lightweight
get_selectionCurrently selected nodes
get_node / get_nodes_infoOne node / multiple nodes by ID
get_design_contextDepth-limited tree with detail level (minimal/compact/full)
search_nodesFind nodes by name substring and/or type
scan_text_nodesAll text nodes in a subtree
scan_nodes_by_typesNodes matching a type list
get_viewportCurrent viewport center, zoom, visible bounds
get_reactionsPrototype reactions on a node
get_fontsFonts used on the current page, sorted by frequency

Read — Styles & Variables

ToolDescription
get_stylesPaint, text, effect, and grid styles — with descriptions, publish state, bound variables, and colorFormat
get_variable_defsVariable collections, modes, values, aliases, scopes, and code syntax
get_local_componentsAll components + component sets
get_annotationsDev-mode annotations
export_tokensDesign tokens (variables + paint styles) as JSON or CSS, with alias var() references and colorFormat

Export

ToolDescription
get_screenshotBase64 image export of any node
save_screenshotsExport images to disk (server-side write)
export_frames_to_pdfMultiple frames as one multi-page PDF (server-side merge)

FigJam

ToolDescription
create_stickyCreate a sticky note with text (FigJam only)
create_stickiesCreate multiple sticky notes at once, with optional grid auto-layout (FigJam only)
create_connectorCreate a connector, optionally between two nodes (FigJam only)
create_shape_with_textCreate a shape with text — rectangles, circles, diamonds, … (FigJam only)
create_tableCreate a table with optional cell text content (FigJam only)
create_code_blockCreate a code block with syntax highlighting (FigJam only)
auto_arrangeAuto-arrange objects in grid, row, or column layout (FigJam only)
get_board_contentsAll objects and connectors on the current FigJam page, with text content and connection data

MCP Prompts (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 Skills (15)

skills/ ships the 12 prompts as Claude Code skills plus bridge-troubleshooting (connection diagnostics), figjam-boards (FigJam stickies, shapes, tables, connectors, auto-arrange), and editor-compatibility (Figma/FigJam/Slides tool matrix). Installed automatically via the plugin marketplace; otherwise copy skills/ into your project's .claude/skills/.

Development

bash
make test      # cargo test + plugin bun testmake build     # release binary + plugin dist
  • CI: fmt + clippy + tests (linux amd64/arm64, windows, macos) + plugin typecheck/test/build on every PR.

  • Releases: conventional commits (feat:, fix:) on main → release-please opens a version-bump PR (Cargo.toml, Cargo.lock, npm/package.json, CHANGELOG); merging it tags vX.Y.Z and the same workflow builds the five binaries + plugin.zip, publishes npm, and pushes the multi-arch image to ghcr.io/jirayusueb/figma-mcp-rs. Re-run a release build for an existing tag with gh workflow run "Release please" -f tag=vX.Y.Z.

  • Server: Rust (tokio, axum, rmcp). Plugin: TypeScript + SolidJS, built with Vite (UI inlined to dist/index.html, core IIFE dist/code.js).

  • Toolchain: Bun 1.4.2, TypeScript 7.

  • The wire protocol (bridge WebSocket frames, follower /rpc) is kept compatible with the Go reference, so this server also works with the original figma-mcp-go plugin.

Credits

Fork of the architecture and tool design of figma-mcp-go by vkhanhqui — ported to Rust with a SolidJS plugin and FigJam support.

Related Projects

License

MIT

来源:README.md,提交 0c41a94

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.1.0最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

其他 Figma 集成