This project implements a Model Context Protocol (MCP) integration between AI coding assistants (Cursor, GitHub Copilot, Windsurf) and Figma, allowing AI assistants to communicate with Figma for reading designs and modifying them programmatically.
This MCP server works with all major AI-powered coding assistants:
- ✅ Cursor - Full MCP support with Agent mode
- ✅ GitHub Copilot (VS Code, JetBrains, Eclipse, Xcode) - Native MCP support
- ✅ Windsurf - Built-in MCP integration with Cascade agent
- ✅ Claude Desktop - Anthropic's flagship MCP client
- ✅ VS Code with GitHub Copilot extension
- ✅ Zed - Early MCP adopter
- ✅ Neovim - Via MCP plugin
cursorfigmavideo.mp4
src/talk_to_figma_mcp/- TypeScript MCP server for Figma integrationsrc/cursor_mcp_plugin/- Figma plugin for communicating with AI assistants (Cursor, GitHub Copilot, Windsurf, Claude Desktop, etc.)src/socket.ts- WebSocket server that facilitates communication between the MCP server and Figma plugin
- Node.js version 18 or higher:
node --version-
AI Assistant with MCP support (see compatibility list above)
-
Figma Plugin - Install from Figma community page or install locally
- Setup the project:
npm run setup- Start the WebSocket server:
npm run socket- Start the MCP server:
npx @sethdouglasford/mcp-figmaGitHub Copilot has native MCP support across all major IDEs.
Method 1: Using VS Code UI (Recommended)
- Open Command Palette (
Cmd+Shift+Pon macOS,Ctrl+Shift+Pon Windows/Linux) - Type "MCP: Add Server" and select it
- Choose
HTTP (sse)as the server type - Enter MCP configuration:
{ "mcpServers": { "TalkToFigma": { "command": "npx", "args": ["@sethdouglasford/mcp-figma@latest"] } } }
Method 2: Manual Configuration
Add to your VS Code settings.json:
{
"mcp": {
"servers": {
"TalkToFigma": {
"command": "npx",
"args": ["@sethdouglasford/mcp-figma@latest"]
}
}
}
}- Click ⚙️ in the lower right corner
- Select "Edit settings"
- Under MCP section, click "Edit in
mcp.json" - Add configuration:
{ "servers": { "TalkToFigma": { "command": "npx", "args": ["@sethdouglasford/mcp-figma@latest"] } } }
- Open Copilot Chat panel (click Copilot icon in status bar)
- Select "Edit preferences"
- Navigate to Copilot Chat → MCP
- Add the same JSON configuration as above
- Open GitHub Copilot for Xcode extension
- In agent mode, click the tools icon
- Select "Edit config"
- Add the configuration to
mcp.json
Cursor has excellent MCP support with Agent mode.
- Open Cursor settings (
Cmd+,on macOS,Ctrl+,on Windows/Linux) - Navigate to MCP configuration
- Add server configuration:
{ "mcpServers": { "TalkToFigma": { "command": "npx", "args": ["@sethdouglasford/mcp-figma@latest"] } } } - Restart Cursor
- Switch to Agent mode in the chat interface
- The MCP tools will appear automatically in the available tools list
Windsurf has native MCP support with its Cascade agent.
- Open Windsurf settings
- Navigate to Cascade → MCP Servers
- Click "Add MCP Server"
- Configure the server:
{ "servers": { "TalkToFigma": { "command": "npx", "args": ["@sethdouglasford/mcp-figma@latest"] } } } - The server will appear in your MCP tools in Cascade mode
-
Locate Claude Desktop config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%/Claude/claude_desktop_config.json
- macOS:
-
Add MCP server configuration:
{ "mcpServers": { "TalkToFigma": { "command": "npx", "args": ["@sethdouglasford/mcp-figma@latest"] } } } -
Restart Claude Desktop
Once configured, you can use natural language to interact with Figma through your AI assistant:
"Join the Figma channel 'vblckgfu' and tell me about the current design"
"What elements are currently selected in Figma?"
"Read the design and describe the layout structure"
"Get information about all text nodes in the current design"
"Analyze the current Figma design and suggest improvements"
"What colors are being used in this design?"
"Check if there are any accessibility issues with the text contrast"
"Change the background color of the selected frame to blue"
"Update all heading text to use a larger font size"
"Create a new button component with consistent styling"
"Add annotations to explain the design decisions"
"Create documentation for this component library"
"Scan for any missing annotations in the design system"
Bulk text content replacement
Thanks to @dusskapark for contributing the bulk text replacement feature. Here is the demo video.
Instance Override Propagation Another contribution from @dusskapark Propagate component instance overrides from a source instance to multiple target instances with a single command. This feature dramatically reduces repetitive design work when working with component instances that need similar customizations. Check out our demo video.
Add the server to your Cursor MCP configuration in ~/.cursor/mcp.json:
{
"mcpServers": {
"TalkToFigma": {
"command": "npx",
"args": ["@sethdouglasford/mcp-figma@latest"]
}
}
}Start the WebSocket server:
npm run socketOption 1: From Figma Community (Recommended)
- Go to MCP Figma Plugin on Figma Community (coming soon)
- Click "Install"
- The plugin will be available in your Figma plugins menu
Option 2: Manual Installation (Development)
- In Figma, go to Plugins > Development > New Plugin
- Choose "Link existing plugin"
- Select the
src/mcp_plugin/manifest.jsonfile - The plugin should now be available in your Figma development plugins
For GitHub Copilot coding agent, you can configure MCP servers at the repository level:
- Navigate to your repository settings on GitHub
- Go to Copilot → Coding agent
- Add MCP configuration:
{ "mcpServers": { "TalkToFigma": { "command": "npx", "args": ["@sethdouglasford/mcp-figma@latest"], "tools": ["*"] } } }
For enhanced functionality, you can set environment variables:
# Optional: Custom WebSocket port
export FIGMA_WEBSOCKET_PORT=3055
# Optional: Debug mode
export DEBUG=true-
MCP Server not found
- Ensure Node.js is installed and
npxis available - Try running
npx @sethdouglasford/mcp-figmamanually
- Ensure Node.js is installed and
-
WebSocket connection failed
- Check if the socket server is running:
npm run socket - Verify the port 3055 is not blocked
- Check if the socket server is running:
-
AI Assistant not recognizing tools
- Make sure you're in Agent mode (not Ask mode)
- Restart your IDE after adding MCP configuration
- Check the MCP server status in settings
-
Permission issues
- Ensure the Figma plugin is installed and running
- Check that the plugin has proper permissions
- Install Node.js in WSL:
node --version
npm --version- Update socket configuration in
src/socket.ts:
// Uncomment this line for WSL
const HOST = "0.0.0.0";
// const HOST = "localhost";- Start the WebSocket server:
npm run socket- Start the WebSocket server
- Install the MCP server in Cursor
- Open Figma and run the Cursor MCP Plugin
- Connect the plugin to the WebSocket server by joining a channel using
join_channel - Use Cursor to communicate with Figma using the MCP tools
The MCP server provides the following tools for interacting with Figma:
get_document_info- Get information about the current Figma documentget_selection- Get information about the current selectionread_my_design- Get detailed node information about the current selection without parametersget_node_info- Get detailed information about a specific nodeget_nodes_info- Get detailed information about multiple nodes by providing an array of node IDs
get_annotations- Get all annotations in the current document or specific nodeset_annotation- Create or update an annotation with markdown supportset_multiple_annotations- Batch create/update multiple annotations efficientlyscan_nodes_by_types- Scan for nodes with specific types (useful for finding annotation targets)
get_reactions- Get all prototype reactions from nodes with visual highlight animationset_default_connector- Set a copied FigJam connector as the default connector style for creating connections (must be set before creating connections)create_connections- Create FigJam connector lines between nodes, based on prototype flows or custom mapping
create_rectangle- Create a new rectangle with position, size, and optional namecreate_frame- Create a new frame with position, size, and optional namecreate_text- Create a new text node with customizable font properties
scan_text_nodes- Scan text nodes with intelligent chunking for large designsset_text_content- Set the text content of a single text nodeset_multiple_text_contents- Batch update multiple text nodes efficiently
set_layout_mode- Set the layout mode and wrap behavior of a frame (NONE, HORIZONTAL, VERTICAL)set_padding- Set padding values for an auto-layout frame (top, right, bottom, left)set_axis_align- Set primary and counter axis alignment for auto-layout framesset_layout_sizing- Set horizontal and vertical sizing modes for auto-layout frames (FIXED, HUG, FILL)set_item_spacing- Set distance between children in an auto-layout frame
set_fill_color- Set the fill color of a node (RGBA)set_stroke_color- Set the stroke color and weight of a nodeset_corner_radius- Set the corner radius of a node with optional per-corner control
move_node- Move a node to a new positionresize_node- Resize a node with new dimensionsdelete_node- Delete a nodedelete_multiple_nodes- Delete multiple nodes at once efficientlyclone_node- Create a copy of an existing node with optional position offset
get_styles- Get information about local stylesget_local_components- Get information about local componentscreate_component_instance- Create an instance of a componentget_instance_overrides- Extract override properties from a selected component instanceset_instance_overrides- Apply extracted overrides to target instances
export_node_as_image- Export a node as an image (PNG, JPG, SVG, or PDF) - limited support on image currently returning base64 as text
join_channel- Join a specific channel to communicate with Figma
The MCP server includes several helper prompts to guide you through complex design tasks:
design_strategy- Best practices for working with Figma designsread_design_strategy- Best practices for reading Figma designstext_replacement_strategy- Systematic approach for replacing text in Figma designsannotation_conversion_strategy- Strategy for converting manual annotations to Figma's native annotationsswap_overrides_instances- Strategy for transferring overrides between component instances in Figmareaction_to_connector_strategy- Strategy for converting Figma prototype reactions to connector lines using the output of 'get_reactions', and guiding the use 'create_connections' in sequence
-
Navigate to the Figma plugin directory:
cd src/cursor_mcp_plugin -
Edit code.js and ui.html
To build the TypeScript files:
npm run buildTo watch for changes during development:
npm run devWhen working with the Figma MCP:
- Always join a channel before sending commands
- Get document overview using
get_document_infofirst - Check current selection with
get_selectionbefore modifications - Use appropriate creation tools based on needs:
create_framefor containerscreate_rectanglefor basic shapescreate_textfor text elements
- Verify changes using
get_node_info - Use component instances when possible for consistency
- Handle errors appropriately as all commands can throw exceptions
- For large designs:
- Use chunking parameters in
scan_text_nodes - Monitor progress through WebSocket updates
- Implement appropriate error handling
- Use chunking parameters in
- For text operations:
- Use batch operations when possible
- Consider structural relationships
- Verify changes with targeted exports
- For converting legacy annotations:
- Scan text nodes to identify numbered markers and descriptions
- Use
scan_nodes_by_typesto find UI elements that annotations refer to - Match markers with their target elements using path, name, or proximity
- Categorize annotations appropriately with
get_annotations - Create native annotations with
set_multiple_annotationsin batches - Verify all annotations are properly linked to their targets
- Delete legacy annotation nodes after successful conversion
- Visualize prototype noodles as FigJam connectors:
- Use
get_reactionsto extract prototype flows, - set a default connector with
set_default_connector, - and generate connector lines with
create_connectionsfor clear visual flow mapping.
MIT