Claude Talk to Figma MCP
This server acts as a Model Context Protocol (MCP) plugin that enables AI tools like Claude Desktop and Cursor to directly interact with Figma for comprehensive design automation and real-time manipulation.
Document Interaction: Analyze documents, retrieve selections, get node information, and list document styles
Element Creation: Create shapes (rectangles, frames, ellipses, polygons, stars), text elements, and component instances
Visual Modifications: Set fill/stroke colors, adjust positions/sizes, apply corner radius, configure auto-layout, and manage effects
Text Manipulation: Set content, font properties (name, size, weight), spacing, case, decorations, and load fonts asynchronously
Structure & Organization: Group, ungroup, clone, insert, and flatten nodes
Asset Management: Export nodes as images and scan text nodes
Component Integration: Access local and remote components from team libraries
Communication: Join channels for bidirectional communication between AI tools and Figma
Allows Claude Desktop and other AI tools to interact directly with Figma, enabling document analysis, element creation (shapes, text, frames), style modifications, text manipulation, and component management for AI-assisted design capabilities.
Allows GitHub Copilot to interact with Figma through the MCP protocol, enabling AI-assisted design capabilities directly from the Copilot interface.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Claude Talk to Figma MCP create a mobile login screen with a modern gradient background"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.

Claude AI Agents Talk to Figma MCP
Enable your AI agents to read, analyze, and modify Figma designs.
Works with your favorite agentic tools:
π©π½βπ» Who it's for
UX/UI Teams
Automate repetitive design tasks and maintain brand consistency without manual effort:
Automated accessibility audits - Detect and fix contrast issues in seconds
Bulk style updates - Change colors, typography, or spacing across the entire document with a single command
Visual hierarchy analysis - Get instant feedback on your design structure
Developers
Generate production-ready code directly from designs:
React/Vue/SwiftUI components - From design to code in one step
Code with design tokens - Keep design and development in sync
Reduce handoff friction - Fewer back-and-forth iterations with the design team
Key advantage: Unlike Figma's official MCP which requires a Dev Mode license, this MCP works with any Figma account (even free ones).
Related MCP server: Figma Console MCP Server
π‘ Real-world use cases
Accessibility:
"Find all text with contrast ratio <4.5:1 and suggest colors that meet WCAG AA"
Rebranding:
"Change #FF6B6B to #E63946 in all primary buttons throughout the document"
Design analysis:
"Analyze the visual hierarchy of this screen and suggest improvements based on design principles"
Developer handoff:
"Generate the React component for 'CardProduct' including PropTypes and styles in CSS modules"
β‘οΈ Quick installation
Setup: 5 minutes | First automation: 2 minutes
Requirements
Node.js installed
AI client:
Step 1: Install and start the websocket
Enables the Agent to send commands to Figma.
Open your terminal, navigate to the folder where you want to install the tool, and run:
npx claude-talk-to-figma-mcpπ‘ Tip: This command is an "all-in-one" (clones, installs, and starts). In subsequent sessions, if you're already inside the project folder
your-project/claude-talk-to-figma-mcp, you can simply runbun run socket.
Step 2: Install the plugin in Figma
Enables Figma to receive commands from the agent and return responses.
In Figma Desktop go to Menu β Plugins β Development β Import plugin from manifest β inside the folder where you installed the MCP, select src/claude_mcp_plugin/manifest.json
Step 3: Configure your Agentic Tool
Enables the agent to use the MCP's read and modify tools.
Claude Desktop
Download claude-talk-to-figma-mcp.dxt (from Assets section of the latest release) and double-click. Claude configures itself automatically.
Cursor
Open Cursor Settings β Tools & Integrations
Click "New MCP Server" to open the
mcp.jsonfileAdd this configuration:
{
"mcpServers": {
"ClaudeTalkToFigma": {
"command": "npx",
"args": ["-p", "claude-talk-to-figma-mcp@latest", "claude-talk-to-figma-mcp-server"]
}
}
}Save the file and restart Cursor
Other Agentic Tools
For other tools (Claude Code, Windsurf, VS Code + GitHub Copilot, Cline, Roo Code), you can follow the instructions in the "Configure your Agentic Tool" chapter of the detailed installation guide.
Step 4: Start working
Open the plugin in Figma
Copy the channel ID (bold code inside the green box)
Type in the chat:
Connect to Figma, channel {your-ID}
β Ready to design with AI!
Subsequent work sessions
To use the MCP again in day-to-day work, you don't need to repeat the entire process:
Start the socket: In the terminal, enter the project folder
your-project/claude-talk-to-figma-mcpand runbun run socket(ornpm run socket).Open the plugin in Figma: You'll find it in your recent plugins list.
Connect the AI: Copy the channel ID and tell your agent:
Connect to Figma, channel {your-ID}.
π€ Multi-Agent & Parallel execution
This MCP server supports safe parallel execution out of the box, allowing multiple AI agents (e.g. Claude Code's sub-agents or team swarms) to work simultaneously on your Figma file without locking up the plugin. A built-in command queue processes requests sequentially on the server side, preventing the Figma API from timing out.
Note: Because multiple agents can modify the document simultaneously, relying on implicit page context is unsafe. As a result, stateful commands like
set_current_pageare blocked. All agents must explicitly provide the intendedparentIdparameter when executing any creation or structural modification command (e.g.,create_frame,create_text).
(Special thanks to @mmabas77 for architecting and contributing this feature!)
π³ Alternative: Using Docker
If you prefer Docker or need to run the WebSocket server in a team environment, see the Docker installation guide in the detailed installation documentation.
π οΈ Capabilities
Design analysis
Get document information, current selection, styles
Scan text, audit components, export assets
Element creation
Shapes, text, frames with full style control
Clone, group, organize elements
Modification
Colors, borders, corners, shadows
Auto-layout, advanced typography
Local components and team library components
π Documentation
Detailed installation β Manual setup, Cursor, Windsurf and other IDEs
Available commands β Complete tool reference
Troubleshooting β Common errors and how to fix them
Contributing β Architecture, testing, contribution guide
Changelog β Version history
π Credits
Based on cursor-talk-to-figma-mcp by Sonny Lazuardi. Adapted for Claude Desktop and extended with new tools by XΓΊlio ZΓ©.
If you want to know about all project contributions, you can visit the "Contributors" chapter of the contribution guide.
π Project status
β Stable production - Tool ready for daily use in design and development teams
π Under active development:
Complete support for Figma Variables
Enhanced export to Tailwind CSS/SwiftUI
Need something specific?
Propose new ones on GitHub Issues
Your feedback and contributions keep the project alive. β€οΈ
Available Tools
92 toolsapply_image_transformA
Adjust image position, scale, and rotation within node. Rotates the IMAGE inside the node, not the node itself.
Inputs: nodeId (required), scaleMode, rotation, translateX, +2 more.
apply_variable_to_nodeA
Bind a variable to a node property in Figma. Call once per field β for multiple fields, call multiple times.
Inputs: nodeId (required), variableId (required), field (required).
boolean_operationB
Perform a boolean operation (union, subtract, intersect, exclude) on two or more nodes. All nodes must share the same parent.
Inputs: nodeIds (required), operation (required), name.
clone_nodeB
Clone an existing node in Figma
Inputs: nodeId (required), x, y, parentId.
convert_to_frameA
Convert a group or shape node into a frame in Figma. Preserves position, size, visual properties, and children. Useful for converting groups into auto-layout-capable frames.
Inputs: nodeId (required).
create_component_from_nodeB
Convert an existing node (frame, group, etc.) into a reusable component in Figma
Inputs: nodeId (required), name, parentId.
create_component_instanceB
Create an instance of a component in Figma
Inputs: componentKey (required), x (required), y (required), parentId.
create_component_setA
Create a component set (variants) from multiple component nodes in Figma
Inputs: componentIds (required), name, parentId.
create_connectorA
Create a connector (arrow or line) in FigJam. Connectors can link two existing nodes by ID, or connect arbitrary canvas positions. Use this to draw flow arrows between stickies, shapes, etc.
Inputs: startNodeId, startX, startY, endNodeId, +9 more.
create_effect_styleB
Create a reusable effect style (shadows, blurs) in Figma's local styles.
Inputs: name (required), effects (required).
create_ellipseC
Create a new ellipse in Figma
Inputs: x (required), y (required), width (required), height (required), +5 more.
create_frameC
Create a new frame in Figma
Inputs: x (required), y (required), width (required), height (required), +5 more.
create_pageB
Create a new page in the current Figma document
Inputs: name (required).
create_paint_styleA
Create a reusable color/paint style (SOLID) in Figma's local styles.
Inputs: name (required), r (required), g (required), b (required), +1 more.
create_polygonC
Create a new polygon in Figma
Inputs: x (required), y (required), width (required), height (required), +6 more.
create_rectangleB
Create a new rectangle in Figma
Inputs: x (required), y (required), width (required), height (required), +5 more.
create_sectionB
Create a FigJam section. Sections are used to group and organise content on the FigJam board. They appear as labelled coloured regions.
Inputs: x (required), y (required), width, height, +3 more.
create_shape_with_textA
Create a FigJam shape with text inside. Useful for flowcharts, diagrams, and process maps. Supported shapes: SQUARE, ELLIPSE, ROUNDED_RECTANGLE, DIAMOND, TRIANGLE_UP, TRIANGLE_DOWN, PARALLELOGRAM_RIGHT, PARALLELOGRAM_LEFT.
Inputs: x (required), y (required), width, height, +5 more.
create_starB
Create a new star in Figma
Inputs: x (required), y (required), width (required), height (required), +7 more.
create_stickyB
Create a sticky note in a FigJam board. Sticky notes are the primary way to add text content in FigJam.
Inputs: x (required), y (required), text (required), color, +3 more.
create_textC
Create a new text element in Figma
Inputs: x (required), y (required), text (required), fontSize, +7 more.
create_text_styleC
Create a reusable text style (typography) in Figma's local styles. This is useful for design system consistency.
Inputs: name (required), fontFamily (required), fontSize (required), fontStyle, +6 more.
delete_nodeC
Delete a node from Figma
Inputs: nodeId (required).
delete_pageB
Delete a page from the current Figma document
Inputs: pageId (required).
detach_instanceA
Detach a component instance, converting it into a regular frame. This breaks the link with the main component.
Inputs: instanceId (required).
duplicate_pageA
Duplicate an existing page in the Figma document, creating a complete copy of all its contents
Inputs: pageId (required), name.
export_node_as_imageC
Export a node as an image from Figma
Inputs: nodeId (required), format, scale.
flatten_nodeB
Flatten a node in Figma (e.g., for boolean operations or converting to path)
Inputs: nodeId (required).
get_annotationC
Read annotations from a node in Figma. Uses the proposed Annotations API.
Inputs: nodeId (required).
get_document_infoB
Get detailed information about the current Figma document
Inputs: no named parameters.
get_figjam_elementsA
Get all FigJam-specific elements (stickies, connectors, shapes with text, sections, stamps) on the current page. Use this to read the contents of a FigJam board.
Inputs: no named parameters.
get_gridA
Read layout grids from a frame node in Figma
Inputs: nodeId (required).
get_guideC
Read guides from a page in Figma
Inputs: pageId (required).
get_image_from_nodeB
Extract image metadata from a node
Inputs: nodeId (required).
get_local_componentsA
Get all local components from the Figma document
Inputs: no named parameters.
get_node_infoB
Get detailed information about a specific node in Figma
Inputs: nodeId (required), depth.
get_nodes_infoB
Get detailed information about multiple nodes in Figma
Inputs: nodeIds (required), depth.
get_pagesA
Get all pages in the current Figma document
Inputs: no named parameters.
get_reactionsA
Read all prototype interactions (reactions) from a node in Figma. Useful for debugging and inspecting existing interactions.
Inputs: nodeId (required).
get_remote_componentsA
Get available components from team libraries in Figma
Inputs: no named parameters.
get_selectionB
Get information about the current selection in Figma
Inputs: no named parameters.
get_styled_text_segmentsA
Get text segments with specific styling in a text node
Inputs: nodeId (required), property (required).
get_stylesA
Get all styles from the current Figma document
Inputs: no named parameters.
get_svgA
Export a single node as an SVG string from Figma. Returns the SVG markup including all nested children.
Inputs: nodeId (required).
get_variablesA
List all variable collections and their variables in the current Figma file. Returns collections with their modes and variables.
Inputs: no named parameters.
group_nodesC
Group nodes in Figma
Inputs: nodeIds (required), name.
insert_childB
Insert a child node inside a parent node in Figma
Inputs: parentId (required), childId (required), index.
join_channelC
Join a specific channel to communicate with Figma
Inputs: channel (required).
load_font_asyncC
Load a font asynchronously in Figma
Inputs: family (required), style.
move_nodeB
Move a node to a new position in Figma
Inputs: nodeId (required), x (required), y (required).
rename_nodeB
Rename a node (frame, component, group, etc.) in Figma
Inputs: nodeId (required), name (required).
rename_pageC
Rename an existing page in the Figma document
Inputs: pageId (required), name (required).
reorder_nodeA
Change the z-order (layer order) of a node within its parent. Distinct from insert_child which re-parents a node β reorder_node changes position within the same parent.
Inputs: nodeId (required), position, index.
replace_image_fillA
Replace existing image on node with new image while preserving transform
Inputs: nodeId (required), newImageSource (required), sourceType (required), preserveTransform.
resize_nodeC
Resize a node in Figma
Inputs: nodeId (required), width (required), height (required).
rotate_nodeA
Rotate a node in Figma by a specified angle in degrees (clockwise). Use relative=true to add to the current rotation instead of setting an absolute value. Note: locked nodes can still be rotated β the Plugin API bypasses the UI lock by design.
Inputs: nodeId (required), angle (required), relative.
scan_text_nodesC
Scan all text nodes in the selected Figma node
Inputs: nodeId (required).
set_annotationA
Add an annotation label to a node in Figma. Uses the proposed Annotations API β requires Figma Desktop with enableProposedApi.
Inputs: nodeId (required), label (required).
set_auto_layoutC
Configure auto layout properties for a node in Figma
Inputs: nodeId (required), layoutMode (required), paddingTop, paddingBottom, +7 more.
set_corner_radiusA
Set the corner radius of a node in Figma
Inputs: nodeId (required), radius (required), corners.
set_current_pageA
DEPRECATED β this stateful command is blocked by the relay server. Instead, pass the target page's node ID as parentId on creation commands (e.g., create_rectangle, create_frame). Use get_pages to discover page IDs.
Inputs: pageId (required).
set_effectsC
Set the visual effects of a node in Figma
Inputs: nodeId (required), effects (required).
set_effect_style_idC
Apply an effect style to a node in Figma
Inputs: nodeId (required), effectStyleId (required).
set_fill_colorA
Set the fill color of a node in Figma. Alpha component defaults to 1 (fully opaque) if not specified. Use alpha 0 for fully transparent.
Inputs: nodeId (required), r (required), g (required), b (required), +1 more.
set_font_nameB
Set the font name and style of a text node in Figma
Inputs: nodeId (required), family (required), style.
set_font_sizeB
Set the font size of a text node in Figma
Inputs: nodeId (required), fontSize (required).
set_font_weightB
Set the font weight of a text node in Figma
Inputs: nodeId (required), weight (required).
set_gradientA
Set a gradient fill on a node in Figma. Supports linear, radial, angular, and diamond gradients. Replaces all existing fills (same behavior as set_fill_color).
Inputs: nodeId (required), type (required), stops (required), gradientTransform.
set_gridB
Apply layout grids to a frame node in Figma. Supports columns, rows, and grid patterns.
Inputs: nodeId (required), grids (required).
set_guideA
Set guides on a page in Figma. Replaces all existing guides on the page.
Inputs: pageId (required), guides (required).
set_imageA
Set an image fill on a node from base64-encoded image data. Supports PNG, JPEG, GIF, WebP. Max ~5MB after decode.
Inputs: nodeId (required), imageData (required), scaleMode.
set_image_fillC
Apply image to node from URL or base64 data
Inputs: nodeId (required), imageSource (required), sourceType (required), scaleMode.
set_image_filtersC
Apply color and light adjustments to image fills
Inputs: nodeId (required), exposure, contrast, saturation, +4 more.
set_instance_variantA
Change the variant properties of a component instance without recreating it. This preserves instance overrides and is more efficient than delete + create workflow.
Inputs: nodeId (required), properties (required).
set_letter_spacingB
Set the letter spacing of a text node in Figma
Inputs: nodeId (required), letterSpacing (required), unit.
set_line_heightB
Set the line height of a text node in Figma
Inputs: nodeId (required), lineHeight (required), unit.
set_multiple_text_contentsB
Set multiple text contents parallelly in a node
Inputs: nodeId (required), text (required).
set_node_propertiesA
Set visibility, lock state, and/or opacity of a node in Figma. Only provided properties are changed; omitted properties remain unchanged.
Inputs: nodeId (required), visible, locked, opacity.
set_paragraph_spacingB
Set the paragraph spacing of a text node in Figma
Inputs: nodeId (required), paragraphSpacing (required).
set_reactionsA
Set prototype interactions (reactions) on a node in Figma. Use this to add hover effects, click interactions, etc. For component variants, set on the default variant to add 'While hovering -> Change to hover variant' interactions.
Inputs: nodeId (required), reactions (required).
set_selection_colorsA
Recursively change all stroke and fill colors of a node and all its descendants. Works like Figma's 'Selection colors' feature - perfect for recoloring icon instances.
Inputs: nodeId (required), r (required), g (required), b (required), +1 more.
set_sticky_textB
Update the text content of an existing FigJam sticky note.
Inputs: nodeId (required), text (required).
set_stroke_colorB
Set the stroke color of a node in Figma (defaults: opacity 1, weight 1)
Inputs: nodeId (required), r (required), g (required), b (required), +2 more.
set_svgA
Import an SVG string as a vector node in Figma. The SVG is sanitized (scripts and external resources are stripped) before import. Max 500KB.
Inputs: svgString (required), x, y, name, +1 more.
set_text_alignB
Set the text alignment of a text node in Figma. Use textAlignHorizontal RIGHT for RTL/Arabic text.
Inputs: nodeId (required), textAlignHorizontal, textAlignVertical.
set_text_caseB
Set the text case of a text node in Figma
Inputs: nodeId (required), textCase (required).
set_text_contentA
Set the text content of an existing text node in Figma
Inputs: nodeId (required), text (required).
set_text_decorationC
Set the text decoration of a text node in Figma
Inputs: nodeId (required), textDecoration (required).
set_text_style_idC
Apply a text style to a text node in Figma
Inputs: nodeId (required), textStyleId (required).
set_variableA
Create or update a variable in a Figma variable collection. Creates the collection if collectionName is provided and it doesn't exist.
Inputs: name (required), resolvedType (required), collectionId, collectionName, +2 more.
switch_variable_modeB
Switch the variable mode on a node for a specific collection. This changes which mode's values are used for bound variables.
Inputs: nodeId (required), collectionId (required), modeId (required).
ungroup_nodesC
Ungroup nodes in Figma
Inputs: nodeId (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogβ¦
TDQS
Scored across 92 tools
Many tools have overlapping purposes, such as set_image, set_image_fill, replace_image_fill, and set_image_filters. Similarly, set_text_content and set_multiple_text_contents are redundant. The large number of similar setters (set_fill_color, set_stroke_color, etc.) makes it difficult for an agent to distinguish between them without careful reading.
Most tools follow a consistent verb_noun pattern (e.g., create_rectangle, set_font_size, get_pages). A few outliers like boolean_operation (noun style) and set_multiple_text_contents (longer phrase) exist, but the overall naming is predictable and clear.
With 92 tools, the server is significantly over-scoped. This large number leads to redundancy and cognitive overload. Most MCP servers with good coherence have 3-15 tools; 92 is an extreme mismatch for the apparent domain.
The tool set covers a wide range of Figma operations including creation, reading, updating, and deleting nodes and pages, as well as styles, variables, and FigJam elements. However, there are notable gaps: no tools to delete or update styles, no tool to delete variables, and no global search for nodes. The coverage is broad but not fully complete.
Maintenance
Related MCP Connectors
The Figma MCP server brings Figma design context directly into your AI workflow.
Compare Figma designs against live websites and get visual + content QA reports, from inside Claude.
Connect AI assistants to your approved computer for files, commands, browser and desktop tasks.
Use your Mac, Windows or Linux computer from ChatGPT, Claude or Codex: files, commands, documents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants like Claude Desktop to interact directly with Figma, allowing natural language commands to create, modify, and analyze designs including shapes, text, components, and layouts in real-time.MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude to interact directly with Figma Desktop for creating UI components, managing design tokens, and auditing files through natural language. It establishes a live connection between the AI and the Figma API via a local server and companion plugin.13,916 npmMIT
- AlicenseAqualityDmaintenanceEnables Claude AI to extract design information from Figma files and create or update designs via a Figma plugin, supporting both readonly and write modes.936ISC
- AlicenseNot gradedqualityBmaintenanceEnables integrating Figma with AI assistants like Claude Desktop and Gemini CLI for accessing and managing Figma design files.919 npm10MIT