figma_status
Check whether the Figma plugin bridge is connected. Always call this first to confirm the plugin is running before any other tool.
无需输入参数。

io.github.TranHoaiHung由 GitHub 账号 TranHoaiHung 发布v2.5.30更新于 Oct 26, 2026
Bidirectional Figma MCP — AI draws UI on Figma canvas, reads designs back
发布方自己的服务:Figma MCP Server
双向 Figma 桥接服务,让 AI 助手在 Figma 画布上绘制和修改界面,并把现有设计读回为结构化数据、截图或设计令牌。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
参照 仓库 中的启动说明。
[figma-ui-mcp — Claude Code to Figma, AI to Figma, MCP Figma Bridge]
[npm version] [MCP Registry] [License: MIT] [GitHub stars] [MCPVault: claimed]
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.
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
plugin.zip anywhere on your machinemanifest.json from the unzipped folderThe plugin UI shows a green dot when the MCP server is connected.
The Figma plugin does not auto-update — re-linking (Step 3) is required whenever the plugin changes.
Tell your AI assistant to connect:
The AI will call figma_status and confirm:
If you see "Plugin not connected", make sure the Figma plugin is running (Step 2).
Once connected, just describe what you want in natural language:
The AI will automatically:
figma_docs to load the API reference and design rulesfigma_read get_page_nodes to understand the current canvasfigma_write to create the design on your Figma canvasfigma_read screenshot to verify the result"dark theme", "glassmorphism", "minimal white" gives the AI clear direction"mobile" (390×844), "tablet" (768×1024), "desktop" (1440×900)"fix the spacing" or "make the buttons bigger" — the AI reads and modifies existing nodes"improve this design" — the AI reads your selection first"Now draw the signup screen next to the login screen" — the AI positions frames side by sideAsk Claude: "Draw a dark dashboard with a sidebar, header, and 4 KPI cards"
Claude calls figma_write with code like:
Ask Claude: "Read my selected frame and convert it to Tailwind CSS"
Claude calls figma_read with operation: "get_selection", receives the full node tree,
then generates corresponding code.
Returns a base64 PNG Claude can analyze and describe.
figma_write)create / modify — advanced props available on any node:
applyVariable supported fields — bind FLOAT/COLOR/STRING/BOOLEAN variables to:
fill, strokeopacity, width, height, strokeWeightcornerRadius + individual topLeftRadius / topRightRadius / bottomLeftRadius / bottomRightRadiuspaddingTop, paddingBottom, paddingLeft, paddingRight, itemSpacing, counterAxisSpacingfontSize, letterSpacing, lineHeight, paragraphSpacing, paragraphIndentfontFamily, fontStyle, characters — swap Inter → SF Pro via 1 variablevisibleloadIcon fallback priority (filled-first, iOS style preferred):
Ionicons (iOS filled) → Fluent UI (Win11 filled) → Bootstrap (filled) → Phosphor (filled) → Tabler Filled (4,500+) → Tabler Outline → Lucide (outline fallback)
Free replacement for paid Icons8 ios-filled. Ionicons naming quirks: Bell→notifications, Back→chevron-back, Clock→time, Fire→flame, Lightning→flash, Lock→lock-closed.
Supported transitions: SMART_ANIMATE, DISSOLVE, MOVE_IN, MOVE_OUT, PUSH, SLIDE_IN, SLIDE_OUT, INSTANT
Supported easings: LINEAR, EASE_IN, EASE_OUT, EASE_IN_AND_OUT, CUSTOM_BEZIER
figma_read)includeHidden param (boolean, default false) — available on get_selection, get_design, search_nodes, scan_design. When false (default), nodes with visible: false are skipped. Pass true to include hidden layers.
When opening a Figma file that already has a design system, always read before drawing.
Full API reference and all design rules: run
figma_docsin your AI client.
If figma-ui-mcp helps you, please give it a star — it helps others discover the project!
MIT © TranHoaiHung — free to use, modify, and distribute. See LICENSE for details.
figma mcp, claude code to figma, cursor to figma, ai to figma, figma ai plugin, figma mcp bridge, figma mcp server, figma design to code, code to figma design, ai ui design, figma automation, figma plugin ai, model context protocol figma, claude figma, windsurf figma, vs code figma, antigravity figma, ai design tool, figma api alternative, figma localhost plugin, draw ui with ai, ai generate figma design, figma design system ai, mcp server figma, figma read design, figma write design, bidirectional figma, figma desktop plugin, npx figma-ui-mcp
来源:README.md,提交 f001ff8
Check whether the Figma plugin bridge is connected. Always call this first to confirm the plugin is running before any other tool.
无需输入参数。
Execute JavaScript code to CREATE or MODIFY designs in Figma. ⚠️ MANDATORY: Call figma_docs BEFORE writing any design code. Skipping figma_docs causes hardcoded colors, wrong sizing, broken layouts, and low-quality UI. Use the `figma` proxy object — all methods return Promises, use async/await. Operations: create, modify, delete, clone, group, ungroup, flatten, resize, set_selection, set_viewport, batch (multiple ops in one call). Design Tokens: createVariableCollection, createVariable, setVariableValue, addVariableMode, renameVariableMode, removeVariableMode, applyVariable, setFrameVariableMode, clearFrameVariableMode, createPaintStyle, createTextStyle, createComponent. Prototyping: setReactions, getReactions, removeReactions (click/hover/press → navigate/overlay/swap with Smart Animate transitions). Scroll: setScrollBehavior (overflowDirection: NONE/HORIZONTAL/VERTICAL/BOTH). Variants: setComponentProperties, swapComponent, getComponentProperties. Component property definitions (master-side, required for instance text overrides to recalc auto-layout): addComponentProperty (TEXT/BOOLEAN/INSTANCE_SWAP), bindComponentPropertyToText, removeComponentProperty. The code runs in a sandboxed VM: no access to require, process, fs, fetch, or network.
code必填sessionIdREAD design data from Figma — extract node trees, colors, typography, spacing, and screenshots. Use to understand an existing design before generating code, or to inspect what's on the canvas.
depthscaledetailformatnodeIdnodeNameoperation必填sessionIdincludeHiddenGet the API reference and design rules for figma_write. Call with no args first — returns quick-start guide + critical rules. Then load specific sections as needed: section='rules' (design principles, token rules, layer order, component-first), section='layout' (auto-layout, button/card/badge/progress/mobile rules), section='api' (create/modify/delete/clone/batch/read operations + workflow), section='tokens' (variables, multi-mode, paint styles, text styles), section='icons' (loadImage, loadIcon, loadIconIn, icon libraries, coloring, sizing). Always call figma_docs BEFORE any figma_write code.
sectionGenerate a design system rule sheet from the current Figma file — aggregates color tokens, typography styles, variables (all modes), and component catalog into a single markdown block. Equivalent to official Figma MCP's create_design_system_rules. Call once at the start of a design-to-code session to give the AI full context: what tokens to use, what text styles exist, which components are available. Re-run when the design system changes.
sessionId已满足适用检查项的 90%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

com.figma.mcp官方发布者
Figma 官方远程 MCP 服务器,为 AI 编程助手提供 Figma 设计上下文,用于生成和更新代码。

由 GitHub 账号 workingmodel 发布
本地 MCP 服务器加 Figma 插件,让助手在 Figma 画布上创建和编辑可完全编辑的矢量节点、形状、文本与组件。

由 GitHub 账号 Mehmoodqureshi 发布
把 Figma 画板转换为 HTML、React 或 Next.js 代码,并将渲染结果与设计稿做像素比对,反复迭代直至收敛。

由 GitHub 账号 Mehmoodqureshi 发布
把 Figma 画板确定性地转换为 HTML、React 或 Next.js 代码,在 Chromium 中渲染并与设计稿做像素比对,直到一致。

由 GitHub 账号 NBhey 发布
本地 MCP 服务器,让助手读取一次性拉取到本地库中的 Figma 设计,离线可用,无需 Figma 令牌,也不受速率限制。
Claude ──figma_write──▶ MCP Server ──HTTP (localhost:38451)──▶ Figma Plugin ──▶ Figma DocumentClaude ◀─figma_read──── MCP Server ◀──HTTP (localhost:38451)── Figma Plugin ◀── Figma Document# Project scope (default)claude mcp add figma-ui-mcp -- npx figma-ui-mcp
# Global scope (all projects)claude mcp add --scope user figma-ui-mcp -- npx figma-ui-mcp{ "mcpServers": { "figma": { "command": "npx", "args": ["-y", "figma-ui-mcp"] } }}{ "mcpServers": { "figma": { "command": "npx", "args": ["-y", "figma-ui-mcp"] } }}{ "mcp": { "servers": { "figma": { "command": "npx", "args": ["-y", "figma-ui-mcp"] } } }}{ "mcpServers": { "figma": { "command": "npx", "args": ["-y", "figma-ui-mcp"] } }}{ "mcpServers": { "figma": { "command": "npx", "args": ["-y", "figma-ui-mcp"] } }}git clone https://github.com/TranHoaiHung/figma-ui-mcpcd figma-ui-mcpnpm install# Then point your MCP client to: node /path/to/figma-ui-mcp/server/index.js# Step 1 — get the new version + plugin pathnpx figma-ui-mcp@latest --version# figma-ui-mcp v2.5.12 — plugin: /.../.npm/_npx/.../figma-ui-mcp/plugin
# Step 2 — restart Claude / your IDE so the MCP server reloads
# Step 3 — re-link the Figma plugin (manual, one-time per update)# Figma Desktop → Plugins → Development → Manage plugins in development# Remove old "Figma UI MCP Bridge" → "+" → Import plugin from manifest...# Select manifest.json from the plugin path printed in Step 1
# Step 4 — verify# Ask your AI: "figma_status"# pluginVersion in the response should match the npm version above"Connect to figma-ui-mcp"✅ Connected — File: "My Project", Page: "Page 1", Plugin v2.5.5"Use figma-ui-mcp to draw a login screen for mobile"You: "Connect to figma-ui-mcp"AI: ✅ Connected to Figma
You: "Draw a mobile onboarding screen with 3 steps"AI: [calls figma_docs → figma_write → figma_read screenshot]AI: ✅ Done — here's what I created: [inline screenshot]
You: "The title text is not centered"AI: [calls figma_read get_selection → figma_write modify → screenshot]AI: ✅ Fixed — text is now centered
You: "Now draw the next onboarding screen beside it"AI: [reads page_nodes to find position → draws at x+440]AI: ✅ Done — 2 screens side by sidefigma_status — check connection (always call first)figma_docs — load API reference (call before drawing)figma_write — draw / modify UI on canvasfigma_read — extract design data, screenshots, SVGawait figma.createPage({ name: "Dashboard" });await figma.setPage({ name: "Dashboard" });
const root = await figma.create({ type: "FRAME", name: "Dashboard", x: 0, y: 0, width: 1440, height: 900, fill: "#0f172a",});
const sidebar = await figma.create({ type: "FRAME", name: "Sidebar", parentId: root.id, x: 0, y: 0, width: 240, height: 900, fill: "#1e293b", stroke: "#334155", strokeWeight: 1,});
await figma.create({ type: "TEXT", name: "App Name", parentId: sidebar.id, x: 20, y: 24, content: "My App", fontSize: 16, fontWeight: "SemiBold", fill: "#f8fafc",});// ... continuefigma_read → operation: "screenshot" → nodeId: "123:456"figma-ui-mcp/├── server/│ ├── index.js MCP server (stdio transport)│ ├── bridge-server.js HTTP bridge on localhost:38451 (long-poll, multi-session)│ ├── code-executor.js VM sandbox — safe JS execution + 7-lib icon fetcher│ ├── tool-definitions.js MCP tool schemas (figma_status / _write / _read / _docs)│ └── api-docs.js API reference text (served to AI via figma_docs)├── src/plugin/ Plugin source (concat-built into plugin/code.js)│ ├── utils.js, svg-path-helpers.js, paint-and-effects.js, read-helpers.js│ ├── handlers-write.js, handlers-read.js, handlers-read-detail.js,│ │ handlers-library.js, handlers-tokens.js, handlers-write-ops.js│ └── main.js└── plugin/ ├── manifest.json Figma plugin manifest ├── code.js Plugin main (auto-generated — 3600+ LOC) └── ui.html Plugin UI — long-poll client + status dotfigma_read get_variables → load variable IDs (Design Tokens)figma_read get_styles → load paint/text style IDs and hex valuesfigma_read get_local_components → load component IDsfigma_read get_page_nodes → load top-level frame IDs// Load variables → build varMap: name → idvar vars = await figma.get_variables();var varMap = {};for (var ci = 0; ci < vars.collections.length; ci++) { var col = vars.collections[ci]; for (var vi = 0; vi < col.variables.length; vi++) { var v = col.variables[vi]; varMap[v.name] = v.id; }}
// Load styles → build colorMap: name → hex, textMap: name → {fontSize, fontWeight}var styles = await figma.get_styles();var colorMap = {}, textMap = {};styles.paintStyles.forEach(function(s) { colorMap[s.name] = s.hex; });styles.textStyles.forEach(function(s) { textMap[s.name] = s; });
// Load components → build compMap: name → idvar comps = await figma.get_local_components();var compMap = {};comps.components.forEach(function(c) { compMap[c.name] = c.id; });// Use colorMap for fill (hex from existing styles)var card = await figma.create({ type: "FRAME", name: "Card", fill: colorMap["color/bg-surface"] || "#FFFFFF", width: 360, height: 200, layoutMode: "VERTICAL", paddingTop: 16, paddingLeft: 16, paddingBottom: 16, paddingRight: 16, itemSpacing: 12,});
// Then bind variables so light/dark mode switches propagateif (varMap["bg-surface"]) await figma.applyVariable({ nodeId: card.id, field: "fill", variableId: varMap["bg-surface"] });if (varMap["radius-md"]) await figma.applyVariable({ nodeId: card.id, field: "cornerRadius",variableId: varMap["radius-md"] });if (varMap["spacing-md"]) await figma.applyVariable({ nodeId: card.id, field: "paddingTop", variableId: varMap["spacing-md"] });// Prefer existing components over drawing from scratchif (compMap["btn/primary"]) { await figma.instantiate({ componentId: compMap["btn/primary"], parentId: card.id, overrides: { "Label": { text: "Confirm", fill: "#FFFFFF" } } });}var collection = vars.collections.find(function(c) { return c.name === "Design Tokens"; });
// Duplicate frame and preview both modes side by sidevar frames = await figma.get_page_nodes();var homeId = frames.find(function(f) { return f.name === "Home"; }).id;var light = await figma.clone({ id: homeId, x: 0, name: "Preview/Light" });var dark = await figma.clone({ id: homeId, x: 1540, name: "Preview/Dark" });await figma.setFrameVariableMode({ nodeId: light.id, collectionId: collection.id, modeName: "light" });await figma.setFrameVariableMode({ nodeId: dark.id, collectionId: collection.id, modeName: "dark" });