servers / figma-mcp-rust

figma-mcp-rust

communitystdiolocaldestructive capablehealthy

Figma MCP build with Rust, server with full read/write access via plugin (no REST API, no rate limits, 73 tools)


01Tools · 73

How to read this: tool names here are observed from a live tools/list handshake. The Risk label is a heuristic inferred from the tool name (write/destructive verbs), not from executing the tool — a conservative guess, not a verified capability. We never escalate risk from a description. Found one that's wrong? Tell us — we fix on report.

ToolRiskSide effectsApproval
get_pages
List all pages in the document with their IDs and names. Lightweight alternative to get_document.
readfalseunknown
get_nodes_info
Get full details for multiple nodes by ID in one round-trip. Prefer this over calling get_node repeatedly when you need several nodes.
readfalseunknown
get_metadata
Get metadata about the current Figma document: file name, pages, current page.
readfalseunknown
get_selection
Get the nodes currently selected in Figma. Returns an empty array if nothing is selected. Use get_design_context or get_node to retrieve deeper detail about a specific node by ID.
readfalseunknown
get_document
Get the full node tree of the current page (not the whole file — only the active page). Returns all nodes recursively and can be very large. Prefer get_design_context for exploration or when token efficiency matters.
readfalseunknown
get_node
Get a single node by ID with full detail. Use get_nodes_info to fetch multiple nodes in one round-trip instead of calling this repeatedly. Node ID must be colon format e.g. '4029:12345', never hyphens.
readfalseunknown
scan_text_nodes
Scan all TEXT nodes in a subtree and return their content. Shorthand for scan_nodes_by_types with ['TEXT'] — use when you only need text copy from a component or frame.
unknownunknownunknown
get_design_context
Get a depth-limited, token-efficient tree of the current selection or page. Use this instead of get_document when exploring large files. Supports detail levels (minimal/compact/full) and dedupe_components for pages heavy with repeated component instances.
readfalseunknown
get_reactions
Get the prototype reactions defined on a node. Returns an array of reaction objects — each has a trigger (e.g. ON_CLICK, ON_HOVER, AFTER_TIMEOUT) and an actions array (navigate to node, open URL, go back, etc.). Use set_reactions to add or replace reactions, remove_reactions to delete them.
readfalseunknown
get_variable_defs
Get all local variable definitions: collections, modes, and values. Variables are Figma's design token system.
readfalseunknown
search_nodes
Search for nodes by name substring and/or type within a subtree. Use this when you know (part of) the node name. Use scan_nodes_by_types when you want all nodes of a type regardless of name.
readfalseunknown
get_viewport
Get the current Figma viewport: scroll center, zoom level, and visible bounds.
readfalseunknown
get_local_components
Get all components defined in the current Figma file.
readfalseunknown
scan_nodes_by_types
Find all nodes of specific types in a subtree, regardless of name. Use search_nodes instead when you need to filter by name.
readfalseunknown
get_styles
Get all local styles in the document (paint, text, effect, and grid). Returns each style's ID, name, type, and properties. Use the style ID with apply_style_to_node or update_paint_style. For design tokens (variables), use get_variable_defs instead.
readfalseunknown
export_tokens
Export all design tokens (variables and paint styles) as JSON or CSS custom properties. Ideal for bridging Figma variables into your codebase.
unknownunknownunknown
get_fonts
List all fonts used in the current page, sorted by usage frequency. Useful for understanding typography without scanning all text nodes.
readfalseunknown
get_annotations
Get dev-mode annotations in the current document or scoped to a specific node. Returns annotation objects with label text, measurement type, and the ID of the annotated node. Omit nodeId to retrieve all annotations on the current page.
readfalseunknown
get_screenshot
Export a screenshot of one or more nodes as base64-encoded image data (held in memory). Use save_screenshots instead when you want to write images directly to disk without base64 in the response.
readfalseunknown
export_frames_to_pdf
Export multiple frames as a single multi-page PDF file. Each frame becomes one page in order. Ideal for pitch decks, proposals, and slide exports.
unknownunknownunknown
create_ellipse
Create a new ellipse (circle/oval) on the current page or inside a parent node.
writetrueunknown
create_section
Create a Figma Section node on the current page. Sections are the modern way to organize frames and groups on a page.
writetrueunknown
move_nodes
Move one or more nodes to an absolute canvas position. The same x/y is applied to every node independently (not a relative offset from current position).
writetrueunknown
set_opacity
Set the opacity of one or more nodes (0 = fully transparent, 1 = fully opaque).
writetrueunknown
set_visible
Show or hide one or more nodes by setting their visibility.
writetrueunknown
save_screenshots
Export screenshots for multiple nodes and write them to the local filesystem. Returns file metadata (path, size, dimensions) — no base64 in the response. Use get_screenshot instead when you need the image data in memory.
readfalseunknown
create_text
Create a new text node on the current page or inside a parent node. The font is loaded automatically before insertion. Returns the created node ID and bounds. Use set_text to update the content of an existing text node.
writetrueunknown
create_frame
Create a new frame on the current page or inside a parent node.
writetrueunknown
import_image
Import a base64-encoded image into Figma as a rectangle with an image fill. Use get_screenshot to capture images or provide your own base64 PNG/JPG.
unknownunknownunknown
create_rectangle
Create a new rectangle on the current page or inside a parent node.
writetrueunknown
create_component
Convert an existing FRAME node into a reusable COMPONENT. The frame is replaced in place by the new component.
writetrueunknown
set_strokes
Set the stroke color and weight on a single node (takes one nodeId, not an array). Use mode='append' to stack a new stroke on top of existing strokes instead of replacing them.
writetrueunknown
clone_node
Clone an existing node, optionally repositioning it or placing it in a new parent.
unknownunknownunknown
delete_nodes
Delete one or more nodes. This cannot be undone via MCP — use with care.
destructivetruetrue
rotate_nodes
Rotate one or more nodes to an absolute angle in degrees.
unknownunknownunknown
reparent_nodes
Move one or more nodes to a different parent frame, group, or section.
unknownunknownunknown
create_text_style
Create a new local text style (typography preset). Returns the new style's ID. Apply it to nodes with apply_style_to_node. Use get_styles to list existing text styles.
writetrueunknown
set_text
Update the text content of an existing TEXT node.
writetrueunknown
set_fills
Set the fill color on a single node (takes one nodeId, not an array). Use mode='append' to stack a new fill on top of existing fills instead of replacing them.
writetrueunknown
rename_node
Rename a single node by ID. Returns the updated node with its new name. Use batch_rename_nodes to rename multiple nodes at once or to apply find/replace patterns across many nodes.
writetrueunknown
resize_nodes
Resize one or more nodes. The same width/height is applied to every node in the list independently. Provide width, height, or both.
readfalseunknown
set_corner_radius
Set corner radius on one or more nodes. Provide a uniform cornerRadius or individual per-corner values.
writetrueunknown
lock_nodes
Lock one or more nodes to prevent accidental edits in Figma.
unknownunknownunknown
set_blend_mode
Set the blend mode of one or more nodes (e.g. MULTIPLY, SCREEN, OVERLAY).
writetrueunknown
find_replace_text
Find and replace text content across all TEXT nodes in a subtree. Searches the entire current page if no nodeId is given.
readfalseunknown
set_auto_layout
Set or update auto-layout (flex) properties on an existing frame.
writetrueunknown
unlock_nodes
Unlock one or more nodes, allowing them to be edited again.
unknownunknownunknown
set_constraints
Set layout constraints (pinning behaviour) on one or more nodes relative to their parent.
writetrueunknown
create_paint_style
Create a new local paint style with a solid fill color.
writetrueunknown
reorder_nodes
Change the z-order (layer stack position) of one or more nodes.
unknownunknownunknown
batch_rename_nodes
Rename multiple nodes using find/replace, regex substitution, or prefix/suffix addition.
writetrueunknown
create_effect_style
Create a new local effect style (drop shadow, inner shadow, or blur).
writetrueunknown
apply_style_to_node
Apply an existing local style (paint, text, effect, or grid) to a node, linking the node to that style.
unknownunknownunknown
create_grid_style
Create a new local layout grid style.
writetrueunknown
set_variable_value
Set a variable's value for a specific mode.
writetrueunknown
rename_page
Rename an existing page in the Figma document.
writetrueunknown
swap_component
Swap the main component of an existing INSTANCE node, replacing it with a different component while keeping position and size.
unknownunknownunknown
update_paint_style
Update an existing paint style's name, color, or description. Only paint styles support in-place updates — to modify text, effect, or grid styles, use delete_style and recreate them.
writetrueunknown
delete_style
Delete a style (paint, text, effect, or grid) by its ID.
destructivetruetrue
set_effects
Apply one or more effects (drop shadow, inner shadow, layer blur, background blur, or noise) directly to a node. Replaces all existing effects. Pass an empty array to clear all effects. NOISE accepts noiseType (MONOTONE/DUOTONE/MULTITONE), noiseSize, density, color, plus secondaryColor for DUOTONE or opacity for MULTITONE — NoiseEffect is marked beta by Figma and may change.
writetrueunknown
bind_variable_to_node
Bind a local variable to a node property so the property is driven by the variable's value. COLOR variables: use fillColor or strokeColor. BOOLEAN variables: use visible. FLOAT variables: use opacity, rotation, width, height, cornerRadius, topLeftRadius, topRightRadius, bottomLeftRadius, bottomRightRadius, strokeWeight, itemSpacing, paddingTop, paddingRight, paddingBottom, paddingLeft.
unknownunknownunknown
create_variable
Create a new variable (design token) inside an existing collection. Returns the new variable's ID. Use get_variable_defs to find collection IDs, set_variable_value to set values per mode, and bind_variable_to_node to apply the variable to a node property.
writetrueunknown
delete_page
Delete a page from the Figma document. Cannot delete the only remaining page.
destructivetruetrue
create_variable_collection
Create a new local variable collection with an optional initial mode name. NOTE — Figma free plan limits each collection to 1 mode. If you need Light/Dark (or any multi-mode) theming and the user is on the free plan, do NOT try to call add_variable_mode; instead use the name-prefix workaround: create all variables in a single collection and prefix each variable name with its mode, e.g. 'light/color-bg' and 'dark/color-bg'. Inform the user of this limitation.
writetrueunknown
delete_variable
Delete a single variable (provide variableId) or an entire collection and all its variables (provide collectionId). Provide exactly one of the two — not both.
destructivetruetrue
navigate_to_page
Switch the active Figma page. Provide either pageId or pageName.
unknownunknownunknown
detach_instance
Detach one or more component instances, converting them to plain frames. The link to the main component is broken; all visual properties are preserved.
unknownunknownunknown
add_variable_mode
Add a new mode to an existing variable collection (e.g. Light/Dark, Desktop/Mobile). IMPORTANT — Figma free plan only allows 1 mode per collection; calling this tool on a free-plan account will return the error 'Limited to 1 modes only'. If that error occurs, stop retrying and switch to the name-prefix workaround: keep the single default mode and create variables prefixed by mode, e.g. 'light/color-bg' and 'dark/color-bg' in the same collection. Tell the user that native multi-mode variables require a paid Figma plan (Professional or above).
writetrueunknown
add_page
Add a new page to the Figma document.
writetrueunknown
group_nodes
Group two or more nodes into a GROUP. All nodes must share the same parent.
unknownunknownunknown
set_reactions
Set prototype reactions on a node. Use mode "replace" (default) to overwrite all reactions, or "append" to add to existing ones. Supported triggers: ON_CLICK, ON_HOVER, ON_PRESS, ON_DRAG, AFTER_TIMEOUT, MOUSE_ENTER, MOUSE_LEAVE, MOUSE_UP, MOUSE_DOWN Supported action types: NODE (navigation), BACK, CLOSE, URL NODE navigation values: NAVIGATE, OVERLAY, SCROLL_TO, SWAP, CHANGE_TO Transition types: DISSOLVE, SMART_ANIMATE, MOVE_IN, MOVE_OUT, PUSH, SLIDE_IN, SLIDE_OUT
writetrueunknown
ungroup_nodes
Ungroup one or more GROUP nodes, moving their children to the parent and removing the group.
unknownunknownunknown
remove_reactions
Remove prototype reactions from a node. Omit indices to remove all reactions. Provide a zero-based indices array to remove specific reactions (use get_reactions first to see current indices).
destructivetruetrue

02Install & source
npx -y @alvinindra/figma-mcp-rust
npx
npx -y @alvinindra/figma-mcp-rust@latest
npx

05Provenance & freshness
sourcesGitHub repo search [p4]
last_checked2026-08-17 09:36Z
next_check2026-08-18 14:19Z
cadenceevery 29h
verifiedtools_list:passed handshake:passed metadata:passed
index_statusindex8 unique facts >= 5

06Badge

Add the “as seen on MCPExplorer” badge to your README. figma-mcp-rust MCP — as seen on mcpexplorer.com

[![figma-mcp-rust MCP — as seen on mcpexplorer.com](https://mcpexplorer.com/badge/figma-mcp-rust.svg)](https://mcpexplorer.com/servers/figma-mcp-rust)

Next step

This is one server. A loadout combines the right servers, governance, and proven plays for a whole job — assembled deliberately, not tool-dumped.

Explore loadouts →
figma-mcp-rust — MCPExplorer