Skip to main content
Glama
Figma MCP Bridge

Figma MCP Bridge

by SrgGrch

Fijma

English | Русский

A local MCP bridge for reading and editing an open Design file in Figma Desktop. The MCP client gets structured tools for nodes, pages, local styles and variables, batch changes, and PNG/SVG exports. An optional trusted JavaScript/TypeScript executor provides full access to the pinned file after separate permission in the plugin UI.

Requirements

  • Node.js 20+ and npm.

  • Figma Desktop with access to Plugins → Development.

  • An MCP client that supports a local stdio server.

The project currently installs from source: there is no published npm package.

Fijma keeps the existing figma_* tool names, plugin ID, FIGMA_MCP_* environment variables, and .figma-mcp-bridge pairing directory for compatibility. Existing client configurations continue to work; new examples use fijma as the connection name.

Related MCP server: Figma Codex Bridge

Installation

git clone https://github.com/SrgGrch/Fijma.git
cd Fijma
npm ci
npm run build

Open a Design file in Figma Desktop. Select Plugins → Development → Import plugin from manifest and choose the absolute path to dist/plugin/manifest.json. Run Fijma.

Then connect the MCP server to your client. In the examples below, replace C:\path\to\Fijma with the absolute path to your cloned project. Backslashes are doubled in JSON. Node.js must be available in the client's PATH; specify the absolute path to node.exe if needed.

Codex CLI / Codex Desktop

Add the following to %USERPROFILE%\.codex\config.toml:

[mcp_servers.fijma]
command = "node"
args = ['C:\path\to\Fijma\dist\server\index.js']

Both CLI and Desktop read this configuration. In the CLI, you can also run codex mcp add fijma -- node C:\path\to\Fijma\dist\server\index.js. Codex MCP documentation.

Claude Code

Run this in the project directory:

claude mcp add --transport stdio --scope local fijma -- node C:\path\to\Fijma\dist\server\index.js

local ties the configuration to the current project. Use --scope user for all projects. Claude Code MCP documentation.

Cursor

Create .cursor/mcp.json in the project or %USERPROFILE%\.cursor\mcp.json for all projects:

{
  "mcpServers": {
    "fijma": {
      "type": "stdio",
      "command": "node",
      "args": ["C:\\path\\to\\Fijma\\dist\\server\\index.js"]
    }
  }
}

Cursor MCP documentation.

Gemini CLI

Run:

gemini mcp add fijma node C:\path\to\Fijma\dist\server\index.js

Alternatively, add the same mcpServers object with command and args to %USERPROFILE%\.gemini\settings.json. Gemini CLI MCP documentation.

Pairing and your first request

Restart or refresh the client's MCP connection. The adapter automatically starts the shared local bridge. It prints the path to pairing-secret.txt to stderr. If the client does not show stderr, run node scripts/manual-client.mjs from the project root: it displays the path and lets you send MCP requests as one JSON object per line.

Open the key file locally, paste it into the plugin panel, and click «Подключиться и запомнить» (“Connect and remember”). Do not send the key in chat. Call figma_get_context: the status should be ready, and the document name should match the intended file. Enable the toggle in the plugin panel to allow writes; writes are disabled again on a new connection. Other tools use the scope (sessionId and connectionGeneration) from the current context. See launch and pairing for details.

Building locally

npm ci
npm run build
npm test

npm run build creates dist/server/index.js and the plugin files in dist/plugin/. npm test runs automated checks, including communication through the MCP SDK and loopback WebSocket with simulated Figma behavior. After updating the build, close the plugin window, stop the old shared process with npm run stop, then restart the plugin and MCP connection.

How it works

MCP client ── stdio ── adapter ── shared local bridge ── WebSocket ── plugin UI ── Figma Plugin API

Each client starts its own stdio adapter; the shared bridge listens only on 127.0.0.1:55263 and serves one paired plugin connection. Document commands use a shared bounded FIFO queue; idle clients do not block others. Status and cancellation bypass the queue for the submitting client. An uncertain write blocks new commands with RECOVERY_REQUIRED until completion is confirmed or the plugin is restarted. The pairing secret is stored locally, and the plugin remembers it in figma.clientStorage.

Reading is available after pairing. Writes are enabled in the plugin UI for the pinned document and run in sequential batches with preconditions and result verification. Stop cancels subsequent steps and the queue; changes already applied are not rolled back. When you switch Figma windows, the plugin keeps working with the file where it was started. To use another file, disconnect the previous plugin and connect the new one. PNG/SVG exports pass through size-limited messages and temporary MCP resources.

Document requests and exports are sent to your MCP client and its selected model provider. Start writes with a copy of the document. For operation and size limits, see contracts, the limits profile, and batch execution. Source code is in plugin/, server/, and shared/; checks are in tests/.

Trusted execution

figma_execute runs an async JavaScript/TypeScript function with JSON arguments and cooperative cancellation. It is not a sandbox: code can modify the entire pinned document, and a timeout does not prove cancellation. Server and plugin must be updated together to protocol v2. See the execution contract, examples, and Desktop verification.

License

MIT.

Available Tools

10 tools
figma_apply_batch

Пакет структурированных изменений с предусловиями и ссылками на предыдущие шаги.

NameRequiredDescriptionDefault
scopeYes
stepsYes
operationIdYes

Output Schema

NameRequiredDescription

No output parameters

figma_cancel_operationB

Запрос остановки операции без отката применённых изменений.

NameRequiredDescriptionDefault
scopeYes
operationIdYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/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 disclosure burden and does provide one important behavioral detail: applied changes are not rolled back. The word 'request' also avoids promising immediate termination, but confirmation semantics, behavior for completed or unknown operations, and failure or idempotency behavior remain undocumented.

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 states the action and the critical non-rollback behavior without filler or redundancy. Its brevity is effective, although the omitted operational details affect other dimensions.

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?

The retained-changes warning is valuable, and the output schema means the description need not explain the response. For a stateful cancellation tool with an undocumented nested scope and no annotations, however, the definition still lacks operation-state requirements, parameter provenance, and guidance on confirming cancellation or handling errors.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explains neither operationId nor scope, including its nested sessionId and connectionGeneration fields. With 0% schema description coverage, property names and the UUID pattern are the only parameter guidance, with no explanation of identifier provenance, scope lifetime, or how these values relate.

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 specifies the action and resource: requesting that an operation stop. It also clarifies that applied changes remain, but it does not explicitly distinguish this tool from siblings such as figma_get_operation or identify which operations can be cancelled.

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 no-rollback clause implicitly indicates that this tool is for stopping an operation while preserving changes already applied. It provides no explicit prerequisites, eligible operation states, or guidance to use figma_get_operation to obtain an identifier or verify the resulting status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_export_nodeC

Экспорт выбранного узла в PNG или SVG.

NameRequiredDescriptionDefault
scaleNo
scopeYes
formatYes
nodeIdYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden and discloses almost nothing: not whether the export writes a file, returns base64/blob data, where output goes, or any size/rate limits. The only behavioral hint is the format choice, which the enum already conveys.

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 short sentence with no filler, appropriately front-loaded. It is concise to the point of under-specification rather than verbose.

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 a nested scope object, a scale multiplier, zero schema coverage, and no annotations, the definition leaves an agent guessing about required session state and output handling. The presence of an output schema excuses it from describing return values, but the invocation-side gaps remain substantial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across four parameters, including a nested 'scope' object with sessionId and connectionGeneration and an unexplained 'scale'. The description only restates the enum values for 'format' and vaguely gestures at nodeId with 'выбранного узла', adding no meaning for scale or the session scope.

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 states a specific verb and resource ('Экспорт выбранного узла') plus the two output formats, so an agent can immediately tell this renders a node to an image. It does not explicitly differentiate itself from read-oriented siblings like figma_get_nodes, but the export framing is distinctive enough.

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 or when-not-to-use guidance and no mention of prerequisites such as needing a prior figma_find_nodes/figma_get_nodes call to obtain a nodeId. The agent must infer that this is the terminal step of a node-inspection workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_find_nodesC

Поиск узлов в явно заданной области текущего документа.

NameRequiredDescriptionDefault
nameNo
limitYes
scopeYes
typesNo
cursorNo
rootIdNo
documentNo

Output Schema

NameRequiredDescription
errorNo
nodesNo
truncatedNo
nextCursorNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden, yet it discloses nothing about pagination (a cursor parameter exists), result limits, session/connection-generation validity, or whether the search is read-only. 'Поиск' weakly implies a non-destructive read, which is the only behavioral signal present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is front-loaded and wastes no words, but its brevity reflects under-specification rather than disciplined conciseness. There is no structure to speak of, though nothing is redundant.

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?

An output schema exists, so return values need not be described, but a 7-parameter, nested-object search tool with no annotations and no parameter documentation needs far more than one sentence. The required session/connectionGeneration scope and the cursor/limit pairing are critical to correct invocation and go unaddressed.

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 description coverage is 0% across 7 parameters, so the description must compensate and does not. It only gestures at 'scope'/'область' while name, limit, types, cursor, rootId and document (a const boolean) are left entirely unexplained in both schema and prose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The Russian sentence gives a verb+resource ('Поиск узлов' = search for nodes) and restricts it to an explicitly given area of the current document, so the basic purpose is inferable. However, it never distinguishes this from close siblings such as figma_get_nodes, figma_get_tree or figma_get_context, which all retrieve node-like data, leaving the agent unable to pick correctly from name and text alone.

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 or when-not-to-use guidance and no mention of the sibling alternatives. The phrase 'явно заданной области' hints that a scope/root must be pre-selected, but the description does not say when a scoped find is preferable to figma_get_nodes or figma_get_tree.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_get_contextB

Состояние моста и доступного документа. Не требует сессии.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
pagesYes
stateYes
limitsYes
selectionYes
sessionIdYes
capabilitiesYes
writeEnabledYes
currentPageIdYes
documentLabelYes
connectionGenerationYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden, and it does disclose one genuine behavioral trait: 'Не требует сессии' (no session required), which tells the agent this call is safe to make before authentication. It says nothing else about side effects, failure modes when the bridge is disconnected, or whether the call is read-only, which matters for a bridge-facing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler, and the session-free property is front-loaded. The terseness crosses into under-specification, however: the sentences are so compressed that key meaning ('bridge', 'available document') is left for the agent to interpret.

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?

An output schema exists and the tool takes no parameters, so return-value detail is rightly omitted. The remaining gap is conceptual: the description never defines what the bridge is, why the document might be unavailable, or whether this should be called first in a workflow, which an agent needs in order to sequence it against the nine siblings.

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 disambiguate and the baseline of 4 applies. The empty schema with additionalProperties=false is fully self-explanatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource ('состояние моста и доступного документа' – bridge state and available document) but uses a noun phrase with no verb, so what the tool actually does (report/return) is inferred rather than stated. It also does nothing to separate it from siblings like figma_get_tree or figma_get_nodes, which also surface document state.

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 and no alternatives named, even though nine sibling tools exist and several overlap on retrieving document information. An agent must guess whether this is a prerequisite/discovery call or an optional status check.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_get_local_resourcesB

Чтение локальных компонентов, стилей и переменных.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, 'Чтение' usefully implies a non-mutating retrieval operation and 'локальных' establishes broad scope, but little else is disclosed. The description does not explain session scoping, connectionGeneration, cursor-based pagination, ID filtering, or field-selection behavior.

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?

The single Russian sentence is direct, front-loaded, and free of filler. Its brevity is efficient, although it is too terse to represent the four-mode schema completely.

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 with four schema variants, session scope, selectable fields, filtering, and pagination, the description supplies only a high-level purpose and even omits collections. The output schema removes the need to document return values, but the absence of annotations and operational or sibling-selection context leaves substantial gaps.

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?

Reported schema description coverage is 100%, so the baseline is 3 despite the description adding little parameter documentation. Naming three resource types loosely relates to kind, but it adds no meaning for scope, fields, ids, limit, or cursor and overlooks collections.

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 clearly states a read operation over local components, styles, and variables, giving both a verb and resource scope. It does not explicitly distinguish the tool from siblings such as figma_get_nodes or figma_get_context, and it omits the schema's fourth resource kind, collections.

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 implied: choose this tool to read local design resources rather than node content. There is no explicit guidance about when local resources are preferable, when another sibling should be used, or how to choose among components, styles, collections, and variables.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_get_nodesC

Чтение запрошенных свойств по nodeId.

NameRequiredDescriptionDefault
scopeYes
fieldsYes
nodeIdsYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden, yet it discloses nothing beyond the bare read action. It does not explain the sessionId/connectionGeneration handshake in `scope`, whether missing fields error or are omitted, batching limits on nodeIds, or any permission requirement. Only the implicit read-only nature is conveyed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single short sentence with no filler, so nothing is wasteful. But the brevity is under-specification rather than efficiency – the sentence is front-loaded with the verb yet omits the context the agent needs.

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?

An output schema exists, so return values need not be explained, but the tool has three required parameters, a nested scope object, and zero annotations. Against that complexity a one-line description is far from sufficient, leaving the agent to guess at the session/scope contract and the effect of field selection.

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 description coverage is 0%, and the description accounts for only one of the three parameters (nodeId → nodeIds). It adds nothing about `fields` (a 48-value enum where selection has real cost/behavior implications) or about the nested `scope` object, whose sessionId and connectionGeneration are entirely opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a verb and a resource ("Чтение запрошенных свойств по nodeId" – reading requested properties by nodeId), so the basic operation is identifiable. However, it never says these are Figma document nodes or that it is a property-read companion to tree/context tools, so it does not distinguish itself from siblings like figma_get_tree, figma_get_context, or figma_find_nodes.

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 exclusion criteria, and no mention of alternatives among the nine sibling tools. An agent must infer from the name alone that this is for fetching selected fields of known node IDs rather than discovering nodes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_get_operationC

Чтение известного состояния операции без повторного исполнения.

NameRequiredDescriptionDefault
scopeYes
operationIdYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden. It does disclose one genuine non-obvious behavioral trait — that reading does not trigger re-execution, i.e. this is a side-effect-free lookup — but says nothing about permissions, rate limits, or what happens when the operation is unknown or the scope is stale.

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 short sentence with the key qualifier front-loaded and no wasted words. It is terse rather than padded, though the brevity leaves the specification gaps that other dimensions penalize.

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?

An output schema exists, so return values need not be described, but the tool takes a nested scope object (sessionId + connectionGeneration) with 0% schema coverage and has no annotations. For a tool whose semantics hinge on session/generation scoping, the description omits the information an agent needs to supply those parameters correctly.

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 description coverage is 0% and the schema contains a nested scope object with a UUID-formatted operationId and a connectionGeneration integer, none of which the description explains. The description never references operationId or scope, so it adds no meaning beyond the raw field names for a parameter surface that is entirely undocumented.

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 and resource ('reading the known state of an operation') and adds a distinguishing property, 'without re-executing it', which separates it from execution-oriented siblings such as figma_apply_batch. It does not name any sibling explicitly, but the operation-state scope is clear enough to select it over figma_get_tree or figma_get_nodes.

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 explicit when-to-use or when-not-to-use guidance and no named alternative; the phrase 'without re-executing' only implicitly signals that this is the read path for an already-known operation. An agent must infer the polling/verification use case and get no hint about relationships to figma_cancel_operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_get_treeC

Ограниченное дерево узлов текущей сессии.

NameRequiredDescriptionDefault
depthYes
limitYes
scopeYes
cursorNo
rootIdYes

Output Schema

NameRequiredDescription
errorNo
nodesNo
truncatedNo
nextCursorNo

TDQS

C2.3/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 burden and discloses almost nothing. "Ограниченное" vaguely implies bounded traversal but never explains what the bound is, how the cursor parameter affects it, whether the operation is a safe read, or what happens when depth/limit are hit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single six-word fragment: zero waste and front-loaded, but grossly undersized for a tool with five parameters, a nested scope object, and pagination. Conciseness here is a symptom of under-specification rather than efficient writing.

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?

An output schema exists, so return shape need not be described, and that is the only thing the description is excused from. For a tool whose required inputs include a session/connection-generation envelope and a root node id, with 0% schema coverage and no annotations, the description is nowhere near complete enough to call it correctly.

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 description coverage is 0% across five parameters, including a nested scope object (sessionId, connectionGeneration) and a cursor for paging, and the description adds no meaning to any of them. At most, "ограниченное дерево" faintly maps to depth/limit, which is far short of compensating for the documentation gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Ограниченное дерево узлов текущей сессии" names the resource (a node tree of the current session) and signals bounded output, so the general intent is recoverable. But it is a bare noun phrase with no explicit verb, and it makes no attempt to distinguish itself from figma_get_nodes, figma_find_nodes, or figma_get_context, which all sound like ways to read Figma nodes.

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 at all: no statement of which sibling to prefer for a full-node fetch versus a search versus a tree walk. The only implicit signal is "текущей сессии" (current session), which hints at scoping but gives no decision rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

figma_navigateC

Явный переход к узлам и изменение выделения.

NameRequiredDescriptionDefault
scopeYes
pageIdNo
revealYes
selectYes
nodeIdsYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden. It hints that selection changes (a stateful side effect) but does not say whether this alters the user's current selection destructively, whether reveal scrolls/zooms the viewport, whether a page switch is required, or what happens with invalid node IDs. For a state-changing navigation tool with zero structured hints, this is a substantial gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single short sentence is front-loaded and free of filler, which is good. But its brevity comes at the cost of under-specification rather than efficiency — there is almost no information an agent can act on.

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?

An output schema exists, so return values need not be explained, but that is the only relief. With four required parameters, a nested scope object, and no annotations or parameter docs, the definition leaves an agent unable to invoke the tool confidently — it does not say how selection and reveal interact or what state is required beforehand.

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 description coverage is 0% across five parameters, including a required nested 'scope' object (sessionId, connectionGeneration) and the boolean 'select'/'reveal' pair. The description only loosely gestures at 'nodeIds' and 'select'; it never explains what reveal does, when pageId is needed, or what the scope/generation values mean. It does not compensate for the documentation gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a verb ('переход' / navigate) and a resource ('узлы' / nodes) plus a secondary effect ('изменение выделения' / changing selection), so the general intent is inferable. However, it never distinguishes this from the many read-oriented siblings (figma_get_nodes, figma_find_nodes, figma_get_context), leaving ambiguity about whether this only moves the viewport or actually mutates state.

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 mention of alternatives. An agent cannot tell from this text whether it should call figma_navigate versus figma_get_nodes to bring a node into view, nor when navigation is appropriate versus simply reading node data.

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. 10 tool updatesv0.1.0
    • First observedfigma_apply_batch
    • First observedfigma_cancel_operation
    • First observedfigma_export_node
    • First observedfigma_find_nodes
    • First observedfigma_get_context
    • First observedfigma_get_local_resources
    • First observedfigma_get_nodes
    • First observedfigma_get_operation
    • First observedfigma_get_tree
    • First observedfigma_navigate

TDQS

B3/5.0

Scored across 10 tools

Disambiguation4/5

The read tools are mostly separable by scope: get_tree returns structure, find_nodes searches a bounded region, get_nodes fetches properties by nodeId, and get_context reports bridge state. The main soft spot is the tree/nodes/find_nodes cluster plus get_operation vs get_context, which an agent could plausibly swap, but the descriptions do enough to steer selection.

Naming Consistency4/5

All ten tools share a `figma_` prefix with a verb_noun pattern (get_tree, find_nodes, apply_batch, cancel_operation, export_node). The only deviation is `figma_navigate`, which drops the object noun, but the convention remains predictable overall.

Tool Count5/5

Ten tools is a well-scoped surface for a Figma bridge: reads, search, navigation, batched mutation, operation lifecycle, and export. Each tool maps to a distinct capability without padding.

Completeness4/5

The surface covers discovery, reading, mutation via apply_batch with preconditions, operation polling/cancel, and PNG/SVG export, so core workflows are closed. Minor gaps: no rollback/undo for applied batches (cancel explicitly does not revert), no file/document switching, and export limited to two formats.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables MCP clients to read design structure, take screenshots, create nodes, and edit UI directly on Figma canvas via a bridge between MCP and Figma Desktop.
    10
    697 npm
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables Codex and other MCP clients to read design context from Figma Desktop via a local bridge, providing design tokens, component trees, and screenshots without an API token.
    7
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A local-only MCP bridge that connects an MCP client to an open Figma file via a Figma plugin, enabling direct document editing, inspection, export, and audit without using the Figma REST API.
    527 npm
    3
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP clients to read and modify the currently open Figma design file through a paired local Figma plugin, supporting operations like creating nodes, editing properties, and exporting PNG/SVG.
    527 npm
    2
    MIT