Skip to main content
Glama
Hanbaooooooo

WorkBuddy Figma

by Hanbaooooooo

WorkBuddy Figma

让 WorkBuddy 直接读写你的 Figma 画布。

不用 Figma 官方 MCP,不消耗 Dev Mode 配额,不是截屏点鼠标 —— 而是通过 Figma 开放的插件 API, 以本地插件的身份直接操作图层。画板、文字、组件、变量、自动布局、导出截图,全都能用。

Node License Figma Plugin API


为什么需要它

Figma 官方 MCP

截屏 + 模拟点击

本项目

需要付费席位

✅ 需要(Star 计划 / Dev Mode)

❌ 不需要

❌ 不需要

消耗官方 MCP 额度

✅ 消耗

❌ 不消耗

❌ 不消耗

改分辨率后还能用

✅

❌ 坐标全废

✅

能改真实图层

✅

✅ 但极易点错

✅

读取图层结构 / 变量

✅

❌ 只能看图

✅

需要 Figma 桌面版

❌

✅

✅

Figma 的官方 MCP(mcp.figma.com)走 Dev Mode,免费账号进不去。 但 Figma 的插件 API 对所有账号开放 —— 只要这个文件里跑着一个本地开发插件, 它就能读能写整个文档。本项目就是把这个能力接到 WorkBuddy 上。


Related MCP server: FigmaExporterMcp

怎么工作

graph LR
  A["WorkBuddy<br/>(MCP 客户端)"] -->|"JSON-RPC / stdio"| B["server.mjs<br/>本地 MCP 服务"]
  B -->|"HTTP 长轮询<br/>127.0.0.1:3055"| C["Figma 伴生插件<br/>(跑在你的文件里)"]
  C -->|"Figma Plugin API"| D[("你的 Figma 文档")]

三句话:

  1. WorkBuddy 启动时拉起 server.mjs,它是一个标准 MCP server,对外暴露 21 个工具。

  2. server.mjs 在 127.0.0.1:3055 上开一个小 HTTP 服务,等 Figma 插件来连。

  3. 你在 Figma 里运行一次插件,两边用一对本机随机 token 配对,之后就一直通着。

配对 token 是安装时现场生成的 32 字节随机数,只存在你本机,install.mjs 会把它注入到 code.js 里。每台机器生成的插件 id 都不一样,互不干扰。


安装

前置条件

  • Node.js ≥ 18

  • WorkBuddy 桌面版

  • Figma 桌面版(网页版不支持导入本地开发插件)

一键安装

git clone https://github.com/jayk067123-max/workbuddy-figma.git
cd workbuddy-figma
node install.mjs

脚本会做四件事,全程自动:

  1. 生成本机配对 token

  2. 生成已配对的 Figma 插件,并打印 manifest.json 路径

  3. 把 MCP server 写进 ~/.workbuddy/mcp.json(原文件自动备份)

  4. 如果检测到你装过 Figma 官方 MCP,会把它改名成 figma-cloud 并停用,避免冲突

想先看看会改什么,加 --dry-run:

node install.mjs --dry-run

换端口(默认 3055):

node install.mjs --port 3060

装完之后

第一步 · 重启 WorkBuddy。 MCP 配置只在启动时读一次,不重启不生效。

第二步 · 信任 MCP。 打开连接器管理,找到 figma,点「信任」。 自定义 MCP 必须手动授权,这是 WorkBuddy 的安全设计,脚本改不了。

第三步 · 导入 Figma 插件。 在 Figma 桌面端:

Plugins → Development → Import plugin from manifest…

选 install.mjs 打印的那个 manifest.json,通常在:

~/.workbuddy/workbuddy-figma/companion/manifest.json

然后在目标设计文件里运行 Plugins → Development → WorkBuddy Figma。 会弹出一个窄条小窗口,留着别关 —— 它一关,连接就断。

验证

在 WorkBuddy 里说:

看看 Figma 连接状态

或者直接跑自检(不需要打开 Figma,会自己模拟一个插件):

node selftest.mjs

看到 全部通过 ✅ 就说明桥接链路没问题。


能做什么

管理工具(3 个)

工具

作用

figma_status

看连接状态、已连文档、插件版本。出问题先看这个

figma_setup

重新生成已配对的插件,返回 manifest 路径

figma_select_document

同时连了多个文件时,指定操作哪个

画布工具(18 个)

工具

作用

use_figma

在画布里直接执行 Figma Plugin API 脚本,读写都行。这是最核心的工具

get_selection

读当前页和选中的节点

get_metadata

读图层树(带分页,别一次拉整棵树)

get_screenshot

导出真实 PNG 截图

get_design_context

读子树 + CSS,做设计稿转代码用

get_figjam

读 FigJam 结构

get_variable_defs

读设计变量 / 变量集合

search_design_system

搜本地组件、变量、样式

get_component_context

读组件、组件集、实例属性

get_libraries

读团队变量库

get_local_component_links

读本地组件与代码的映射

set_local_component_links

写本地组件与代码的映射

get_motion_context

读原型交互与动效数据

list_fonts

查可用字体族与字重

upload_assets

把本地图片 / SVG 导入为可编辑图层

download_assets

导出 PNG / JPG / SVG / PDF

import_scene

用 JSON 场景导入原生节点

create_session

建一个本地任务记录(可选)


用法示例

连接好之后,直接说人话就行:

看看我选中的画板,把主按钮统一成 40px 高、8px 圆角,改完给我截图。

参考这个深色界面,在新画板里做一个浅色版,文字和布局保留成可编辑图层。

读一下这个画板的图层结构,在当前项目里实现成 React 页面,素材导出到 assets 目录。

给这个按钮补上 hover 和 disabled 状态,颜色绑到对应的语义变量。

把这页所有 Frame 的间距从 40 改成 24。


常见问题

Figma 报「manifest.json — 文件名无效」

不是文件名的问题。 Figma 按插件 id 去重,这个插件你已经导入过了,重复导入就报这个错。 不用重新导入,直接在 Plugins → Development 里运行已有的那个。

每次改完,画布都跳回第一页

插件契约规定 use_figma 每次从第一页开始。脚本里显式切页就行:

const target = figma.root.children.find(p => p.name === '你的页面名')
await figma.setCurrentPageAsync(target)

报 Previous operation outcome is uncertain

上一次写操作失败后,桥接层会把文档标记为「状态不明」,防止你在未知状态上继续写。 先跑一次只读的 get_metadata 清除标记,再继续。

报 Cannot access property children on a page that has not been explicitly loaded

这个文件是 documentAccess: "dynamic-page" 模式,页面要先加载:

await page.loadAsync()          // 或者 await figma.loadAllPagesAsync()

报端口 3055 被占用

说明已经有一个桥在跑了(可能另一个 WorkBuddy 窗口,或者原来的 DSH 插件)。

# 看是谁占的
netstat -ano | findstr :3055

换端口重装:node install.mjs --port 3060,然后重新导入插件(端口写在插件里了)。

WorkBuddy 里看不到 figma 工具

按顺序排查:① 重启过 WorkBuddy 吗 ② 连接器里点「信任」了吗 ③ 看 ~/.workbuddy/mcp.json 里 figma 那项对不对。

插件显示「已连接」但没反应

关掉多余的插件窗口。同一个文件开两个插件会产生两条同名连接,互相抢任务。 (新版本会自动选最近的那条,但最好还是只留一个。)


安全说明

  • 配对 token 是安装时本机随机生成的 32 字节,只存在你本机,不上传任何服务器。

  • 桥只监听 127.0.0.1,并且校验 Origin 必须是 Figma 域名,外部访问会被拒。

  • 生成的 companion/ 目录含本机凭证,.gitignore 已经排除了它。别手动提交。

  • 整个链路不经过任何第三方服务器,WorkBuddy → 本地 → Figma,三点直连。


项目结构

workbuddy-figma/
├── install.mjs          一键安装:生成 token、配对插件、写 MCP 配置
├── server.mjs           MCP stdio 服务端,21 个工具
├── selftest.mjs         端到端自检(自带假 Figma 插件)
├── lib/
│   ├── bridge.mjs       HTTP 长轮询桥(连接、队列、超时、状态机)
│   ├── catalog.mjs      18 个画布工具的定义与 JSON Schema
│   ├── assets.mjs       素材读写(base64、SVG 校验、路径穿越防护)
│   └── companion.mjs    配对插件生成
└── companion/           Figma 插件资源(未配对模板)
    ├── manifest.json
    ├── code.js          跑在 Figma 沙箱里的主线程
    └── ui.html          插件 UI,通过 postMessage 与主线程通信

License

MIT © 2026 jayk067123-max

Available Tools

21 tools
create_sessionA

Create a local task recording UUID for the selected Figma file. Reuse it across calls, including explicitly selected other files. This does not create a cloud session or switch documents.

NameRequiredDescriptionDefault
fileKeyYesMust match the selected document fileKey from figma_status. Local-only documents use local:<connectionId>.
sessionIdNoTask UUID returned by create_session; scoped to this DSH Work session.
descriptionYes

TDQS

A4/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 it does disclose the key trait: local-only, no cloud session, no document switch. It omits lifecycle details an agent would want (does the session expire, is calling twice with the same fileKey idempotent, does passing sessionId re-attach to an existing session).

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?

Three short sentences, front-loaded with the action and followed by the reuse rule and the disclaimers. 'Reuse it across calls, including explicitly selected other files' is slightly compressed and takes a second read, but nothing is wasted.

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?

A creation tool with no output schema and one undocumented required parameter. The description implies a UUID is returned and covers the local-vs-cloud scope well, but leaves the agent guessing about the purpose of 'description' and about session lifetime.

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 67%: fileKey and sessionId are documented in the schema, but the required 'description' parameter has no schema text and no explanation in the tool description either. The description adds no syntax or format meaning beyond the schema, so baseline 3 fits.

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

Purpose5/5

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

States a specific verb and resource ('Create a local task recording UUID') and immediately scopes it to 'the selected Figma file'. The final sentence distinguishes it from what an agent might otherwise assume (cloud session creation, document switching), which no sibling tool covers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Reuse it across calls, including explicitly selected other files' tells the agent this is a per-task token rather than a per-call one, and the negative clause rules out two wrong intents. It stops short of naming an explicit alternative tool or a prerequisite sequence (e.g., call figma_status first), so not a 5.

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

download_assetsC

Export nodes to workspace files as PNG/JPG/SVG/PDF, optionally with original image bytes. Outputs are saved under .figma/assets.

NameRequiredDescriptionDefault
scaleNo
formatNo
nodeIdNoFigma node ID, e.g. 12:34. Omit to use the editor selection where supported.
nodeIdsNo
includeOriginalImagesNo

TDQS

C2.8/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 behavioral burden. It usefully discloses that outputs are saved under .figma/assets and that original image bytes can optionally be included, but it omits key behavior such as overwrite semantics, batch limits (20 nodeIds), selection fallback, and any permission or rate-limit concerns for a filesystem-writing operation.

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 tight sentences with no waste. The core purpose and output location are front-loaded, and every clause adds practical 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 five-parameter export tool that writes files to the workspace and has no annotations or output schema, the description is too thin. It should cover selection defaults, nodeIds batching, scale defaults, and overwrite/file-existence behavior to be complete enough for reliable invocation.

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 only 20%, with just nodeId documented in the schema. The description adds meaning for format choices and includeOriginalImages, but it does not explain scale (0.01–4), nodeIds batching, or the nodeId-vs-selection behavior, leaving most parameters underspecified.

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: 'Export nodes to workspace files' with supported formats PNG/JPG/SVG/PDF. It is clear what the tool does, but it does not explicitly distinguish itself from siblings such as upload_assets or get_screenshot.

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 tool over alternatives like upload_assets, get_screenshot, or get_design_context. Usage is only implied by the word 'Export', with no conditions, exclusions, or prerequisites mentioned.

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

figma_select_documentA

同时连接了多个 Figma 文件时,指定要操作哪一个。connectionId 从 figma_status 获取。

NameRequiredDescriptionDefault
connectionIdYes

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It implies a stateful effect (subsequent operations target the chosen file) but never states whether the selection persists across calls, applies per-session, or what happens with an invalid/stale connectionId — meaningful gaps for a state-setting tool.

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 sentences with zero filler: the condition first, then the parameter source. Every sentence earns its place and the most actionable detail (where to get the id) is not buried.

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 one-parameter selector with no output schema, the description covers what it does, the triggering condition, and the parameter's origin. What's missing — persistence of the selection and error behavior for unknown ids — is minor but not negligible for a state-changing tool with no annotations to lean on.

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 0%, so the bare string 'connectionId' would be opaque; the description compensates by telling the agent exactly where the value comes from (figma_status). It still lacks any format/example or validity notes, keeping it below a 5.

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 action: choose which Figma file to operate on when several are connected, and names connectionId as the selector. It is distinguishable from siblings like figma_status (which produces the id) and use_figma (which presumably consumes it), though the verb 'select' is only implied by 'specify which one to operate on' rather than stated as a tool name verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger condition: 'when multiple Figma files are connected simultaneously', and routes the agent to figma_status to obtain the required id. It does not say what to do when only one file is connected (skip this tool?) or whether selection must precede other calls, so the exclusions are incomplete.

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

figma_setupA

生成本机已配对的 Figma 伴生插件,返回需要导入的 manifest.json 路径。首次使用或重装时调用。

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

No annotations, so the description carries the burden. It does disclose the meaningful behavior — it writes a plugin scaffold to the local machine and returns an import path — which implies filesystem side effects. However it says nothing about overwrite semantics, whether it needs Figma running, or what happens on repeat invocation, which matters for a setup tool.

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 sentences, zero waste: the first defines the action and its output, the second gives the invocation condition. Front-loaded and appropriately sized for a no-parameter tool.

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?

With no input params and no output schema, the description supplies what the agent needs: that a manifest.json path is returned and when to call it. Minor gap is the absence of any note on prerequisites (e.g. pairing state or Figma being open) before this can succeed.

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 to disambiguate; baseline 4 applies. The description appropriately spends its words on behavior and return value instead of parameters.

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 (生成 / generate) and resource (本机已配对的 Figma 伴生插件) plus the concrete artifact returned (manifest.json 路径). An agent can tell this is a setup/bootstrap tool distinct from runtime siblings like use_figma or get_design_context, though it never names a 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The trailing clause '首次使用或重装时调用' gives an explicit trigger condition (first use or reinstall), which is the key usage signal for an idempotent setup tool. It stops short of stating alternatives or what to do if the plugin already exists, but the context is clear.

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

figma_statusA

查看当前连接的 Figma 文档、插件版本与桥接状态。第一次使用、或操作失败后先调这个。

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/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, and it does disclose the payload contents (document, plugin version, bridge status), so an agent knows what to expect back. However, it says nothing about what happens when no Figma document is connected — whether it errors, returns a null, or reports a degraded state — which is the key behavioral question for a health-check tool. Adequate but incomplete.

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 sentences with no filler: the first defines what is inspected, the second front-loads the call-timing advice. Nothing could be removed without losing information.

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 zero-parameter tool with no output schema, the description covers what it reports and when to call it, which is what an agent needs to select and invoke it correctly. The only meaningful gap is unstated behavior in the disconnected/failure case.

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, which is the baseline-4 case; there is nothing for the description to disambiguate. The description correctly implies a no-argument call, consistent with the empty schema.

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 (查看/view) and three concrete resources: the connected Figma document, the plugin version, and the bridge status. That makes it clearly a diagnostic/status tool, distinguishable from action-oriented siblings like use_figma or create_session. It stops short of naming a specific sibling it should be preferred over, so it lands at 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives two explicit trigger conditions: on first use, and after an operation fails ('第一次使用、或操作失败后先调这个'). That is more concrete than most tools offer. There is no when-not guidance and no alternative tool is named, so it falls short of the top score.

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

get_component_contextC

Read component, component set or instance properties and descendants.

NameRequiredDescriptionDefault
depthNo
nodeIdNoFigma node ID, e.g. 12:34. Omit to use the editor selection where supported.
profileNoUse summary for discovery; full preserves detailed fields (default).
maxBytesNoBudget for returned JSON metadata; screenshots have separate limits.
maxNodesNo

TDQS

C2.7/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. It implies a read-only operation but says nothing about selection fallback behavior (nodeId is optional), truncation when maxBytes/maxNodes budgets are hit, or whether screenshots are included; those limits are only implicit in the schema bounds.

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 front-loaded sentence with no filler. It is efficient, though it is arguably too terse given the tool's five parameters and missing behavioral context.

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 five parameters, no output schema and no annotations, the description leaves major gaps: return shape, default behavior, selection fallback and truncation semantics are all unstated. What the description needs to carry, it does not.

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 60%: nodeId, profile and maxBytes are documented, but depth and maxNodes have no description anywhere. The description adds no parameter meaning at all, so it fails to compensate for the undocumented traversal and node-count parameters.

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 ('Read') and resource ('component, component set or instance properties and descendants'), so the scope is clear. It does not distinguish itself from siblings like get_design_context or get_metadata, which appear to overlap.

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 indication of when this should be used instead of get_design_context, get_metadata or get_motion_context. The agent must infer the choice from the name alone, and the one bit of guidance present ('summary for discovery; full preserves detailed fields') lives in the schema, not the description.

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

get_design_contextA

Read a target subtree and CSS for design-to-code work. For a few native properties prefer bounded get_metadata or one scoped script; do not read an entire subtree for a few descendant values. Set includeScreenshot:false unless an image is needed; screenshots are included by default. No cloud code generation.

NameRequiredDescriptionDefault
depthNo
scaleNo
nodeIdNoFigma node ID, e.g. 12:34. Omit to use the editor selection where supported.
profileNoUse summary for discovery; full preserves detailed fields (default).
qualityNoOverview caps the longest edge at 800px; detail/default at 1600px. Explicit scale overrides this preset.
maxBytesNoBudget for returned JSON metadata; screenshots have separate limits.
maxNodesNo
includeScreenshotNo

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description bears the full disclosure burden. It usefully reveals a non-obvious default (screenshots included unless includeScreenshot:false) and a scope limit ('no cloud code generation'), but says nothing about permissions, whether the operation is read-only, or how output is shaped when the budget is hit.

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?

Three tight sentences with zero filler, and the core purpose is front-loaded ahead of the alternatives and defaults. Minor density jargon ('native properties', 'cloud code generation') slightly reduces first-read clarity but costs little.

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 an eight-parameter tool with no annotations and no output schema, the description covers purpose, the key default, and alternatives, but does not describe the returned structure or how the depth/maxNodes/maxBytes budgets interact. Adequate, with a visible gap around what the agent will actually receive.

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 only 50%, yet the description adds real meaning for two of the eight parameters: the includeScreenshot default and the quality/scale interaction are clarified in prose. It still leaves depth, maxNodes, maxBytes, and nodeId semantics to the schema, so the gap is only partly compensated.

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 concrete verb and resource ('Read a target subtree and CSS for design-to-code work'), which tells the agent exactly what comes back. It partially differentiates from siblings by naming get_metadata as the lighter alternative, though the boundary with get_screenshot and get_component_context is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-not guidance ('do not read an entire subtree for a few descendant values'), names concrete alternatives (bounded get_metadata or one scoped script), and states a conditional default for screenshots. An agent can decide between this and the sibling read tools without further inference.

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

get_figjamB

Read FigJam structure. Set includeScreenshot:false for structural checks; screenshots are included by default.

NameRequiredDescriptionDefault
depthNo
scaleNo
nodeIdNoFigma node ID, e.g. 12:34. Omit to use the editor selection where supported.
profileNoUse summary for discovery; full preserves detailed fields (default).
qualityNoOverview caps the longest edge at 800px; detail/default at 1600px. Explicit scale overrides this preset.
maxBytesNoBudget for returned JSON metadata; screenshots have separate limits.
maxNodesNo
includeScreenshotNo

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations provided, the description must carry the behavioral burden. It usefully discloses that screenshots are included by default and that includeScreenshot:false is appropriate for structural checks, but it does not describe permissions, read-only semantics, output format, truncation behavior, or how omitted nodeId falls back to editor selection.

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 description is two short, front-loaded sentences with no wasted text. It states the tool's purpose first and the key operational tip second. The only minor gap is that it could have packed slightly more routing guidance into the same concise format.

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 an 8-parameter tool with no annotations and no output schema, the description is quite thin. It covers purpose and the screenshot default, but omits return-format expectations, truncation behavior, nodeId fallback semantics, and guidance for several undocumented parameters. The schema covers some of this, but the description does not fill the remaining 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?

Schema description coverage is 50%, and the description adds meaning for includeScreenshot and its default behavior. It does not compensate for the undocumented parameters such as depth, scale, and maxNodes, so the parameter semantics remain partial rather than complete.

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: 'Read FigJam structure.' This is clearer than a tautology and distinguishes the tool from sibling tools like get_screenshot or get_design_context by naming FigJam as the target resource. It does not explicitly contrast itself with those siblings, so it stops 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 description gives one concrete usage rule: set includeScreenshot:false for structural checks, because screenshots are included by default. However, it provides no guidance on when to choose this tool over get_screenshot, get_design_context, or get_metadata, and no exclusions or prerequisites are mentioned.

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

get_librariesB

Read available team variable libraries through the public Plugin API.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations, so the description carries the full burden. 'Read' implies a non-mutating operation, and 'public Plugin API' hints at an access path, but there is no disclosure of whether a session/plugin connection is required, whether results are cached, or what a 'library' object contains.

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 filler. The access-path qualifier is placed where it adds context without delaying the core statement.

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 and no output schema, the description is the only source of behavioral and return-value information, and it says nothing about what the returned libraries look like or how to use them. For a no-param discovery tool this leaves a real gap in understanding the result.

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 the baseline is 4. Nothing in the schema needs explanation, and the description doesn't introduce any confusing parameter-like language.

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: 'Read available team variable libraries'. The 'public Plugin API' qualifier narrows scope further. It doesn't explicitly differentiate from siblings like get_variable_defs or search_design_system, which touch the same variable/design-system domain.

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 call this versus get_variable_defs, search_design_system, or get_design_context — all plausible alternatives for variable-related data. The agent must infer the distinction from names alone.

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

get_metadataA

Read a bounded layer tree; prefer summary for discovery. Without nodeId, returns pages and current page. Offset/limit page direct children and require nodeId with depth >= 1. Follow truncation continuations. Only reads without profile, budget or paging options reconcile an uncertain write.

NameRequiredDescriptionDefault
depthNo
limitNo
nodeIdNoFigma node ID, e.g. 12:34. Omit to use the editor selection where supported.
offsetNo
profileNoUse summary for discovery; full preserves detailed fields (default).
maxBytesNoBudget for returned JSON metadata; screenshots have separate limits.
maxNodesNo

TDQS

A4/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 disclose the important traits: bounded reads, truncation continuations to follow, cross-parameter preconditions for paging, and a safe-read/reconciliation rule. It omits auth or plan requirements and says nothing about error behavior or what a truncated response actually looks like.

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?

Front-loaded with purpose then constraints; nearly every clause carries a rule an agent needs. 'Follow truncation continuations' is dense to the point of jargon — it tells the agent to do something without saying what a continuation looks like.

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 7-parameter, no-annotations, no-output-schema tool this is close to sufficient: it establishes the read-only profile, the paging model, and the default return shape (pages and current page). The gap is the response envelope under truncation and the maxBytes/maxNodes budget interaction, neither documented here nor in an output schema.

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 only 43%, and the description compensates by adding real cross-parameter semantics absent from the schema: offset/limit page *direct children* and require nodeId with depth >= 1, plus the discovery-vs-full profile tradeoff. maxNodes and maxBytes (the two budget knobs) get no explanation in either the description or, for maxNodes, the schema.

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 ('Read a bounded layer tree') and immediately names the cheaper mode ('prefer summary for discovery'). However, it never distinguishes itself from sibling tools like get_design_context, get_component_context or get_selection, so an agent must infer when this tree read beats those.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete selection rules: omit nodeId to get pages plus current page, use offset/limit to page direct children, prefer the summary profile for discovery, and the constraint that only unpaged/unprofiled reads can reconcile an uncertain write. It stops short of naming any alternative tool it competes with.

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

get_motion_contextC

Read prototype reactions and public motion data when exposed. Cloud timeline/code conversion is not emulated.

NameRequiredDescriptionDefault
nodeIdNoFigma node ID, e.g. 12:34. Omit to use the editor selection where supported.

TDQS

C2.5/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, yet it only says data is read 'when exposed' and that cloud timeline/code conversion is not emulated. It says nothing about what failing/empty results look like, whether it requires an active editor session, or what is actually returned.

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 short and the read-purpose is front-loaded, but the second sentence is jargon-heavy and its relevance to selecting or invoking the tool is unclear, so it does not fully earn its place.

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 no annotations and no output schema, the description should compensate by explaining the return content and preconditions. Instead it leaves the agent unsure what 'public motion data' or 'reactions' look like and when the call will yield nothing.

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?

There is a single optional parameter documented at 100% schema coverage, so the schema already explains nodeId and the selection fallback. The description adds no extra meaning about how nodeId affects behavior, so the baseline 3 applies.

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?

States a verb and resource ('Read prototype reactions and public motion data'), which gives a rough sense of purpose, but the hedge 'when exposed' and the opaque clause 'Cloud timeline/code conversion is not emulated' blur what the tool actually returns. It never distinguishes itself from near-siblings like get_design_context or get_component_context.

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 statement of when to call this versus the many siblings that read Figma design content. The only guidance is the implicit limitation 'when exposed', which tells the agent nothing about how to choose between this tool and get_design_context.

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

get_screenshotA

Return an actual PNG screenshot as a DSH image attachment. Requires an exportable node.

NameRequiredDescriptionDefault
scaleNo
nodeIdNoFigma node ID, e.g. 12:34. Omit to use the editor selection where supported.
qualityNoOverview caps the longest edge at 800px; detail/default at 1600px. Explicit scale overrides this preset.

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose the key trait that the result is a real PNG image attachment rather than a URL or metadata, plus the exportable-node requirement. It says nothing about failure modes, selection fallback behavior, or how the 800/1600px caps interact with the output.

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 sentences, zero filler, with the return format stated first and the constraint second. Every clause earns its place.

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 3-parameter tool with no annotations and no output schema, the description covers the essential contract (returns a PNG attachment, needs an exportable node). It leaves unaddressed what happens with no nodeId when the editor has no selection, and gives no sense of the output's dimensions given the quality/scale controls.

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 description coverage is 67% – nodeId and quality are documented in-schema, including the overview/detail presets and explicit-scale override. The description adds no parameter meaning of its own and leaves `scale` (0.01–4) with only type bounds, so it neither compensates for the gap nor detracts.

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?

"Return an actual PNG screenshot" names a specific verb and output format, and "as a DSH image attachment" clarifies the delivery mechanism. It does not distinguish this from adjacent tools like download_assets or get_figjam, so an agent must infer the routing itself.

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?

"Requires an exportable node" is a real precondition, which is more than most tools offer. But there is no statement of when to prefer this over download_assets/get_figjam, and no mention of what to do when the node is not exportable.

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

get_selectionC

Read the current page and selected nodes. Prefer summary for discovery.

NameRequiredDescriptionDefault
profileNoUse summary for discovery; full preserves detailed fields (default).
maxBytesNoBudget for returned JSON metadata; screenshots have separate limits.
maxNodesNo

TDQS

C2.7/5.0
Behavior2/5

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

No annotations exist, so the description carries the full behavioral burden, and it discloses almost nothing: no return shape, no indication of what happens with no selection, no mention of size limits or truncation behavior despite maxBytes/maxNodes params. Only the word "Read" implies a non-mutating operation.

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 short, front-loaded sentences with no padding. The second sentence, however, duplicates what the schema already states about the profile enum, so it doesn't fully earn its place.

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 no annotations, no output schema, and three parameters, the description is too thin — an agent cannot tell what is returned, whether results are truncated, or how it relates to sibling read tools.

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 67% and the description adds no meaning beyond it — the profile hint restates the schema text almost verbatim. maxNodes has no description anywhere, and the interaction between maxBytes/maxNodes and truncation is never explained.

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 concrete verb and resource: read the current page and selected nodes. It doesn't explain how it differs from likely-overlapping siblings such as get_design_context, get_metadata, or get_screenshot, so the agent must infer the boundary.

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?

"Prefer summary for discovery" is guidance about a parameter value, not about when to call this tool instead of the many sibling read tools. There are no exclusions or preconditions (e.g., whether a session or active selection is required).

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

get_variable_defsA

Read local variables or collection inventory. collectionsOnly:true lists collections including empty ones without reading variables; query then matches collection names. Otherwise collections describe the returned variable page or requested IDs, not a complete collection inventory. Follow coverage and pagination before concluding absence. Summary omits values; no arguments preserves the full result.

NameRequiredDescriptionDefault
idsNo
typeNo
limitNo
queryNo
offsetNo
modeIdsNo
profileNoUse summary for discovery; full preserves detailed fields (default).
collectionIdsNo
collectionsOnlyNoInventory collections, including empty ones; query filters collection names. Supports collectionIds, modeIds and paging, not variable ids/type. Variables are not read.

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the burden and discloses several non-obvious behaviors: collectionsOnly does not read variables, returned collections may not be a complete inventory, pagination/coverage must be checked before concluding absence, summary omits values, and no arguments preserves full results. It does not cover permissions or rate limits, but the key behavioral caveats are present.

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 description is compact and front-loads the main purpose. Most sentences add concrete behavioral information, though phrases like 'Otherwise collections describe...' are slightly ambiguous and reduce readability.

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?

This is a complex 9-parameter tool with no output schema and no annotations, so the description needs to be fairly complete. It covers core modes and important caveats, but omits explanations for type, modeIds, and limit/offset semantics, leaving an agent to infer too much from the schema alone.

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 description coverage is low at 22%, so the description should compensate. It adds useful meaning for collectionsOnly, query, requested IDs, summary/profile, pagination, and no-argument behavior, but it does not explain type, modeIds, limit/offset bounds, or several parameter interactions, leaving significant schema gaps.

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: it reads local variables or collection inventory. It also distinguishes two operating modes through collectionsOnly, though it does not explicitly differentiate itself from sibling tools.

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?

It explains that collectionsOnly:true is for listing collections and that query then filters collection names, which is useful conditional guidance. However, it does not explicitly state when to use this tool versus alternatives or name any sibling tools, so usage guidance is implied rather than fully specified.

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

import_sceneA

Import a local JSON scene as native editable Figma nodes. Prefer use_figma for complex components, variables, graphs or Slides. See the scene reference.

NameRequiredDescriptionDefault
nodesYes
parentIdNo

TDQS

A3.7/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. It says nothing about that this is a mutating write operation, permission or session requirements, what happens to existing nodes under parentId, failure/partial-import behavior, or the 500-node cap that the schema imposes.

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 front-loaded sentences plus a reference pointer, with zero filler. The core purpose precedes the alternative-tool caveat in the right order.

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?

Given the loose nested schema and absence of an output schema, the description would benefit from noting the return value and how the scene JSON maps to nodes. However, the explicit pointer to the scene reference partially offsets the missing parameter detail.

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%, so the description must compensate, yet it never explains the 'nodes' array shape (type/props/children recursion) or the optional 'parentId'. 'See the scene reference' is an external pointer rather than semantic guidance, leaving both parameters underspecified.

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

Purpose5/5

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

States a specific verb and resource ('Import a local JSON scene as native editable Figma nodes') and names the sibling it is not suited for. An agent can distinguish it from use_figma without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes complex cases (components, variables, graphs, Slides) to use_figma, giving a clear alternative. It stops short of stating full preconditions such as where the JSON comes from or whether a session/parent must exist.

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

list_fontsA

Find available font families and exact styles. No arguments returns the legacy array; filters or pagination return fonts and pagination.

NameRequiredDescriptionDefault
limitNo
queryNo
styleNo
familyNo
offsetNo

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations at all, the description carries the full burden, and it does disclose the single most consequential behavioral trait: the return shape changes based on arguments (legacy array with no args vs. fonts plus pagination otherwise). That is real value beyond structured fields. It falls short of a 5 because 'return fonts and pagination' is never explained — no mention of total counts, page size behavior, or that filtering is presumably read-only and side-effect free.

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 sentences, both doing work, with the core capability front-loaded and the invocation-dependent behavior immediately after. There is no filler, preamble, or repetition of the tool name.

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?

Given five undocumented parameters, no annotations, and no output schema, the description covers the riskiest fact (dual response shape) but leaves material gaps: parameter meanings, matching semantics, and what 'pagination' actually contains. It is enough to attempt a call but not enough to call it confidently or to predict the response structure.

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?

Five parameters with 0% schema description coverage, so the description must compensate and largely does not. It refers vaguely to 'filters' and 'pagination' without mapping them to query, style, family, limit, or offset, and never says whether query/style/family are substring, prefix, or exact matches. An agent can only guess that query/style/family are the filters and limit/offset the pagination.

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: 'Find available font families and exact styles,' which is clearly a lookup of font options. No sibling tool in the list deals with fonts, so there is no ambiguity to dispel, but the description also does not differentiate from anything. Clear, though not maximally sharp about what a 'font family' vs 'exact style' record contains.

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 description does give invocation-mode guidance: call with no arguments to get the legacy array, or supply filters/pagination to get the richer response. That is useful implied usage, but there is no statement of when to prefer one mode, no prerequisites, and no alternative tools named. An agent must infer which mode it wants from the response-shape sentence alone.

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

search_design_systemB

Search local components, variables and styles. queries batches {entity,query} searches and returns results in order. Legacy query/kind also supported. Components use current page unless pageId supplied. Pagination is per kind; no cloud component-library or Code Connect search.

NameRequiredDescriptionDefault
kindNo
limitNo
queryNo
offsetNo
pageIdNo
fileKeyNoMust match the selected document fileKey from figma_status. Local-only documents use local:<connectionId>.
profileNoUse summary for discovery; full preserves detailed fields (default).
queriesNo
sessionIdNoTask UUID returned by create_session; scoped to this DSH Work session.
disableCodeConnectNo
includeLibraryKeysNo

TDQS

B3.4/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It does disclose real behavior beyond the schema: results return in query order, pagination is per kind, components are scoped to the current page unless pageId is supplied, and there is no cloud/Code Connect coverage. It omits permissions/auth, whether results are capped, and any indication of what a result object contains.

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?

Four dense sentences with the core scope stated first and constraints after; nothing is padding. The telegraphic phrasing ("queries batches {entity,query} searches") is slightly awkward to parse but costs no length.

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 an 11-parameter tool with no annotations and no output schema, the description covers scope and query batching but leaves the pagination contract (how limit/offset interact with per-kind paging) and return payload shape unexplained. An agent could invoke it, but would likely need a probing call to understand results.

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?

With only 27% schema description coverage across 11 parameters, the description has to compensate and does so for a subset: queries as batched {entity,query} pairs, legacy query/kind, and pageId's effect on component scope. limit, offset, includeLibraryKeys, disableCodeConnect, and fileKey get nothing here beyond their bare schema, so the gap is only partially closed.

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?

Opens with a specific verb+resource pair ("Search local components, variables and styles") and immediately scopes it to local assets, which distinguishes it from library-oriented siblings like get_libraries. It stops short of naming a sibling outright, so an agent must infer which tool to use for cloud/library lookups.

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?

"No cloud component-library or Code Connect search" is a useful exclusion, and "Legacy query/kind also supported" clarifies which parameter form is preferred. However, it never says when to reach for search_design_system versus get_component_context, get_variable_defs, or get_libraries, so the alternative-routing is left implicit.

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

upload_assetsB

Import workspace raster/SVG files as editable SVG layers or image fills. Files must be inside the current Work workspace.

NameRequiredDescriptionDefault
filesYes
parentIdNo

TDQS

B3.3/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. It usefully reveals the transformation semantics (raster/SVG becomes editable SVG layers or image fills) and a source-location restriction, but says nothing about whether files are copied or referenced, what happens on partial failure, or whether existing content is affected.

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 sentences, zero filler. The capability statement comes first and the constraint second, which is the right front-loading for a quick scan.

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?

No annotations and no output schema mean the description is the only source of behavioral detail, and it covers the core operation adequately. The undocumented `parentId` and the absence of any return-value or batch-failure information leave meaningful gaps for an upload tool.

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 2 parameters, so the description must compensate and only does so for `files` (raster/SVG, inside the Work workspace). The `parentId` parameter is never mentioned anywhere, leaving the agent with no idea where the imported layers will land.

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 names a specific verb (import) and resource (workspace raster/SVG files) and states the outcome: editable SVG layers or image fills. That distinguishes it from siblings like download_assets and import_scene, though it never explicitly contrasts with import_scene, which sounds close in function.

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?

It gives one real precondition – files must live in the current Work workspace – which is actionable usage context. But it offers no guidance on when to choose this over import_scene or other import paths, and no exclusions or failure conditions beyond the workspace constraint.

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

use_figmaA

Run JavaScript using the figma-use 16 contract in the selected local Figma document. Read figma-workbench first. Top-level await/return, query/QueryResult, matches/set/tree, auto layout, screenshots and io.write are supported. Include description, fileKey and sessionId from create_session. Page context starts at the first page every call; switch at most once. Return affected IDs. Errors include safeToRetryWithoutCanvasRead. Requires companion featureVersion 3.

NameRequiredDescriptionDefault
codeYes
fileKeyNoMust match the selected document fileKey from figma_status. Local-only documents use local:<connectionId>.
sessionIdNoTask UUID returned by create_session; scoped to this DSH Work session.
skillNamesNoComma-separated loaded skill names; local task metadata only.
descriptionNo

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 well: it discloses what is supported (top-level await/return, query/result, auto layout, screenshots, io.write), that page context resets each call, that return values are affected IDs, and that errors carry safeToRetryWithoutCanvasRead. Remaining gaps are environmental rather than behavioral: it doesn't say what mutations can destroy or what permissions are needed.

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?

Sentences are short, front-loaded with the core action, and each carries a distinct operational fact: prerequisites, supported capabilities, session inputs, page-context constraint, return value, error field, featureVersion gate. No filler.

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 code-execution tool with no annotations and no output schema, it covers return shape (affected IDs) and error metadata, and points to figma-workbench for the API contract. But it leaves the actual API surface and failure modes largely to that external document, so a caller without that context is not fully equipped.

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 60%, so some parameters are documented only in the schema. The description adds provenance for description, fileKey and sessionId (they come from create_session), which is useful. However, the required code parameter and skillNames receive no semantic detail beyond what the schema already provides.

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: run JavaScript against the selected local Figma document. It is clearly the code-execution entry point among siblings. The phrase 'figma-use 16 contract' is opaque without prior context, which slightly weakens clarity for a first-time caller.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent to read figma-workbench first and to include description, fileKey and sessionId from create_session, establishing prerequisites and the cross-tool workflow. It adds a page-context rule (starts at first page, switch at most once). It does not name when another sibling should be used instead, so it stops short of full when/when-not guidance.

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. 21 tool updatesv1.0.0
    • First observedcreate_session
    • First observeddownload_assets
    • First observedfigma_select_document
    • First observedfigma_setup
    • First observedfigma_status
    • First observedget_component_context
    • First observedget_design_context
    • First observedget_figjam
    • First observedget_libraries
    • First observedget_local_component_links
    • First observedget_metadata
    • First observedget_motion_context
    • First observedget_screenshot
    • First observedget_selection
    • First observedget_variable_defs
    • First observedimport_scene
    • First observedlist_fonts
    • First observedsearch_design_system
    • First observedset_local_component_links
    • First observedupload_assets
    • First observeduse_figma

TDQS

B3.1/5.0

Scored across 21 tools

Disambiguation3/5

The read surface has several overlapping tools — get_selection, get_metadata, get_design_context, get_screenshot, and get_figjam all inspect document state, and the distinctions rely on dense guidance like 'prefer summary for discovery' or 'bounded tree.' The descriptions do steer an agent, but misselection between get_metadata and get_design_context is plausible. The write/session/assets tools are clearly distinct.

Naming Consistency4/5

Nearly everything follows snake_case verb_noun (get_selection, list_fonts, download_assets, set_local_component_links), and the local/set_local pair signals read/write predictably. Minor deviations: a figma_ prefix on three tools and noun-first forms like get_figjam and get_screenshot.

Tool Count3/5

At 21 tools the surface is heavy for what is largely one domain (inspect + mutate a Figma doc), and several read tools could plausibly be collapsed. Each tool does have a defensible niche, so it's borderline rather than bloated.

Completeness4/5

Coverage spans document selection/session setup, deep reads (metadata, design context, components, variables, libraries, motion, FigJam), asset import/export, and arbitrary mutation via use_figma scripting, so no dead ends for typical workflows. Minor gaps: no first-class node create/delete/styling tools independent of scripting, and no published Code Connect operations.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Unofficial local MCP bridge for reading the currently open Figma file through a Figma plugin. Provides tools to inspect selection, file info, and export selected nodes as SVG/PNG.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Local-first MCP bridge for live Figma documents, enabling design inspection, editing, asset export, component authoring, and variable management through a plugin and WebSocket server without consuming Figma REST API requests.
    1
    MIT