The Figma Edit MCP server enables AI assistants to programmatically read, create, and modify Figma designs through the Model Context Protocol (MCP), with built-in safety, validation, and batch efficiency.
Connection
Establish WebSocket communication with the Figma plugin via
join_channel
Reading & Exporting
Retrieve page structure and node details with recursive traversal, field filtering, and depth control
Export nodes as images (PNG, JPG, SVG, PDF)
Node Manipulation
Create shapes: rectangles, ellipses (arc/donut), polygons, stars, frames, text nodes, and SVG-based nodes
Move, resize, rename, clone, delete, group, ungroup, flatten, reparent, and select nodes
Styling & Effects
Set fill colors, stroke colors, and per-side stroke weights
Set uniform or per-corner radius
Apply shadows (drop/inner) and blurs (layer/background)
Link nodes to shared library styles (paint, text, effect, grid)
Auto-Layout
Configure layout mode, padding, spacing, alignment, sizing modes (FIXED/HUG/FILL), and wrapping on frames
Text & Typography
Create text nodes and batch-update content across multiple nodes
Control font family, style, size, line height, letter spacing, alignment, decoration, and casing
Components & Instances
List local and library components
Convert frames to main components; combine into variant/component sets
Create instances by node ID or library key
Add, edit, or delete component property definitions (boolean, text, instance swap)
Read overrides from a source instance and propagate them to multiple targets
Styles
List, create, update, and delete shared styles (Text, Paint, Effect, Grid)
Variables
List, create, update, and delete variables and collections (color, float, string, boolean)
Bind variables to node properties or set explicit variable modes
Safe deletion (rejected if variable is still in use)
Annotations & Prototyping
Read and batch-create/update Dev Mode annotations with markdown
Read and update prototype reactions (click flows, overlays, variable sets)
Draw connector lines between nodes and set default connector styles
Safety & Efficiency
Programmatic checks, name verification, and batch validation prevent errors and hallucinations
Bulk operations (text replacement, override propagation) enhance speed and consistency
Provides tools for reading, creating, and modifying Figma designs, including nodes, styles, components, variables, auto layout, text, and exports.
Integrates with GitHub Copilot in VS Code to enable AI-driven Figma design operations.
Integrates with Google Antigravity to perform programmatic Figma design tasks via AI.
Figma Edit MCP
π npm version
π npm downloads
π CI
Connect AI assistants to Figma via Model Context Protocol to read designs, create and modify elements, and manage design systems programmatically.
This plugin empowers your AI assistant to become a Figma assistant, executing design updates Safer, Cleaner, and Faster than a human ever could.
This plugin allows you as a Designer to focus purely on creative decision-making, leaving the error-prone & repetitive manual changes to the automated systems.
Read more about our design philosophy here.
Core Principles
π‘οΈ Safer: The plugin performs programmatic checks and protections that exceed those in the Figma Desktop app. For example, it prevents the deletion of variables that are still in use, avoiding dangling references. By enforcing these strict validations before an action is taken, the plugin protects designs from both human error and AI hallucinations.
β¨ Cleaner: Programmatic, thorough operations mean no node is ever skipped or forgotten during large updates, ensuring that the design file is always consistent.
β‘ Faster: Executing batch operations (like bulk text replacement or instance override propagation) via AI reduces hours of tedious manual design work down to seconds.
Supported AI Integrations
Cursor
GitHub Copilot (VS Code)
Google Antigravity
Claude Code (VS Code & CLI)
Claude Desktop (Chat, Cowork & Code)
LM Studio
Quick Start
The quickest way to run Figma Edit MCP is directly from the NPM registry. You do not need to clone this repository.
1. Configure your AI assistant
Add the server to your AI assistant's MCP configuration:
{
"mcpServers": {
"FigmaEdit": {
"command": "npx",
"args": ["-y", "figma-edit-mcp"]
}
}
}The config file location depends on your host β see Integration-Specific Setup below. Bun users can substitute bunx for npx; both resolve the same package.
2. Start the WebSocket bridge
In a terminal, start the bridge that connects the MCP server to the Figma plugin. Keep this terminal running:
npx -y --package figma-edit-mcp figma-edit-mcp-socket3. Install the Figma plugin
The Figma plugin ships inside the NPM package. Install the package once to materialize the plugin files on disk:
# In any directory of your choosing (e.g., ~/figma-edit-mcp/)
npm install figma-edit-mcpThen in the Figma desktop app:
Open Plugins β Development β Import plugin from manifestβ¦
Select
node_modules/figma-edit-mcp/figma_plugin/manifest.jsonfrom the directory above.
The plugin is now available under Plugins β Development in any Figma file.
4. (Optional) Install the agent skill
The package also ships a cross-tool skill that teaches your agent the server's safety constraints, error recovery, and tool selection β loaded on demand, so it costs almost nothing until needed. Agents that support the open SKILL.md standard (Claude Code, GitHub Copilot, OpenAI Codex, Cursor, Gemini CLI, Google Antigravity) discover it once it's in their skills directory:
# copy the skill into your agent's skills directory (path varies by host)
cp -R node_modules/figma-edit-mcp/skills/figma-edit ~/.claude/skills/Clients that don't support skills can still reach the same guidance over the MCP connection as resources under figma-edit://guide/* β no install required.
Running from a local clone? See CONTRIBUTING.md for the contributor-only --local development workflow.
Integration-Specific Setup
Paste the JSON snippet from the Quick Start into your host's MCP config file:
Integration | Config File Location | Notes |
Cursor |
| Restart Cursor after editing |
VS Code / GitHub Copilot |
| Requires VS Code 1.102+ with Copilot; enable Agent Mode |
Google Antigravity |
| Restart Antigravity to load |
Claude Desktop |
| β |
Claude Code (CLI / VS Code) | run | No file edit needed |
LM Studio | edit | Or use a deeplink, if provided |
Manual Configuration
If you prefer to edit your host's MCP config directly, paste this snippet into the appropriate config file:
{
"mcpServers": {
"FigmaEdit": {
"command": "npx",
"args": ["-y", "figma-edit-mcp"]
}
}
}Integration | Config File Location |
Cursor |
|
VS Code / Copilot |
|
Antigravity |
|
Claude Desktop |
|
LM Studio | Use the in-app editor (via Developer tab) or edit |
Running from a local clone? See CONTRIBUTING.md for the --local workflow.
Contributing
For local development β building from source, running the bridge from a clone, and the --local integrate workflow β see CONTRIBUTING.md.
Windows + WSL Guide
To allow Figma (running on Windows) to connect to the bridge (running inside WSL), the bridge needs to listen on 0.0.0.0 instead of localhost:
npx -y --package figma-edit-mcp figma-edit-mcp-socket --host 0.0.0.0
# or via environment variable:
FIGMA_EDIT_MCP_SOCKET_HOST=0.0.0.0 npx -y --package figma-edit-mcp figma-edit-mcp-socketThen point the Figma plugin's WebSocket address at your WSL instance's IP.
Usage
Start the WebSocket bridge:
npx -y --package figma-edit-mcp figma-edit-mcp-socketConfigure the MCP server in your AI assistant (see Integration-Specific Setup)
Open Figma and launch the Figma Edit MCP plugin from Plugins β Development
Use the
channel_joinMCP tool to establish communicationUse your AI assistant to interact with Figma via the available MCP tools
MCP Tools
Tools are grouped into a two-level, underscore-separated namespace (group_action). Reads are *_list / *_info; writes use verb leaves. Anything that mutates a node lives under node_*.
page β pages
Tool | Description |
| List the document's pages; with |
node β read, transform, and style any node
Tool | Description |
| Read one or more nodes β recursive traversal with |
| Move and/or resize a node by setting absolute |
| Rename a node |
| Delete one or more nodes in a single validated batch |
| Duplicate a node, optionally at a new position |
| Set the canvas selection and focus the nodes in the viewport |
| Wrap nodes in a new group |
| Dissolve a group, promoting its children |
| Flatten a node and its children into a single vector |
| Reparent a node under a new parent at an optional index |
| Configure a frame's auto-layout (mode, padding, spacing, alignment, sizing) |
| Set a node's fill to a literal RGBA color |
| Set stroke color and weight (uniform or per-side) |
| Set corner radius (uniform or per-corner) |
| Set the effect array (shadows, blurs) |
| Link a node to a shared library style (paint/text/effect/grid) |
| Bind a variable to a node property, or set an explicit variable mode |
| Render a node to an image (PNG / JPG / SVG / PDF) |
create β make new nodes
Tool | Description |
| Create a rectangle, ellipse, polygon, or star ( |
| Create a frame with optional fill/stroke and full auto-layout |
| Create a text node with optional font size/weight/color |
| Create a node from an SVG markup string |
| Convert an existing frame into a main component |
| Instantiate a component at a position |
| Combine components into a component set (variants) |
| Draw connector lines between nodes, or set/check the default connector |
style β shared styles
Tool | Description |
| List all local styles (paint/text/effect/grid) |
| Create a named style, or update one when |
| Delete a local style by id (detaches consumers, which keep their resolved values) |
text β text content & typography
Tool | Description |
| Batch-set the text of one or more text nodes |
| Set any combination of typography properties on a text node |
component β components & variants
Tool | Description |
| List components, with filtering and scope options |
| Add or edit a component-property definition (BOOLEAN/TEXT/INSTANCE_SWAP) |
| Remove a component-property definition |
instance β component instances
Tool | Description |
| Set one property on an instance (toggle, text, swap, or variant) |
| Read the override properties from a source instance |
| Apply copied overrides to target instances |
variable β variables & collections
Tool | Description |
| List variables/collections, or detail by ID; optionally scan consumers |
| Create collections and variables and set values/aliases |
| Delete variables or a collection (rejected if still in use) |
annotation β Dev Mode annotations
Tool | Description |
| Read annotations on a node; optionally include categories |
| Batch create or update native annotations (markdown) |
reaction β prototype reactions
Tool | Description |
| Read prototype reactions (click flows, overlays) from nodes |
| Replace a node's reactions with a full new array |
channel β connection
Tool | Description |
| Join a WebSocket channel to establish communication with the plugin |
MCP Prompts
Built-in prompts guide complex multi-step design tasks:
Prompt | Description |
| Convert prototype reaction flows into visual FigJam connector lines |
| Transfer component instance overrides from a source to multiple targets |
Hallucination Safeguards
The plugin enforces hard constraints (scope locking, name verification, batch validation) that AI agents cannot bypass. The full rules and structured error codes are loaded on demand by your agent β via the figma-edit skill or the MCP resources under figma-edit://guide/* (constraints, error-playbook, workflows, tool-selection).
Best Practices
When working with Figma Edit MCP:
Always join a channel first with
channel_joinbefore sending any other commands.
Notes
Automatic Node ID Normalization
Node IDs copied from Figma URLs use dashes (20485-41), but the plugin API expects colons (20485:41). The MCP server automatically converts dash-format IDs before forwarding, so either format works without manual intervention.
Acknowledgements
Built on prior work by sonnylazuardi and the contributors to grab/cursor-talk-to-figma-mcp. Thank you for the foundation this project builds on.
Thanks to @dusskapark for the following contributions:
Bulk text content replacement β Batch-update text across large designs efficiently. Demo video
Instance override propagation β Propagate component instance overrides from a source to multiple targets in a single command, dramatically reducing repetitive design work. Demo video
License
The MIT License (MIT)
Copyright (c) 2025 sonnylazuardi
Copyright (c) 2026 Neo Product LLC
Maintenance
Latest Blog Posts
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/neozhehan/figma-edit-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
