Talk to Figma MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_CHANNEL | No | The channel name for routing messages between the MCP server and the Figma plugin. Each project should use a unique channel. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| completions | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_plugin_versionA | Get the Figma plugin version to verify it is up-to-date |
| get_document_infoA | Get detailed information about the current Figma document |
| get_selectionB | Get information about the current selection in Figma |
| read_my_designA | Get detailed information about the current selection in Figma, including all node details |
| get_node_infoB | Get detailed information about a specific node in Figma |
| get_nodes_infoC | Get detailed information about multiple nodes in Figma |
| create_rectangleC | Create a new rectangle in Figma |
| create_frameC | Create a new frame in Figma |
| create_textC | Create a new text element in Figma |
| set_fill_colorC | Set the fill color of a node in Figma can be TextNode or FrameNode |
| set_stroke_colorB | Set the stroke color of a node in Figma |
| move_nodeC | Move a node to a new position in Figma |
| clone_nodeC | Clone an existing node in Figma |
| resize_nodeC | Resize a node in Figma |
| delete_nodeC | Delete a node from Figma |
| delete_multiple_nodesB | Delete multiple nodes from Figma at once |
| export_node_as_imageC | Export a node as an image from Figma |
| set_text_contentA | Set the text content of an existing text node in Figma |
| rename_nodeB | Rename a node in Figma |
| bind_variable_to_fillA | Bind a Figma variable to a node's fill color |
| bind_variable_to_strokeB | Bind a Figma variable to a node's stroke color |
| set_image_fillA | Set an image fill on a node from a URL |
| set_effectsB | Set visual effects (shadow, blur) on a node |
| set_fontB | Set font family, style, and size on a text node |
| create_pageC | Create a new page in the Figma document |
| switch_pageB | Switch to a different page in the Figma document |
| get_pagesA | Get all pages in the current Figma document |
| set_gradient_fillB | Set a gradient fill on a node |
| get_stylesA | Get all styles from the current Figma document |
| get_local_componentsA | Get all local components from the Figma document |
| get_annotationsB | Get all annotations in the current document or specific node |
| set_annotationB | Create or update an annotation |
| set_multiple_annotationsC | Set multiple annotations parallelly in a node |
| create_component_instanceC | 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. |
| set_corner_radiusA | Set the corner radius of a node in Figma |
| scan_text_nodesC | Scan all text nodes in the selected Figma node |
| scan_nodes_by_typesC | Scan for child nodes with specific types in the selected Figma node |
| set_multiple_text_contentsB | Set multiple text contents parallelly in a node |
| set_layout_modeB | Set the layout mode and wrap behavior of a frame in Figma |
| set_paddingB | Set padding values for an auto-layout frame in Figma |
| set_axis_alignA | Set primary and counter axis alignment for an auto-layout frame in Figma |
| set_layout_sizingA | Set horizontal and vertical sizing modes for an auto-layout frame in Figma |
| set_item_spacingA | Set distance between children in an auto-layout frame |
| 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. |
| set_default_connectorB | Set a copied connector node as the default connector |
| create_connectionsB | Create connections between nodes using the default connector style |
| set_focusA | Set focus on a specific node in Figma by selecting it and scrolling viewport to it |
| set_selectionsA | Set selection to multiple nodes in Figma and scroll viewport to show them |
| get_library_collectionsA | List all available library variable collections (from enabled team/community libraries) |
| get_library_componentsA | List components in a specific library collection by collection key or name |
| import_component_by_keyA | Import a component from a library by its key and create an instance on the current page |
| import_component_set_by_keyB | Import a component set (with variants) from a library by its key |
| import_style_by_keyA | Import a style (color, text, effect, grid) from a library by its key |
| scan_instance_keysA | Scan all instances under a node and return their mainComponent keys (deduplicated). Use to discover published library component keys. |
| get_instance_infoA | Get the mainComponent key and info from an instance node |
| set_instance_propertiesA | Set component properties on an instance (e.g. switch Platform from Desktop to Mobile) |
| detach_instanceA | Detach a library instance into an editable frame. After detaching, all sublayer text becomes modifiable. |
| walk_and_replace_textA | Walk entire node subtree and replace text by exact match. Works on library instance sublayers that getNodeByIdAsync cannot access. |
| walk_and_scan_textB | Walk entire node subtree and collect all text nodes. Works on library instance sublayers. |
| set_reactionsB | Set prototype interactions (reactions) on a Figma node. Allows creating click-to-navigate, hover, and other prototype interactions. |
| create_component_from_nodeA | Convert an existing Figma frame/node into a reusable Component. The node cannot already be a component or be inside a component. |
| create_variablesA | Create a Figma variable collection with variables. Supports COLOR, FLOAT, STRING, and BOOLEAN types with multiple modes (e.g., light/dark theme). |
| join_channelC | Join a specific channel to communicate with Figma |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| design_strategy | Best practices for working with Figma designs |
| read_design_strategy | Best practices for reading Figma designs |
| text_replacement_strategy | Systematic approach for replacing text in Figma designs |
| annotation_conversion_strategy | Strategy for converting manual annotations to Figma's native annotations |
| swap_overrides_instances | Guide to swap instance overrides between instances |
| reaction_to_connector_strategy | Strategy for converting Figma prototype reactions to connector lines using the output of 'get_reactions' |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 65 tools
Several tools have overlapping purposes, such as 'read_my_design' and 'get_selection' which both provide detailed selection info, and 'scan_text_nodes' vs 'walk_and_scan_text' which both scan text nodes. While many tools are distinct, these ambiguities could cause an agent to select the wrong tool.
Most tool names follow a consistent verb_noun pattern in snake_case (e.g., 'create_rectangle', 'set_fill_color'). The main outlier is 'read_my_design', which breaks the pattern with 'my' and differs from others like 'get_selection'. Overall, naming is largely predictable.
Sixty-five tools is excessive for a typical MCP server, exceeding the 'too many' threshold of 25+. While Figma has a broad feature set, the tool count feels bloated and could be streamlined, e.g., by merging similar tools or reducing granularity.
The tool set covers a wide range of Figma operations: node CRUD, styling, text, components, instances, libraries, variables, prototyping, and annotations. Minor gaps exist (e.g., no explicit boolean operations), but the surface is comprehensive for most design workflows.