CC Fig MCP
Provides bidirectional design control and real-time sync with Figma, enabling creation and manipulation of design elements (frames, shapes, text), component instances, styling (colors, fonts, auto layout), node operations (move, resize, clone, delete, group), and exporting designs as images.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CC Fig MCP create a blue rectangle 200px wide and 100px tall at position 50,50"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CC Fig MCP
Figma integration for Claude Code with bidirectional design control and real-time sync.
Based on claude-talk-to-figma-mcp-daisyui by morteng and claude-talk-to-figma-mcp by arinspunk.
Prerequisites
Node.js 18+
Docker & Docker Compose
pnpm
Figma Desktop
Related MCP server: Claude Talk to Figma MCP
Build from Source
git clone https://github.com/agenisea/cc-fig-mcp.git
cd cc-fig-mcp
pnpm install
pnpm run buildSetup Guide
1. Run the WebSocket Relay (Docker)
cd /path/to/cc-fig-mcp
# Build and start the relay server
docker-compose up -d --build
# Verify it's running
curl http://localhost:3055/status2. Configure Claude Code
Option A: CLI Flag
claude --mcp-config '{"figma":{"command":"node","args":["/path/to/cc-fig-mcp/dist/talk_to_figma_mcp/server.js"]}}'Option B: Edit ~/.claude.json
{
"mcpServers": {
"figma": {
"command": "node",
"args": [
"/path/to/cc-fig-mcp/dist/talk_to_figma_mcp/server.js"
]
}
}
}3. Install Figma Plugin
Open Figma Desktop
Go to Plugins → Development → Import plugin from manifest
Select:
/path/to/cc-fig-mcp/src/claude_mcp_plugin/manifest.json
4. Connect Figma Plugin
In Figma, open Plugins → CC Fig MCP Plugin
Set Port:
3055Set Channel: Your Figma project name (e.g.,
my-app-design,dashboard-ui)Click Connect
Status must show green/connected
5. Use in Claude Code
# Join the same channel as your Figma plugin (your Figma project name)
figma - join_channel("your-figma-project-name")
# Now you can use Figma tools
figma - create_rectangle(x: 0, y: 0, width: 100, height: 100)
figma - create_text(x: 50, y: 50, text: "Hello")Available Tools
Tool | Description |
| Connect to a Figma project channel |
| Get current document details |
| Get selected nodes |
| Get details about specific nodes |
| Create a frame/artboard |
| Create a rectangle |
| Create text element |
| Create an ellipse |
| Create a polygon |
| Create a star shape |
| Create a line |
| Create instance of a component |
| Change fill color |
| Change stroke color |
| Set corner radius |
| Update text content |
| Change font size |
| Change font weight |
| Configure auto layout |
| Move a node |
| Resize a node |
| Duplicate a node |
| Delete a node |
| Group nodes together |
| Ungroup nodes |
| Export node as PNG/SVG |
| Get document styles |
| Get local components |
Important Requirements
Requirement | Details |
Docker running | WebSocket relay must be up on port 3055 |
Plugin window open | Keep the Figma plugin window visible |
Connection green | Plugin must show connected status |
Same channel | Use your Figma project name as the channel in both Figma plugin and Claude Code |
Reconnect if needed | If you see timeouts, reconnect the plugin and re-join channel in Claude Code |
Troubleshooting
"Forwarded message to 0 clients"
Figma plugin disconnected. Reconnect in Figma.
"Request timed out"
Plugin not connected or wrong channel. Check plugin status and channel name matches.
"Must join a channel"
Run join_channel("your-figma-project-name") in Claude Code first.
Port 3055 already in use
Change the port in docker-compose.yml:
ports:
- "3056:3055" # Use 3056 externallyThen update the Figma plugin port to match.
Connection drops frequently
The Figma plugin may disconnect when the plugin window loses focus. Keep the plugin panel visible while working.
Architecture
Claude Code
↓ (stdio - MCP protocol)
MCP Server (server.js)
↓ (WebSocket ws://localhost:3055)
Docker Container (socket relay)
↓ (WebSocket)
Figma Plugin (inside Figma Desktop)Disclaimer
Experimental Software: This project is in active development and should be considered experimental. It is not production-ready and may contain bugs or breaking changes.
No Warranty: This software is provided "as is", without warranty of any kind, express or implied. Use at your own risk.
Third-Party Notice: This project is not affiliated with, endorsed by, or sponsored by Figma, Inc. or Anthropic, PBC. All trademarks belong to their respective owners.
License
MIT
Available Tools
50 toolsclear_variable_bindingA
Remove a variable binding from a node property, reverting to the static value.
Inputs: nodeId (required), field (required).
clone_nodeB
Clone an existing node in Figma
Inputs: nodeId (required), x, y.
create_component_instanceC
Create an instance of a component in Figma
Inputs: componentKey (required), x (required), y (required).
create_ellipseC
Create a new ellipse in Figma
Inputs: x (required), y (required), width (required), height (required), +5 more.
create_frameC
Create a new frame in Figma
Inputs: x (required), y (required), width (required), height (required), +5 more.
create_polygonC
Create a new polygon in Figma
Inputs: x (required), y (required), width (required), height (required), +6 more.
create_rectangleB
Create a new rectangle in Figma
Inputs: x (required), y (required), width (required), height (required), +2 more.
create_starC
Create a new star in Figma
Inputs: x (required), y (required), width (required), height (required), +7 more.
create_textC
Create a new text element in Figma
Inputs: x (required), y (required), text (required), fontSize, +4 more.
delete_nodeC
Delete a node from Figma
Inputs: nodeId (required).
export_node_as_imageB
Export a node as an image from Figma
Inputs: nodeId (required), format, scale.
flatten_nodeC
Flatten a node in Figma (e.g., for boolean operations or converting to path)
Inputs: nodeId (required).
get_bound_variablesB
Get all variable bindings for a node. Shows which variables are bound to fills, strokes, and other properties.
Inputs: nodeId (required).
get_local_componentsA
Get all local components from the Figma document
Inputs: no named parameters.
get_node_infoB
Get detailed information about a specific node in Figma
Inputs: nodeId (required).
get_nodes_infoA
Get detailed information about multiple nodes in Figma
Inputs: nodeIds (required).
get_remote_componentsA
Get available components from team libraries in Figma
Inputs: no named parameters.
get_selectionB
Get information about the current selection in Figma
Inputs: no named parameters.
get_styled_text_segmentsC
Get text segments with specific styling in a text node
Inputs: nodeId (required), property (required).
get_stylesA
Get all styles from the current Figma document
Inputs: no named parameters.
group_nodesC
Group nodes in Figma
Inputs: nodeIds (required), name.
insert_childC
Insert a child node inside a parent node in Figma
Inputs: parentId (required), childId (required), index.
join_channelB
Join a specific channel to communicate with Figma
Inputs: channel.
load_font_asyncC
Load a font asynchronously in Figma
Inputs: family (required), style.
move_nodeA
Move a node to a new position in Figma
Inputs: nodeId (required), x (required), y (required).
resize_nodeC
Resize a node in Figma
Inputs: nodeId (required), width (required), height (required).
resolve_variable_by_nameB
Find a variable ID by its name. Useful for binding variables when you know the semantic name (e.g., 'base-100', 'primary').
Inputs: name (required), collectionName.
scan_text_nodesB
Scan all text nodes in the selected Figma node
Inputs: nodeId (required).
set_auto_layoutC
Configure auto layout properties for a node in Figma
Inputs: nodeId (required), layoutMode (required), paddingTop, paddingBottom, +7 more.
set_corner_radiusA
Set the corner radius of a node in Figma
Inputs: nodeId (required), radius (required), corners.
set_effectsC
Set the visual effects of a node in Figma
Inputs: nodeId (required), effects (required).
set_effect_style_idC
Apply an effect style to a node in Figma
Inputs: nodeId (required), effectStyleId (required).
set_fill_colorA
Set the fill color of a node in Figma. Alpha component defaults to 1 (fully opaque) if not specified. Use alpha 0 for fully transparent.
Inputs: nodeId (required), r (required), g (required), b (required), +1 more.
set_fill_style_idA
Apply a fill style to a node in Figma. Use get_styles to find available fill style IDs.
Inputs: nodeId (required), fillStyleId (required).
set_fill_variableA
Bind a color variable to a node's fill. Use this for theme-compatible colors instead of hardcoded RGB values.
Inputs: nodeId (required), variableId (required), fillIndex.
set_font_nameB
Set the font name and style of a text node in Figma
Inputs: nodeId (required), family (required), style.
set_font_sizeB
Set the font size of a text node in Figma
Inputs: nodeId (required), fontSize (required).
set_font_weightC
Set the font weight of a text node in Figma
Inputs: nodeId (required), weight (required).
set_letter_spacingC
Set the letter spacing of a text node in Figma
Inputs: nodeId (required), letterSpacing (required), unit.
set_line_heightC
Set the line height of a text node in Figma
Inputs: nodeId (required), lineHeight (required), unit.
set_multiple_text_contentsC
Set multiple text contents parallelly in a node
Inputs: nodeId (required), text (required).
set_paragraph_spacingB
Set the paragraph spacing of a text node in Figma
Inputs: nodeId (required), paragraphSpacing (required).
set_stroke_colorC
Set the stroke color of a node in Figma (defaults: opacity 1, weight 1)
Inputs: nodeId (required), r (required), g (required), b (required), +2 more.
set_stroke_style_idB
Apply a stroke style to a node in Figma. Use get_styles to find available stroke style IDs.
Inputs: nodeId (required), strokeStyleId (required).
set_stroke_variableB
Bind a color variable to a node's stroke. Use this for theme-compatible border colors.
Inputs: nodeId (required), variableId (required), strokeIndex.
set_text_caseC
Set the text case of a text node in Figma
Inputs: nodeId (required), textCase (required).
set_text_contentA
Set the text content of an existing text node in Figma
Inputs: nodeId (required), text (required).
set_text_decorationC
Set the text decoration of a text node in Figma
Inputs: nodeId (required), textDecoration (required).
set_text_style_idA
Apply a text style to a text node in Figma. Use get_styles to find available text style IDs.
Inputs: nodeId (required), textStyleId (required).
ungroup_nodesC
Ungroup nodes in Figma
Inputs: nodeId (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 50 tools
Most tools have distinct purposes targeting specific Figma operations like shape creation, styling, or node management, with clear boundaries. However, some overlap exists, such as set_fill_color, set_fill_style_id, and set_fill_variable, which could cause confusion about when to use each for fill operations, though descriptions help clarify their differences.
Tool names follow a highly consistent verb_noun pattern throughout, such as create_rectangle, get_node_info, and set_font_size. This predictability makes it easy for agents to understand and select tools based on their intended actions and targets in the Figma domain.
With 50 tools, the count is excessive for a typical MCP server, leading to cognitive overload and potential inefficiency. While Figma is a complex domain, this many tools suggests over-fragmentation of operations, such as having multiple separate tools for text styling (e.g., set_font_size, set_font_weight) that could be consolidated.
The tool set provides comprehensive coverage of Figma operations, including CRUD for nodes (create, delete, move, resize), styling (fills, strokes, effects, text properties), component management, variable handling, and utilities like export and grouping. No obvious gaps are present for core design workflows in the domain.
Maintenance
Related MCP Connectors
Compare Figma designs against live websites and get visual + content QA reports, from inside Claude.
The Figma MCP server brings Figma design context directly into your AI workflow.
Connect AI coding agents to Anima Playground, Figma, and your design system.
Access and maintain design system docs, tokens, components, skills, and contexts across any project.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables Claude Desktop and other AI tools to interact directly with Figma, allowing for powerful AI-assisted design capabilities through natural language commands.92679 npm676MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants like Claude Desktop to interact directly with Figma, allowing natural language commands to create, modify, and analyze designs including shapes, text, components, and layouts in real-time.MIT
- AlicenseNot gradedqualityBmaintenanceEnables Claude to read and manipulate Figma documents in real-time through 62 operations including creating shapes, modifying styles, managing components, and exporting assets via a WebSocket bridge to a Figma plugin.77 npm85MIT
- FlicenseNot gradedqualityNot gradedmaintenanceAn MCP bridge that enables Claude Code to directly control Figma via a WebSocket-connected plugin. It allows users to create elements, modify styles, manage layouts, and interact with Figma designs using natural language commands.1,058 npm-