Figma Unified
БесплатноНе проверенA comprehensive MCP server that enables Claude to read, create, edit, and generate code from Figma designs. Supports design tokens, code generation to multiple
Описание
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.
README
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:
- Import the plugin in Figma (Plugins → Development → Import from manifest)
- Restart Claude Desktop (or Claude Code picks it up automatically)
Manual Setup
Click to expand manual installation steps
Prerequisites
- Node.js 18+ — Download
- Figma Desktop App — Download
- Claude Desktop — Download
- Figma Personal Access Token — Get one here
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_USERNAMEwith your actual username andfigd_YOUR_TOKEN_HEREwith 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
- Open Figma Desktop
- Go to Plugins → Development → Import plugin from manifest...
- Select:
figma-unified-mcp/figma-plugin/manifest.json - The plugin "Figma Unified MCP Bridge" is now installed
Step 7: Connect Plugin to MCP
- In Figma, go to Plugins → Development → Figma Unified MCP Bridge
- Click Connect (default settings:
localhost:18211, channelfigma) - Status should show "Connected" ✅
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. Ifunified-designis blocked by execution policy, useunified-design.cmdinstead, or run directly withnode dist/cli.js.macOS / Linux: If
unified-designisn't found afternpm link, ensure your npm global bin directory is in yourPATH:export PATH="$(npm prefix -g)/bin:$PATH" # add to ~/.zshrc or ~/.bashrcOr 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:
- Extract the file key from the URL
- Use
figma_get_fileto fetch the structure - Summarize pages, frames, and components
Example 2: Get Design Tokens
You say:
What colors and text styles are defined in file ABC123xyz?
Claude will:
- Use
figma_get_stylesto get all styles - Use
figma_get_variablesto get variables - 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:
- Use
figma_connect_pluginto connect - Use
figma_create_componentto create the component - Use
figma_create_textto add the label - Use
figma_set_fillto set the blue background - Use
figma_set_auto_layoutto add padding - Use
figma_set_corner_radiusto 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:
- Create a frame (375x812 for mobile)
- Add a logo placeholder
- Create input fields with labels
- Add a primary button
- 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:
- Use
figma_generate_reactwith the node ID - 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:
- Use
figma_generate_tokenswith format "css" - 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:
- Use
figma_create_interactionwith:- trigger:
ON_CLICK - action:
NAVIGATE - destinationId: (dashboard frame ID)
- transition:
SLIDE_IN - direction:
LEFT - duration:
300
- trigger:
Example 8: Review Comments
You say:
What comments are on file ABC123xyz? Are any unresolved?
Claude will:
- Use
figma_get_commentsto fetch all comments - 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:
- Use
figma_generate_swiftui - 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:
- Use
figma_create_variable_collectionwith modes "Light" and "Dark" - Use
figma_create_variablefor each color - Use
figma_set_variable_valueto 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:
- Use
figma_searchto find nodes named "button" - Use
figma_set_corner_radiuson each result
Example 13: Set Gradient Fill
You say:
Apply a sunset gradient (orange to purple) to the hero section background
Claude will:
- Use
figma_set_fillwith afillsarray:
{
"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:
- Use
figma_export_to_filewith:nodeId: the hero banner nodefilePath:~/Desktop/hero-banner.pngscale: 2
Example 15: Text Style Presets
You say:
Make the title use heading-xl style and the body use body-md
Claude will:
- Use
figma_set_text_stylewithpreset: "heading-xl"(96px bold) - Use
figma_set_text_stylewithpreset: "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:
- Use
figma_scan_codebaseto find React/Vue/Svelte components - Use
figma_match_componentsto fuzzy-match against Figma components - Review confidence scores with you
- Use
figma_publish_dev_resourcesto 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:
- REST API (Read) — File data, styles, components, variables (no plugin)
- REST API (Write) — Variable/token CRUD operations (no plugin needed)
- 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"
- Make sure Figma Desktop is open
- Run the plugin: Plugins → Development → Figma Unified MCP Bridge
- Click Connect
- 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:
- Port 18211 is not in use (change with
FIGMA_WS_PORTenv var) - 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
Credits
Built with:
Установка Figma Unified
У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.
▸ github.com/sso-ss/figma-unified-mcpFAQ
Figma Unified MCP бесплатный?
Да, Figma Unified MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для Figma Unified?
Нет, Figma Unified работает без API-ключей и переменных окружения.
Figma Unified — hosted или self-hosted?
Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.
Как установить Figma Unified в Claude Desktop, Claude Code или Cursor?
Открой Figma Unified на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
GitHub
PRs, issues, code search, CI status
автор: GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
автор: mcpdotdirectCompare Figma Unified with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории development
