join_channel
Join a named channel on the Figma Vector MCP socket relay. Must be called before any drawing commands if the channel was not set via env/arg.
channel必填
io.github.workingmodel由 GitHub 账号 workingmodel 发布v0.3.3更新于 Oct 30, 2026
Let Claude create and edit fully editable vector nodes on the Figma canvas.
发布方自己的服务:Figma MCP Server
本地 MCP 服务器加 Figma 插件,让助手在 Figma 画布上创建和编辑可完全编辑的矢量节点、形状、文本与组件。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
参照 仓库 中的启动说明。
A Figma plugin + MCP server that lets Claude (or any MCP client) create and manipulate fully-editable vector nodes on the Figma canvas — paths, shapes, gradients, text, effects, image fills, and more — via a local WebSocket relay.
Developed by Working Model Inc
Version 0.3.3 — 58 tools across creation, styling, layout, components, effects, pages, and export.
cursor-talk-to-figma-mcp is great for reading Figma state and creating basic primitives, but it has no vector path creation, gradient, effects, or compositing tools. This plugin fills that gap:
The socket relay runs locally. The Figma plugin connects and joins a named channel. The MCP server joins the same channel and sends commands. Results flow back the same path.
For AI agents (Claude Code, Cursor, etc.) — the recommended call sequence to start any session:
Color convention: All RGB values are 0–1 throughout (matching Figma's internal format). r: 1, g: 0, b: 0 = red. Never use 0–255.
Gradient workflow:
Image fill workflow (with generative AI):
Batch compositions — use $prev.id to chain commands without extra round-trips:
Known SVG limits: figma.createNodeFromSvg() strips <defs>, gradients, filters, masks, and animations. Use set_gradient_fill for gradients instead of SVG <linearGradient>.
Reconnection: If the plugin disconnects, it auto-reconnects with exponential backoff (1s→30s max) and replays queued commands (up to 30s old). No manual intervention needed for short interruptions.
src/figma-plugin/manifest.jsonListens on ws://localhost:3055. Auto-start on login (macOS):
Manual config (~/.claude/settings.json or ~/.cursor/mcp.json):
ws://localhost:3055) → Connectfigma-vector-mcp) → JoinThe plugin saves your last URL and channel — pre-filled on next open. Keep the plugin panel open during your session — closing it terminates the WebSocket connection.
Per-tool timeout overrides: health_check → 3s, export_node_as_png → 30s, export_node_as_svg → 15s, create_batch → 60s.
The plugin main thread (code.js) runs in Figma's restricted QuickJS sandbox. The UI (ui.html) is a normal browser context and is not affected.
Run bun run lint:plugin to check code.src.js for violations before building. A pre-commit hook can be installed via ./scripts/install-hooks.sh.
code.jscreate_vector_from_svg)src/figma-plugin/code.src.jsbun run lint:plugin — catch sandbox violations before buildingbun run build:plugin — esbuild outputs code.js (ES2017)code.jssrc/socket.ts) adapted from cursor-talk-to-figma-mcp — Copyright (c) 2025 sonnylazuardi, MIT LicensesetCharacters helpers in code.src.js adapted from the same project — Copyright (c) 2025 sonnylazuardi, MIT LicenseMIT © Working Model — see LICENSE and THIRD_PARTY_NOTICES.md.
Developed by Working Model Inc
来源:README.md,提交 ec9dccc
Join a named channel on the Figma Vector MCP socket relay. Must be called before any drawing commands if the channel was not set via env/arg.
channel必填Ping the Figma plugin and confirm connectivity. Returns plugin version and current page.
无需输入参数。
Place a fully editable vector node on the Figma canvas from an SVG string. Supports any valid SVG including paths, polylines, polygons, circles, and groups. The created node is fully editable in Figma.
xysvg必填nameparentIdCreate an editable vector from a single SVG path `d` attribute string. Shorthand for simple paths without a full SVG wrapper.
d必填xynameparentIdfillColorstrokeColorstrokeWeightCreate an editable vector from an array of [x, y] point pairs. Use closed=true to produce a filled polygon.
xynameclosedpoints必填parentIdstrokeColorstrokeWeightCreate a Figma frame (container) on the canvas.
xynamewidth必填height必填parentIdfillColorCreate a rectangle on the Figma canvas.
xynamewidth必填height必填parentIdfillColorCreate an ellipse (or circle) on the Figma canvas.
xynamewidth必填height必填parentIdfillColorCreate a text node on the Figma canvas. Use width to fix the column width and enable text wrapping.
xynametext必填widthheightfontSizeparentIdfillColorfontStylefontFamilytextAutoResizeApply a gradient fill to a Figma node. Supports LINEAR, RADIAL, ANGULAR (conic), and DIAMOND types. Replaces any existing fills. Stops must be sorted by position (0 → 1).
typeanglestops必填centernodeId必填gradientTransformEnable auto-layout on a frame and configure direction, spacing, padding, and alignment. Set direction to NONE to disable auto-layout.
wrapnodeId必填paddingspacingdirectioncounterAxisAlignprimaryAxisAligncounterAxisSizingModeprimaryAxisSizingModeConvert an existing frame or group into a reusable Figma component.
namenodeId必填Place an instance of a local component on the canvas by component ID.
xynameparentIdcomponentId必填Set the fill color of a Figma node.
ab必填g必填r必填nodeId必填Set the stroke color (and optional weight) of a Figma node.
ab必填g必填r必填nodeId必填weightSet comprehensive stroke properties on a node: color, weight, position, dash pattern, line cap, and line join.
colornodeId必填weightlineCaplineJoinpositiondashPatternModify typographic properties of an existing text node without replacing its content. Also use to set or update text box width and wrapping.
widthheightnodeId必填fontSizefillColorfontStyletextAlignfontFamilylineHeightletterSpacingtextAutoResizeSet corner radius of a rectangle or frame. Use radius for uniform corners or topLeft/topRight/bottomLeft/bottomRight for individual corners (e.g. pill, tab, card shapes).
nodeId必填radiustopLefttopRightbottomLeftbottomRightSet the opacity of a Figma node (0 = invisible, 1 = fully opaque).
nodeId必填opacity必填Move a Figma node to a new position on the canvas.
x必填y必填nodeId必填Resize a Figma node to the given width and height.
width必填height必填nodeId必填Delete a node from the Figma canvas.
nodeId必填Duplicate a Figma node, optionally repositioning the clone.
xynodeId必填parentIdRename a Figma node.
name必填nodeId必填Show or hide a Figma node.
nodeId必填visible必填Change a node's Z-order within its parent. Use action for relative moves or index for an absolute position (0 = bottom of stack).
indexactionnodeId必填Group multiple Figma nodes into a group layer.
namenodeIds必填parentIdUngroup a group node, returning its children to the parent.
nodeId必填Execute multiple commands in a single round-trip. Commands run sequentially. Each result includes success/error status. Use this for complex compositions (e.g. place an SVG, add a label, group them) to avoid multiple round-trips.
commands必填Get information about the current Figma document: name, current page, all pages, and top-level nodes.
无需输入参数。
Get the currently selected nodes in Figma, including position and size.
无需输入参数。
Get detailed information about a specific node by ID: type, position, size, opacity, children.
nodeId必填Scroll the Figma viewport to focus on a node and select it.
nodeId必填List all pages in the current Figma document.
无需输入参数。
Switch to a different page in the Figma document by ID or name.
pageIdpageNameGet all local paint styles and text styles defined in the Figma document. Use these IDs with apply_style to keep output on-brand.
无需输入参数。
Apply a named document style (paint or text) to a node by style ID.
nodeId必填styleId必填styleTypeList all fonts available in this Figma environment (system fonts + Figma font agent). Use before create_text to verify a font is loadable. Optionally filter by family name substring.
queryList all local components in the Figma document.
无需输入参数。
Export a Figma node as an SVG string. Useful for round-tripping: create a vector, modify it in Figma, export back.
nodeId必填Export a Figma node as a base64-encoded PNG at the specified pixel scale.
scalenodeId必填Search for nodes by name (case-insensitive contains) and/or type. Scoped to a page (defaults to current page). Recursive by default.
typequerypageIdrecursiveCreate a new page in the Figma document.
name必填Copy a node to a target page at an optional position.
xynodeId必填targetPageId必填Update fill color, stroke color, opacity, position, and/or size on multiple nodes in a single round-trip.
operations必填Apply effects (drop shadow, inner shadow, layer blur, background blur) to a node. Use mode REPLACE (default) to overwrite all effects, or APPEND to add to existing ones.
modenodeId必填effects必填Set the blend mode of a node layer.
mode必填nodeId必填Set a node's fill to a base64-encoded image. Use with image generation APIs (Replicate, fal.ai) to place rendered imagery directly on canvas.
base64必填nodeId必填opacitymimeTypescaleModePerform a boolean operation (union, subtract, intersect, exclude) on 2 or more vector nodes.
namenodeIds必填operation必填Apply column, row, or uniform grid guides to a frame.
grids必填nodeId必填Save a named alias for a node ID, persisted in the Figma document. Use resolve_node to retrieve it later.
alias必填nodeId必填Look up a node ID by its registered alias. Returns the node ID previously saved with register_node.
alias必填Save a named color alias to the document palette. All RGB values are 0–1. Use resolve_color or list_colors to retrieve.
ab必填g必填r必填alias必填Look up a color by its registered alias. Returns r, g, b, a values (0–1).
alias必填List all color aliases registered in this document's palette.
无需输入参数。
Export the current Figma page as a base64-encoded PNG. Useful for visual verification of the canvas state.
scaleList components available for use. Returns local document components. Filter by name with optional query.
queryApply a clip mask — maskNode defines the shape, targetNode is clipped to it. Both nodes are grouped.
namemaskNodeId必填targetNodeId必填已满足适用检查项的 90%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

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

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

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

由 GitHub 账号 NBhey 发布
本地 MCP 服务器,让助手读取一次性拉取到本地库中的 Figma 设计,离线可用,无需 Figma 令牌,也不受速率限制。

io.scalably
本地运行的 Figma REST API MCP 服务器,让助手列出文件中的顶层画框,并下载某个画框的 PNG、节点 JSON 和图片填充映射。
Claude (MCP client) ↕ stdio (MCP protocol)server.ts (MCP server) ↕ WebSocket (ws://localhost:3055)socket.ts (relay — channel-based routing) ↕ WebSocketFigma plugin (ui.html ↔ code.js) ↕ postMessageFigma Plugin API → canvas1. health_check → confirm plugin is connected2. get_document_info → get page IDs, current page, top-level nodes3. get_available_fonts → discover loadable fonts before create_text4. get_styles → load brand colours/text styles if available1. create_frame({ width, height }) → get frameId2. set_gradient_fill({ nodeId: frameId, type: "LINEAR", angle: 135, stops: [{ color: { r:0.2, g:0.1, b:0.9 }, position: 0 }, { color: { r:0.9, g:0.2, b:0.4 }, position: 1 }] })1. Generate image via Replicate/fal.ai → get base64 PNG2. create_frame({ width: 512, height: 512 })3. set_image_fill({ nodeId, base64, scaleMode: "FILL" }){ "commands": [ { "command": "create_frame", "params": { "width": 400, "height": 300, "name": "Card" } }, { "command": "set_gradient_fill", "params": { "nodeId": "$prev.id", "type": "LINEAR", "stops": [{"color":{"r":0.1,"g":0.1,"b":0.9},"position":0}, {"color":{"r":0.8,"g":0.2,"b":0.5},"position":1}] } }, { "command": "create_text", "params": { "parentId": "$results.0.id", "text": "Hello", "fontSize": 32, "x": 24, "y": 24 } }]}npm install -g figma-vector-mcp# or use without installing via npx / bunx (see MCP config below)bun run socket./scripts/setup.sh --launchd# Auto-detect Claude Code / Cursor and write config:./scripts/setup.sh
# Local build:./scripts/setup.sh --local
# Install git pre-commit sandbox lint hook:./scripts/setup.sh --hooks{ "mcpServers": { "FigmaVectorMCP": { "command": "bunx", "args": ["figma-vector-mcp@latest"], "env": { "FVMCP_CHANNEL": "figma-vector-mcp" } } }}health_check → { "status": "ok", "version": "0.3.3", "currentPage": { ... } }bun install # install depsbun run socket # start relay on :3055bun run build # build MCP server → dist/server.jsbun run build:plugin # build plugin: code.src.js → code.jsbun run lint:plugin # check code.src.js for sandbox violations./scripts/install-hooks.sh # install pre-commit lint hook