talk-to-figma-mcp-tool
v1.0.2
Published
Talk to Figma MCP - AI-powered Figma integration for Cursor, Claude, and other MCP-compatible editors
Maintainers
Readme
Talk to Figma MCP
A Model Context Protocol (MCP) integration that enables AI-powered tools like Cursor, Windsurf, Cline and Claude to communicate with Figma for reading designs and modifying them programmatically.
https://github.com/user-attachments/assets/129a14d2-ed73-470f-9a4c-2240b2a4885c
Quick Start (Recommended)
The easiest way to use Talk to Figma MCP is via npx/bunx - no need to clone the repository!
1. Start the WebSocket Server
In one terminal, run:
npx talk-to-figma-mcp-tool --socketOr with Bun:
bunx talk-to-figma-mcp-tool --socket2. Configure Your Editor
Add the MCP server to your editor's configuration:
Cursor (~/.cursor/mcp.json):
{
"mcpServers": {
"TalkToFigma": {
"command": "npx",
"args": ["-y", "talk-to-figma-mcp-tool"]
}
}
}Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"TalkToFigma": {
"command": "npx",
"args": ["-y", "talk-to-figma-mcp-tool"]
}
}
}Windsurf (~/.windsurf/mcp.json):
{
"mcpServers": {
"TalkToFigma": {
"command": "npx",
"args": ["-y", "talk-to-figma-mcp-tool"]
}
}
}Zed (settings.json):
{
"context_servers": {
"TalkToFigma": {
"command": "npx",
"args": ["-y", "talk-to-figma-mcp-tool"]
}
}
}3. Install the Figma Plugin
Option A: Use the CLI to find the plugin path (Easiest)
npx talk-to-figma-mcp-tool --pluginThis will show you the exact path to the plugin files on your system.
Option B: Download from GitHub
# Using curl to download just the plugin files
mkdir figma-mcp-plugin && cd figma-mcp-plugin
curl -O https://raw.githubusercontent.com/thanatusdev/talk-to-figma-mcp/main/src/cursor_mcp_plugin/manifest.json
curl -O https://raw.githubusercontent.com/thanatusdev/talk-to-figma-mcp/main/src/cursor_mcp_plugin/code.js
curl -O https://raw.githubusercontent.com/thanatusdev/talk-to-figma-mcp/main/src/cursor_mcp_plugin/ui.htmlImport into Figma:
- In Figma, go to Plugins > Development > Import plugin from manifest...
- Select the
manifest.jsonfile from the plugin folder - The plugin "Talk to Figma MCP" will appear in your plugins menu
4. Connect and Use
- Open Figma and run the "Talk to Figma MCP" plugin from the plugins menu
- The plugin will show a channel name - copy it
- In your AI editor, use the
join_channeltool with the channel name - Start designing with AI!
Project Structure
src/talk_to_figma_mcp/- TypeScript MCP server for Figma integrationsrc/cursor_mcp_plugin/- Figma plugin for communicating with your editorsrc/socket.ts- WebSocket server that facilitates communication
Development Setup
If you want to contribute or modify the project:
Prerequisites
Install Bun:
curl -fsSL https://bun.sh/install | bashInstallation
git clone https://github.com/anthropics/talk-to-figma-mcp.git
cd talk-to-figma-mcp
bun installRunning Locally
- Start the WebSocket server:
bun run socket- The MCP server runs automatically when your editor invokes it
Building
bun run buildQuick Video Tutorial
Design Automation Example
Bulk text content replacement
Thanks to @dusskapark for contributing the bulk text replacement feature. Here is the demo video.
Windows + WSL Guide
- Install bun via powershell:
powershell -c "irm bun.sh/install.ps1|iex"- Set environment variable to allow connections from WSL:
export FIGMA_WS_HOST=0.0.0.0
npx talk-to-figma-mcp-tool --socketEnvironment Variables
| Variable | Description | Default |
|----------|-------------|---------|
| FIGMA_WS_PORT | WebSocket server port | 3055 |
| FIGMA_WS_HOST | Host binding (0.0.0.0 for external connections) | localhost |
MCP Tools
The MCP server provides 60+ tools for interacting with Figma:
Document & Selection
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 selectionget_node_info- Get detailed information about a specific nodeget_nodes_info- Get detailed information about multiple nodes
Creating Elements
create_rectangle- Create a new rectanglecreate_frame- Create a new frame with auto-layout supportcreate_text- Create a new text nodecreate_ellipse- Create a new ellipse/circlecreate_line- Create a new line
Styling
set_fill_color- Set the fill color of a node (RGBA)set_stroke_color- Set the stroke color and weightset_gradient_fill- Apply gradient fills (linear, radial, angular, diamond)set_corner_radius- Set corner radius with per-corner controlset_effects- Apply visual effects (shadows, blurs)set_blend_mode- Set layer blend modeset_opacity- Set node opacityset_visibility- Show/hide nodes
Text Operations
scan_text_nodes- Scan text nodes with intelligent chunkingset_text_content- Set text content of a single nodeset_multiple_text_contents- Batch update multiple text nodesset_text_style- Set advanced typography (line-height, letter-spacing, decoration)
Layout & Organization
set_auto_layout- Configure auto-layout propertiesset_constraints- Set responsive constraintsmove_node- Move a node to a new positionresize_node- Resize a nodedelete_node- Delete a nodedelete_multiple_nodes- Delete multiple nodes efficientlyclone_node- Duplicate a nodegroup_nodes- Group multiple nodesungroup_nodes- Ungroup nodesflatten_node- Flatten to vectorinsert_child- Move node into a parentrename_node- Rename a nodeset_locked- Lock/unlock nodes
Navigation & Selection
get_children- Get all direct children of a nodeget_parent- Get the parent nodefind_nodes_by_name- Find nodes by name pattern (supports wildcards)set_selection- Programmatically select nodesscroll_into_view- Scroll viewport to show a node
Design Analysis
get_all_colors- Extract all colors used in a designget_all_fonts- List all fonts used (typography audit)node_exists- Check if a node exists (validation)
Annotations
get_annotations- Get annotations in document or nodeset_annotation- Create/update an annotationset_multiple_annotations- Batch create/update annotationsscan_nodes_by_types- Scan for nodes by type
Components & Styles
get_styles- Get local stylesget_local_components- Get local componentscreate_component_instance- Create a component instance
Export
export_node_as_image- Export as PNG, JPG, SVG, or PDF
Connection
join_channel- Join a channel to communicate with Figma
Best Practices
- Always join a channel before sending commands
- Get document overview using
get_document_infofirst - Check current selection with
get_selectionbefore modifications - Use batch operations when possible for better performance
- Verify changes using
get_node_infoorexport_node_as_image - Handle errors appropriately - all commands can throw exceptions
For Large Designs
- Use chunking parameters in
scan_text_nodes - Monitor progress through WebSocket updates
- Use
find_nodes_by_nameto locate specific elements
For Text Operations
- Use
set_multiple_text_contentsfor batch updates - Leverage
scan_text_nodesfor discovery - Verify with targeted exports
Troubleshooting
Connection Issues
- Ensure the WebSocket server is running on port 3055
- Check that the Figma plugin is connected to the same channel
- Verify no firewall is blocking localhost connections
Plugin Not Appearing
- Make sure you imported the plugin via Plugins > Development > Import plugin from manifest...
- Refresh Figma if needed
Commands Not Working
- Verify you've joined a channel with
join_channel - Check the WebSocket server terminal for error messages
- Ensure the Figma file is open and editable
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT
