Figma MCP Bridge
Figma Plugin & MCP server to bypass API limits
Installation
npx figma-mcp-bridgeAsk AI about Figma MCP Bridge
Powered by Claude Β· Grounded in docs
I know everything about Figma MCP Bridge. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
Figma MCP Bridge
While other amazing Figma MCP servers like Figma-Context-MCP exist, one issues is the API limiting for free users.
The limit for free accounts is 6 requests per month, yes per month.
Figma MCP Bridge is a solution to this problem. It is a plugin + MCP server that streams live Figma document data to AI tools without hitting Figma API rate limits, so its Figma MCP for the rest of us β
It supports multiple Figma files connected simultaneously; open the plugin in each file and your AI agent can query any of them by fileKey. Single-file setups work exactly as before with no changes required.
Demo
Watch a demo of building a UI in Cursor with Figma MCP Bridge
Quick Start
1. Add the MCP server to your favourite AI tool
Add the following to your AI tool's MCP configuration (e.g. Cursor, Windsurf, Claude Desktop):
{
"figma-bridge": {
"command": "npx",
"args": ["-y", "@gethopp/figma-mcp-bridge"]
}
}
That's it β no binaries to download or install.
2. Add the Figma plugin
Download the plugin from the latest release page, then in Figma go to Plugins > Development > Import plugin from manifest and select the manifest.json file from the plugin/ folder.
3. Start using it π
Open a Figma file, run the plugin, and start prompting your AI tool. The MCP server will automatically connect to the plugin.
To work across multiple files, just open the plugin in each Figma file. The bridge keeps all connections active and your AI agent can target any of them by fileKey.
If you want to know more about how it works, read the How it works section.
Available Tools
| Tool | Description |
|---|---|
list_files | List all connected Figma files (supports multi-file workflows) |
get_document | Get the current Figma page document tree |
get_selection | Get the currently selected nodes in Figma |
get_node | Get a specific Figma node by ID (colon format, e.g. 4029:12345) |
get_styles | Get all local paint, text, effect, and grid styles |
get_metadata | Get file name, pages, and current page info |
get_design_context | Get a depth-limited tree optimized for understanding design context |
get_variable_defs | Get all variable collections, modes, and values (design tokens) |
get_screenshot | Export nodes as PNG/SVG/JPG/PDF (base64-encoded) |
save_screenshots | Export and save screenshots directly to the local filesystem |
All tools accept an optional fileKey parameter when multiple Figma files are connected. Use list_files to discover connected files and their keys.
Local development
1. Clone this repository locally
git clone git@github.com:gethopp/figma-mcp-bridge.git
2. Build the server
cd server && npm install && npm run build
3. Build the plugin
cd plugin && bun install && bun run build
4. Add the MCP server to your favourite AI tool
For local development, add the following to your AI tool's MCP config:
{
"figma-bridge": {
"command": "node",
"args": ["/path/to/figma-mcp-bridge/server/dist/index.js"]
}
}
Structure
Figma-MCP-Bridge/
βββ plugin/ # Figma plugin (TypeScript/React)
βββ server/ # MCP server (TypeScript/Node.js)
βββ src/
βββ index.ts # Entry point
βββ bridge.ts # WebSocket bridge to Figma plugin
βββ leader.ts # Leader: HTTP server + bridge
βββ follower.ts # Follower: proxies to leader via HTTP
βββ node.ts # Dynamic leader/follower role switching
βββ election.ts # Leader election & health monitoring
βββ tools.ts # MCP tool definitions
βββ types.ts # Shared types
How it works
There are two main components to the Figma MCP Bridge:
1. The Figma Plugin
The Figma plugin is the user interface for the Figma MCP Bridge. You run this inside the Figma file you want to use the MCP server for, and its responsible for getting you all the information you need.
2. The MCP Server
The MCP server is the core of the Figma MCP Bridge. It maintains a registry of WebSocket connections keyed by fileKey, so multiple Figma files can be connected simultaneously. The server is responsible for:
- Handling WebSocket connections from one or more Figma plugin instances
- Routing tool calls to the correct file based on
fileKey - Forwarding responses back to the AI client
- Handling leader election (as we can have only one WS connection to an MCP server at a time)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FIGMA (Browser) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Figma Plugin β β
β β (TypeScript/React) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β WebSocket
β (ws://localhost:1994/ws)
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PRIMARY MCP SERVER β
β (Leader on :1994) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Bridge Endpoints: β β
β β β’ Manages WebSocket conn β’ /ws (plugin) β β
β β β’ Forwards requests to plugin β’ /ping (health) β β
β β β’ Routes responses back β’ /rpc (followers) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β² β²
β HTTP /rpc β HTTP /rpc
β POST requests β POST requests
β β
βββββββββββββββββββ΄ββββββββββββ βββββββββββββββ΄ββββββββββββββββ
β FOLLOWER MCP SERVER 1 β β FOLLOWER MCP SERVER 2 β
β β β β
β β’ Pings leader /ping β β β’ Pings leader /ping β
β β’ Forwards tool calls β β β’ Forwards tool calls β
β via HTTP /rpc β β via HTTP /rpc β
β β’ If leader dies β β β β’ If leader dies β β
β attempts takeover β β attempts takeover β
βββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββ
β² β²
β β
β MCP Protocol β MCP Protocol
β (stdio) β (stdio)
βΌ βΌ
βββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββ
β AI Tool / IDE 1 β β AI Tool / IDE 2 β
β (e.g., Cursor) β β (e.g., Cursor) β
βββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββ

