figma-unified-mcp

figma-unified-mcp

A comprehensive MCP server that enables Claude to read, create, edit, and generate code from Figma designs. Supports design tokens, code generation to multiple frameworks, and accessibility checks.

Category
Visit Server

README

Figma Unified MCP

A comprehensive Model Context Protocol (MCP) server that enables Claude to read, create, edit, and generate code from Figma designs.

Features

  • 🔍 Read — Get file structure, nodes, styles, components, variables, and comments
  • ✏️ Create — Make frames, shapes, text, components, instances, vector paths, SVG imports, and pages
  • 🎨 Modify — Change colors, gradients, sizes, positions, auto-layout, effects, and more
  • 🎭 Prototype — Add interactions, flows, transitions, and overlays
  • 🧩 Variables — Create and manage design tokens via REST API (no plugin needed)
  • 💻 Code Generation — Export to CSS, React, SwiftUI, HTML, and Tailwind
  • 📱 Prototype to HTML — Generate interactive HTML prototypes from Figma designs
  • Accessibility — Check color contrast and touch target sizes
  • 📐 Layout Validation — Verify spacing, alignment, and overflow
  • 🎯 Boolean Operations — Union, subtract, intersect, exclude shapes
  • 📤 Export — Export nodes as PNG/JPG/SVG/PDF to local files or base64
  • 🔗 Code Connect — Bridge Figma components to code via fuzzy matching and Dev Mode links
  • Text Presets — Apply 16 built-in typography presets (display, heading, body, label, etc.)
  • 🌈 Gradient Fills — Set linear, radial, angular, and diamond gradient fills

Installation

Quick Setup (Recommended)

macOS / Linux:

./setup.sh

Windows:

.\setup.bat
  • For Claude Code users: stop any running session first with /exit, then run the setup script, then relaunch.

This single command will:

  • ✅ Check Node.js is installed (Windows: auto-install via winget)
  • ✅ Install all dependencies
  • ✅ Build the MCP server and Figma plugin
  • ✅ Configure Claude Desktop, Claude Code, or Cursor automatically

After the script finishes, just:

  1. Import the plugin in Figma (Plugins → Development → Import from manifest)
  2. Restart Claude Desktop (or Claude Code picks it up automatically)

Manual Setup

<details> <summary>Click to expand manual installation steps</summary>

Prerequisites

Step 1: Clone or Download

git clone https://github.com/sso-ss/figma-unified-mcp.git
cd figma-unified-mcp

Step 2: Install Dependencies

cd figma-unified-mcp
npm install

Step 3: Build the MCP Server

npm run build

This creates dist/server.js — the compiled MCP server.

Step 4: Configure Your Claude Client

Option A: Claude Desktop

Edit your Claude Desktop configuration file:

macOS:

nano ~/Library/Application\ Support/Claude/claude_desktop_config.json

Windows:

%APPDATA%\Claude\claude_desktop_config.json

Add the Figma MCP server:

macOS / Linux:

{
  "mcpServers": {
    "figma-unified-mcp": {
      "command": "node",
      "args": ["/Users/YOUR_USERNAME/Desktop/Claude/mcp/figma-unified-mcp/dist/server.js"],
      "env": {
        "FIGMA_ACCESS_TOKEN": "figd_YOUR_TOKEN_HERE"
      }
    }
  }
}

Windows:

{
  "mcpServers": {
    "figma-unified-mcp": {
      "command": "node",
      "args": ["C:\\Users\\YOUR_USERNAME\\Desktop\\Claude\\mcp\\figma-unified-mcp\\dist\\server.js"],
      "env": {
        "FIGMA_ACCESS_TOKEN": "figd_YOUR_TOKEN_HERE"
      }
    }
  }
}

⚠️ Replace YOUR_USERNAME with your actual username and figd_YOUR_TOKEN_HERE with your Figma Personal Access Token.

Option B: Claude Code (CLI)

macOS / Linux:

claude mcp add figma-unified-mcp \
  -e FIGMA_ACCESS_TOKEN=figd_YOUR_TOKEN_HERE \
  -- node /Users/YOUR_USERNAME/Desktop/Claude/mcp/figma-unified-mcp/dist/server.js

Windows (PowerShell):

claude mcp add figma-unified-mcp `
  -e FIGMA_ACCESS_TOKEN=figd_YOUR_TOKEN_HERE `
  -- node C:\Users\YOUR_USERNAME\Desktop\Claude\mcp\figma-unified-mcp\dist\server.js

Or add it to .claude/settings.json:

macOS / Linux:

{
  "mcpServers": {
    "figma-unified-mcp": {
      "command": "node",
      "args": ["/Users/YOUR_USERNAME/Desktop/Claude/mcp/figma-unified-mcp/dist/server.js"],
      "env": {
        "FIGMA_ACCESS_TOKEN": "figd_YOUR_TOKEN_HERE"
      }
    }
  }
}

Windows:

{
  "mcpServers": {
    "figma-unified-mcp": {
      "command": "node",
      "args": ["C:\\Users\\YOUR_USERNAME\\Desktop\\Claude\\mcp\\figma-unified-mcp\\dist\\server.js"],
      "env": {
        "FIGMA_ACCESS_TOKEN": "figd_YOUR_TOKEN_HERE"
      }
    }
  }
}

Step 5: Restart Your Claude Client

Quit and reopen Claude Desktop, or restart Claude Code to load the MCP server.

Step 6: Install the Figma Plugin

  1. Open Figma Desktop
  2. Go to Plugins → Development → Import plugin from manifest...
  3. Select: figma-unified-mcp/figma-plugin/manifest.json
  4. The plugin "Figma Unified MCP Bridge" is now installed

Step 7: Connect Plugin to MCP

  1. In Figma, go to Plugins → Development → Figma Unified MCP Bridge
  2. Click Connect (default settings: localhost:18211, channel figma)
  3. Status should show "Connected" ✅

</details>


Verification

In Claude Desktop or Claude Code, try:

What Figma tools do you have available?

Claude should list the tools available for your profile. You can also check the logs:

tail -f ~/Library/Logs/Claude/mcp-server-figma-unified-mcp.log

CLI — unified-design

A standalone command-line interface that uses the same REST API + plugin bridge as the MCP server, but without the MCP overhead. No plugin needed for read operations.

Setup

cd figma-unified-mcp
npm install
npm run build
npm link           # makes 'unified-design' available globally

Windows note: PowerShell 5.1 does not support &&. Use ; to chain commands (e.g., npm install; npm run build) or run them on separate lines. If unified-design is blocked by execution policy, use unified-design.cmd instead, or run directly with node dist/cli.js.

macOS / Linux: If unified-design isn't found after npm link, ensure your npm global bin directory is in your PATH:

export PATH="$(npm prefix -g)/bin:$PATH"  # add to ~/.zshrc or ~/.bashrc

Or run directly with node dist/cli.js.

Plugin Bridge — Coexisting with MCP Server

Canvas write commands (e.g., create-frame, set-fill) require the Figma plugin. The CLI automatically detects how to connect:

  • MCP server running? → CLI connects as a client to the existing bridge (no port conflict)
  • No server running? → CLI starts its own bridge server and waits for the plugin

This means you can use the CLI alongside Claude Desktop / Cursor without stopping the MCP server.

Authentication

# Option 1: Environment variable
export FIGMA_ACCESS_TOKEN=figd_xxx

# Option 2: Config file (~/.figmarc)
unified-design config set accessToken figd_xxx

# Option 3: Auto-discovery (reads from Claude Desktop / Cursor MCP config)
# Just works — no setup needed if you already configured MCP

Quick start

# Set a default file so you don't need --file-key every time
unified-design config set defaultFileKey ABC123

# Read operations (REST API — no plugin needed)
unified-design get-file                          # File tree (depth 2)
unified-design get-node --node-id 123:456        # Single node details
unified-design search --query "Button"            # Find nodes by name
unified-design get-styles                        # All styles
unified-design get-variables                     # All variables/tokens
unified-design screenshot --node-id 123:456      # Export as PNG
unified-design export-svg --node-id 123:456      # Export as SVG
unified-design audit                             # Design quality audit

# Paste Figma URLs directly
unified-design get-node --url 'https://figma.com/design/ABC123/File?node-id=1-2'

# Variable operations (REST API — no plugin needed)
unified-design create-variable-collection --name "Colors" --modes light,dark
unified-design create-variable --collection-id <id> --name primary --type COLOR --value "#3B82F6"
unified-design set-variable-value --variable-id <id> --mode-id <id> --value "#1E40AF"
unified-design update-variable --variable-id <id> --name "brand-primary"
unified-design delete-variable --variable-id <id>

# Canvas write operations (need Figma plugin running)
unified-design create-frame --name "Header" --width 375 --height 64
unified-design set-fill --node-id 1:2 --color "#3B82F6"
unified-design set-text --node-id 1:3 --text "Hello World"
unified-design move-node --node-id 1:2 --x 100 --y 200

Output control

# Compact JSON (auto-enabled when piping to another command)
unified-design get-styles --compact

# Select specific fields (dot-notation, comma-separated)
unified-design get-file --fields "document.name,document.children"

# Save to file
unified-design get-styles --output styles.json

# Chain with jq
unified-design get-styles | jq '.styles[].name'

Short aliases

Alias Command Alias Command
file get-file mv move-node
node get-node rm delete-node
find search cp clone-node
styles get-styles fill set-fill
vars get-variables text set-text
snap screenshot frame create-frame
svg export-svg rect create-rectangle
a11y check-accessibility comp create-component
new-var create-variable set-var set-variable-value
del-var delete-variable new-collection create-variable-collection

Interactive REPL

Run without arguments for an interactive session:

unified-design
# >
# unified-design ❯ file
# unified-design ❯ find --query "Logo"
# unified-design ❯ audit --json
# unified-design ❯ /exit

Using CLI as an AI Agent Backend

The CLI is optimized for use with Claude Code and other AI coding agents. When piped (non-TTY), output is automatically compact JSON — ~90% fewer tokens than MCP tool schemas.

Add this to your project's CLAUDE.md:

## Figma CLI
Use `unified-design` CLI to read and modify Figma designs:
- `unified-design get-file --file-key <key> --compact`
- `unified-design search --file-key <key> --query <name>`
- `unified-design screenshot --file-key <key> --node-id <id>`

See CLAUDE.md for the full agent instructions.


Tool Profiles

Control how many tools are registered via the TOOL_PROFILE environment variable:

Profile Tools Token cost Best for
minimal 43 ~3,500/msg Claude $20 plan, daily design work
standard 71 ~6,500/msg Prototyping + variables + code connect + advanced modify
full 112 ~9,800/msg Full power, all features

Set in your MCP config:

{
  "env": {
    "FIGMA_ACCESS_TOKEN": "figd_...",
    "TOOL_PROFILE": "standard"
  }
}

Non-full profiles include figma_run escape hatch to access excluded tools on demand.


Available Tools

Connection Tools (3)

Tool Description
figma_status Check MCP server and plugin connection status
figma_connect_plugin Connect to the Figma plugin via WebSocket
figma_send_command Send a raw command to the Figma plugin

Utility Tools (3)

Tool Description
figma_cache Inspect or clear the in-memory library/component/style cache
figma_run Escape hatch to run any tool by name (for non-full profiles)
figma_skill Run a registered agent skill/prompt by name

Read Tools (32)

Tool Description
figma_get_file Get full file structure and metadata
figma_get_node Get a specific node by ID
figma_get_nodes Get multiple nodes by IDs
figma_get_styles Get styles (fileKey → REST API, omit → plugin local styles)
figma_get_components Get components (source: file/local/library)
figma_get_variables Get all variables/design tokens
figma_get_comments Get all comments on a file
figma_post_comment Add a comment to a file
figma_search Search for nodes by name or type
figma_get_selection Get currently selected nodes in Figma
figma_get_team_components Get published components from team libraries
figma_get_team_styles Get published styles from team libraries
figma_get_component Get details of a specific component by key
figma_get_style Get details of a specific style by key
figma_get_library_items_used Analyze which external library items a file uses
figma_get_file_versions Get version history of a file
figma_get_team_projects Get all projects in a team
figma_get_project_files Get all files in a project
figma_scan_text_nodes Scan text nodes with chunking for large designs
figma_scan_nodes_by_types Find nodes by type (FRAME, TEXT, etc.)
figma_set_focus Focus on a node and scroll viewport
figma_set_selections Select multiple nodes and scroll to view
figma_get_library_collections Get enabled library variable collections
figma_get_library_variables Get variables from a library collection
figma_get_viewport Get current viewport position and zoom
figma_import_component_by_key Import a published component by key
figma_import_style_by_key Import library styles by key (batch supported)
figma_get_code_connect_map Get code connect mappings for components
figma_get_design_system_rules Extract design system rules from current file
figma_export_png Export a node as PNG/SVG/PDF via plugin
figma_create_page Create a new page
figma_switch_page Switch to a page by name, ID, or index

Visual/Export Tools (4)

Tool Description
figma_get_images Export nodes as PNG/JPG/SVG/PDF via REST API
figma_screenshot Screenshot one or more nodes (nodeId or nodeIds[]) as base64
figma_export_svg Export a node as SVG code
figma_export_to_file Export a node to a local file (PNG/JPG/SVG/PDF) with configurable scale

Create Tools (10)

Tool Description
figma_create_frame Create a new frame/artboard
figma_create_rectangle Create a rectangle shape
figma_create_ellipse Create an ellipse/circle
figma_create_text Create a text layer
figma_create_component Create a reusable component
figma_create_instance Create an instance of a component
figma_create_line Create a line
figma_create_path Create a vector path from points (straight or smooth curves)
figma_create_from_svg Create a vector node from raw SVG markup
figma_batch Batch multiple create/modify/variable ops in one round-trip

Modify Tools (19)

Tool Description
figma_move_node Move a node to x, y position
figma_resize_node Resize a node's width/height
figma_set_fill Set fills — solid color, linear/radial/angular/diamond gradients, or images
figma_set_stroke Set border/stroke color and weight
figma_set_opacity Set node opacity
figma_set_visible Show or hide a node
figma_set_corner_radius Set border radius
figma_set_text_content Change text (single nodeId+content or batch updates[])
figma_set_text_style Set font size, weight, family — or use 16 built-in presets (e.g., heading-xl, body-md)
figma_rename_node Rename a node
figma_delete_node Delete nodes (single nodeId or batch nodeIds[])
figma_clone_node Clone/duplicate a node with offset
figma_set_auto_layout Configure auto-layout (flexbox)
figma_set_effects Add shadows, blurs, glows
figma_group_nodes Group multiple nodes
figma_set_constraints Set resize constraints
figma_reparent_node Move node to different parent
figma_get_annotations Get annotations on nodes
figma_set_annotation Set annotation (single nodeId+label or batch annotations[])

Instance Override Tools (2)

Tool Description
figma_get_instance_overrides Extract instance overrides
figma_set_instance_overrides Apply overrides to instances

Variable/Token Tools (10) — REST API, no plugin needed

Tool Description Transport
figma_create_variable_collection Create a variable collection REST API
figma_create_variable Create a design token variable REST API
figma_set_variable_value Set variable value for a mode REST API
figma_update_variable Update variable name/description/scopes REST API
figma_delete_variable Delete a variable REST API
figma_delete_variable_collection Delete a variable collection REST API
figma_bind_variable Bind a variable to a node property Plugin
figma_create_style Create a reusable style Plugin
figma_apply_style Apply a style to a node by ID or by name Plugin
figma_import_style_by_key Import library styles by key (batch supported) Plugin

Prototype Tools (10)

Tool Description
figma_create_interaction Add click/hover interaction
figma_remove_interactions Remove all interactions from node
figma_create_flow Create a prototype flow starting point
figma_remove_flow Remove a flow starting point
figma_get_flows List all flows on current page
figma_set_default_transition Set default transition for frame
figma_setup_overlay Configure overlay behavior
figma_set_scroll_behavior Set scroll direction
figma_get_interactions Get all interactions on a node
figma_present_prototype Prepare to present prototype

Design Quality Tools (3)

Tool Description
figma_boolean_operation Boolean ops (union, subtract, intersect, exclude)
figma_check_accessibility Check contrast ratios and touch target sizes
figma_validate_layout Verify spacing, alignment, and overflow

Code Connect Tools (4)

Tool Description Profile
figma_scan_codebase Scan a local directory for UI components (React, Vue, Svelte, Angular, Swift, Flutter, Compose) standard+
figma_match_components Fuzzy-match Figma components to code components with confidence scores standard+
figma_publish_dev_resources Publish code file URLs to Figma Dev Mode (bulk) standard+
figma_get_dev_resources Get existing dev resource links from a Figma file standard+

Code Generation Tools (9)

Tool Description Profile
figma_generate_css Generate CSS from node styles full
figma_generate_react Generate React component full
figma_generate_swiftui Generate SwiftUI view full
figma_generate_html Generate semantic HTML full
figma_generate_tailwind_config Generate Tailwind config full
figma_generate_tokens Export design tokens full
figma_generate_handoff_spec Generate developer handoff spec full
figma_codegen_bundle Generate a complete code bundle (HTML + CSS + JS) standard+
figma_analyze_for_codegen Analyze for best codegen approach full

Available Agent Skills (14)

See skills.md for all 14 agent skills and their parameters.


Usage Examples

Example 1: Read a Figma File

You say:

Can you analyze my Figma file? The URL is:
https://www.figma.com/design/ABC123xyz/MyDesign

Claude will:

  1. Extract the file key from the URL
  2. Use figma_get_file to fetch the structure
  3. Summarize pages, frames, and components

Example 2: Get Design Tokens

You say:

What colors and text styles are defined in file ABC123xyz?

Claude will:

  1. Use figma_get_styles to get all styles
  2. Use figma_get_variables to get variables
  3. Present them in an organized list

Example 3: Create a Button Component

You say:

Create a primary button component in Figma with:
- Blue background (#3B82F6)
- White text "Click me"
- 16px padding
- 8px border radius

Claude will:

  1. Use figma_connect_plugin to connect
  2. Use figma_create_component to create the component
  3. Use figma_create_text to add the label
  4. Use figma_set_fill to set the blue background
  5. Use figma_set_auto_layout to add padding
  6. Use figma_set_corner_radius to round corners

Example 4: Build a Login Screen

You say:

Design a mobile login screen with email, password fields, and a sign in button.

Claude will:

  1. Create a frame (375x812 for mobile)
  2. Add a logo placeholder
  3. Create input fields with labels
  4. Add a primary button
  5. Apply consistent spacing with auto-layout

Example 5: Generate React Code

You say:

Generate a React component from the card in node 123:456

Claude will:

  1. Use figma_generate_react with the node ID
  2. Return a complete React component with Tailwind classes

Example output:

interface CardProps {
  text?: string;
}

export function Card(props: CardProps) {
  return (
    <div className="flex flex-col gap-4 p-6 bg-white rounded-xl shadow-lg">
      <h2 className="text-xl font-semibold">Card Title</h2>
      <p className="text-gray-600">Card description goes here</p>
      <button className="bg-blue-500 text-white px-4 py-2 rounded-lg">
        Action
      </button>
    </div>
  );
}

Example 6: Export Design Tokens

You say:

Export all design tokens from my file as CSS variables

Claude will:

  1. Use figma_generate_tokens with format "css"
  2. Return CSS custom properties

Example output:

:root {
  --color-primary: #3B82F6;
  --color-secondary: #10B981;
  --color-neutral-100: #F3F4F6;
  --color-neutral-900: #111827;
  --font-size-heading: 24px;
  --font-size-body: 16px;
  --spacing-sm: 8px;
  --spacing-md: 16px;
  --spacing-lg: 24px;
}

Example 7: Add Prototype Interaction

You say:

Make the login button navigate to the Dashboard frame when clicked, with a slide animation

Claude will:

  1. Use figma_create_interaction with:
    • trigger: ON_CLICK
    • action: NAVIGATE
    • destinationId: (dashboard frame ID)
    • transition: SLIDE_IN
    • direction: LEFT
    • duration: 300

Example 8: Review Comments

You say:

What comments are on file ABC123xyz? Are any unresolved?

Claude will:

  1. Use figma_get_comments to fetch all comments
  2. List each comment with:
    • Author name
    • Message content
    • Created date
    • Resolved status

Example 9: Audit Design System

You say:

/audit_design_system

fileKey: ABC123xyz

Claude will run a comprehensive audit checking:

  • ✅ Color consistency (are colors using styles/variables?)
  • ✅ Typography scale (is there a defined type scale?)
  • ✅ Spacing consistency (8px grid?)
  • ✅ Component usage (are components properly structured?)
  • ✅ Variable coverage (what's tokenized vs hardcoded?)

Example 10: Generate SwiftUI

You say:

Convert the profile card to SwiftUI code

Claude will:

  1. Use figma_generate_swiftui
  2. Return SwiftUI code

Example output:

import SwiftUI

struct ProfileCard: View {
    var body: some View {
        VStack(spacing: 16) {
            Image("avatar")
                .resizable()
                .frame(width: 80, height: 80)
                .clipShape(Circle())
            
            Text("John Doe")
                .font(.system(size: 20))
                .fontWeight(.semibold)
            
            Text("Product Designer")
                .font(.system(size: 14))
                .foregroundColor(.gray)
        }
        .padding(24)
        .background(Color.white)
        .cornerRadius(16)
    }
}

struct ProfileCard_Previews: PreviewProvider {
    static var previews: some View {
        ProfileCard()
    }
}

Example 11: Create Variables/Tokens

You say:

Create a color variable collection with primary, secondary, and neutral colors that support light and dark modes

Claude will:

  1. Use figma_create_variable_collection with modes "Light" and "Dark"
  2. Use figma_create_variable for each color
  3. Use figma_set_variable_value to set values per mode

Example 12: Search and Modify

You say:

Find all buttons in my file and change their corner radius to 12px

Claude will:

  1. Use figma_search to find nodes named "button"
  2. Use figma_set_corner_radius on each result

Example 13: Set Gradient Fill

You say:

Apply a sunset gradient (orange to purple) to the hero section background

Claude will:

  1. Use figma_set_fill with a fills array:
{
  "nodeId": "1:23",
  "fills": [{
    "type": "GRADIENT_LINEAR",
    "gradientStops": [
      { "position": 0, "color": { "r": 1, "g": 0.5, "b": 0, "a": 1 } },
      { "position": 1, "color": { "r": 0.6, "g": 0.2, "b": 0.8, "a": 1 } }
    ]
  }]
}

Example 14: Export to Local File

You say:

Export the hero banner to my Desktop as a PNG at 2x scale

Claude will:

  1. Use figma_export_to_file with:
    • nodeId: the hero banner node
    • filePath: ~/Desktop/hero-banner.png
    • scale: 2

Example 15: Text Style Presets

You say:

Make the title use heading-xl style and the body use body-md

Claude will:

  1. Use figma_set_text_style with preset: "heading-xl" (96px bold)
  2. Use figma_set_text_style with preset: "body-md" (16px regular)

Available presets: display, heading-xl/lg/md/sm/xs, body-xl/lg/md/sm/xs, label-lg/md/sm, caption, overline


Example 16: Code Connect — Link Components to Code

You say:

Scan my project at ~/my-app/src and link matching components to Figma

Claude will:

  1. Use figma_scan_codebase to find React/Vue/Svelte components
  2. Use figma_match_components to fuzzy-match against Figma components
  3. Review confidence scores with you
  4. Use figma_publish_dev_resources to attach GitHub URLs to Figma Dev Mode

Developers then see code links directly in Figma's Dev Mode panel.


Architecture

┌─────────────────┐     stdio      ┌──────────────────┐
│  Claude Client  │◄──────────────►│  MCP Server      │
└─────────────────┘                │  (Node.js)       │
                                   └────────┬─────────┘
                                            │
                    ┌───────────────────────┼───────────────────────┐
                    │                       │                       │
                    ▼                       ▼                       ▼
            ┌───────────────┐       ┌───────────────┐       ┌───────────────┐
            │  REST API     │       │  REST API     │       │  WebSocket    │
            │  (Read)       │       │  (Write)      │       │  Server:18211 │
            └───────┬───────┘       └───────┬───────┘       └───────┬───────┘
                    │                       │                       │
                    ▼                       ▼                       ▼
            ┌───────────────┐       ┌───────────────┐       ┌───────────────┐
            │  Figma API    │       │  Figma API    │       │ Figma Plugin  │
            │  api.figma.com│       │  api.figma.com│       │ (in Figma)    │
            └───────────────┘       └───────────────┘       └───────────────┘
            
            Read operations         Variable writes         Canvas writes
            (files, styles,         (create, update,        (create frames,
             components)             delete tokens)          modify nodes)
                                    NO PLUGIN NEEDED        PLUGIN REQUIRED

Three data paths:

  1. REST API (Read) — File data, styles, components, variables (no plugin)
  2. REST API (Write) — Variable/token CRUD operations (no plugin needed)
  3. WebSocket + Plugin — Canvas manipulation (creating/modifying nodes)

No-plugin mode: All read operations + variable management work with just a Figma access token. You only need the plugin for canvas writes (frames, shapes, text, auto-layout, prototyping).


Troubleshooting

"Plugin not connected"

  1. Make sure Figma Desktop is open
  2. Run the plugin: Plugins → Development → Figma Unified MCP Bridge
  3. Click Connect
  4. Verify status shows "Connected"

"FIGMA_ACCESS_TOKEN not set"

Add your token to claude_desktop_config.json:

"env": {
  "FIGMA_ACCESS_TOKEN": "figd_xxxxx"
}

"WebSocket connection failed"

The MCP server starts a WebSocket on port 18211. Make sure:

  1. Port 18211 is not in use (change with FIGMA_WS_PORT env var)
  2. No firewall blocking localhost connections

Check Logs

macOS:

# MCP server logs
tail -f ~/Library/Logs/Claude/mcp-server-figma-unified-mcp.log

# Claude Desktop logs
tail -f ~/Library/Logs/Claude/mcp.log

Windows (PowerShell):

# MCP server logs
Get-Content "$env:APPDATA\Claude\Logs\mcp-server-figma-unified-mcp.log" -Wait

# Claude Desktop logs
Get-Content "$env:APPDATA\Claude\Logs\mcp.log" -Wait

Development

Rebuild after changes

# MCP server + CLI
npm run build

# Figma plugin (use ; instead of && on Windows PowerShell)
cd figma-plugin; npm run build

# Run tests
npm test

Running tests

npm test              # Run all tests once
npm run test:watch    # Watch mode

Project Structure

figma-unified-mcp/
├── src/
│   ├── server.ts              # MCP server entry
│   ├── cli.ts                 # CLI entry (unified-design)
│   ├── config.ts              # Configuration & URL parsing
│   ├── types.ts               # TypeScript types
│   ├── cli/
│   │   ├── colors.ts          # ANSI color utilities
│   │   └── audit.ts           # Design audit command
│   ├── transport/
│   │   ├── rest-client.ts     # Figma REST API
│   │   └── plugin-bridge.ts   # WebSocket bridge to plugin
│   ├── tools/
│   │   ├── shared.ts          # Shared helpers (toolSuccess, toolError)
│   │   ├── tool-profiles.ts   # Profile filtering (minimal/standard/full)
│   │   ├── connection.ts      # Connection tools
│   │   ├── read.ts            # Read tools (35+)
│   │   ├── visual.ts          # Export tools
│   │   ├── create.ts          # Create tools
│   │   ├── modify.ts          # Modify tools
│   │   ├── variables.ts       # Variable tools
│   │   ├── prototype.ts       # Prototype tools
│   │   ├── codegen.ts         # Code generation tools
│   │   ├── code-connect.ts    # Code Connect tools (scan, match, publish)
│   │   ├── skill.ts           # Skill tool runner
│   │   └── figma-run.ts       # Escape hatch for non-full profiles
│   └── prompts/
│       ├── index.ts           # Agent skill registration
│       └── screen-patterns.ts # UX pattern data for design_screen skill
├── tests/
│   ├── config.test.ts         # URL parsing & config tests
│   ├── shared.test.ts         # Shared helper tests
│   ├── tool-profiles.test.ts  # Profile filtering tests
│   └── code-connect.test.ts   # Code Connect fuzzy matching & scanner tests
├── figma-plugin/
│   ├── manifest.json          # Plugin manifest
│   ├── code.ts                # Plugin logic
│   ├── ui.html                # Plugin UI
│   └── code.js                # Compiled plugin
├── CLAUDE.md                  # Agent instructions for Claude Code
├── skills.md                  # All 14 agent skills documentation
├── package.json
├── tsconfig.json
└── tsup.config.ts

License

MIT


Author

@sso-ss

Credits

Built with:

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured