figma-local-bridge
Provides tools for interacting with the Figma desktop plugin to create and edit frames, text, shapes, colors, and auto-layout, as well as read copy, audit text overflow, and export PNGs.
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-local-bridgeAudit the current frame for text overflow"
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.
Local Figma MCP bridge
This is a small bridge between an MCP client and a Figma plugin running on your own Mac. The Figma plugin must be open in the file you intend to edit; canvas work uses Figma's Plugin API under your active Figma session, without an API key. Optional comment tools use Figma's REST API because comments are not exposed to plugins.
The repository is a dual Codex/Claude package:
.codex-plugin/plugin.json,.mcp.json, andskills/package the bridge and workflow for Codex..claude-plugin/plugin.jsonand.claude-mcp.jsonpackage the same MCP server for Claude Code.plugin/contains the Figma Desktop development plugin. Importing it into Figma is still a separate, one-time step.dist/server.mjsis a self-contained MCP runtime. Recipients do not need this repository's parent project or its dependencies.
Clone it or download the latest release ZIP:
git clone https://github.com/david-buck/figma-local-bridge.git
cd figma-local-bridgeWhat it can do today
Report the active Figma selection.
Create styled frames, rectangles, ellipses, and editable text on the current page.
Set solid fills and strokes, opacity, corner radii, frame clipping, text wrapping, alignment, line height, and letter spacing.
Create named local colour variables from prompt-supplied colour names and bind them to fills, strokes, and text.
Place safe SVG strings as editable vector artwork (for approved logo assets, icons, and simple decorative devices).
Parent newly created nodes inside a frame or other compatible container.
List fonts installed in the open Figma desktop app before creating text.
Apply or remove auto-layout on a selected frame, component, component set, or instance.
List pages; navigate between them; query page nodes with IDs, bounds, hierarchy, and basic style metadata.
Return PNG screenshots of a node or the visible current page.
Move, resize, reparent, duplicate, select, read/update text in, or explicitly delete existing nodes.
Read all frame or spread copy in visual reading order with IDs and hierarchy.
Read compact copy-sync data containing only text IDs, copy, bounds, opacity, and effective visibility.
Separate effectively visible copy from hidden/conditional text while retaining both for review.
List only artboard-level frames, excluding incidental nested layout frames.
Audit text overflow, clipping, truncation, missing fonts, and font sizes without changing the document; hidden and opacity-zero nodes are skipped by default.
Export a frame directly to a local PNG under
~/Pictures/Figma MCP Exportswithout returning base64 through MCP.Prepare one artboard or an ordered spread for review in one call: structured copy, local PNGs, then overflow audits.
Apply multiple copy updates and return compact update verification, overflow audits, and local PNG paths in one MCP response.
Resize text frames, change auto-resize/truncation, or split a mixed-style text layer into heading and body while preserving its range styles.
Return summary frame/audit results by default to avoid oversized, truncated MCP responses; request full hierarchy only when needed.
Compose a replacement frame with panels, dividers, and styled-span text in one guarded command, then audit and export it.
Archive or supersede explicit sibling nodes into a hidden named group with replacement metadata instead of deleting them or leaving opacity-zero layers.
List verified local variables/styles plus colours and fonts used on the page, or copy style from a known on-brand node.
Discover verified local and currently used library components/styles, create linked component instances, and apply named styles by ID or key.
Store explicit per-user design-system preferences locally, query/update/revert them through the LLM, and return a no-edit clarification result when plausible systems tie.
Copy/crop an existing Figma image fill or place an explicitly approved local PNG/JPEG/GIF/WebP file.
List review comments, post a pinned comment or reply, and explicitly delete a comment through Figma's REST API.
It deliberately binds only to 127.0.0.1 and accepts only one open Figma file at a time. It does not accept arbitrary JavaScript. SVG imports reject scripts, event handlers, iframes, and foreignObject elements.
Related MCP server: FigmaExporterMcp
Install the Figma Desktop plugin
In Figma desktop, open Plugins → Development → Import plugin from manifest….
Select
plugin/manifest.json.In the Figma file you want to edit, run Plugins → Development → Local MCP Bridge. It connects automatically; leave its small status panel open.
Build from source
The committed dist/server.mjs is ready to run. To rebuild it after changing server.mjs:
npm ci
npm run build
npm run checkNode 20 or newer is required when running outside a host that supplies its own Node runtime.
Use with Codex
Install the folder as a Codex plugin to load both the figma_local MCP tools and the included inspect-first skill. The plugin manifest is at .codex-plugin/plugin.json and its MCP configuration is in .mcp.json.
For a direct local MCP configuration instead, add the absolute path to the bundled server in ~/.codex/config.toml:
[mcp_servers.figma_local]
command = "node"
args = ["/ABSOLUTE/PATH/TO/figma-local-bridge/dist/server.mjs"]Start a new Codex task after installing or updating the plugin so its skills and MCP tool definitions are loaded.
Optional comment setup
Figma does not expose comments to its Plugin API, so comment tools are the one part of the bridge that needs REST credentials. Create a Figma personal access token with file_comments:read; add file_comments:write if you also want to post, reply, or delete. Set it privately as FIGMA_ACCESS_TOKEN in the MCP server environment—never in the repository.
Set FIGMA_FILE_KEY as a convenient default, or pass a Figma file URL or key to each comment tool. A normal development or public plugin cannot reliably supply the current file key, so an explicit key is expected. figma_comment_status tells you whether the token and file key are available without exposing the token.
Use with Claude
The MCP tools work with Claude because the bridge uses standard stdio MCP rather than a Codex-specific protocol.
For Claude Code, install it as a local Claude plugin, or add the bundled server directly:
claude mcp add --scope user figma-local -- node /ABSOLUTE/PATH/TO/figma-local-bridge/dist/server.mjsThe .claude-plugin/plugin.json manifest and .claude-mcp.json use ${CLAUDE_PLUGIN_ROOT} when it is installed as a Claude Code plugin. Claude Code can also discover the included skills/figma-local-workflow/SKILL.md from the plugin.
Claude Desktop can run the same server as a local desktop extension/MCP bundle, but this repository does not yet ship a signed or directory-listed extension. Directly shared local extensions should only be installed when the recipient trusts the source.
Run a smoke test
Start it directly for a smoke test:
node dist/server.mjsOpen the Figma plugin in one file and call figma_bridge_status from the MCP client. The plugin retries automatically if the active bridge process changes.
Codex may start a separate MCP process for each task. Every process exposes the complete tool set over stdio, while one elected owner holds the localhost Figma connection and the others proxy commands to it. If the owner task closes, a proxy takes over automatically and the Figma plugin reconnects. Each process also exits when its own Codex parent or stdio client disappears. The plugin sends heartbeats during slow exports and audits, so those operations remain visibly connected. You should not need to kill a stale process manually or restart Codex merely because another task is using the bridge.
For a human-readable connection check, open http://localhost:3846/. It shows the bridge version, connected plugin version, current Figma page, and last heartbeat. figma_bridge_status also reports whether the calling task is the bridge owner or a proxy. Opening the plugin in another Figma file deliberately transfers the single connection; the displaced plugin stops retrying until reloaded.
Recommended inspect-first workflow
The MCP advertises this sequence in its server instructions, and the companion personal skill at ~/.codex/skills/figma-local-workflow reinforces it:
figma_bridge_status, thenfigma_get_user_preferencesWhen review feedback is in scope,
figma_comment_status, thenfigma_list_commentsfigma_list_design_system_assets, thenfigma_list_artboardsfigma_read_frame_contentorfigma_read_spread_contentExport only when visual judgement is needed
Analyse copy and layout together; run
figma_audit_text_overflowwhen fit mattersOnly then edit identified nodes
Re-read and re-audit; re-export only when the change needs visual verification
After artboard discovery, figma_prepare_review is the faster equivalent for one to eight known artboards. It performs steps 2–4 in order, writes each PNG locally, and does not edit the file.
This avoids guessed node IDs, partial-copy edits, and layout changes made without visual evidence.
Design-system preference workflow
figma_get_user_preferences returns only choices the user explicitly confirmed. When choosing assets, prefer a matching scoped preference, then a linked component already used in the file, then another verified component/style/token, and construct from raw values only as a fallback. Use figma_create_component_instance and figma_apply_design_style to preserve linkage.
If multiple systems remain equally plausible, call figma_resolve_design_choice. A tie returns needsClarification: true with candidate details and must not trigger an edit. Ask the user which system to use; apply that answer once, or save it with figma_set_user_preference only after explicit confirmation. Preferences can be queried, updated, deleted, and reverted in ordinary LLM conversation. Revision guards prevent two MCP tasks from silently overwriting each other.
Preferences are private to the local OS user and stored at ~/.figma-local-bridge/preferences.json by default. Set FIGMA_PREFERENCES_DIR to relocate the store. The bridge never infers or saves preferences from the canvas automatically.
External copy-sync workflow
When the user identifies an external system as the source of truth:
List artboards and call
figma_read_copyfor the exact target frame IDs.Diff external fields against the returned text IDs and
copy. Omit unchanged nodes.Call
figma_apply_copy_updatesonce, passing each prior value asexpectedText, and include affected frames in bothauditFramesandexportFrames.Inspect the local PNGs and audits returned by that call. Use
figma_set_text_frameorfigma_split_text_blockonly when changed hierarchy or fit requires it, then verify again.
Delete only a clearly stray element identified by the user. Preserve all other nodes, including hidden or superseded content.
Page re-layout workflow
List artboards, read the target in
summarymode, and export its current PNG.Call
figma_list_design_system_assetsandfigma_list_page_tokens. Prefer verified linked components, named styles, and variables; usefigma_copy_style_from_nodeagainst an on-brand source node when needed. Do not approximate available assets, fonts, or colours.Call
figma_compose_framewith one named replacement frame and ordered frame/rectangle/text elements. Use styled spans for mixed emphasis and typographic case inside a single text layer; keep the stored copy in natural case. The command removes its whole new subtree if any element fails.Prefer passing explicit
archiveNodeIdsto the composer so previous sibling content is grouped and hidden only after the replacement succeeds. Otherwise verify the replacement, then callfigma_supersede_layoutorfigma_archive_nodes.Inspect the returned compact overflow audit and local PNG. Re-read in
fullmode only when hierarchy or hidden variants require diagnosis.
Updating the bridge
After changing plugin/code.js, reload the development plugin in Figma (Plugins → Development → Local MCP Bridge → Reload plugin). It reconnects automatically. Restart Codex after changing server.mjs so the MCP process and its tool definitions are reloaded.
Rebuild and run all local checks after bridge changes:
npm run build
npm run checkDesign-oriented tools
The bridge keeps its command surface intentionally narrow. It exposes the following controlled operations rather than arbitrary Plugin API code:
figma_create_frame— exact dimensions, solid fill/stroke, clipping, auto-layout, and optional parent.figma_create_rectangle/figma_create_ellipse— graphic blocks, CTA backgrounds, and simple devices.figma_create_text— editable text with colour, wrapping, alignment, line height, letter spacing, typographic case, styled spans, opacity, and optional parent.figma_style_node— apply a constrained visual style to an existing node.figma_create_color_tokens— create/update local Figma colour variables using the prompt's colour names verbatim, then return token IDs for binding.figma_import_svg— place a validated SVG string as editable vectors.figma_list_fonts— discover installed typefaces and style names.figma_list_pages/figma_navigate_to_page— inspect and switch the active page.figma_query_page_nodes— inspect node IDs, bounds, ancestry, child counts, and concise visual metadata.figma_screenshot— return a PNG for a selected node or the visible page.figma_move_resize_reparent,figma_set_selection,figma_duplicate_node— controlled structural editing.figma_read_text/figma_update_text— inspect and replace existing editable text with its current fonts loaded first.figma_read_copy— compact, ordered text IDs/copy/bounds/visibility for external-source diffing.figma_apply_copy_updates— guarded style-preserving updates plus overflow audits and local PNG verification in one response.figma_set_text_frame— set text width, height, auto-resize, truncation, and line limits without replacing copy.figma_split_text_block— split one styled text layer into heading and body while preserving each range's typography.figma_delete_node— permanently remove one identified node and its descendants; use only on an explicit user request.figma_read_frame_content/figma_read_spread_content— ordered editorial copy with text-node IDs and hierarchy paths.figma_list_artboards— clean page-level and section-level artboard list, excluding nested implementation frames.figma_audit_text_overflow— bounds and natural-size checks with actionable overflow and clipping warnings.figma_export_frame_png— write a PNG to~/Pictures/Figma MCP Exportsand return only its absolute path and dimensions.figma_prepare_review— read one to eight ordered artboards, export them locally, and optionally audit their text in one non-mutating call.figma_archive_nodes/figma_supersede_layout— hide explicit prior siblings in a named reversible group and record the replacement relationship.figma_compose_frame— atomically create a frame, panels/dividers, and styled-span text, optionally archive previous content, then audit/export.figma_copy_style_from_node/figma_list_page_tokens— inherit verified on-brand styling and discover local variables/styles plus page usage.figma_list_design_system_assets— discover components, styles, and variables verified in the current file, including remote assets currently used and enabled linked-library variable collections.figma_create_component_instance/figma_apply_design_style— create a linked instance or apply a named local/library style by verified ID or key.figma_get_user_preferences/figma_set_user_preference/figma_delete_user_preference/figma_revert_user_preferences— manage explicit, revision-guarded per-user design-system guidance.figma_resolve_design_choice— score candidates against confirmed scoped preferences and require clarification rather than guessing when they tie.figma_copy_image_fill/figma_place_local_image— reuse/crop an existing Figma image or place an explicitly approved local raster image.figma_comment_status/figma_list_comments— check optional REST setup and read file comments, with resolved comments excluded by default.figma_post_comment— post a canvas- or frame-pinned comment, or reply to an existing comment.figma_delete_comment— permanently delete one identified comment behind an explicit confirmation guard.
For brand assets, read a trusted SVG file locally and pass its content to figma_import_svg; do not redraw logo artwork as text or paths.
Colour-token workflow
When a prompt names colours, call figma_create_color_tokens before creating artwork. Preserve the supplied names exactly (for example, Oxford blue, SBS orange, Lilac, White, and Black) and provide their hex values. Use the returned fillTokenId or strokeTokenId on frames and shapes, and fillTokenId on text. This keeps the artwork bound to one reusable source of truth instead of scattering raw hex values across layers.
Security model
The canvas bridge listens only on localhost (127.0.0.1), so it is not reachable over your network. Browser requests are accepted only without an Origin header or from Figma origins; unrelated web pages cannot use its CORS surface. It intentionally removes the former shared bridge token to make the local Figma workflow frictionless. Other local processes running as you on this Mac could still call its port while Codex is open, so do not use it on a shared, untrusted Mac.
If comment support is enabled, the server sends FIGMA_ACCESS_TOKEN only to Figma's configured API endpoint in an X-Figma-Token header. It never sends the token to the Figma plugin or includes it in tool output. Keep the token in private MCP environment configuration and grant only the comment scopes you need. Canvas tools continue to work without it.
The preference store is created with user-only file permissions. It contains guidance you explicitly ask the LLM to remember, not Figma document contents. No preference is learned or written automatically.
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 Connectors
The Figma MCP server brings Figma design context directly into your AI workflow.
Remote MCP for C2PA intake verifier MCP, structured receipts, audit logs, and reviewer-ready evidenc
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceUnofficial local MCP bridge for reading the currently open Figma file through a Figma plugin. Provides tools to inspect selection, file info, and export selected nodes as SVG/PNG.MIT
- FlicenseBqualityCmaintenanceA local bridge that lets MCP clients inspect, export, and modify Figma files through a development Figma plugin.65
- AlicenseBqualityBmaintenanceLocal MCP server connecting AI clients to the Figma desktop app for inspecting and editing Figma documents via the Plugin API.163761MIT
- AlicenseNot gradedqualityCmaintenanceA local MCP server that lets MCP clients inspect and edit the Figma document currently open in the Figma desktop app using a local bridge and development plugin.MIT
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/david-buck/figma-local-bridge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server