Figma Bridge MCP
Enables AI agents to read and edit the currently open Figma file through the Figma Desktop plugin API. Provides tools for checking connection/status, listing pages, retrieving node trees, exporting node JSON and images, exporting image fills, and running arbitrary Plugin API JavaScript for read and write operations.
Click on "Deploy 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 Bridge MCPExport the frame I selected in Figma as a PNG and save it locally"
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 Bridge MCP
A local MCP server that lets AI coding agents (Claude, Codex, GitHub Copilot) read and edit the file you have open in Figma Desktop. It talks to Figma through a small development plugin instead of the REST API or Figma's hosted MCP, so:
it works on a View / Starter seat (the hosted MCP gives a handful of calls a month there),
there are no rate limits and no response truncation,
the agent can write to the file, not only read it (via
figma_run_script).
AI agent ──stdio──> figma-bridge (server.js) ──ws://127.0.0.1:3055──> plugin/ui.html ──postMessage──> plugin/code.js (Plugin API)The agent starts the server (npx -y @maxsbond/figma-bridge) as a stdio MCP server. The server opens a WebSocket on
127.0.0.1:3055 and waits. The "Figma Bridge" plugin, running in Figma Desktop,
connects to it and executes each request with the Plugin API in the open file.
Requirements
Node.js 18 or newer (the LTS installer is fine)
Figma Desktop (the browser version can't reach localhost from a dev plugin)
Edit access to the file. Figma doesn't run plugins in view-only files; if you only have view access, duplicate the file to your drafts.
Related MCP server: FreeMCP for Figma
Install
There are two parts: the MCP server, which your AI agent starts on its own, and the
Figma plugin, which you import into Figma once. The server is published on npm as
@maxsbond/figma-bridge, so
there is nothing to clone or build.
1. Add the server to your agent
VS Code (GitHub Copilot): click Install in VS Code and confirm in VS Code. Other agents are in the sections below.
2. Set up the Figma plugin
You import the plugin once. After that you only need to run it (step 4).
1. Get the plugin files. Run this in a terminal:
npx -y @maxsbond/figma-bridge setupIt copies the plugin to Documents/Figma Bridge Plugin and opens that folder. Run it
again after updating to get the new plugin version.
2. Import the plugin. In Figma Desktop open any design file, click the Figma logo in the top-left corner and go to Plugins → Development → Import plugin from manifest… (right-clicking the canvas gets you the same Plugins menu).
3. Pick manifest.json in the Figma Bridge Plugin folder and click Open.
"Figma Bridge" now shows up under Plugins → Development.
4. Run the plugin whenever you want the agent to work in Figma: open the file and pick Plugins → Development → Figma Bridge.
5. Check the connection. The small plugin window says connected to MCP server once an agent with this MCP is running (see the next sections). If the agent isn't running yet, it says "disconnected — retrying…" and connects by itself when the agent starts. Keep the window open while you work, since closing it stops the bridge.
From source
If you'd rather run a checkout: clone the repo, run npm install, import
plugin/manifest.json from it, and in the configs below use node with
/absolute/path/to/figma-bridge/server.js instead of npx -y @maxsbond/figma-bridge.
Use with Claude
Claude Code
claude mcp add --scope user figma-bridge -- npx -y @maxsbond/figma-bridgeCheck it with claude mcp list, or /mcp inside a session. Exports go to
./figma-exports/ in the directory you started claude from.
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or
%APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"figma-bridge": {
"command": "npx",
"args": ["-y", "@maxsbond/figma-bridge"],
"env": {
"FIGMA_BRIDGE_OUT_DIR": "/absolute/path/to/figma-exports"
}
}
}
}Restart Claude Desktop. Set FIGMA_BRIDGE_OUT_DIR here because a desktop app doesn't
start the server in a folder you'd want exports in.
Use with Codex
Works for the Codex CLI, the Codex IDE extension and the ChatGPT desktop app. They all
read ~/.codex/config.toml.
codex mcp add figma-bridge -- npx -y @maxsbond/figma-bridgeor add it by hand:
[mcp_servers.figma-bridge]
command = "npx"
args = ["-y", "@maxsbond/figma-bridge"]
# Codex's default per-tool timeout is 60 s; big exports and scripts can take longer.
tool_timeout_sec = 180
# optional
# [mcp_servers.figma-bridge.env]
# FIGMA_BRIDGE_OUT_DIR = "/absolute/path/to/figma-exports"Check it with codex mcp list, or /mcp inside the Codex TUI.
Use with GitHub Copilot
VS Code (Copilot Chat, agent mode)
The Install in VS Code link above adds the server to your user settings. To add it
to one project instead, create .vscode/mcp.json:
{
"servers": {
"figma-bridge": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@maxsbond/figma-bridge"],
"env": {
"FIGMA_BRIDGE_OUT_DIR": "${workspaceFolder}/figma-exports"
}
}
}
}Click Start above the server entry (or run MCP: List Servers → figma-bridge →
Start), switch Copilot Chat to Agent mode and make sure the figma_* tools are
ticked in the tools picker. MCP tools aren't available in Ask/Edit mode. On Copilot
Business/Enterprise your organization admin has to allow MCP servers.
Copilot CLI
Add it with /mcp add inside copilot, or edit ~/.copilot/mcp-config.json:
{
"mcpServers": {
"figma-bridge": {
"type": "local",
"command": "npx",
"args": ["-y", "@maxsbond/figma-bridge"],
"tools": ["*"]
}
}
}Tools
Tool | What it does |
| Connection check: file name/key, current page, selection |
| Pages of the open file |
| id / name / type / box outline to a given depth, for finding node ids |
| Node JSON to disk: |
| PNG / JPG / SVG / PDF render to disk |
| Original raster images used in image fills |
| Arbitrary Plugin API JavaScript (read and write), |
Node ids can be given as 1:2, 1-2 or a full Figma URL with ?node-id=.
Results over ~15 KB are saved to a file and the tool returns the path instead.
Things to try once it's connected:
"What's selected in Figma? Export it as PNG and JSON."
"Build this React component from Figma node 12:345."
"Rename every layer called
Frame 12…on this page to something meaningful.""Make a dark variant of the selected component set."
Configuration
Env var | Default | Meaning |
|
| Where exports are written ( |
|
| WebSocket port. If you change it, change it in |
|
| How long to wait for the plugin to answer one request |
Troubleshooting
"Figma plugin is not connected": run Plugins → Development → Figma Bridge in the file you want to work on. The plugin only sees that one file.
"Port 3055 is already taken": only one server can hold the port, and the plugin talks to whoever does. This happens when two agents run at once (say Claude Code and Codex both have the MCP enabled) or an old server process is still alive. Find it with
lsof -iTCP:3055 -sTCP:LISTENand close that agent or kill the process. The next figma_* call retries the bind, and
the plugin reconnects within ~10 s. To run two agents at the same time, give one of them a
different FIGMA_BRIDGE_PORT and a second copy of the plugin pointing at that port.
Scripts fail with "Cannot unwrap symbol": the result contains figma.mixed
(for example the fontSize of a text node with mixed sizes). Convert it before returning,
e.g. JSON.parse(JSON.stringify(value, (k, v) => typeof v === 'symbol' ? 'MIXED' : v)).
Node not found / page not loaded in scripts: the plugin uses
documentAccess: dynamic-page, so use the async APIs (figma.getNodeByIdAsync,
node.getMainComponentAsync(), page.loadAsync() / figma.loadAllPagesAsync()).
figma.currentPage is whatever page is open in Figma right now, so address nodes by id
rather than relying on it.
Security
The WebSocket listens on 127.0.0.1 only and accepts connections only with
Origin: null (the plugin's sandboxed iframe), so regular web pages can't talk to it.
Keep in mind that figma_run_script runs whatever code the agent sends with full edit
rights on the open file. Figma's undo works for it, but review what your agent is doing
in files that matter.
License
Available Tools
7 toolsfigma_export_imageC
Render a node to PNG/JPG/SVG/PDF and save it to disk.
| Name | Required | Description | Default |
|---|---|---|---|
| scale | No | Only for PNG/JPG | |
| format | No | PNG | |
| nodeId | Yes | Node id ("1:2" or "1-2") or a Figma URL containing ?node-id= | |
| outPath | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'Save it to disk' usefully signals a filesystem write, but it omits where files land, whether existing files are overwritten, required auth/scopes, and any rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero padding; every clause (verb, formats, destination) carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that writes files, with no output schema, no annotations, and one fully undocumented parameter (outPath), the description leaves the destination path semantics and overwrite behavior unaddressed. Too thin for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% (nodeId and scale are documented, format is self-describing via enum), so a 3 is the baseline. The description only echoes the format enum and adds nothing about outPath, which is undocumented in both the schema and the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (render), resource (node), output formats, and the side effect (save to disk). It is clearly distinguishable from siblings like figma_export_json and figma_export_image_fills, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this over figma_export_json or figma_export_image_fills, nor any stated prerequisites. Usage is only implied by the format list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_export_image_fillsC
Save every raster image used as an IMAGE fill inside a node (original bytes, named by imageHash).
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | Node id ("1:2" or "1-2") or a Figma URL containing ?node-id= | |
| outDir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full behavioral burden. It does disclose that original bytes are preserved and files are named by imageHash, which is useful, but says nothing about where files land when outDir is omitted, overwrite behavior, required auth, or rate/size limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the resource and the output convention front-loaded and no filler. It is efficient, though slightly under-specified for a tool that writes files to disk.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and half the parameters undocumented, the definition leaves key facts missing: the destination directory behavior and what the call returns on success or when no image fills exist. For a disk-writing export tool this is a notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: nodeId is documented in the schema, but outDir has no description anywhere. The description adds no parameter-level detail (no default directory, no path format), so it fails to compensate for the undocumented parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Save) and a precisely scoped resource: raster images used as IMAGE fills inside a given node. The parenthetical '(original bytes, named by imageHash)' further pins down what gets written, which implicitly separates it from the sibling figma_export_image, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no alternatives, no prerequisites. An agent cannot tell from the text when this should be preferred over figma_export_image or figma_export_json, nor what happens if a node contains no IMAGE fills.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_export_jsonB
Export the full JSON of a node to a file on disk and return the path plus a short summary. format "rest" = Figma REST API JSON (JSON_REST_V1), "compact" = trimmed tree with resolved style/variable names, "auto" = rest with compact fallback.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | auto | |
| nodeId | Yes | Node id ("1:2" or "1-2") or a Figma URL containing ?node-id= | |
| outPath | No | Where to write the file; defaults to figma-exports/<file>/<node>.json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden but only partly meets it: it does disclose the disk-write side effect and that a path plus summary come back, and it explains the 'auto' fallback behavior. It omits what happens on an existing file (overwrite/error), permission requirements, and any size or rate limits on large node exports.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the action and return value front-loaded, followed by the format semantics. No filler, though the format clause could be split for scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Absent an output schema, the description correctly states the return shape (path plus short summary) and the file-writing destination. It is nearly complete for a 3-parameter exporter; only failure/overwrite semantics and any export size constraints are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The 'rest', 'compact', and 'auto' enum values carry no schema descriptions, and the description supplies their meaning precisely (JSON_REST_V1 vs trimmed tree with resolved names vs rest-with-fallback). nodeId and outPath are already documented in the schema at 67% coverage, so the added value is concentrated on the enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (export full JSON of a node) plus the output side effect (writes to disk, returns path and summary). It is distinguishable from figma_export_image by the JSON payload, though it never contrasts itself with figma_get_tree, the closest sibling for reading node structure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to prefer this over figma_get_tree (in-memory tree) or the image exporters, nor any note on prerequisites such as file scope or node validity. Usage must be inferred purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_get_treeA
Lightweight outline (id, name, type, box) of a node or the current page, up to a given depth. Use to find node ids.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| nodeId | No | Node id ("1:2" or "1-2") or a Figma URL containing ?node-id= |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the shallow/lightweight nature of the response and the depth-bounded traversal, which helps distinguish it from full export tools, but it says nothing about error behavior, large-tree cost, or what happens when nodeId is omitted beyond the implicit 'current page'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short clauses, front-loaded with the operation and its output shape, followed by the use case. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with no annotations and no output schema, the description covers the return fields, the depth-bounded traversal, and the optional node target. Only minor gaps remain (default depth behavior, error cases), which is adequate for this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: nodeId is documented in the schema while depth is undescribed there. The description partially compensates by explaining that depth bounds the outline and that the target can be a node or the current page, but it doesn't state the default (3) or maximum (10) semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific operation and its return shape: an outline of a node or the current page containing id, name, type, and box. This clearly separates it from heavyweight siblings like figma_export_json, though it doesn't name those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use to find node ids" gives a clear motivation, which is more than nothing, but there is no when-not guidance, no mention of the alternative export tools, and no prerequisites (e.g. whether a page or node must be selected first).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_list_pagesB
List pages of the file open in Figma.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, and it says nothing about whether this is a safe read, what the returned page objects contain, their ordering, or whether pagination applies. 'List' implies read-only but that is an inference, not a disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence that front-loads the action and resource with zero filler. Nothing in it is redundant or padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with no output schema and no annotations, the description is minimally viable but thin. An agent can invoke it correctly, yet gains no information about the return shape or how results relate to other Figma listing tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to clarify and the baseline of 4 applies. The description's reference to 'the file open in Figma' does usefully clarify the implicit input (the active file) that the empty schema leaves unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List pages') and scopes it to 'the file open in Figma,' which is concrete. It does not, however, contrast itself with siblings like figma_get_tree or figma_export_json, so an agent must infer the boundary between listing pages and getting the node tree.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no named alternative among the six sibling tools. The only usage signal is the implicit scoping to the currently open file, which is inferred rather than stated as a condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_run_scriptA
Run arbitrary JavaScript in the plugin with the figma Plugin API global (top-level await, use return). Can read AND modify the open file. Large results are written to a file.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Body of an async function; `figma` is in scope |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does much of it: it discloses that the tool can read AND modify the open file (mutation), that top-level await is supported, that `return` supplies the result, and that large results are written to a file. It stops short of stating permission requirements, timeouts, or reversibility of file modifications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, dense sentences with the core action front-loaded and zero filler; each clause conveys distinct information (API surface, language semantics, mutation scope, output handling).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description covers the important gaps: what runs, what scope exists, mutation capability, and where large output goes. Error behavior and any execution limits are unaddressed but are not essential to invoking it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single `code` parameter, so baseline is 3; the description adds genuine meaning by explaining the code is an async function body with `figma` in scope and that `return` is the result mechanism, which shapes how the agent should author the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: run arbitrary JavaScript against the `figma` Plugin API global. This is clearly distinct in kind from the read-oriented siblings (figma_get_tree, figma_export_json), though the description never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'run arbitrary JavaScript' suggests a general-purpose escape hatch for operations the structured siblings do not cover, but the description never states when to prefer this over figma_get_tree or figma_export_json, nor any precondition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_statusA
Check the plugin connection and return the open file name/key, current page and selection.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It implies a read-only status check and discloses what is returned, which is useful, but says nothing about failure behavior (what is returned or thrown when the plugin is disconnected) or any timeout/permission characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words, moving from action to returned state in one pass.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by enumerating the return fields (file name/key, page, selection), which is sufficient for an agent to use the result. The only gap is unstated behavior on a disconnected plugin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter meaning to convey; the baseline for a no-param tool is 4. The description correctly does not invent parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ("Check") and resource ("plugin connection") and even enumerates the returned state (file name/key, current page, selection), so the agent knows exactly what this tool is for. It does not explicitly position itself against siblings like figma_list_pages or figma_get_tree, keeping it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose strongly implies usage (verify the plugin is connected before running other figma tools), but no explicit when-to-use or when-not-to-use guidance is stated. It is adequate but leaves the agent to infer the trigger condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v1.1.1- First observed
figma_export_image - First observed
figma_export_image_fills - First observed
figma_export_json - First observed
figma_get_tree - First observed
figma_list_pages - First observed
figma_run_script - First observed
figma_status
TDQS
Scored across 7 tools
Tools are mostly distinct: status/list_pages/get_tree/run_script each serve a clear purpose. The only mild overlap is between get_tree (lightweight outline) and export_json (full export), but the descriptions clearly differentiate lightweight ID-hunting from full serialization, and export_image vs export_image_fills cleanly separate rendering from extracting source bytes.
Consistent figma_ prefix with snake_case verb_noun pattern across nearly all tools (figma_list_pages, figma_get_tree, figma_export_json, figma_export_image, figma_run_script). The only deviation is figma_status, which omits a verb but remains readable and conventional for a health-check tool.
Seven tools is well-scoped for a Figma plugin bridge: connection check, page listing, node discovery, and three export variants plus a scripting escape hatch. No redundancy and nothing feels thin.
Read/inspection coverage is comprehensive (status, pages, tree, JSON, image render, image fills). Modification is covered only indirectly through figma_run_script rather than dedicated create/update/delete tools, which is workable but a minor ergonomic gap for structured mutations.
Maintenance
Related MCP Connectors
The Figma MCP server brings Figma design context directly into your AI workflow.
Serves your design system and coding standards to coding agents, so they stop guessing.
Live React design-system APIs, patterns, and code validation so AI agents build real UI, not slop.
Connect AI coding agents to Anima Playground, Figma, and your design system.
Related MCP Servers
- FlicenseCqualityDmaintenanceLocal bridge enabling AI agents to inspect and edit the currently open Figma Desktop file through the Figma Plugin API.292-
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to read and write a user's Figma file through the Figma Plugin API, offline and privately, without API tokens or rate limits.13 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI coding assistants to draw UI directly on a Figma Desktop canvas and read existing designs back as structured JSON, tokens, CSS, and screenshots, all over a localhost bridge without external API keys.184 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to inspect Figma selections, navigate pages, render previews, generate starter code, and submit user-approved canvas edits through a local bridge.3 npmMIT