Skip to main content
Glama
neozhehan

Figma Edit MCP

by neozhehan

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
FIGMA_EDIT_MCP_SOCKET_HOSTNoThe host for the WebSocket bridge (use 0.0.0.0 for WSL)localhost

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}
prompts
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
create_rectangleB

Create a new rectangle in Figma

create_frameC

Create a new frame in Figma

create_node_from_svgB

Creates a node from an SVG string.

create_ellipseB

Create a new ellipse (circle, arc, donut) in Figma

create_polygon_starC

Create a new polygon or star in Figma

move_nodeC

Move a node to a new position in Figma

resize_nodeC

Resize a node in Figma

set_node_nameC

Set the name of a node in Figma

delete_multiple_nodesC

Delete one or more nodes from Figma at once

clone_nodeC

Clone an existing node in Figma

set_selectionsB

Set selection to one or more nodes in Figma and focus them

group_nodesC

Group multiple nodes into a group

ungroup_nodesC

Ungroup a group node

flatten_nodeC

Flatten node to vector

insert_childC

Reparent a node to a new parent

set_fill_colorC

Set the fill color of a node in Figma can be TextNode or FrameNode

set_strokeC

Set the stroke color and weight of a node in Figma. Supports both uniform weight and individual side weights (top, bottom, left, right).

set_corner_radiusC

Set the corner radius of a node in Figma

set_effectsC

Applies shadow/effect arrays to nodes.

get_stylesA

Get all styles from the current Figma document

manage_styleA

Creates named styles (Text, Paint, Effect, Grid) or updates an existing style if styleId is provided.

apply_styleC

Applies a style to a node by ID.

create_textC

Create a new text element in Figma

set_multiple_text_contentsC

Set one or more text contents parallelly in a node

set_text_styleC

Set any combination of text styles on a node

set_auto_layoutB

Set auto-layout properties for a frame in Figma. This unified tool replaces individual layout tools.

get_componentsC

Get components from the Figma document with filtering options

create_componentB

Transforms a frame into a main component.

create_component_instanceB

Create an instance of a component in Figma

get_instance_overridesA

Get all override properties from a selected component instance. These overrides can be applied to other instances, which will swap them to match the source component.

set_instance_overridesA

Apply previously copied overrides to selected component instances. Target instances will be swapped to the source component and all copied override properties will be applied.

create_component_setB

Transforms components into a component set (variants).

set_component_instance_propertyB

Set a specific property value (boolean toggle, text override, instance swap, or variant selection) on an instance.

manage_component_propertyC

Perform CRUD operations on property definitions for main components or variant sets.

get_variablesA

Get all local variables/collections or detailed info for specific variable(s) by ID(s). When variableId is provided, optionally scan for consumer nodes, styles, and variable aliases via includeConsumers (Note: Consumer scanning is limited to the current document).

get_node_variablesB

Get bound variables and explicit variable modes for a specific node

set_bound_variableA

Bind a variable to a node's property or set explicit variable mode

manage_variablesC

Comprehensive tool to create collections, variables, and set values/aliases.

delete_variablesA

Delete specific variables by ID or an entire variable collection. Provide either variableIds OR collectionId (not both). Performs a full-document consumer check (nodes, styles, and variable aliases) first — if any variable is still in use, the entire operation is rejected. Note: Consumer scanning is limited to the current document.

get_annotationsB

Get all annotations in the current document or specific node

set_multiple_annotationsC

Set one or more annotations parallelly in a node

update_reactionsA

Update Figma Prototyping Reactions on a node by replacing its reactions array. Provide the full array of reactions. Use get_reactions first, modify the desired actions (e.g., to fix references to deleted variables), and pass the updated array here.

get_reactionsA

Get Figma Prototyping Reactions from multiple nodes. CRITICAL: The output MUST be processed using the 'reaction_to_connector_strategy' prompt IMMEDIATELY to generate parameters for connector lines via the 'create_connections' tool.

create_connectionsA

Create connections between nodes, or set/check the default connector template. Pass 'connectorId' to set a default. Pass 'connections' to create lines. Pass nothing to check current default.

get_pages_infoA

Get information about pages in the Figma document. No argument or empty array returns all pages without children. 1 or more pageIds returns the requested pageIds with top-level children for each requested page. Prefer batches of ≤25 pageIds per call; for larger requests, split across multiple calls for better responsiveness.

get_nodes_infoA

Get detailed information about one or more nodes. Supports recursive subtree traversal, property filtering, and streaming progress.

  • If no nodeIds are provided, the tool defaults to the current 'editable scope' (the node(s) selected when the plugin was opened).

  • Properties: When 'fields' is empty, only 'id', 'name', and 'type' are returned for each node. To get more data, specify fields from Figma's REST API (e.g., 'fills', 'strokes', 'characters', 'layoutMode').

  • Safe-list: Common properties like 'id', 'name', 'type', 'visible', 'locked', 'children', and 'descendantCount' are always available and do not incur additional performance cost.

  • Filtering: Use the 'filter' object to prune the tree (e.g., {"type": ["TEXT", "COMPONENT"]}). A node is included if it matches the filter OR has matching descendants.

  • Depth: 'maxDepth' controls how deep the recursive walk goes. Use 0 for just the target nodes, or higher for subtrees. Boundary nodes at maxDepth will include a 'descendantCount'.

  • Performance: This tool streams progress updates and is safe for deep traversals.

RESPONSE SHAPE:

  • Returns { nodes: [...], missingNodeIds?: [...] }. Each node has recursive 'children' arrays. When 'fields' is non-empty, every node (top-level and descendants) carries a 'properties' sub-object with only applicable keys — inapplicable keys are omitted (never null). Top-level entries always include 'descendantCount' (total recursive descendants). Boundary nodes at 'maxDepth' also include 'descendantCount' so you can distinguish truncated nodes from genuine leaves.

PATH:

  • Each top-level node includes a 'path' array of 3-tuples [type, id, name] representing the ancestor chain from the containing page down to the immediate parent. Pages have path === []. Direct children of a page have one element.

FILTER BEHAVIOR:

  • Filters are applied recursively across the entire subtree. Non-matching ancestors of matching nodes are retained as structural containers. Filter evaluation only runs within the maxDepth window — matches deeper than the depth cap are invisible.

COST & LATENCY:

  • Cost scales with SUBTREE SIZE, not nodeId count. A single PAGE-level id can be as expensive as thousands of leaf ids. Use 'maxDepth' to bound the walk.

  • Non-safe-list 'fields' trigger per-node exportAsync (moderate cost on retained nodes only). Non-safe-list 'filter' keys trigger exportAsync on EVERY candidate descendant before pruning (higher cost). Prefer safe-list filter keys with tight nodeIds or maxDepth.

MISSING NODES:

  • ALWAYS check 'missingNodeIds' in the response. Any nodeId not present in 'nodes' is listed there. Treat absence from 'nodes' as authoritative and surface to the user.

RECOMMENDED PAIRINGS:

  • For cheap structural scans: safe-list filter + no fields.

  • For targeted property reads: tight nodeIds or maxDepth + specific fields.

  • For filtered property reads: safe-list filter + fields on retained nodes.

join_channelC

Join a specific channel to communicate with Figma

export_node_as_imageB

Export a node as an image from Figma

Prompts

Interactive templates invoked by user choice

NameDescription
text_replacement_strategySystematic approach for replacing text in Figma designs
swap_overrides_instancesGuide to swap instance overrides between instances
annotation_conversion_strategyStrategy for converting manual annotations to Figma's native annotations
reaction_to_connector_strategyStrategy for converting Figma prototype reactions to connector lines using the output of 'get_reactions'

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/neozhehan/figma-edit-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server