Figma/FigJam MCP server with read/write via plugin β no API token, no limits. 78 tools.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
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.
Highlights
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)rgb(), hsl(), or oklch(); get_styles and export_tokens emit any of them via colorFormatThe official Figma MCP servers go through the REST API, which is rate limited per plan:
| Figma plan | REST budget |
|---|---|
| Starter | 6 calls/month |
| Professional | 200 calls/day |
| Enterprise | 600 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.
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.
Claude Code CLI
Or build from source:
Codex CLI
Claude Code plugin marketplace (also installs the 15 skills)
.mcp.json (Claude and other MCP-compatible tools)
.vscode/mcp.json (Cursor / VS Code / GitHub Copilot)
Docker
.mcp.json with Docker:
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).
The plugin is bundled inside the server binary β no download or build step.
manifest.json, dist/code.js, and dist/index.html to ~/.figma-mcp-rs/plugin/ (Windows: %USERPROFILE%\.figma-mcp-rs\plugin\) and logs the path.~/.figma-mcp-rs/plugin/manifest.jsonws://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.
The plugin loads in every editor (editorType: ["figma", "figjam", "slides", "dev"]):
get_document/get_design_context serialize FigJam node types (STICKER, CONNECTOR, MARKER, WIDGET, EMBED, MEDIAβ¦)create_sticky, create_stickies, create_connector, create_shape_with_text, create_table, create_code_block, auto_arrange, get_board_contentsfigma.teamLibrary.*, importVariableByKeyAsync), and anything else unwrapped: use use_figma| Tool | Description |
|---|---|
get_status | Check whether the plugin bridge is connected; returns setup instructions when it is not. Call this first if any tool fails with plugin not connected. |
| Tool | Description |
|---|---|
use_figma | Run 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_code | Run 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. |
| Tool | Description |
|---|---|
create_frame | Create a frame with optional auto-layout, fill, and parent |
create_rectangle | Create a rectangle with optional fill and corner radius |
create_ellipse | Create an ellipse or circle |
create_text | Create a text node (font loaded automatically) |
import_image | Decode base64 image and place it as a rectangle fill |
create_component | Convert an existing FRAME node into a reusable component |
create_section | Create a Figma Section node to organise frames on a page |
| Tool | Description |
|---|---|
set_text | Update text content of an existing TEXT or STICKER node |
set_fills | Set solid fill color (hex) on a node |
set_strokes | Set solid stroke color and weight on a node |
set_opacity | Set opacity of one or more nodes (0 = transparent, 1 = opaque) |
set_corner_radius | Set corner radius β uniform or per-corner |
set_auto_layout | Set auto-layout properties on one or more nodes β direction, padding, gap, alignment, wrap, HUG/FILL sizing, absolute positioning (Figma only) |
set_visible | Show or hide one or more nodes |
lock_nodes / unlock_nodes | Lock/unlock one or more nodes |
rotate_nodes | Set absolute rotation in degrees on one or more nodes |
reorder_nodes | Change z-order: bringToFront, sendToBack, bringForward, sendBackward |
set_blend_mode | Set blend mode (MULTIPLY, SCREEN, OVERLAY, β¦) |
set_constraints | Set responsive constraints on one or more nodes |
move_nodes | Move nodes to an absolute x/y position |
resize_nodes | Resize nodes by width and/or height |
rename_node | Rename a node |
clone_node | Clone a node, optionally repositioning or reparenting |
reparent_nodes | Move nodes to a different parent frame, group, or section |
group_nodes / ungroup_nodes | Group nodes into a GROUP / dissolve groups |
batch_rename_nodes | Bulk rename via find/replace, regex, or prefix/suffix |
find_replace_text | Find and replace text across TEXT nodes in a subtree or page; supports regex |
delete_nodes | Delete one or more nodes permanently |
| Tool | Description |
|---|---|
set_reactions | Set prototype reactions (triggers + actions); mode replace or append |
remove_reactions | Remove all or specific reactions by index |
| Tool | Description |
|---|---|
set_effects | Apply drop shadow / blur effects directly on a node |
create_paint_style / create_text_style / create_effect_style / create_grid_style | Create named local styles |
update_style | Update any style in place β paint color, text font/size/spacing, effects, grid β plus name and description |
bind_variable_to_style | Bind a variable to a style so the style itself is token-driven |
apply_style_to_node | Apply an existing local style to a node |
delete_style | Delete any style by ID |
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/figma-mcp-rs)<a href="https://allmcps.com/mcp/figma-mcp-rs"><img src="https://allmcps.com/api/badge/figma-mcp-rs?style=directory" alt="Figma MCP Rs on AllMCPs" /></a>