figma-proxy-mcp
Provides tools for design inspection, CSS and layout specs, component and variable extraction, HTML codegen, image export, and UX writing audit for Figma files.
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., "@figma-proxy-mcpGet the CSS for the primary button component"
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.
figma-proxy-mcp
A local MCP (Model Context Protocol) server that gives AI coding agents direct, live access to your open Figma file — purpose-built for engineers doing design handoff and UX writers managing copy at scale.
No Figma API token. No rate limits. No stale exports. The AI reads exactly what is currently open in Figma.
Why this exists
Design handoff is slow because engineers have to manually translate Figma specs into code, and UX writers have to hunt through screens to audit copy. Both workflows become faster when an AI agent can read the live design directly:
Engineers can ask: "Give me the CSS for this card component" or "Convert this entire page to HTML" and get production-ready output.
UX Writers can ask: "Find every screen with placeholder lorem ipsum" or "Are the button labels consistent across all pages?" and get an answer in seconds.
Related MCP server: figma-mcp-write-server
Architecture
AI Agent (Claude, Cursor, etc.)
|
| MCP (Streamable HTTP)
v
MCP Server :3001 ← translates MCP tool calls to RPC
|
| HTTP POST /rpc
v
WebSocket Proxy :3000 ← routes requests to the right Figma file
|
| WebSocket
v
Figma Plugin ← runs inside Figma Desktop, executes commands
|
| Plugin API
v
Live Figma FileThree services, each with a single responsibility:
Service | Port | Role |
| 3000 | WebSocket proxy, manages plugin connections |
| 3001 | MCP server, exposes tools to AI agents |
| — | Figma plugin, executes Figma API calls |
Prerequisites
Node.js 22+
Figma Desktop app (the plugin requires the desktop plugin API)
An AI client that supports MCP (Claude Desktop, Cursor, Windsurf, etc.)
Setup
1. WebSocket Proxy
cd websocket
npm install
npm run dev
# Running on http://localhost:30002. MCP Server
cd mcp-server
npm install
npm run dev
# Running on http://localhost:3001/mcpOptionally set MCP_API_KEY to require a bearer token:
MCP_API_KEY=mysecret npm run dev3. Figma Plugin
Build the plugin once:
cd plugin
npm install
npm run buildLoad it in Figma Desktop:
Open Figma Desktop
Go to Plugins > Development > Import plugin from manifest
Select
plugin/manifest.jsonRun the plugin from the Plugins menu — it will appear as a small status panel
The plugin connects to the WebSocket proxy automatically. The status dot turns green when connected.
By default the plugin connects to
ws://localhost:3000. To connect to a different host, type the WebSocket URL in the plugin panel and click Connect. The URL is saved and restored on next open.
4. Connect your AI client
Add the MCP server to your AI client config:
Claude Code CLI — add to your project's .mcp.json or run:
claude mcp add figma --transport http http://localhost:3001/mcpFor a tunneled remote server with API key:
claude mcp add figma --transport http https://your-tunnel.example.com/mcp \
--header "Authorization: Bearer YOUR_API_KEY"Claude.ai web — go to Settings → Integrations → Add MCP server:
URL:
https://your-tunnel.example.com/mcpIf API key is set, add header
Authorization: Bearer YOUR_API_KEY
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"figma": {
"url": "http://localhost:3001/mcp"
}
}
}Cursor / Windsurf: Add http://localhost:3001/mcp as an MCP server in settings.
Docker
Both backend services have Dockerfiles using a multi-stage esbuild bundle. A single node:22-alpine image with no node_modules:
# WebSocket proxy
docker build -t figma-proxy-websocket ./websocket
docker run -p 3000:3000 figma-proxy-websocket
# MCP server (point it at the proxy)
docker build -t figma-proxy-mcp-server ./mcp-server
docker run -p 3001:3001 -e PROXY_URL=http://host.docker.internal:3000 figma-proxy-mcp-serverEnvironment variables
Variable | Default | Description |
|
| URL of the WebSocket proxy (used by mcp-server) |
|
| Port for the MCP server |
| (unset) | If set, all |
Available Tools
Design Inspection
Tool | Description |
| Full node tree of the current Figma page |
| Currently selected nodes |
| Single node by ID |
| Depth-limited snapshot optimized for AI context |
| File name, pages, current page, file key |
CSS & Layout — for engineering handoff
Tool | Description |
| CSS properties of a node (width, flex, color, padding, etc.) |
| Full auto-layout spec: direction, gap, padding, alignment, sizing mode |
| Constraints, layout alignment, grow flags, min/max sizes |
| Individual corner radii and corner smoothing |
| Stroke weights (per-side), dash, cap, join |
| Drop shadows and blurs with full detail |
| All local paint, text, effect, and grid styles |
Components & Variables — for token-driven development
Tool | Description |
| Component/instance property definitions, variant props, dev status |
| Instance overrides and main component reference |
| All variable collections, modes, and raw values |
| Design tokens grouped by collection and mode |
| Which variables are bound to a node and their resolved modes |
HTML Codegen — skip the spec, get the code
Tool | Description |
| Convert a node to HTML with inline CSS |
| Convert an entire Figma page to a standalone HTML document |
| Export a node as Figma REST API JSON (v1 format) |
Images & Assets
Tool | Description |
| Export nodes as PNG/SVG/JPG/PDF (base64-encoded) |
| Extract image bytes from a node with an image fill |
| All unique hex colors used across fills and strokes |
| All fonts used in the document |
UX Writing & Copy Audit
Tool | Description |
| Dump all text from a page or the entire file |
| Search text by keyword or regex across all pages |
| Find lorem ipsum, |
| Find text nodes overflowing their clipped containers |
| Audit text style consistency across pages |
| Rich text breakdown: per-segment font, size, color, hyperlinks |
| All local text styles with full typography properties |
| Replace text in any text node directly from the AI |
| Create a new text node |
Usage Examples
Design handoff: get implementation-ready specs
"Get the CSS for the selected card component, including its auto-layout and border spec."
The agent calls get_selection, then get_css, get_layout_spec, and get_stroke_spec on the result — and returns a ready-to-copy CSS block.
"Convert the Login page to HTML."
to_html_page({ page: "Login" })Returns a full HTML document with inline CSS. Paste into your project as a starting point.
"What design tokens does this button use?"
get_node_variable_bindings({ nodeId: "4029:512" })Returns every variable bound to that node — color tokens, spacing tokens, and their resolved values per mode (light/dark).
UX Writing: audit and update copy at scale
"Find every screen that still has placeholder text."
find_placeholders({})Returns node IDs, page names, and the placeholder content — sorted by page.
"Are the CTA button labels consistent across the app?"
find_text_nodes({ regex: "(Get started|Start free|Try now|Sign up)" })
check_text_consistency({ group_by: "page" })The agent cross-references both results and flags pages where labels deviate.
"Update the hero headline on the Landing page to: 'Ship faster with AI-native tooling'"
set_text_content({ nodeId: "3910:220", text: "Ship faster with AI-native tooling" })The change appears live in Figma immediately.
"Show me all text that is clipped and not fully visible."
detect_text_overflow({})Returns every text node overflowing its parent container, with node IDs so the designer can fix the layout.
Multi-file support
If you have multiple Figma files open with the plugin running in each, pass a fileKey to any tool to target a specific file:
get_document({ fileKey: "abc123XYZ" })Omit fileKey when only one file is connected — the proxy routes to the single active connection automatically.
CI/CD
A GitHub Actions workflow (.github/workflows/docker-build-push.yml) builds and pushes both services to GitHub Container Registry on every push to main:
ghcr.io/<owner>/figma-proxy-mcp/mcp-server:latest
ghcr.io/<owner>/figma-proxy-mcp/mcp-server:<git-sha>
ghcr.io/<owner>/figma-proxy-mcp/websocket:latest
ghcr.io/<owner>/figma-proxy-mcp/websocket:<git-sha>No extra secrets needed — uses GITHUB_TOKEN.
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.
Latest Blog Posts
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/alfianyusufabdullah/figma-proxy-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server