Skip to main content
Glama
MaxsBond

Figma Bridge MCP

by MaxsBond

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 setup

It 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-bridge

Check 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-bridge

or 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

figma_status

Connection check: file name/key, current page, selection

figma_list_pages

Pages of the open file

figma_get_tree

id / name / type / box outline to a given depth, for finding node ids

figma_export_json

Node JSON to disk: rest (same shape as the REST API, JSON_REST_V1), compact (trimmed, with style/variable/component names resolved) or auto

figma_export_image

PNG / JPG / SVG / PDF render to disk

figma_export_image_fills

Original raster images used in image fills

figma_run_script

Arbitrary Plugin API JavaScript (read and write), figma in scope, top-level await, use return

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

FIGMA_BRIDGE_OUT_DIR

<cwd>/figma-exports

Where exports are written (<dir>/<file name>/…)

FIGMA_BRIDGE_PORT

3055

WebSocket port. If you change it, change it in plugin/manifest.json (devAllowedDomains) and plugin/ui.html (PORT) too

FIGMA_BRIDGE_TIMEOUT_MS

120000

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:LISTEN

and 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

MIT

Available Tools

7 tools
figma_export_imageC

Render a node to PNG/JPG/SVG/PDF and save it to disk.

ParametersJSON Schema
NameRequiredDescriptionDefault
scaleNoOnly for PNG/JPG
formatNoPNG
nodeIdYesNode id ("1:2" or "1-2") or a Figma URL containing ?node-id=
outPathNo

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesNode id ("1:2" or "1-2") or a Figma URL containing ?node-id=
outDirNo

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoauto
nodeIdYesNode id ("1:2" or "1-2") or a Figma URL containing ?node-id=
outPathNoWhere to write the file; defaults to figma-exports/<file>/<node>.json

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNo
nodeIdNoNode id ("1:2" or "1-2") or a Figma URL containing ?node-id=

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesBody of an async function; `figma` is in scope

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 7 tool updatesv1.1.1
    • First observedfigma_export_image
    • First observedfigma_export_image_fills
    • First observedfigma_export_json
    • First observedfigma_get_tree
    • First observedfigma_list_pages
    • First observedfigma_run_script
    • First observedfigma_status

TDQS

A3.5/5.0

Scored across 7 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables 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 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to inspect Figma selections, navigate pages, render previews, generate starter code, and submit user-approved canvas edits through a local bridge.
    3 npm
    MIT