figwright
awdr74100 · awdr74100/figwright
This free, bidirectional Figma MCP server allows AI agents to convert designs into framework-aware code and directly edit the Figma canvas.
Free, two-way Figma MCP server. Turn designs into framework-aware code, and push code back to the canvas. Works with Claude Code, Cursor, Codex, and any MCP client.
Preview
What you can do with it
- Generate frontend code directly from Figma designs.
- Use an AI agent to make changes to Figma elements like text or auto-layout.
- Convert existing UI components into a consistent design system within Figma.
Verified live · 60 tools
We started this MCP server in an isolated sandbox and it exposed these tools:
pingHealth check. Returns server info plus, when a plugin is connected, end-to-end info from the Figma sandbox. On a follower it also reports the leader’s version and build, and warns (versionSkew / build
get_selectionReturn the current selection on the active Figma page: { pageId, pageName, nodes }, where each node is a full flat serialization — geometry, fills/strokes/effects, text properties, style/variable ids,
get_documentReturn the full node tree (recursive children) of the active Figma page, with base geometry, rotation, opacity, cornerRadius, and fills enrichment.
get_nodeReturn one node by id with its full recursive subtree at maximum fidelity — every serialized field (geometry, paints, effects, auto-layout, text with per-run segments, style/variable ids, mainComponen
get_nodes_infoReturn multiple Figma nodes by id. Output preserves input order; missing ids slot null.
get_metadataReturn file metadata: fileName, current page, all page references, and which editor the file is open in (editorType / mode) — "dev" is read-only and "figjam" has no components, variables or styles.
get_pagesReturn every page in the active Figma file as { id, name, flows }. flows lists the prototype flows Presentation view offers on that page, as { nodeId, name } in order: nodeId is the flow's starting fr
search_nodesSearch the node tree by case-insensitive name substring and/or exact node type. At least one of name or type is required. Scope to a subtree with root (a node id); defaults to the current page. Return
scan_text_nodesReturn every TEXT node within a subtree, each with its characters / fontSize / fontName. Scope with root (a node id); defaults to the current page.
scan_nodes_by_typesReturn a flat list of every node whose type is in `types`, searched recursively through a subtree scoped by `root` (a node id) or the current page by default. Use this to collect nodes by kind (e.g. a
get_stylesReturn the document's local styles grouped as { paints, texts, effects, grids }. Paint styles carry their paints; text styles carry fontName / fontSize / lineHeight / letterSpacing / textWrapStyle; ef
get_variable_defsReturn the document's local variables as { collections, variables }. Each collection lists its modes and defaultModeId; each variable lists its resolvedType and valuesByMode (primitives, RGBA colors,
get_local_componentsReturn the components and component sets within a node subtree (or the current selection) as { components, componentSets }. Scans a subtree, not the whole document — pass nodeId, or select the frames
get_component_apiReturn a component's full property API — the prop contract behind its instances. Pass a COMPONENT, COMPONENT_SET, or INSTANCE id (an instance resolves to its main component / set). Returns { id, name,
get_viewportReturn the current page viewport as { center, zoom, bounds } — the on-screen center point, zoom level (1.0 = 100%), and visible bounds rect.
npx -y @figwright/mcp@latest · 08/10/2026
Safety check
Usable, but read the notes first.
- ●npm package runs a script automatically on install.
package.json
Automated scan of the repo files. Always review code you run.
From the README
A free, two-way Figma MCP server for coding agents.
Pairs with a Figma plugin, not a Dev Mode seat.
About · Setup · Skills · Tools · Plugin · FAQ · Contributing
About
Figwright connects an MCP server to a Figma plugin over a local WebSocket relay, so an AI agent (Claude Code, Cursor, Codex, or any other MCP client) can work with Figma instead of just looking at it.
It works in both directions:
Read: turn a Figma selection into framework-aware code, grounded on faithful, de-duplicated design context (layout, typography, variables, components).
Write: author and edit the canvas directly, from frames and text to auto-layout, styles, variables, components, whole screens.
Everything runs on your machine: the server, the relay, and the plugin. Your designs are never sent anywhere.
Why Figwright
- Not gated: the official Dev Mode MCP is behind a paid Dev Mode seat. Figwright runs on the free tier.
- Bidirectional: not read-only. 117 tools span reading and writing the canvas, so an agent can both implement designs and build them.
- Provider-first codegen: Figwright detects your real stack (framework + styling system) and reuses your existing components, tokens, and icons, instead of emitting generic markup you have to rewrite.
- One agent per file: several agents can work at once, each claiming its own open Figma file. Switching tabs no longer sends one agent's edits into another's design — see working across files.
- Open & extensible: the read/write workflows ship as installable skills you can adopt or fork.
Setup
You need an MCP client (Claude Code, Cursor, …), Node.js 20.19+ or 22.12+, and Figma. The free Figma tier is enough, though the desktop app is needed to import the plugin. The server runs via npx as its own process, so its Node version is independent of the one your project builds with; Node 18/21 and 22.0–22.11 are not supported.
1. Add the server to your MCP client
For Claude Code, add this to your .mcp.json (other clients use the same shape):
{
"mcpServers": {
"figwright": {
"command": "npx",
"args": ["-y", "@figwright/mcp@latest"]
}
}
}
npx fetches and runs the published server, so no global install is needed.
2. Install the Figma plugin
The plugin isn't on the Figma Community marketplace yet, so install it from the latest release:
- Download the plugin zip from the latest GitHub Release and unzip it.
- In the Figma desktop app: Menu → Plugins → Development → Import plugin from manifest… and pick the unzipped
manifest.json.
3. Connect
Open the Figwright plugin in Figma (Plugins → Development → Figwright). It connects to the local server automatically and shows Connected. Ask your agent to run ping to confirm the link.
4. (Optional) Install the skills
The skills make agents reach for Figwright at the right moment and follow the grounded workflows:
npx skills add awdr74100/figwright/skills
5. Try it
With a frame selected in Figma, prompt your agent:
Code this Figma selection as a React component.
or, the other direction:
Build a pricing section in Figma from this spec.
Skills
Agent skills orchestrate Figwright's tools. They are model-invoked: your agent loads one automatically when the task matches its description.
| Skill | What it does |
|---|---|
figma‑codegen | Turn a Figma selection into framework-aware code, grounded on your stack and existing components. |
figma‑build | Build a Figma design from code or a description, reusing the file's existing components and styles. |
Install across any supported agent with the skills CLI:
npx skills add awdr74100/figwright/skills # both
npx skills add https://github.com/awdr74100/figwright/tree/main/skills/figma-codegen # one
[!NOTE] Skills need the
@figwright/mcpserver connected. On their own they have no tools to drive.
Tools
Figwright exposes 117 MCP tools in three groups:
- Read: selection, document and node inspection, styles, variables, components, fonts, prototype reactions and flows, motion (animation) state, screenshots, original image-fill assets, PDF export, and video export of animated frames (MP4 / GIF / WebM); plus
list_files/use_filefor working across more than one open Figma file at once. - Write: create and edit frames, text, shapes, auto-layout, effects, styles, variables, components (including authoring their boolean/text/instance-swap properties), pages, prototype reactions and flows, and Motion animations (keyframes, animation-style presets, timelines); plus a
batchtool to apply many edits at once. - Grounding:
get_design_contextfor faithful, de-duplicated design context, andcomponent_map/token_map/icon_map, which join Figma data to your codebase so codegen reuses what you already have; plusdesign_diff, which reports what changed in a design against a saved baseline so you update only the affected code.
[!TIP] Your MCP client lists every tool at connect time, which is always the authoritative, up-to-date catalog.
Plugin
The Figma-side plugin isn't a black box. It shows every call as it happens, lets you inspect the exact payload sent to the model, and surfaces its own connection health.
Activity: every call, with timing and a jump to the nodes it touched · P