Figma BridgeSAFE
Figma Plugin & MCP server to bypass API limits
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
[](https://gethopp.app)
- Demo
- Quick Start
- Available Tools
- Local development
- Structure
- How it works
[!NOTE] Requires the Figma desktop app (macOS/Windows). The browser version of Figma does not support importing development plugins.
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.
It also includes a small, opt-in set of write tools for safe agent-driven edits — see Editing Notes below.
Demo
Watch a demo of building a UI in Cursor with Figma MCP Bridge
[](https://youtu.be/ouygIhFBx0g)
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
Downl
5a3d1327257dOBSERVED · 2026-09-30Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.
claude mcp add figma-mcp-bridge -- npx -y @gethopp/[email protected]
{
"mcpServers": {
"figma-mcp-bridge": {
"command": "npx",
"args": [
"-y",
"@gethopp/[email protected]"
]
}
}
}Exposed tools (40)
15 read · 22 write · 3 destructive. Blast radius: 3 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
apply_animation_style | write | Apply a preset animation style to a node (Motion API beta). When multiple files are connected, specify fileKey. |
apply_manual_keyframe_track | write | Applies or replaces the manual Motion keyframe track for a property, paint, or effect field on a node. When multiple files are connected, specify fileKey. |
create_frame | write | Create a new frame, optionally inside a specified parent. You can set name, size, position, and a solid fill. When multiple files are connected, specify fileKey. |
create_image | write | Create an image-backed rectangle from a local file path, remote URL, or data URI. You can set its parent, position, size, corner radius, and fit mode. When multiple files are connected, specify fileKey. |
create_page | write | Create a new page in the Figma document, optionally naming it and switching the editor to it. Returns the new page |
create_shape | write | Create a rectangle, ellipse, or line, optionally inside a specified parent. You can set its size, position, rotation, fill, and stroke. When multiple files are connected, specify fileKey. |
create_text | write | Create a new text node, optionally inside a specified parent. You can set its content, font, size, alignment, color, position, and bounds. When multiple files are connected, specify fileKey. |
delete_nodes | destructive | Delete one or more nodes. This is destructive and requires confirm: true. Page and document nodes cannot be deleted through this tool. When multiple files are connected, specify fileKey. |
duplicate_nodes | read | Duplicate one or more nodes in place. The duplicates remain under the same parent as the originals. When multiple files are connected, specify fileKey. |
get_design_context | read | Get the design context for the current selection or page. Returns a summarized tree structure optimized for understanding the current design context. When multiple files are connected, specify fileKey. |
get_document | read | Get the current Figma page document tree. When multiple files are connected, specify fileKey. |
get_layout_tree | read | Read absolute node transforms and layout bounds for a capture root. Separate screenshot calls are non-atomic. |
get_metadata | read | Get metadata about the current Figma document including file name, pages, and current page info. When multiple files are connected, specify fileKey. |
get_motion_styles | read | List all available animation presets in Figma (Motion API beta). When multiple files are connected, specify fileKey. |
get_node | read | Get a specific Figma node by ID. Accepts top-level IDs like |
get_node_motion | read | Read a node |
get_screenshot | read | Export a screenshot of the selected nodes or specific nodes by ID. Returns base64-encoded image data. When multiple files are connected, specify fileKey. |
get_selection | read | Get the currently selected nodes in Figma. When multiple files are connected, specify fileKey. |
get_styles | read | Get all local styles in the document. When multiple files are connected, specify fileKey. |
get_variable_defs | read | Get all local variable definitions including variable collections, modes, and variable values. Variables are Figma |
group_nodes | read | Wrap a list of nodes in a new group. Nodes must share a common parent (or supply parentId explicitly). Returns the new group |
import_html_layers | write | Import a DOM serialization (JSON produced by html-figma |
list_files | read | List all currently connected Figma files. Returns fileKey and fileName for each. Use the fileKey to target a specific file in other tools. |
remove_animation_style | destructive | Remove an applied animation style from a node (Motion API beta). If no animationStyleId is provided, removes all styles. When multiple files are connected, specify fileKey. |
remove_manual_keyframe_track | destructive | Removes the manual Motion keyframe track for a property, paint, or effect field on a node. When multiple files are connected, specify fileKey. |
reparent_nodes | write | Move one or more nodes into a different parent container. When multiple files are connected, specify fileKey. |
save_screenshots | write | Export screenshots for multiple nodes and save them directly to the local filesystem. Returns metadata only (no base64). When multiple files are connected, specify fileKey. |
scroll_and_zoom_into_view | read | Scroll and zoom the Figma viewport so the given nodes are framed in view. Works in both design editor and Dev Mode. |
set_auto_layout | write | Configure auto-layout on a frame: direction, gap, padding, alignment, sizing modes, wrap. Set layoutMode= |
set_effects | write | Replace a node |
set_gradient_fill | write | Replace a node |
set_node_properties | write | Patch common node properties such as name, position, size, visibility, opacity, and corner radius. Only supported properties for the target node type may be changed. Use set_solid_fill or set_gradient_fill to change paints. When multiple files are connected, specify fileKey. |
set_node_visibility | write | Show or hide specific Figma nodes. Returns previous visibility for each node so you can restore them after. Useful for isolating a single layer before exporting: hide all siblings, export the frame, then restore visibility. |
set_selection | write | Set the current page selection to a list of node IDs. Pass an empty array to clear the selection. Works in both design editor and Dev Mode. |
set_solid_fill | write | Replace a node |
set_stroke_properties | write | Patch stroke geometry properties: weight, align, dash pattern, cap, join. Use set_solid_fill/set_gradient_fill with target= |
set_text_content | write | Update the contents of a single text node. The plugin loads the node |
set_text_properties | write | Patch common text properties such as font family/style, size, alignment, auto-resize, line height, letter spacing, fill color, and bounds. When multiple files are connected, specify fileKey. |
set_timeline_duration | write | Sets the duration (in seconds) for a timeline. When multiple files are connected, specify fileKey. |
ungroup_node | write | Ungroup a group or frame — its children move up to its parent and the wrapper is removed. Returns the IDs of the orphaned children in their new parent. |
Trust audit
SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (2 observation(s))
- Network
- declared (5 observation(s))
- Shell
- none-observed
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (6)
delete_nodes, remove_animation_style, remove_manual_keyframe_track
.prettierignore
outDir: "../../dist",
husky, lint-staged
react, react-dom, @figma/plugin-typings, @types/react, @types/react-dom, @vitejs/plugin-react, concurrently, typescript
@modelcontextprotocol/sdk, ws, zod, @types/node, @types/ws, typescript
Gates applied: no_behavioural_pass.
5a3d1327257dfull audit observations/trust-audit/mcp-server/gethopp__figma-bridge-2.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-09-30 | 5a3d1327257d | SAFE | B | 89 | first audit |
Questions
What is the Figma Bridge MCP server?
Figma Plugin & MCP server to bypass API limits
What tools does Figma Bridge expose?
40 in total: 15 read-only, 22 that write, and 3 that can delete or overwrite (delete_nodes, remove_animation_style, remove_manual_keyframe_track). Every one is listed on this page with its risk.
Is Figma Bridge safe to connect to an agent?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B. Separately from the audit: 3 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does Figma Bridge need?
No credential environment variables were found in its source, so it appears to need none.
How does Figma Bridge run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as @gethopp/figma-mcp-bridge at 0.1.1.
How current is this page?
The grade is for one exact copy of the source (5a3d1327257d), read on 2026-09-30. The repository is watched and re-audited when it changes.