PluginBench
MCP Server
Active
MIT

io.github.neozhehan/figma-edit-mcp MCP Server

io.github.neozhehan/figma-edit-mcp

AI-powered Figma design editing with built-in safety checks and bulk operations.

What is the io.github.neozhehan/figma-edit-mcp MCP server?

Figma Edit MCP is an MCP server that connects AI assistants to Figma, enabling programmatic reading, creation, and modification of designs with enforced safety constraints. It validates every edit before execution to prevent broken references, deleted variables in use, or edits outside designated areas, allowing AI to apply changes across hundreds of layers while you maintain creative control.

This server lets AI assistants edit Figma files safely and at scale. You describe design changes in plain language, the AI executes them across multiple layers, and the plugin enforces safety rules—refusing edits that would damage the file. It's designed for bulk updates, component management, variable binding, and design system work, freeing designers from repetitive manual changes while keeping files clean and consistent.

How to install io.github.neozhehan/figma-edit-mcp

Copy-paste configuration for popular MCP clients.

transport: stdio
Config generated by PluginBench — verify against the source before use.
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "figma-edit-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "figma-edit-mcp"
      ]
    }
  }
}

Tools & capabilities

Tools this server exposes to the agent.

  • page_info — List the document's pages; with pageIds, return those pages and their top-level children
  • node_info — Read one or more nodes with recursive traversal, properties filtering, and depth control
  • node_transform — Move and/or resize a node by setting absolute x/y/width/height
  • node_rename — Rename a node
  • node_delete — Delete one or more nodes in a single validated batch
  • node_clone — Duplicate a node, optionally at a new position
  • view_navigate — Navigate the editor view to a page or node(s)
  • node_group — Wrap nodes in a new group
  • node_ungroup — Dissolve a group, promoting its children
  • node_flatten — Flatten a node and its children into a single vector
  • node_insert_child — Reparent a node under a new parent at an optional index
  • node_set_auto_layout — Configure a frame's auto-layout (mode, padding, spacing, alignment, sizing)
  • node_set_fill — Set a node's fill to a color or image, or clear it
  • node_set_stroke — Set stroke color and weight (uniform or per-side)
  • node_set_corner_radius — Set corner radius (uniform or per-corner)
  • node_set_effects — Set the effect array (shadows, blurs)
  • node_apply_style — Link a node to a shared library style (paint/text/effect/grid)
  • node_bind_variable — Bind a variable to a node property, or set an explicit variable mode
  • node_export_visual — Render a node to an image (PNG/JPG/SVG/PDF)
  • create_shape — Create a rectangle, ellipse, polygon, or star with optional fill/stroke

Use cases

  • Bulk-replace text across hundreds of layers (e.g., product names, version numbers) in seconds
  • Copy component instance overrides from one instance to fifty others automatically
  • Update colors, typography, or effects across an entire design system at once
  • Create and manage variables and styles programmatically without manual UI navigation
  • Generate design exports (PNG/SVG/PDF) and render nodes to images at scale

io.github.neozhehan/figma-edit-mcp MCP server FAQ

What is Figma Edit MCP?

Figma Edit MCP is an MCP server that lets AI assistants read, create, and modify Figma designs programmatically. It enforces safety checks on every edit—refusing deletions of variables still in use, edits outside your designated area, or changes to locked layers—so the AI can safely apply bulk changes across many layers.

Is it free?

Yes. Figma Edit MCP is open-source and free to install via npm. You need a Figma account and a compatible AI assistant (Cursor, Claude Desktop, GitHub Copilot, Google Antigravity, or LM Studio).

How do I install it in Cursor?

Add the server to ~/.cursor/mcp.json with the command `npx -y figma-edit-mcp`, then restart Cursor. Also run `npx -y --package figma-edit-mcp figma-edit-mcp-socket` in a terminal to start the WebSocket bridge, and install the Figma plugin from the npm package.

How do I install it in Claude Desktop?

Add the server to ~/Library/Application Support/Claude/claude_desktop_config.json with the command `npx -y figma-edit-mcp`. Start the WebSocket bridge with `npx -y --package figma-edit-mcp figma-edit-mcp-socket`, then install the Figma plugin from the npm package.

Do I need authentication?

You need a Figma account and a valid Figma file. The plugin runs inside Figma and communicates via a local WebSocket bridge, so no API keys are required—just your existing Figma login.

What safety checks does it enforce?

The plugin validates every edit before execution: it restricts changes to your chosen page/frame, requires exact layer name matches, rejects bulk edits with any invalid item, protects locked layers and library assets, prevents deletion of your working area, and requires explicit permission to edit variables or styles.

README (reference)

Source of truth, from the repository.

Figma Edit MCP

npm version npm downloads CI Featured by IDEO

figma-edit-mcp MCP server

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.

🏆 Featured by IDEO: Letting AI edit live Figma files without trusting it to behave

📖 Documentation: neozhehan.github.io/figma-edit-mcp

What This Does for You

The project has three goals: Safer, Cleaner, and Faster.

  • 🛡️ Safer: The plugin checks every action the AI requests before that action runs. If an action would damage the file, the plugin refuses it and tells the AI why. For example, the plugin will not delete a color variable while layers still use it. Figma itself does not warn you when you delete a variable that is in use — the deletion leaves broken references that are very hard to find afterwards.
  • ✨ Cleaner: Because damaging actions are refused, the file does not accumulate broken references or leftover values. Bulk updates cover every layer that matches your request, not just the layers a person remembers to check.
  • ⚡ Faster: The AI applies one change across hundreds of layers in seconds. For example, it can replace a product name in every text layer on a page, or copy the overrides from one component instance to fifty others.

These goals support each other: when the plugin refuses mistakes, the file stays consistent, and a consistent file is easier for both you and the AI to work with.

Read the full reasoning behind these goals →

What the AI Cannot Do to Your File

AI assistants sometimes invent things. An AI can name a layer that does not exist, or misremember which layer it was editing. This plugin does not depend on the AI being right. The plugin checks every edit itself, inside Figma, and refuses any edit that fails a check. The AI cannot skip these checks.

What the plugin enforces:

  1. The AI can only edit the area you chose. When you connect, you choose one page or one frame for the session. The plugin refuses any edit outside that area. If you choose no area, the AI can read the file but cannot edit any layers.
  2. Every edit must name its exact target layer. The plugin compares the layer name the AI supplies with the real layer's name. If the names do not match, the plugin refuses the edit. This stops the AI from editing a layer it invented or misremembered.
  3. A bulk edit with one bad item changes nothing. The plugin validates every item in a bulk edit before it changes the first one. If any item fails validation, the plugin rejects the entire bulk edit.
  4. Protected layers stay protected. The plugin refuses edits to locked layers and to assets from shared libraries. It also refuses to add, delete, or move layers inside a component instance.
  5. The AI cannot delete its own working area. The plugin refuses any action that would delete or replace the page or frame you assigned for the session.
  6. Variables and styles require separate permission. Editing your variables or styles requires its own checkbox in the plugin, and both checkboxes are off by default. You grant that permission; the AI cannot grant it to itself.

One honest limit: the plugin checks where an edit happens and which layer it touches. It cannot check whether the edit is the one you wanted. A wrong edit that follows all the rules will go through. So you review the AI's work the same way you would review a colleague's work.

The exact rules, and the conditions under which each one holds, are written down in SAFETY.md. That document is for developers. (Your AI assistant loads the same rules at runtime via the figma-edit skill or the figma-edit://guide/* resources.)

How the Work Is Divided

You do not need to know every Figma feature to direct this system. The work splits three ways:

  • You decide what the design should be. You describe the change in plain language, and you judge the result. You do not need to know which Figma menu or panel performs the change.
  • The AI assistant turns your request into specific Figma operations and carries out the repetitive work across many layers.
  • The plugin runs inside Figma, checks each operation, and refuses the unsafe ones.

The AI contributes scale. The plugin contributes protection. You contribute the design judgment.

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-socket

3. 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-mcp

Then in the Figma desktop app:

  1. Open Plugins → Development → Import plugin from manifest…
  2. Select node_modules/figma-edit-mcp/figma_plugin/manifest.json from 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:

IntegrationConfig File LocationNotes
Cursor~/.cursor/mcp.jsonRestart Cursor after editing
VS Code / GitHub Copilot~/Library/Application Support/Code/User/mcp.jsonRequires VS Code 1.102+ with Copilot; enable Agent Mode
Google Antigravity~/.gemini/antigravity/mcp_config.jsonRestart Antigravity to load
Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.json—
Claude Code (CLI / VS Code)run claude mcp add FigmaEdit npx figma-edit-mcpNo file edit needed
LM Studioedit mcp.json via the Developer tabOr 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"]
    }
  }
}
IntegrationConfig File Location
Cursor~/.cursor/mcp.json
VS Code / Copilot~/Library/Application Support/Code/User/mcp.json
Antigravity~/.gemini/antigravity/mcp_config.json
Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.json
LM StudioUse the in-app editor (via Developer tab) or edit mcp.json

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-socket

Then point the Figma plugin's WebSocket address at your WSL instance's IP.


Usage

  1. Start the WebSocket bridge: npx -y --package figma-edit-mcp figma-edit-mcp-socket
  2. Configure the MCP server in your AI assistant (see Integration-Specific Setup)
  3. Open Figma and launch the Figma Edit MCP plugin from Plugins → Development
  4. Use the channel_join MCP tool to establish communication
  5. Use 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

ToolDescription
page_infoList the document's pages; with pageIds, return those pages and their top-level children

node — read, transform, and style any node

ToolDescription
node_infoRead one or more nodes — recursive traversal with properties, filter, and maxDepth (the workhorse read; also returns bound variables / explicit modes)
node_transformMove and/or resize a node by setting absolute x / y / width / height
node_renameRename a node
node_deleteDelete one or more nodes in a single validated batch
node_cloneDuplicate a node, optionally at a new position
view_navigateNavigate the editor view to a page or node(s)
node_groupWrap nodes in a new group
node_ungroupDissolve a group, promoting its children
node_flattenFlatten a node and its children into a single vector
node_insert_childReparent a node under a new parent at an optional index
node_set_auto_layoutConfigure a frame's auto-layout (mode, padding, spacing, alignment, sizing)
node_set_fillSet a node's fill to a color or image, or clear it
node_set_strokeSet stroke color and weight (uniform or per-side)
node_set_corner_radiusSet corner radius (uniform or per-corner)
node_set_effectsSet the effect array (shadows, blurs)
node_apply_styleLink a node to a shared library style (paint/text/effect/grid)
node_bind_variableBind a variable to a node property, or set an explicit variable mode
node_export_visualRender a node to an image (PNG / JPG / SVG / PDF)

create — make new nodes

ToolDescription
create_shapeCreate a rectangle, ellipse, polygon, or star (type) with optional fill/stroke
create_frameCreate a frame with optional fill/stroke and full auto-layout
create_textCreate a text node with optional font size/weight/color
create_svgCreate a node from an SVG markup string
create_componentConvert an existing frame into a main component
create_instanceInstantiate a component at a position
create_component_setCombine components into a component set (variants)

style — shared styles

ToolDescription
style_listList all local styles (paint/text/effect/grid)
style_manageCreate a named style, or update one when styleId is given
style_deleteDelete a local style by id (detaches consumers, which keep their resolved values)

text — text content & typography

ToolDescription
text_set_contentBatch-set the text of one or more text nodes
text_set_styleSet any combination of typography properties on a text node

component — components & variants

ToolDescription
component_listList components, with filtering and scope options
component_manage_propertyAdd or edit a component-property definition (BOOLEAN/TEXT/INSTANCE_SWAP)
component_delete_propertyRemove a component-property definition

instance — component instances

ToolDescription
instance_set_propertySet one property on an instance (toggle, text, swap, or variant)
instance_get_overridesRead the override properties from a source instance
instance_set_overridesApply copied overrides to target instances

variable — variables & collections

ToolDescription
variable_listList variables/collections, or detail by ID; optionally scan consumers
variable_manageCreate collections and variables and set values/aliases
variable_deleteDelete variables or a collection (rejected if still in use)

annotation — Dev Mode annotations

ToolDescription
annotation_listRead annotations on a node; optionally include categories
annotation_setBatch create or update native annotations (markdown)

reaction — prototype reactions

ToolDescription
reaction_listRead prototype reactions (click flows, overlays) from nodes
reaction_updateReplace a node's reactions with a full new array

channel — connection

ToolDescription
channel_joinJoin a WebSocket channel to establish communication with the plugin

MCP Prompts

Built-in prompts guide complex multi-step design tasks:

PromptDescription
swap_overrides_instancesTransfer component instance overrides from a source to multiple targets

Best Practices

When working with Figma Edit MCP:

  1. Always join a channel first with channel_join before 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

Related MCP servers

GIgit-a2a logo

git-a2a

Active

Git module dependencies and owning-agent routing for coding agents

0
Go
MIT
View repository →

AI-powered Health Economics and Outcomes Research (HEOR) agent for literature review, cost-effectiveness modeling, and HTA dossier preparation.

8
TypeScript
MIT
View repository →

Search websites by source code, technology stack, analyze domains, and download lead lists.

View repository →

Experimental code intelligence platform for Claude Code with AST parsing and context analysis

2
TypeScript
MIT
View repository →

Query multiple LLMs simultaneously—OpenAI-compatible APIs and CLI agents—for diverse perspectives, voting, debates, and consensus.

175
TypeScript
MIT
View repository →
NENetallion MCP Lite logo

Local secret & credential checks for AI-assisted dev — runs on your machine, results redacted.

0
Python
MIT
View repository →