FreeMCP for Figma
Provides tools for reading and writing Figma designs via the Figma Plugin API, including creating frames, shapes, text, components, applying variables and styles, and generating code (React, Vue, HTML/CSS) from selected nodes.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@FreeMCP for FigmaDescribe my current selection"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
FreeMCP for Figma — Universal MCP Bridge
A local MCP bridge that lets AI coding agents read and write a user's Figma file through the Figma Plugin API (native, in-desktop) instead of the public REST API. No official-MCP rate limits, no Figma API token, and no design data ever leaves the machine.
Offline & private — everything runs on
127.0.0.1; a startup guard blocks any outbound HTTP from the server process.Native design-system writes — create frames/shapes/text, author components, insert library component instances, bind variables & styles, configure Auto Layout, constraints and effects — all executed inside Figma via the Plugin API.
Design-to-code — generate React (Tailwind), Vue 3, or HTML/CSS from a selected node.
Batched & undoable —
batch_runapplies 100+ ops in one consented request without blocking the Figma UI;undoreverts the last write(s).
Transport: the bridge is HTTP long-poll (
POST /register,GET /next,POST /result) on127.0.0.1:3700, not WebSocket. The Figma plugin sandbox has noWebSocketglobal — onlyfetch— so the plugin long-polls a loopback HTTP server hosted by the local MCP process.
Architecture
┌──────────────┐ MCP/STDIO ┌────────────────────────────┐ HTTP long-poll ┌──────────────────┐
│ AI client │ ◀──────────▶ │ local MCP server (Node) │ ◀───────────────▶ │ Figma plugin │
│ Claude/VS │ JSON-RPC │ packages/server │ /register │ packages/plugin │
│ Cursor/Ollama│ │ 127.0.0.1:3700 │ /next /result │ (Plugin API) │
└──────────────┘ └────────────────────────────┘ └──────────────────┘Every MCP tool is a thin dispatch. The server validates arguments (Zod), translates the call into a typed bridge frame, and forwards it over loopback HTTP to the Figma plugin, which executes the actual Plugin API call and returns the result. Deep-dive: docs/ARCHITECTURE.md.
Related MCP server: figma-developer-mcp
Quickstart (< 5 min)
1. Install
npm install
npm run build:plugin2. Load the plugin in Figma
Figma → Plugins → Development → Import plugin from manifest… → select
packages/plugin/manifest.json. The plugin auto-connects to
http://127.0.0.1:3700 (a small status panel shows connection state).
3. Start the server (own terminal)
npm run start:serverExpect: FreeMCP Figma bridge on http://127.0.0.1:3700. Open the plugin in Figma to connect.
4. Point your AI client at the MCP server (STDIO)
{
"mcpServers": {
"figma-free-mcp": {
"command": "node",
"args": ["C:/path/to/repo/packages/server/dist/index.js"]
}
}
}Claude Desktop: Settings → Developer → Edit Config. VS Code / Cursor: .mcp.json.
You can also run the built bundle directly: node packages/server/dist/index.js.
Using it
Intent | What the agent does |
"Describe this design" |
|
"What tokens exist?" |
|
"Create a card component" |
|
"Insert our primary button" |
|
"Make 100 variants" |
|
"Undo last change" |
|
"Generate React for this" |
|
Consent: the first write always prompts for consent — every write tool
requires confirm: true in its params (FR-504). Nothing is written silently.
Tool reference
Every input is validated by the Zod schema in
packages/contracts/src/tool-schemas.ts (single source of truth) before
dispatch (FR-404). The per-tool contract lives in
specs/001-freemcp-figma-bridge/contracts/tools.md.
Read
Tool | Purpose | Key params |
| Current selection → |
|
| Deep hierarchical context for a node subtree |
|
| Lightweight tree: ids, types, names, bounds |
|
| Raster/SVG export of a node (base64) |
|
| Local variables + collections + mode values | — |
| Local text/effect/grid styles | — |
| Local components + component sets with importable keys | — |
| Top-level nodes on the current page (id/name/type/bounds) | — |
Write (all require confirm: true)
Tool | Purpose | Key params |
| Frame at position/size, optional Auto Layout + sizing |
|
| Rectangle / ellipse / polygon |
|
| Text node with font props + text polish |
|
| Apply solid/gradient fill to a node (image fills deferred — need a Figma imageHash) |
|
| Auto Layout direction, padding, spacing, alignment |
|
| Clone preserving properties + children |
|
| Delete a node (not undoable) |
|
| Insert an instance by key (local or published library) |
|
| Author a reusable |
|
| Bind a variable to a node property; |
|
| Apply a text/effect/grid style; |
|
| Layout constraints (align/grow + frame sizing) |
|
| Set arbitrary effect array (e.g. DROP_SHADOW); |
|
Batch
Tool | Purpose | Key params |
| Run many write ops in one consented batch (100+ < 3s) |
|
Code generation
Tool | Purpose | Key params |
| JSX + Tailwind classes |
|
| Vue 3 Composition API SFC |
|
| Semantic HTML + CSS |
|
Utility
Tool | Purpose | Key params |
| Revert last executed write op(s) |
|
| Health check; returns bridge connectivity + latency | — |
Error envelope (FR-405): every tool result is { ok: true, data } or
{ ok: false, error: { code, message, suggestion } }, serialized as a JSON
string in the MCP text content. suggestion carries a fixable hint.
Security & privacy model
No tokens, no cloud (FR-501/502/503) — the server binds only to
127.0.0.1; a startup guard (installOfflineGuard) monkey-patches globalfetchto reject any non-loopback request, and anOpLogrecords every dispatch so an operator can assert only local calls happened.Consent before writes (FR-504) — write tools require
confirm: true; the plugin never re-prompts for a single consented batch.Sandbox-bound — design data only ever crosses loopback HTTP between the MCP process and the Figma plugin. Nothing is transmitted off-machine.
Configuration
Env | Default | Purpose |
|
| Server port. Note: the plugin's target port is compiled in ( |
Troubleshooting
Symptom | Fix |
| Open the plugin in Figma (Plugins → Development) so it registers with the server. |
| Start the server first, then load the plugin. |
Port conflict | Set |
Text ops fail | Text nodes need a loaded font — the plugin calls |
Development
npm install # workspaces: contracts, server, plugin
npm test # 32 Vitest unit tests (schemas, codec, bridge, undo, codegen)
npm run typecheck # tsc --noEmit (strict)
npm run build:server # esbuild bundle → packages/server/dist/index.js (npx-runnable)
npm run build:plugin # esbuild bundle → packages/plugin/dist/main.js
npm run start:server # tsx dev run of the MCP server + bridgeCoding agents in this repo additionally have codebase-memory MCP, an LSP provider, and obscura browser tools connected for Spec Kit workflow runs — see docs/TOOLCHAIN.md for the wiring and reproduction. See docs/DEVELOPMENT.md for the developer guide (add a tool, build pipeline, sandbox constraints) and docs/ARCHITECTURE.md for the deep technical reference.
Repository layout
packages/
├── contracts/ # Shared, types-only: DesignContext, bridge frames, Zod tool schemas (source of truth)
├── server/ # MCP server (STDIO) + HTTP long-poll bridge host + codegen + command stack
└── plugin/ # Figma plugin: outbound long-poll client + Plugin API read/write/design-system logic
specs/001-freemcp-figma-bridge/ # Spec Kit artifacts: spec, plan, research, data-model,
# contracts (protocol + tools), quickstart, tasksDocs index
Doc | What it covers |
| Components, request lifecycle, long-poll internals, undo, codegen pipeline, security |
| Adding a tool, build/test workflow, Figma sandbox constraints, conventions |
| Connected agent tooling for Spec Kit runs: codebase-memory MCP, LSP provider, obscura, routing skill — setup + verification |
| Production-ready Figma design workflow for the bridge MCP: audit → tokens → components → screens, Auto Layout rules, verification gates, bridge limits |
| Feature specification (FRs, user stories, success criteria) |
| HTTP long-poll bridge protocol contract |
| MCP tool surface contract |
| Manual end-to-end validation scenarios |
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityAmaintenanceEnables AI assistants to read, analyze, and modify Figma designs, manage design tokens, and create prototype connections, all while keeping data local.631519MIT
- Alicense-qualityDmaintenanceEnables coding agents like Cursor to access Figma design data, fetch layout and styling information, and implement designs in any framework.57,771MIT
- Alicense-qualityCmaintenanceAI assistants can read and inspect Figma design context locally via a plugin, without external API keys or rate limits.14MIT
- FlicenseCqualityBmaintenanceLocal bridge enabling AI agents to inspect and edit the currently open Figma Desktop file through the Figma Plugin API.291
Related MCP Connectors
The Figma MCP server brings Figma design context directly into your AI workflow.
Connect AI coding agents to Anima Playground, Figma, and your design system.
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/w4ndaja/figma-plugin-as-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server