MCPcopy
hub / github.com/southleft/figma-console-mcp

github.com/southleft/figma-console-mcp @v1.33.1 sqlite

repository ↗ · DeepWiki ↗ · release v1.33.1 ↗
1,940 symbols 4,243 edges 136 files 366 documented · 19%
README

Figma Console MCP Server

MCP npm License: MIT Documentation Sponsor

Your design system as an API. Model Context Protocol server that bridges design and development—giving AI assistants complete access to Figma for extraction, creation, debugging, and bidirectional token sync.

🆕 Self-healing connection + 33-fix audit (v1.33.0, patched v1.33.1 — security dependency sweep): The Desktop Bridge now tells the truth and heals itself — the status pill derives from live connection state (it used to glow green with zero MCP servers connected), /health auto-discovery reconnects restarted servers without the manual ritual, and a version handshake banners the plugin when it needs a re-import. Underneath: a 33-fix full-codebase audit — lossless DTCG multi-mode round-trips, cross-collection alias resolution, branch-URL correctness across REST tools, cache-poisoning and CSWSH fixes. Re-import the plugin manifest one more time — the new handshake makes it the last one you have to discover on your own. See what's new →

What is this?

Figma Console MCP connects AI assistants (like Claude) to Figma, enabling:

  • 🎨 Design system extraction - Pull variables, components, and styles
  • 🔁 Bidirectional token sync - Export Figma variables to DTCG JSON + CSS custom properties; push code-side edits back to Figma. Replaces Style Dictionary and Tokens Studio's export pipeline.
  • 📸 Visual debugging - Take screenshots for context
  • ✏️ Design creation - Create UI components, frames, and layouts directly in Figma
  • 🔧 Variable management - Create, update, rename, and delete design tokens
  • 🕰 Version history & time-series awareness - List versions, diff snapshots, generate markdown changelogs, trace property/variant introduction via binary-search blame
  • ⚡ Real-time monitoring - Watch console logs from the Desktop Bridge plugin
  • 📌 FigJam boards - Create stickies, flowcharts, tables, and code blocks on collaborative boards
  • 🎞️ Slides presentations - Build and manage Figma Slides decks programmatically
  • ♿ Accessibility scanning - 14 WCAG design checks with conformance level tagging, component scorecards, axe-core code scanning, design-to-code parity
  • 🛡 Cross-MCP identity - Every tool response carries _mcp: "figma-console-mcp" and errors are prefixed [figma-console-mcp] so attribution stays unambiguous in agents running multiple Figma MCPs
  • ☁️ Cloud Write Relay - Web AI clients (Claude.ai, v0, Replit) can design in Figma via cloud pairing
  • 🔄 Four ways to connect - Remote SSE, Cloud Mode, NPX, or Local Git

⚡ Quick Start

Choose Your Setup

First, decide what you want to do:

I want to... Setup Method Time
Create and modify designs with AI NPX Setup (Recommended) ~10 min
Design from the web (Claude.ai, v0, Replit, Lovable) Cloud Mode ~5 min
Contribute to the project Local Git Setup ~15 min
Just explore my design data (read-only) Remote SSE ~2 min

⚠️ Important: Capability Differences

Capability NPX / Local Git Cloud Mode Remote SSE
Read design data
Create components & frames
Edit existing designs
Manage design tokens/variables
FigJam boards (stickies, flowcharts)
Real-time monitoring (console, selection)
Desktop Bridge plugin
Requires Node.js Yes No No
Total tools available 106 95 9

Bottom line: Remote SSE is read-only with ~38% of the tools. Cloud Mode unlocks write access from web AI clients without Node.js. NPX/Local Git gives the full 106 tools with real-time monitoring.


🚀 NPX Setup (Recommended)

Best for: Designers who want full AI-assisted design capabilities.

What you get: All 106 tools including design creation, variable management, and component instantiation.

Prerequisites

  • [ ] Node.js 18+ — Check with node --version (Download)
  • [ ] Figma Desktop installed (not just the web app)
  • [ ] An MCP client (Claude Code, Cursor, Windsurf, Claude Desktop, etc.)

Step 1: Get Your Figma Token

  1. Go to Manage personal access tokens in Figma Help
  2. Follow the steps to create a new personal access token
  3. Enter description: Figma Console MCP
  4. Set scopes: File content (Read), File versions (Read), Variables (Read), Comments (Read and write)
  5. Copy the token — you won't see it again! (starts with figd_)

Step 2: Configure Your MCP Client

Claude Code (CLI):

claude mcp add figma-console -s user -e FIGMA_ACCESS_TOKEN=figd_YOUR_TOKEN_HERE -e ENABLE_MCP_APPS=true -- npx -y figma-console-mcp@latest

Cursor / Windsurf / Claude Desktop:

Add to your MCP config file (see Where to find your config file below):

{
  "mcpServers": {
    "figma-console": {
      "command": "npx",
      "args": ["-y", "figma-console-mcp@latest"],
      "env": {
        "FIGMA_ACCESS_TOKEN": "figd_YOUR_TOKEN_HERE",
        "ENABLE_MCP_APPS": "true"
      }
    }
  }
}

📂 Where to Find Your Config File

If you're not sure where to put the JSON configuration above, here's where each app stores its MCP config:

App macOS Windows
Claude Desktop ~/Library/Application Support/Claude/claude_desktop_config.json %APPDATA%\Claude\claude_desktop_config.json
Claude Code (CLI) ~/.claude.json %USERPROFILE%\.claude.json
Cursor ~/.cursor/mcp.json %USERPROFILE%\.cursor\mcp.json
Windsurf ~/.codeium/windsurf/mcp_config.json %USERPROFILE%\.codeium\windsurf\mcp_config.json

Tip for designers: The ~ symbol means your home folder. On macOS, that's /Users/YourName/. On Windows, it's C:\Users\YourName\. You can open these files in any text editor — even TextEdit or Notepad.

Can't find the file? If it doesn't exist yet, create it. The app will pick it up on its next restart. Make sure the entire file is valid JSON (watch for missing commas or brackets).

Claude Code users: You can skip manual editing entirely. Just run the claude mcp add command above and it handles everything for you.

Step 3: Connect to Figma Desktop

Desktop Bridge Plugin: 1. Open Figma Desktop normally (no special flags needed) and open a file 2. Go to Plugins → Development → Import plugin from manifest... 3. Select ~/.figma-console-mcp/plugin/manifest.json (stable path, auto-created by the MCP server) 4. Run the plugin in your Figma file — it scans ports 9223–9232 and connects automatically to your running MCP server

Heads-up on plugin updates. Figma caches plugin files (code.js and ui.html) at the application level. The MCP server refreshes the files at ~/.figma-console-mcp/plugin/ on every startup, but Figma keeps using its cached copy until you re-import the manifest.

Re-importing is required only when a release notes entry says so — typically when the plugin adds a new method the server needs (e.g. v1.22.4, v1.10.0). For most upgrades the new server stays wire-compatible with the previous plugin, and re-importing is optional: you'll still get every functional change, just not the cosmetic plugin-side touches (status-pill copy, pluginVersion reporting).

When you do re-import: Plugins → Manage plugins → re-import ~/.figma-console-mcp/plugin/manifest.json. The stable path never changes, so it's a one-click step.

Step 4: Restart Your MCP Client

Restart your MCP client to load the new configuration.

Step 5: Test It!

Check Figma status

→ Should show connection status with active WebSocket transport

Create a simple frame with a blue background

→ Should create a frame in Figma (confirms write access!)

📖 Complete Setup Guide


For Contributors: Local Git Mode

Best for: Developers who want to modify source code or contribute to the project.

What you get: Same 106 tools as NPX, plus full source code access.

Quick Setup

# Clone and build
git clone https://github.com/southleft/figma-console-mcp.git
cd figma-console-mcp
npm install
npm run build:local

Configure Your MCP Client

Add to your config file (see Where to find your config file):

{
  "mcpServers": {
    "figma-console": {
      "command": "node",
      "args": ["/absolute/path/to/figma-console-mcp/dist/local.js"],
      "env": {
        "FIGMA_ACCESS_TOKEN": "figd_YOUR_TOKEN_HERE",
        "ENABLE_MCP_APPS": "true"
      }
    }
  }
}

Then follow NPX Steps 3-5 above.

📖 Complete Setup Guide


📡 Remote SSE (Read-Only Exploration)

Best for: Quickly evaluating the tool or read-only design data extraction.

What you get: 9 read-only tools — view data, take screenshots, read logs, design-code parity. Cannot create or modify designs.

Claude Desktop (UI Method)

  1. Open Claude Desktop → SettingsConnectors
  2. Click "Add Custom Connector"
  3. Enter:
  4. Name: Figma Console (Read-Only)
  5. URL: https://figma-console-mcp.southleft.com/sse
  6. Click "Add" — Done! ✅

OAuth authentication happens automatically when you first use design system tools.

Claude Code

⚠️ Known Issue: Claude Code's native --transport sse has a bug. Use mcp-remote instead:

claude mcp add figma-console -s user -- npx -y mcp-remote@latest https://figma-console-mcp.southleft.com/sse

💡 Tip: For full capabilities, use NPX Setup instead of Remote SSE.

Other Clients (Cursor, Windsurf, etc.)

{
  "mcpServers": {
    "figma-console": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://figma-console-mcp.southleft.com/sse"]
    }
  }
}

Upgrading to Full Capabilities

Ready for design creation? Follow the NPX Setup guide above, or try Cloud Mode if you don't want to install Node.js.

📖 Complete Setup Guide


☁️ Cloud Mode (Web AI Clients)

Best for: Using Claude.ai, v0, Replit, or Lovable to create and modify Figma designs — no Node.js required.

What you get: 95 tools including full write access — design creation, variable management, component instantiation, and all REST API tools. Only real-time monitoring (console logs, selection tracking, document changes) requires Local Mode.

Prerequisites

  • [ ] Figma Personal Access TokenCreate one here (starts with figd_)
  • [ ] Figma Desktop with the Desktop Bridge plugin installed (see Desktop Bridge setup)
  • [ ] A web AI client that supports MCP (Claude.ai, Lovable, v0, Replit, etc.)

Step 1: Add the MCP Connector

Add this endpoint to your AI platform's MCP settings:

URL: https://figma-console-mcp.southleft.com/mcp Auth: Your Figma PAT as Bearer token

In Claude.ai: Settings → Connectors → Add Custom Connector → paste the URL above. In Lovable/v0/Replit: Look for "Add MCP Server" or "Integrations" in settings → paste the URL and add your token.

Step 2: Pair the Plugin

  1. Open the Desktop Bridge plugin in Figma Desktop (Plugins → Development → Figma Desktop Bridge)
  2. Tell your AI assistant: Connect to my Figma plugin
  3. The AI gives you a 6-character pairing code (expires in 5 minutes)
  4. In the plugin: Toggle "Cloud Mode" → enter the code → click Connect
  5. You're paired! Full write access is now available

What You Can Do

Once paired, use natural language to design:

Create a card component with a header image, title, description, and action button
Set up a color token collection with Light and Dark modes
Add a "High Contrast" mode to my existing token collection

How It Works

Your AI client sends write commands through the cloud MCP server, which relays them via WebSocket to the Desktop Bridge plugin running in your Figma Desktop. The plugin executes the commands using the Figma Plugin API and returns results back through the same path.

AI Client → Cloud MCP Server → Durable Object Relay → Desktop Bridge Plugin → Figma

Variables on any plan: Cloud Mode uses the Plugin API (not the Enterprise REST API), so variable management works on Free, Pro, and Organization plans.

📖 Complete Setup Guide


📊 Installation Method Comparison

Feature NPX (Recommended) Cloud Mode Local Git Remote SSE
Setup time ~10 minutes ~5 minutes ~15 minutes ~

Extension points exported contracts — how you extend this code

IFigmaConnector (Interface)
(no doc) [4 implementers]
src/core/figma-connector.ts
ServiceWorkerGlobalScope (Interface)
* This ServiceWorker API interface represents the global execution context of a service worker. * Available only in sec
worker-configuration.d.ts
NavigationResult (Interface)
* Result of a navigateToFigma call indicating what action was taken. * Inlined from the deleted browser/base.ts (Phase
src/browser-manager.ts
RegisteredTool (Interface)
Captures tool registrations from server.tool() calls
tests/comment-tools.test.ts
Finding (Interface)
(no doc)
src/apps/design-system-dashboard/ui/mcp-app.ts
RegisteredTool (Interface)
(no doc)
tests/figma-tools.test.ts
RegisteredTool (Interface)
(no doc)
tests/library-tools.test.ts
RegisteredTool (Interface)
(no doc)
tests/slides-tools.test.ts

Core symbols most depended-on inside this repo

error
called by 218
worker-configuration.d.ts
info
called by 192
worker-configuration.d.ts
now
called by 166
worker-configuration.d.ts
get
called by 153
worker-configuration.d.ts
log
called by 136
worker-configuration.d.ts
set
called by 130
src/core/diff/version-cache.ts
keys
called by 112
worker-configuration.d.ts
replace
called by 109
worker-configuration.d.ts

Shape

Method 690
Function 637
Interface 492
Class 121

Languages

TypeScript100%

Modules by API surface

worker-configuration.d.ts689 symbols
src/core/cloud-websocket-connector.ts77 symbols
src/core/websocket-connector.ts74 symbols
src/core/figma-connector.ts72 symbols
src/core/design-code-tools.ts56 symbols
figma-desktop-bridge/code.js46 symbols
src/core/websocket-server.ts40 symbols
src/core/design-system-manifest.ts34 symbols
src/core/port-discovery.ts33 symbols
src/core/figma-api.ts29 symbols
src/core/figma-tools.ts26 symbols
src/core/tokens-tools.ts24 symbols

Dependencies from manifests, versioned

@biomejs/biome2.2.5 · 1×
@modelcontextprotocol/ext-apps1.0.1 · 1×
@modelcontextprotocol/sdk1.26.0 · 1×
@types/jest29.5.14 · 1×
@types/jsdom28.0.1 · 1×
@types/node22.10.2 · 1×
@types/uuid10.0.0 · 1×
@types/ws8.18.1 · 1×
agents0.7.1 · 1×
axe-core4.11.2 · 1×
cross-env7.0.3 · 1×

For agents

$ claude mcp add figma-console-mcp \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact