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. |
Capabilities
Features and capabilities supported by this server
| 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_infoB | Get detailed information about the current Figma document |
| get_selectionA | 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_infoC | Get detailed information about a specific node in Figma |
| get_nodes_infoB | 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_textB | 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_nodeB | Move a node to a new position in Figma |
| clone_nodeB | 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_imageB | Export a node as an image from Figma |
| set_text_contentB | 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_stylesB | Get all styles from the current Figma document |
| get_local_componentsA | Get all local components from the Figma document |
| get_annotationsC | Get all annotations in the current document or specific node |
| set_annotationC | 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_radiusB | Set the corner radius of a node in Figma |
| scan_text_nodesC | Scan all text nodes in the selected Figma node |
| scan_nodes_by_typesB | Scan for child nodes with specific types in the selected Figma node |
| set_multiple_text_contentsC | Set multiple text contents parallelly in a node |
| set_layout_modeB | Set the layout mode and wrap behavior of a frame in Figma |
| set_paddingA | 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_sizingB | Set horizontal and vertical sizing modes for an auto-layout frame in Figma |
| set_item_spacingC | 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_connectionsC | Create connections between nodes using the default connector style |
| set_focusB | 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 | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/kctw-dev/talk-to-figma-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server