Write to a live Figma canvas, get a screenshot back, and roll back mistakes. Zero deps, free plan.
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.
Let an AI agent design in Figma β and actually see what it drew.
A zero-dependency MCP server that gives coding agents read and write access to a live Figma canvas, then closes the loop by handing the rendered PNG back to the model for visual self-critique.

Agent generates the design, visually audits the rendered output, detects layout defects, and self-corrects in real time β zero human in the loop.
Coding agents are effectively blind inside Figma. Most Figma MCP servers are read-only β
they flatten a design into text so a model can turn it into code, and the traffic stops there.
The ones that can write are either gated behind a paid Figma seat with a monthly tool-call
quota, or expose a fixed vocabulary of commands (create_rectangle, set_fill) that runs out
the moment the task gets specific.
And none of them answer the question that actually matters after a write: did it look right?
An agent that draws a card, gets back {"ok": true}, and moves on has no way to notice that its
text overflowed, its contrast failed, or its frame landed on top of someone else's work.
This bridge closes that loop, and adds the safety rails an autonomous agent needs to be trusted with a real design file.
| This bridge | Figma Dev Mode MCP (official) | Framelink | Talk to Figma | |
|---|---|---|---|---|
| Writes to the canvas | β arbitrary JS in the sandbox | β code-to-canvas | β read-only | β fixed command set |
| Visual feedback loop | β auto-framed PNG on every write | β οΈ separate screenshot call | β | β |
| Undo the agent's work | β
figma_rollback | β | n/a | β |
| Works on the Figma Free plan | β | β Dev/Full seat, paid planΒΉ | β | β |
| Tool-call quota | none β it's local | 6 / month on Starter seatsΒΉ | inherits REST rate limits | none |
| Token-optimized read of the live doc | β 86β91% smallerΒ² | β οΈ partial | β REST only | β |
| Persistent code modules in-sandbox | β
bridge.define/require | β | β | β |
| Long jobs survive their own timeout | β
async job_id + progress | β | n/a | β |
| Install footprint | 0 npm deps, npx or git clone, Node only | Figma desktop + paid seat | npx + access token | Bun + a second server process |
The short version: Framelink is the best choice if you only want to turn an existing design into code. The official server is the safest choice if you're already on a paid Figma plan and want Code Connect. This bridge is for the case where the agent is doing the designing β where it needs to write freely, check its own work, and be undoable when it gets it wrong.
The agent speaks plain MCP over stdio. The server owns a hand-rolled RFC 6455 WebSocket on
:8765, which the Figma plugin connects to β so commands reach the canvas with no polling
latency, and results (including multi-megabyte base64 PNGs) stream straight back.
Or, to read the installer before it touches your machine β it's the same script either way, just fetched differently:
Both copy the server and plugin into place and register the MCP server in every AI client config
they find β Claude Desktop, Claude Code, Cursor, Windsurf, Antigravity. The npm package exists
purely for a shorter first command; it doesn't add a single runtime dependency β dependencies
is empty in its package.json too, and no Python is needed either. node is the only runtime
this project ever needs, for the installer and the server alike.
Then, in Figma Desktop:
figma-plugin/manifest.jsonCtrl + Alt + P (macOS: Cmd + Option + P) to launch Antigravity BridgeCONNECTEDRestart your AI client so it picks up the new tools. Verify anytime with:
The live canvas tools need no token. If you also want to read unopened cloud files
(get_file, get_node, get_styles, β¦), supply a personal access token:
Without a token these 7 tools aren't registered at all β see Tool reference.
capture: true returns a PNG of exactly what the call just created or modified β auto-framed
to the changed nodes, never the whole page, and never by hijacking the user's selection.
The warnings array is a cheap auto-lint over the touched subtree β text overflow, low contrast,
zero-size nodes. It catches the obvious mistakes without spending a screenshot round trip.
Every write opens a checkpoint automatically. One call reverses it β no Ctrl+Z rolling back over
the human's own unrelated work.
Created nodes are tracked automatically via a Proxy around figma.create*(). Property edits are
tracked when snapshotted. Deletions are honestly reported as unrecoverable rather than silently lost.
The same pruning + Pseudo-JSX pipeline that powers the cloud tools, pointed at whatever is open right now. Measured on a realistic 6-card layout: 20 KB of raw API JSON β 2.7 KB (86% smaller).
budget_tokens caps the response: if the requested depth overshoots, the server re-serializes the
already-fetched tree shallower β no second round trip β and appends a comment saying what it did
and which id to fetch for more.
Every figma_execute_code call is a fresh function scope, so helpers normally die instantly.
bridge.define compiles and stores a module inside the .fig document:
A generation still running after 30s hands back a job_id instead of failing while the plugin
keeps working. Poll figma_job_status for live progress β the sandbox reports it via
progress(step, of, note).
Tools are served in tiers, so the schema list sent to the model on every turn stays proportional to what's actually usable:
| Tier | Count | Registered when |
|---|---|---|
| Core | 8 | always |
| Extended | 5 | always |
| REST | 7 | only with FIGMA_PERSONAL_ACCESS_TOKEN set |
| Legacy | 3 | only with FIGMA_MCP_LEGACY_TOOLS=1 |
Without a REST token an agent sees 13 tools instead of 23 β and never wastes a call on
something that would only return REST_TOKEN_MISSING.
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-mcp-bridge)<a href="https://allmcps.com/mcp/figma-mcp-bridge"><img src="https://allmcps.com/api/badge/figma-mcp-bridge?style=directory" alt="Figma MCP Bridge on AllMCPs" /></a>