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.
| Tool | Risk | Side effects | Approval |
|---|---|---|---|
| get_pages List all pages in the document with their IDs and names. Lightweight alternative to get_document. | read | false | unknown |
| 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. | read | false | unknown |
| get_metadata Get metadata about the current Figma document: file name, pages, current page. | read | false | unknown |
| 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. | read | false | unknown |
| 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. | read | false | unknown |
| 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. | read | false | unknown |
| 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. | unknown | unknown | unknown |
| 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. | read | false | unknown |
| 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. | read | false | unknown |
| get_variable_defs Get all local variable definitions: collections, modes, and values. Variables are Figma's design token system. | read | false | unknown |
| 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. | read | false | unknown |
| get_viewport Get the current Figma viewport: scroll center, zoom level, and visible bounds. | read | false | unknown |
| get_local_components Get all components defined in the current Figma file. | read | false | unknown |
| 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. | read | false | unknown |
| 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. | read | false | unknown |
| export_tokens Export all design tokens (variables and paint styles) as JSON or CSS custom properties. Ideal for bridging Figma variables into your codebase. | unknown | unknown | unknown |
| get_fonts List all fonts used in the current page, sorted by usage frequency. Useful for understanding typography without scanning all text nodes. | read | false | unknown |
| 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. | read | false | unknown |
| 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. | read | false | unknown |
| 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. | unknown | unknown | unknown |
| create_ellipse Create a new ellipse (circle/oval) on the current page or inside a parent node. | write | true | unknown |
| create_section Create a Figma Section node on the current page. Sections are the modern way to organize frames and groups on a page. | write | true | unknown |
| 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). | write | true | unknown |
| set_opacity Set the opacity of one or more nodes (0 = fully transparent, 1 = fully opaque). | write | true | unknown |
| set_visible Show or hide one or more nodes by setting their visibility. | write | true | unknown |
| 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. | read | false | unknown |
| 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. | write | true | unknown |
| create_frame Create a new frame on the current page or inside a parent node. | write | true | unknown |
| 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. | unknown | unknown | unknown |
| create_rectangle Create a new rectangle on the current page or inside a parent node. | write | true | unknown |
| create_component Convert an existing FRAME node into a reusable COMPONENT. The frame is replaced in place by the new component. | write | true | unknown |
| 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. | write | true | unknown |
| clone_node Clone an existing node, optionally repositioning it or placing it in a new parent. | unknown | unknown | unknown |
| delete_nodes Delete one or more nodes. This cannot be undone via MCP — use with care. | destructive | true | true |
| rotate_nodes Rotate one or more nodes to an absolute angle in degrees. | unknown | unknown | unknown |
| reparent_nodes Move one or more nodes to a different parent frame, group, or section. | unknown | unknown | unknown |
| 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. | write | true | unknown |
| set_text Update the text content of an existing TEXT node. | write | true | unknown |
| 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. | write | true | unknown |
| 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. | write | true | unknown |
| 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. | read | false | unknown |
| set_corner_radius Set corner radius on one or more nodes. Provide a uniform cornerRadius or individual per-corner values. | write | true | unknown |
| lock_nodes Lock one or more nodes to prevent accidental edits in Figma. | unknown | unknown | unknown |
| set_blend_mode Set the blend mode of one or more nodes (e.g. MULTIPLY, SCREEN, OVERLAY). | write | true | unknown |
| 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. | read | false | unknown |
| set_auto_layout Set or update auto-layout (flex) properties on an existing frame. | write | true | unknown |
| unlock_nodes Unlock one or more nodes, allowing them to be edited again. | unknown | unknown | unknown |
| set_constraints Set layout constraints (pinning behaviour) on one or more nodes relative to their parent. | write | true | unknown |
| create_paint_style Create a new local paint style with a solid fill color. | write | true | unknown |
| reorder_nodes Change the z-order (layer stack position) of one or more nodes. | unknown | unknown | unknown |
| batch_rename_nodes Rename multiple nodes using find/replace, regex substitution, or prefix/suffix addition. | write | true | unknown |
| create_effect_style Create a new local effect style (drop shadow, inner shadow, or blur). | write | true | unknown |
| apply_style_to_node Apply an existing local style (paint, text, effect, or grid) to a node, linking the node to that style. | unknown | unknown | unknown |
| create_grid_style Create a new local layout grid style. | write | true | unknown |
| set_variable_value Set a variable's value for a specific mode. | write | true | unknown |
| rename_page Rename an existing page in the Figma document. | write | true | unknown |
| swap_component Swap the main component of an existing INSTANCE node, replacing it with a different component while keeping position and size. | unknown | unknown | unknown |
| 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. | write | true | unknown |
| delete_style Delete a style (paint, text, effect, or grid) by its ID. | destructive | true | true |
| 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. | write | true | unknown |
| 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. | unknown | unknown | unknown |
| 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. | write | true | unknown |
| delete_page Delete a page from the Figma document. Cannot delete the only remaining page. | destructive | true | true |
| 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. | write | true | unknown |
| 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. | destructive | true | true |
| navigate_to_page Switch the active Figma page. Provide either pageId or pageName. | unknown | unknown | unknown |
| 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. | unknown | unknown | unknown |
| 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). | write | true | unknown |
| add_page Add a new page to the Figma document. | write | true | unknown |
| group_nodes Group two or more nodes into a GROUP. All nodes must share the same parent. | unknown | unknown | unknown |
| 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 | write | true | unknown |
| ungroup_nodes Ungroup one or more GROUP nodes, moving their children to the parent and removing the group. | unknown | unknown | unknown |
| 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). | destructive | true | true |
02Install & source
npx -y @alvinindra/figma-mcp-rust
npxnpx -y @alvinindra/figma-mcp-rust@latest
npx- repohttps://github.com/alvinindra/figma-mcp-rust
- licenseMIT
- adoption19 stars · 11 forks
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_statusindex — 8 unique facts >= 5
06Badge
Add the “as seen on MCPExplorer” badge to your README.
[](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 →