Bidirectional Figma MCP β AI draws UI on Figma canvas, reads designs back
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Claude Code to Figma Β· Antigravity to Figma Β· Cursor to Figma Β· Any MCP IDE to Figma
β Tested: Claude Code, Antigravity Β |Β π§ Compatible: Cursor, VS Code, Windsurf, Zed (any MCP stdio client)
Bidirectional Figma MCP bridge β let AI assistants (Claude Code, Cursor, Windsurf, Antigravity, VS Code Copilot, or any MCP-compatible IDE) draw UI directly on Figma canvas and read existing designs back as structured data, screenshots, or code-ready tokens. No Figma API key needed β works entirely over localhost.
Requires Figma Desktop β the plugin communicates with the MCP server over
localhostHTTP polling. Figma's web app does not allow localhost network access, so Figma Desktop is required.
The MCP server starts a small HTTP server bound to localhost:38451. The Figma plugin (running inside Figma Desktop) uses long polling β the server holds requests up to 8s until work arrives, flushing immediately when new ops are queued (near-realtime latency <100ms). All traffic stays on your machine β nothing is sent to any external server.
Multi-instance support (v2.3.0+): Multiple Figma files/tabs can connect simultaneously. Each plugin instance sends a sessionId, and the bridge routes operations to the correct session. Use the optional sessionId param in figma_write/figma_read to target a specific file.
| Direction | Tool | What it does |
|---|---|---|
| Write | figma_write | Draw frames, shapes, text, prototypes via JS code |
| Read | figma_read | Extract node trees, colors, typography, screenshots |
| Info | figma_status | Check plugin connection + active sessions |
| Docs | figma_docs | Get full API reference + examples |
| Rules | figma_rules | Generate design system rule sheet β tokens, typography, components |
| Feature | Description |
|---|---|
get_design_context | AI-optimized payload for a node β flex layout, token-resolved colors (var(--name)), typography with style names, component instances with variant properties. Best single call for designβReact/Vue/Swift code. |
get_component_map | List every component instance in a frame with componentSetName, variantLabel, properties, and suggestedImport path. Scaffold import statements in one call. |
get_unmapped_components | Find component instances that have no description in Figma (no code mapping yet). Prompts AI to ask user for correct import paths. |
figma_rules tool | New top-level MCP tool β aggregates color tokens, typography styles, variables (all modes), and component catalog into a single markdown rule sheet. Equivalent to official Figma MCP's create_design_system_rules. Call once at session start. |
get_css operation | figma_read get_css { nodeId } β ready-to-use CSS string (flex, typography, fill, border, shadow, opacity, transform). One call, paste into code. |
| Resolved variables | get_node_detail now resolves boundVariables IDs β { name, resolvedType, value }. No more manual ID lookup. |
| Resolved style refs | fillStyleId / textStyleId now include fillStyle: { name, hex } and textStyle: { name, fontSize, fontFamily }. |
| Instance overrides detail | overrides: [{ id, overriddenFields: ["fills","characters",...] }] β full diff vs mainComponent, not just count. |
componentSetName + variantLabel | INSTANCE nodes now expose set name ("Button") and variant label ("State=Primary, Size=Large") separately. |
insertIndex for create | figma.create({ ..., insertIndex: 2 }) β insert node at exact position in parent, not always at end. |
| Typography tokens | setupDesignTokens({ fontSizes, fonts, textStyles }) β 1 call bootstrap full typography system with variable-bound text styles. Multi-mode (Compact/Comfortable/Large) supported. |
applyTextStyle | Apply a local text style to a TEXT node by name in 1 call β auto-loads font. |
| STRING variables for fonts | applyVariable now binds fontFamily, fontStyle, characters (swap Inter β SF Pro via 1 variable). |
| Effects | effects: [{ type: "DROP_SHADOW" | "INNER_SHADOW" | "LAYER_BLUR" | "BACKGROUND_BLUR", ... }] on any node. |
| Gradient fills | fill: { type: "LINEAR_GRADIENT" | "RADIAL_GRADIENT", angle, stops } in create/modify. |
| Individual corner radii | topLeftRadius, topRightRadius, bottomLeftRadius, bottomRightRadius on FRAME/RECT. |
| 8-digit hex + rgba alpha | fill: "#FFFFFF80" or "rgba(255,255,255,0.5)" β alpha auto-applied to paint opacity. |
| SVG arc (A) + commas | VECTOR d paths accept A arc command (auto-converted to cubic BΓ©zier) and commas. |
| Icon libraries | 7 free open-source libraries, iOS-filled first: Ionicons β Fluent β Bootstrap β Phosphor β Tabler Filled β Tabler Outline β Lucide. |
| Instance overrides | figma.instantiate({ overrides: { "LayerName": { text, fill, fontSize } } }) β override props per-layer. |
| Batch delete | figma.delete({ ids: [...] }) β delete multiple nodes in 1 round-trip. |
| Prototyping | setReactions β click/hover/press β navigate/overlay/swap with Smart Animate. |
| Scroll behavior | setScrollBehavior β HORIZONTAL / VERTICAL / BOTH overflow. |
| Variants & instance swap | setComponentProperties / swapComponent β variants + instance swap. |
| Component property definitions (v2.5.24) | addComponentProperty + bindComponentProperty β create TEXT / BOOLEAN / INSTANCE_SWAP properties on master components. Instance text overrides now actually re-measure auto-layout (button grows to fit longer label). |
| Multi-instance | Multiple Figma tabs connect simultaneously via sessions. |
Full version history: see CHANGELOG.md.
Choose your platform:
Edit config file:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonEdit .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
Edit .vscode/mcp.json (project) or add to settings.json (global):
Edit ~/.codeium/windsurf/mcp_config.json:
mcp_config.json:β οΈ IMPORTANT: After adding the MCP server, you MUST restart your IDE / AI client (quit and reopen). The MCP server only loads on startup β simply saving the config file is not enough. This applies to Claude Code, Cursor, VS Code, Windsurf, and Antigravity.
β¬ Download plugin.zip β no git clone needed
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/figma-ui-mcp)<a href="https://allmcps.com/mcp/figma-ui-mcp"><img src="https://allmcps.com/api/badge/figma-ui-mcp?style=directory" alt="Figma Ui MCP on AllMCPs" /></a>