figmingo-mcp
The figmingo-mcp server provides local-first Figma MCP tools for reading design data, generating/verifying HTML replicas, and writing to Figma canvases via a companion plugin, all usable on free Figma plans.
Read tools:
get_design_context(simplified node tree with styles/layout),get_metadata(lightweight tree),get_screenshot(node images to disk/base64),download_assets(batch export),get_variable_defs(design tokens with free-plan fallback),search_design_system(components/styles index),get_code_connect_map(component-to-code mapping), andwhoami(token/rate/cache status). All work via REST + PAT, disk-cached with configurable TTL.HTML Replica tools:
get_html_replica_spec(replica-optimized spec with bounds/typography/assets),render_html_screenshot(Playwright screenshot of URL/file/string),verify_html_parity(three-gate acceptance: content, structural ±4px, visual ≤1% diff), andcompare_html_to_image(one-shot visual diff with band localization).Write tools (plugin bridge):
bridge_status(check plugin connection),execute_plugin_command(create/move/resize/delete frames, text, rectangles; set fills/effects/auto-layout; insert images; export nodes; with batch support, node references, heartbeats), andimport_html_replica(import HTML/spec as native Figma frames using headless Chromium).Other capabilities: Design system search and code mapping, token/rate monitoring, disk cache, supports stdio/Streamable HTTP transports, idle/total timeout model for batch commands.
Provides tools for reading Figma files, generating HTML replicas with verification, and writing to Figma canvas via a plugin bridge.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@figmingo-mcpgenerate HTML for frame 'Home' in file F123"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
figmingo-mcp
Local-first Figma MCP server. Full read-side parity with the official Figma MCP on free Figma plans (Personal Access Token + public REST API — no seat quotas, no monthly caps), HTML 1:1 replica tooling with built-in three-gate acceptance, and write-to-canvas through a companion plugin bridge.
Architecture
flowchart LR
subgraph clients["AI clients"]
A["Cursor · Claude Code · Claude Desktop<br/>VS Code · Kimi CLI · Codex"]
end
A -- "stdio / Streamable HTTP" --> B["figmingo-mcp<br/>local server"]
B -- "REST + Personal Access Token" --> C[("Figma REST API<br/>(free plan OK)")]
B <-- "WebSocket ws://127.0.0.1:39220" --> D["companion plugin<br/>(Figma desktop)"]
D -- "Plugin API writes" --> E[("Your canvas")]
B --- F[("disk cache<br/>docs 15 min · renders 30 days")]
style B fill:#6e56cf,color:#fff
style D fill:#0d9e6e,color:#fffEverything runs on your machine: no relay servers, no accounts besides your
own Figma PAT, no data leaves localhost except calls to api.figma.com.
Related MCP server: figma-mcp
Why figmingo?
Capability | Official Figma MCP | Framelink (figma-developer-mcp) | figmingo-mcp |
Free-plan read quota | ~6 calls/month (Dev seat for more) | unlimited (REST + PAT) | unlimited (REST + PAT) |
Simplified design context | ✅ | ✅ | ✅ (+ absolute bounds, auto-layout, effects) |
Metadata tree (XML/JSON) | ✅ | partial | ✅ |
Screenshots (node → png/jpg/svg/pdf) | ✅ | ❌ | ✅ |
Asset download (nodes + raw image fills) | ✅ | partial | ✅ + manifest |
Variables / design tokens | ✅ (Enterprise API) | ❌ | ✅ with free-plan fallback (styles + inferred, |
Design-system search | ✅ | ❌ | ✅ local index |
Code Connect map | ✅ (server-side) | ❌ | ✅ local |
whoami / rate-limit / cache status | ❌ | ❌ | ✅ |
HTML 1:1 replica spec | ❌ | ❌ | ✅ |
Playwright HTML screenshots | ❌ | ❌ | ✅ |
Three-gate parity verifier (content/structural/visual) | ❌ | ❌ | ✅ |
Write to canvas | ❌ | ❌ | ✅ companion plugin bridge |
Disk cache (TTL) | ❌ | ❌ | ✅ 15 min docs / 30 days renders |
Install
One command (macOS / Linux):
curl -fsSL https://raw.githubusercontent.com/wenym8/figmingo-mcp/main/scripts/install.sh | bashWindows (PowerShell):
iwr -useb https://raw.githubusercontent.com/wenym8/figmingo-mcp/main/scripts/install.ps1 | iexThe installer checks Node ≥ 18, installs the package, installs the Playwright
Chromium browser (~170MB, one-time — required by the HTML render/extract/compare
tools), writes MCP config into
Cursor (~/.cursor/mcp.json), Claude Code (~/.claude.json),
Claude Desktop, VS Code, Kimi CLI (~/.kimi/mcp.json), and
Codex CLI (~/.codex/config.toml, TOML — only the
[mcp_servers.figmingo] section is touched; the original is backed up to
config.toml.figmingo-bak), copies the companion plugin (manifest + code.js +
ui.html) to ~/.figmingo/plugin plus a figmingo-plugin shortcut on your
Desktop (so Figma's Import plugin from manifest… file picker is one click,
no hidden-folder hunting), and prints next steps. Re-running is
idempotent and never wipes a previously configured Figma token.
After installing, run figmingo-mcp doctor to verify the whole environment
(Node, Figma token validity, Chromium, plugin files + version drift, client
config entries, bridge port) — every check prints a ✓/✗ with a fix hint, and
the exit code is 0 only when all checks pass.
Manual setup (any client):
{
"mcpServers": {
"figmingo": {
"command": "npx",
"args": ["-y", "figmingo-mcp"],
"env": { "FIGMA_API_KEY": "figd_..." }
}
}
}Kimi CLI — same JSON shape in
~/.kimi/mcp.json(merge intomcpServers).Codex CLI — TOML in
~/.codex/config.toml:[mcp_servers.figmingo] command = "figmingo-mcp" args = [] [mcp_servers.figmingo.env] FIGMA_API_KEY = "figd_..."(omit the
[mcp_servers.figmingo.env]table if you configure the token another way; usecommand = "npx",args = ["-y", "figmingo-mcp"]for a zero-install run)
Get a Personal Access Token: Figma → Settings → Security → Personal access tokens → Generate new token (read scopes are enough for the read tools).
Usage
figmingo-mcp # stdio transport (default, what AI clients use)
figmingo-mcp --http --port 3845 # Streamable HTTP at http://127.0.0.1:3845/mcp
figmingo-mcp cache-clear # wipe ~/.figmingo/cache
figmingo-mcp --helpFlags: --token <pat> · --http · --port <n> · --bridge-port <n> ·
--no-bridge · --cache-ttl <min> · --cache-root <path> · --no-cache.
Tools (15)
Read tools (REST + PAT, free plan OK)
Tool | What it does |
| Token sanity check ( |
| Simplified node tree: absolute bounds, auto-layout, fills/strokes/effects, text styles. Params: |
| Lightweight tree (id/name/type/bounds) as XML (default) or JSON — orient before deep fetches. |
| Node → image via |
| Batch-export up to N nodes + raw image fills ( |
| Tries |
| Local index over the file's components / component sets / styles; text query + type filter. |
| Reads |
Every read tool accepts either fileKey or a full url (the node-id query
param is honored).
Replica tools (the differentiator)
Tool | What it does |
| Replica-optimized document: sections/elements with absolute rects, computed typography (family/style/size/letter-spacing/line-height/text-case), hex+alpha colors, gradient data, and an asset manifest (icons→SVG, image fills→URLs, logo/icon hints via configurable patterns). Writes |
| Playwright (chromium) screenshot of a URL / local HTML file / raw HTML string; waits for images, optional |
| The acceptance gate. Renders the HTML, extracts its layout, then runs three gates against the Figma spec: content (copy/font/color), structural (±4 px position/size), visual (pixelmatch diff ratio ≤ 1 %, 2 px crop tolerance). Emits |
| One-shot visual diff: renders the HTML (same Playwright options as |
compare_html_to_image methodology (also returned in every response):
per-pixel threshold: pixelmatch
threshold(default0.1) decides whether two pixels count as different.anti-alias accounting: pixelmatch flags anti-aliased pixels; the primary
diffPixels/diffRatiocount excludes them (antiAliasCountedInDiff: false).antiAliasPixelsis reported separately (derived from a secondincludeAArun) so you can tell "text-edge jitter" apart from real mismatches.pass line:
passed = diffRatio <= maxRatio, default0.01(1 %). Sizes must match within a 2 px crop tolerance or the call returnssize_mismatch.
The output schema of get_html_replica_spec is the input schema of
verify_html_parity (specPath or inline spec) — the closed loop.
Tolerances (ported from production-proven internal tooling):
POS_TOL = 4 FONT_SIZE_TOL = 1 LS_TOL = 0.5
LH_TOL = 2 COLOR_TOL = 2/255 VISUAL_MAX_RATIO = 0.01 (crop ≤ 2px)Everything brand-specific is parameterized via options:
skipSections, sectionMap, expectedCounts ({logos, assets, minIcons}),
looseRectHints, logoPattern/iconPattern, font aliases/overrides.
Write tools (companion plugin bridge)
Tool | What it does |
| Plugin connected? queue size, client info, supported commands. |
| Generic envelope: |
| High-level: rebuild a replica spec as native Figma frames — main frame → section frames → nested containers / text / image nodes. Give it an HTML file ( |
The companion plugin (plugin/) connects to the MCP server at
ws://127.0.0.1:39220. Import once: Figma desktop → Plugins → Development →
Import plugin from manifest… → pick figmingo-plugin/manifest.json on your
Desktop (a shortcut the installer drops there; the canonical copy is
~/.figmingo/plugin/manifest.json, or plugin/manifest.json in this repo),
then keep it running. Works on free plans — writes never touch the REST quota.
Architecture note: Figma's plugin sandbox (code.js) cannot open WebSockets,
so the socket lives in the plugin's UI iframe (ui.html) and command
envelopes are relayed between the iframe and the sandbox via postMessage
(same architecture as proven local plugins like figwright). The UI shows a
small status panel (● connected / ○ connecting / ✕ failed + reason, server
address, executed-command count) so you can tell at a glance the bridge is
alive. In practice the plugin only talks to your local server; image bytes are
pushed over the socket as base64.
Batch semantics (commands: [...]): the plugin executes commands
sequentially and sends a progress heartbeat over the socket after every
command (success or failure). On the server there is no fixed 30 s hard cap:
Idle timeout (
idleTimeoutMs, default 20 000): max silence between heartbeats/result. Every heartbeat resets it, so a healthy 50-command batch never trips it no matter how long it runs.Total cap (
timeoutMs, default 300 000 = 5 min): the only hard limit, and it's yours to set per call.Partial results: a batch result always carries a per-command
resultsarray ({index, command, ok, result|error}) plusaborted/errorwhenstopOnError(default true) cut it short — you see exactly what ran.Timeout errors are atomic-friendly: if a call still times out, the error message lists the command indexes confirmed applied via heartbeats (e.g.
Confirmed completed command indexes: [0, 1, 2] (3/19)), so you know precisely what the canvas contains before retrying; the plugin may continue in the background, so inspect the page (get_page_children) first.
Single (non-batch) commands use the same idle/total model.
Replica Playbook
The closed loop, end to end:
flowchart LR
F["Figma design<br/>(or any reference)"] -- "get_html_replica_spec" --> S["replica spec<br/>(absolute rects, computed<br/>typography, asset manifest)"]
S --> H["HTML / CSS"]
H -- "render_html_screenshot" --> R["Chromium render"]
R -- "verify_html_parity · compare_html_to_image" --> G{"three gates<br/>content · structural ±4px · visual ≤ 1%"}
G -- "per-band diff localization" --> H
G -- "passed" --> I["import_html_replica"]
I -- "plugin bridge · deterministic (MD5-verified)" --> C["native Figma frames"]
style G fill:#b7791f,color:#fff
style C fill:#0d9e6e,color:#fffDoing an HTML replica of a Figma design (or any reference screenshot)? Read docs/REPLICA-PLAYBOOK.md first — the 6-step battle flow distilled from six scored replica rounds (measure-before-CSS, font lock-in, bandEdges-driven iteration, single-variable changes, convergence criteria), diff image reading, tool cheat sheet, and the copy-proofing checklist. It exists so your next replica converges in 3–4 rounds instead of 7.
Free-plan availability
Surface | Free plan |
All read tools | ✅ PAT + public REST; per-minute rate limits only (auto-backoff on 429) |
| ✅ via fallback ( |
Write tools | ✅ plugin API has no plan gating |
MCP client support | ✅ any MCP-capable client (the official Figma desktop MCP is plan-gated; this server is not) |
Acceptance (验收)
Battle-tested on six scored replica challenges (independent judge agents, re-measured from scratch — no self-reported numbers):
Challenge | Score | Pixel diff | Notes |
C1 Korean travel infographic | 91 | 2.46 % | PASS |
C2 Baidu homepage | 93 | 1.96 % | PASS |
C3 Kimi settings modal | 93 | 0.51 % | PASS |
C4 FAQ accordion (3 states) | 93 | 0.46–0.58 % | PASS |
C5 Music player (image → HTML → Figma) | 92 | 0.87 % | PASS, 30-node MD5-deterministic import |
C6 SaaS landing page (1440×4148, 7 sections) | 84 | 0.58 % | PASS, 279-node one-shot import, zero manual patches, MD5-verified reproducible |
npm install
npm run build
npm test # 178 unit tests (vitest) with recorded fixtures
# live acceptance against the real API:
FIGMA_API_KEY=<pat> TEST_FILE_KEY=<file-key> [TEST_NODE_ID=1:2] npm run acceptnpm run accept walks every tool and prints a ✅ / ⏭️ / ❌ checklist. It exits
gracefully with guidance when the token/file key is missing; write tools report
SKIP (not FAIL) when the companion plugin isn't connected.
Development
npm run build # tsup (dist/) + tsc (plugin/code.js)
npm run typecheck # strict tsc --noEmit
npm test # vitest
npm run accept # live acceptance checklistRepo layout: see ARCHITECTURE.md — it is the authoritative spec for the tool list, REST facts, caching, bridge protocol, and the acceptance plan.
License
中文文档
本地优先的 Figma MCP 服务器:免费 Figma 套餐也能跑全部读取能力(Personal Access Token + 公开 REST API,无席位配额、无月度上限);HTML 1:1 复刻工具链(内置三关验收);通过伴侣插件桥把内容写回画布。
架构
flowchart LR
subgraph clients["AI 客户端"]
A["Cursor · Claude Code · Claude Desktop<br/>VS Code · Kimi CLI · Codex"]
end
A -- "stdio / Streamable HTTP" --> B["figmingo-mcp<br/>本地服务器"]
B -- "REST + Personal Access Token" --> C[("Figma REST API<br/>(免费套餐可用)")]
B <-- "WebSocket ws://127.0.0.1:39220" --> D["伴侣插件<br/>(Figma 桌面端)"]
D -- "Plugin API 写入" --> E[("你的画布")]
B --- F[("磁盘缓存<br/>文档 15 分钟 · 渲染图 30 天")]
style B fill:#6e56cf,color:#fff
style D fill:#0d9e6e,color:#fff一切都在你自己的机器上运行:没有中转服务器,除了调用 api.figma.com,数据不出本机。
与其他方案对比
能力 | 官方 Figma MCP | Framelink (figma-developer-mcp) | figmingo-mcp |
免费套餐读取配额 | 约 6 次/月(更多需 Dev 席位) | 无限(REST + PAT) | 无限(REST + PAT) |
精简设计上下文 | ✅ | ✅ | ✅(+ 绝对坐标、auto-layout、效果) |
元数据树(XML/JSON) | ✅ | 部分 | ✅ |
截图(节点 → png/jpg/svg/pdf) | ✅ | ❌ | ✅ |
资产下载(节点 + 原始图片填充) | ✅ | 部分 | ✅ + 清单 |
Variables / 设计 tokens | ✅(Enterprise API) | ❌ | ✅ 免费套餐降级方案(styles + 推导,标 |
设计系统搜索 | ✅ | ❌ | ✅ 本地索引 |
Code Connect 映射 | ✅(服务端) | ❌ | ✅ 本地 |
whoami / 限流 / 缓存状态 | ❌ | ❌ | ✅ |
HTML 1:1 复刻 spec | ❌ | ❌ | ✅ |
Playwright HTML 截图 | ❌ | ❌ | ✅ |
三关验收(内容/结构/视觉) | ❌ | ❌ | ✅ |
写回画布 | ❌ | ❌ | ✅ 伴侣插件桥 |
磁盘缓存(TTL) | ❌ | ❌ | ✅ 文档 15 分钟 / 渲染图 30 天 |
安装
一条命令(macOS / Linux):
curl -fsSL https://raw.githubusercontent.com/wenym8/figmingo-mcp/main/scripts/install.sh | bashWindows(PowerShell):
iwr -useb https://raw.githubusercontent.com/wenym8/figmingo-mcp/main/scripts/install.ps1 | iex安装器会:检测 Node ≥ 18 → 全局安装包 → 安装 Playwright Chromium(约 170MB,一次性,HTML 渲染/提取/对比工具需要)→ 写入 Cursor(~/.cursor/mcp.json)、Claude Code(~/.claude.json)、Claude Desktop、VS Code、Kimi CLI(~/.kimi/mcp.json)、Codex CLI(~/.codex/config.toml,TOML,只改 [mcp_servers.figmingo] 段,原文件备份为 config.toml.figmingo-bak)的 MCP 配置 → 把伴侣插件(manifest + code.js + ui.html)复制到 ~/.figmingo/plugin,并在桌面放一个 figmingo-plugin 快捷方式(Figma 导入对话框里一点即中,不用翻隐藏文件夹)→ 打印后续指引。重复运行幂等,不会清掉已配置的 Figma token。
装完运行 figmingo-mcp doctor 自检整个环境(Node、token 有效性、Chromium、插件文件与版本漂移、客户端配置项、桥端口)——每项打印 ✓/✗ 并附修复提示,全部通过时退出码才为 0。
手动配置(任意客户端):
{
"mcpServers": {
"figmingo": {
"command": "npx",
"args": ["-y", "figmingo-mcp"],
"env": { "FIGMA_API_KEY": "figd_..." }
}
}
}获取 PAT:Figma → 设置 → 安全 → Personal access tokens → 生成新 token(读工具只需读权限)。
用法
figmingo-mcp # stdio 传输(默认,AI 客户端用这个)
figmingo-mcp --http --port 3845 # Streamable HTTP:http://127.0.0.1:3845/mcp
figmingo-mcp cache-clear # 清空 ~/.figmingo/cache
figmingo-mcp doctor # 环境自检
figmingo-mcp --help15 个工具
读取工具(REST + PAT,免费套餐可用):whoami(token 自检 + 限流/缓存状态)· get_design_context(精简节点树:绝对坐标、auto-layout、填充/描边/效果、文字样式)· get_metadata(轻量树,XML/JSON,深取前先定位)· get_screenshot(节点渲染图,scale 0.01–4,png/jpg/svg/pdf)· download_assets(批量导出节点 + 原始图片填充,带清单)· get_variable_defs(variables 接口 403 时降级 styles + 推导 tokens,标 source)· search_design_system(本地索引查组件/样式)· get_code_connect_map(组件→代码映射)。
所有读取工具都接受 fileKey 或完整 url(自动解析 node-id)。
复刻工具(差异化能力):get_html_replica_spec(复刻专用文档:绝对矩形、计算后的字体排版、hex+alpha 颜色、渐变、资产清单)· render_html_screenshot(Playwright 截图 URL/本地 HTML/HTML 字符串)· verify_html_parity(验收闸门:内容关文案/字体/颜色、结构关 ±4px、视觉关像素 diff ≤ 1%,产出 report.json + diff 图)· compare_html_to_image(一键视觉 diff,bands 分带定位差异,AA 像素单独记账)。
容差(生产验证过的内部工具移植):
POS_TOL = 4 FONT_SIZE_TOL = 1 LS_TOL = 0.5
LH_TOL = 2 COLOR_TOL = 2/255 VISUAL_MAX_RATIO = 0.01(裁切 ≤ 2px)写入工具(伴侣插件桥):bridge_status(桥连接状态)· execute_plugin_command(14 种命令 + commands: [...] 批次,顺序执行,$var 节点引用,心跳超时机制)· import_html_replica(HTML 文件/URL 一键直导为原生 Figma frames,Chromium 提取布局与计算样式,dryRun 预览,降级进 warnings)。
插件连接 ws://127.0.0.1:39220。导入一次:Figma 桌面端 → 插件 → 开发 → Import plugin from manifest… → 选桌面上的 figmingo-plugin/manifest.json(安装器放的快捷方式;本体在 ~/.figmingo/plugin/manifest.json),保持运行即可。免费套餐可用——写入不占用 REST 配额。
架构说明:Figma 插件沙箱(code.js)无法开 WebSocket,所以连接由插件的 UI iframe(ui.html)持有,命令经 postMessage 在 iframe 与沙箱间转发。UI 有状态面板(● 已连接 / ○ 连接中 / ✕ 失败原因、服务器地址、已执行命令数)。
批次语义:插件顺序执行,每条命令(无论成败)后都发 progress 心跳。服务器没有 30s 硬顶:空闲超时(idleTimeoutMs,默认 20s,心跳即重置)+ 总上限(timeoutMs,默认 5 分钟,可每次调用自设)。批次结果带逐命令 results 数组;超时错误会列出已确认落画布的命令索引,重试前先用 get_page_children 看画布现状。
复刻闭环
flowchart LR
F["Figma 设计稿<br/>(或任意参考图)"] -- "get_html_replica_spec" --> S["复刻 spec<br/>(绝对矩形、计算排版、<br/>资产清单)"]
S --> H["HTML / CSS"]
H -- "render_html_screenshot" --> R["Chromium 渲染"]
R -- "verify_html_parity · compare_html_to_image" --> G{"三关验收<br/>内容 · 结构 ±4px · 视觉 ≤ 1%"}
G -- "bands 分带定位差异" --> H
G -- "通过" --> I["import_html_replica"]
I -- "插件桥 · 确定性(MD5 验证)" --> C["原生 Figma frames"]
style G fill:#b7791f,color:#fff
style C fill:#0d9e6e,color:#fff做 HTML 复刻先读 docs/REPLICA-PLAYBOOK.md——六轮带评分实战沉淀的 6 步流程(先量后写 CSS、字体锁定、bandEdges 驱动迭代、单变量改动、收敛判据)、diff 图读法、工具速查表、防抄漏清单。让你的下一次复刻 3–4 轮收敛,而不是 7 轮。
免费套餐可用性
能力 | 免费套餐 |
全部读取工具 | ✅ PAT + 公开 REST;仅有每分钟限流(429 自动退避) |
| ✅ 降级方案( |
写入工具 | ✅ 插件 API 无套餐门槛 |
MCP 客户端 | ✅ 任意支持 MCP 的客户端(官方 Figma 桌面 MCP 有套餐门槛,本服务器没有) |
验收
六轮带评分的复刻挑战实测(独立 judge agent 从零复测,非自报数据):
题目 | 分数 | 像素 diff | 备注 |
C1 韩国攻略信息图 | 91 | 2.46 % | PASS |
C2 百度首页 | 93 | 1.96 % | PASS |
C3 Kimi 设置弹窗 | 93 | 0.51 % | PASS |
C4 FAQ 手风琴(3 状态) | 93 | 0.46–0.58 % | PASS |
C5 音乐播放器(图片 → HTML → Figma) | 92 | 0.87 % | PASS,30 节点导入 MD5 确定性 |
C6 SaaS 落地页(1440×4148,7 个 section) | 84 | 0.58 % | PASS,279 节点一键直导、零手工补丁、MD5 可复现 |
npm install
npm run build
npm test # 178 个单元测试(vitest,录制 fixtures)
# 真实 API 验收:
FIGMA_API_KEY=<pat> TEST_FILE_KEY=<file-key> [TEST_NODE_ID=1:2] npm run acceptnpm run accept 逐个工具打 ✅ / ⏭️ / ❌;token/fileKey 缺失时优雅退出并给指引;插件未连接时写工具报 SKIP(不是 FAIL)。
开发
npm run build # tsup(dist/)+ tsc(plugin/code.js)
npm run typecheck # 严格 tsc --noEmit
npm test # vitest
npm run accept # 真实 API 验收清单仓库结构见 ARCHITECTURE.md——工具清单、REST 事实、缓存、桥协议、验收方案的权威文档。
License
Available Tools
15 toolsbridge_statusA
Is the figmingo companion plugin connected? Reports client info, pending/queued command counts, and the bridge address.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It clearly states the tool is for checking status and the kind of information reported, indicating a read-only operation. However, it could explicitly state it has no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using two sentences that front-load the purpose. Every word adds value, and there is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and no output schema, the description fairly sets expectations about what is reported (client info, command counts, bridge address). It is sufficient for a simple status check, though a bit more detail on response format would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so schema coverage is 100% by default. The description does not need to add parameter details; the baseline score of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('reports') and explicitly lists what the tool returns (client info, command counts, bridge address). It distinguishes itself from sibling tools which are unrelated to connectivity status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for checking plugin connectivity, but it does not provide explicit guidance on when to use it versus alternatives, or any conditions for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_html_to_imageA
One-shot visual comparison: renders an HTML page/element with Playwright (chromium) and pixel-diffs it against a reference image (e.g. a Figma export). passed = diffRatio <= maxRatio (default 0.01 = 1%; raise maxRatio for rework/triage loops where you only need localization, not a strict gate). Returns diff ratio, anti-alias accounting (see methodology in the response), and per-band diff localization — equal-height bands or custom bandEdges so one band can map to one design element. Replaces the manual render_html_screenshot → write-a-diff-script two-step.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Remote URL to render. | |
| html | No | Raw HTML string to render. | |
| bands | No | Split the image vertically into N equal-height horizontal bands and report per-band diff ratios. 0 = off. Ignored when bandEdges is set. | |
| fullPage | No | ||
| htmlPath | No | Path to a local HTML file. | |
| maxRatio | No | Pass line: passed = diffRatio <= maxRatio. Default 0.01 (1%). For rework rounds, raise it (e.g. 0.05) so the call still "passes" while you use bands/bandEdges to localize remaining diffs. | |
| selector | No | CSS selector for a partial (element) screenshot. | |
| settleMs | No | ||
| bandEdges | No | Custom band boundaries, e.g. [0,120,280,974] → 3 bands [0,120) [120,280) [280,974). Lets one band map to one design element. Values are clamped to the image height, sorted, deduped. Mutually exclusive with bands — when both are given, bandEdges wins. | |
| hideFixed | No | Hide position:fixed/sticky elements before shooting. | |
| imagePath | Yes | Path to the reference image (PNG) to compare against. | |
| threshold | No | pixelmatch color-delta threshold (0-1). Smaller = stricter per-pixel color comparison. | |
| initScript | No | JS run before page scripts (addInitScript) — passed through to the renderer, e.g. seed localStorage/state for multi-state replicas. | |
| outDiffPath | No | Where to save the diff PNG (red = mismatch). Temp file if omitted. | |
| outRenderPath | No | Also save the rendered screenshot to this path and return it as renderPath. Useful when you need the render PNG itself (e.g. measuring line widths) without a second render_html_screenshot call. | |
| viewportWidth | No | ||
| waitForImages | No | ||
| keepRenderPath | No | Deprecated alias of outRenderPath. If both are set, outRenderPath wins. | |
| viewportHeight | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; the description discloses core behavior: returns diff ratio, anti-alias accounting, per-band diff localization, pass/fail logic, and mutual exclusivity of bands/bandEdges. It could add more on side effects, but covers essential traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph of ~120 words, front-loaded with purpose. It efficiently covers key points but could be structured into shorter sentences for better readability; still not verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (19 parameters, no output schema), the description explains workflow, pass/fail, and band localization. However, it lacks explicit output structure (only mentions diff ratio and anti-alias but says 'see methodology in the response'), which reduces completeness for an agent needing to parse results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 74%; the description adds meaning beyond the schema for key parameters like maxRatio (when to raise), bands/bandEdges (mutual exclusion, mapping to elements), and outRenderPath (avoiding second call). Not all parameters get extra context, but the added value is significant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('One-shot visual comparison'), resource ('HTML page/element pixel-diffs against reference image'), and distinguishes it from siblings like render_html_screenshot (replaces manual two-step).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use (visual regression) and provides contextual guidance (raising maxRatio for rework loops). It doesn't explicitly list when not to use but implies it replaces a manual two-step, providing good context among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_assetsA
Batch-export nodes as files (up to N ids, chunked) plus raw image fills from GET /v1/files/:key/images. Saves everything into a directory and returns a manifest. Temp Figma URLs are downloaded immediately and cached.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Full figma.com URL (design/file/proto). node-id query param is honored. | |
| scale | No | ||
| format | No | png | |
| nodeId | No | Node id, "1:2" or "1-2" form. Overrides node-id in url. | |
| outDir | No | Output directory (default ~/.figmingo/assets/<fileKey>). | |
| fileKey | No | Figma file key (from the file URL). Provide either fileKey or url. | |
| nodeIds | No | Node ids to export. Omit to only download image fills. | |
| maxBytesPerFile | No | Skip files larger than this many bytes. | |
| includeImageFills | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It mentions immediate download of temp URLs, caching, chunking, and manifest return. However, it does not disclose potential side effects like file system writes or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise with three sentences, each adding key information. Front-loaded with core purpose, no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so description must explain return value; it mentions manifest. Tool has 9 parameters and no required ones; description doesn't explain default behavior or parameter interactions. Adequate but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, so the description adds limited value over schema fields. The description mentions nodeIds and includeImageFills but does not clarify relationships or behavior for conflicting parameters (e.g., url vs fileKey).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool batch-exports nodes as files and raw image fills, saving to a directory with a manifest. It distinguishes from sibling tools like get_screenshot by focusing on batch export and caching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives (e.g., get_screenshot for single exports). Usage context is implied but no exclusions or comparisons are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_plugin_commandA
Send a command envelope to the companion Figma plugin over the local bridge. Commands: create_frame, create_text, create_rectangle, set_fills, set_effects, set_auto_layout, insert_image, move_node, resize_node, delete_node, get_selection, get_file_info, get_page_children, export_node. Use commands for a batch executed sequentially in the plugin. Commands sent while the plugin is disconnected are queued (bounded) unless queue=false. Batches emit per-command progress heartbeats: the call fails only after idleTimeoutMs of silence or the total timeoutMs cap, and timeout errors list the command indexes confirmed applied on the canvas. export_node accepts an absolute params.outPath to save bytes to disk and return { path, bytes } instead of inline base64.
| Name | Required | Description | Default |
|---|---|---|---|
| queue | No | Queue while disconnected (default true); false = fail immediately. | |
| params | No | Parameters for the single command. | |
| command | No | Single command name. | |
| commands | No | Batch of commands; executed sequentially inside the plugin. | |
| timeoutMs | No | Total cap in ms for the whole call once sent (default 300000 = 5 min). Batch heartbeats keep the call alive within this cap. | |
| stopOnError | No | Batch: stop on first error. | |
| idleTimeoutMs | No | Max silence in ms with no progress/result before failing (default 20000). Reset by every batch progress heartbeat. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: queuing while disconnected, batch progress heartbeats, timeout handling, and export_node's disk writing. However, it does not explicitly state whether commands have side effects (e.g., destructive ones like delete_node).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly long but efficient. It front-loads the core purpose and command list, then adds behavioral details. Every sentence contributes value, though minor redundancy exists (e.g., queue mention twice).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, nested objects, and no output schema, the description covers essential behaviors like batching, timeouts, and export. It could detail overall return structure more, but what's provided is sufficient for most use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant meaning: explains queue behavior, batch execution, timeouts, and export_node's return format. This goes beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Send a command envelope to the companion Figma plugin over the local bridge.' It lists specific supported commands, making it distinct from sibling tools like get_screenshot or bridge_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives (e.g., compare_html_to_image, import_html_replica). Usage is implied through the command list, but no when-not-to or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_code_connect_mapB
Read figmingo.components.json (local component→code mapping) and return the code targets for components found in the requested node subtree.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Full figma.com URL (design/file/proto). node-id query param is honored. | |
| nodeId | No | Node id, "1:2" or "1-2" form. Overrides node-id in url. | |
| fileKey | No | Figma file key (from the file URL). Provide either fileKey or url. | |
| mapPath | No | Path to figmingo.components.json (default: ./figmingo.components.json). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It implies a read-only operation but does not disclose error handling, file existence requirements, authentication needs, or whether it modifies local state. The behavioral details are insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that immediately conveys the tool's purpose. It is front-loaded and contains no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic action but lacks details on error conditions, expected file format, and the relationship between node subtree and nodeId parameter. Given no annotations and no output schema, it is sufficient for a simple tool but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with adequate individual parameter descriptions. The tool description adds no extra meaning beyond the schema, so it meets the baseline but does not enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Read' and 'return' and the resource 'figmingo.components.json', specifying it returns code targets for components in a requested node subtree. This distinguishes it from sibling tools like get_design_context or get_variable_defs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, prerequisites, or conditions under which it should not be used. The description is purely functional without contextual advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_design_contextA
Get the simplified design context for a Figma file or node: layout (absolute bounds, auto-layout), fills/strokes/effects, and text styles. Use format=compact for a small token footprint.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Full figma.com URL (design/file/proto). node-id query param is honored. | |
| depth | No | Max traversal depth (default: full subtree). | |
| format | No | json = structured tree; compact = indented text lines. | json |
| nodeId | No | Node id, "1:2" or "1-2" form. Overrides node-id in url. | |
| fileKey | No | Figma file key (from the file URL). Provide either fileKey or url. | |
| geometry | No | Pass geometry=bounds to the REST API (vector vertices etc.). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description partially describes behavior: it reveals the 'simplified' nature of the context and suggests using format=compact to reduce token footprint. However, it does not disclose whether the operation is read-only, performance characteristics, or what aspects are excluded from the simplified output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences: first defines purpose and content, second offers a practical tip. No redundant or extraneous information, and critical details are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is moderately complete given the tool's complexity (6 params, no output schema). It explains the result content but omits usage guidelines and behavioral transparency. The tip about format is helpful, but overall the description leaves gaps that an agent would need to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3). The description adds value by advising use of format=compact for smaller token footprint and noting that node-id in the URL is honored, which goes beyond the schema's description. No further elaboration on other parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves simplified design context for a Figma file or node, listing specific content types (layout, fills/strokes/effects, text styles). This distinctively differentiates it from sibling tools like get_metadata 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The description does not mention exclusions, prerequisites, or scenarios where a different tool would be more appropriate, leaving the agent with no criteria for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_html_replica_specB
Build a replica-optimized spec from a Figma file/node: sections/elements with absolute rects, computed typography (family/style/size/letter-spacing/line-height/text-case), hex+alpha colors, gradient data, and an asset manifest (icons→svg, image fills→urls, logo hints). Output schema matches verify_html_parity input.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Full figma.com URL (design/file/proto). node-id query param is honored. | |
| depth | No | ||
| inline | No | Return the full spec inline (can be large). Default: return summary + path. | |
| nodeId | No | Node id, "1:2" or "1-2" form. Overrides node-id in url. | |
| fileKey | No | Figma file key (from the file URL). Provide either fileKey or url. | |
| outPath | No | Where to write the spec JSON (default ~/.figmingo/replica/<fileKey>-<node>.spec.json). | |
| iconPattern | No | Regex for icon asset hints on node names. | |
| logoPattern | No | Regex for logo asset hints (default /logo/i on node names). | |
| sectionsMode | No | auto = child containers become sections; self = whole node is one section. | auto |
| includeAssets | No | ||
| downloadAssets | No | Download asset bytes and add localPath to manifest entries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes output contents but omits behavioral traits like rate limits, authentication requirements, or size constraints. Lacks insight into default behavior (summary vs inline) implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the main action and output components. No superfluous text, but could be slightly more detailed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 parameters, no output schema, and no annotations, the description provides adequate but not complete context. It mentions output schema matches another tool but doesn't elaborate on return structure or edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (82%), so baseline is 3. The description adds no significant parameter instructions beyond the schema. Two parameters (depth, outPath) lack descriptions in schema, but description doesn't compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool builds a replica-optimized spec from Figma, listing specific output elements (rects, typography, colors, etc.). It distinguishes from siblings by focusing on spec generation for parity verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide guidance on when to use this tool vs alternatives like get_design_context or get_variable_defs. No when-to-use or when-not-to-use context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_metadataA
Lightweight tree of a Figma file/node (id, name, type, bounds) for orientation before a deep fetch. Output as XML (default) or JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Full figma.com URL (design/file/proto). node-id query param is honored. | |
| depth | No | Max traversal depth (default: full subtree). | |
| format | No | xml | |
| nodeId | No | Node id, "1:2" or "1-2" form. Overrides node-id in url. | |
| fileKey | No | Figma file key (from the file URL). Provide either fileKey or url. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes output format and what is returned (id, name, type, bounds) and notes it's lightweight. Missing details on authentication, rate limits, or potential side effects, which are important for a file access tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two well-structured sentences. First sentence delivers core purpose and return values; second specifies output formats. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately covers the idea of a lightweight tree for orientation. Could benefit from clarifying whether the tree includes all children or just immediate, and the format of bounds, but sufficient for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80% (4 of 5 parameters documented). The description adds that output can be XML or JSON and that node-id in URL is honored, but does not significantly enhance understanding of parameters beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns a lightweight tree of Figma file/node with id, name, type, bounds for orientation, distinguishing it from a deep fetch. The verb 'get' and resource 'metadata' are clear, and the scope is specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions 'for orientation before a deep fetch', giving context for when to use. However, does not explicitly state when not to use or compare directly with sibling tools like '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
Render a Figma node to an image via GET /v1/images/:fileKey (scale 0.01–4, png|jpg|svg|pdf). Returns the image inline (base64) and/or saves it to disk.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Full figma.com URL (design/file/proto). node-id query param is honored. | |
| scale | No | ||
| format | No | png | |
| inline | No | Return the image inline as base64 (default true). | |
| nodeId | Yes | Node id to render, "1:2" or "1-2" form (or via url node-id). | |
| fileKey | No | Figma file key (from the file URL). Provide either fileKey or url. | |
| savePath | No | Optional file path to save the render to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool returns base64 inline and/or saves to disk, and specifies valid inputs (scale range, formats). It does not mention authentication, error states, or read-only nature, but covers core behavioral aspects adequately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The first sentence immediately states the core purpose, and the second adds key options. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters and no output schema or annotations, the description covers essential input choices and output behavior. It lacks detail on response format beyond 'base64' and error handling, but it is sufficiently complete for typical usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71%, and the description adds context beyond schema: it clarifies scale range, formats, and the choice between url/fileKey. It explains the output modes (inline base64, savePath) and that node-id can come from url. This helps an agent determine parameter values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool renders a Figma node to an image using the specified endpoint, and lists supported formats and output options. It distinguishes the tool from siblings (e.g., render_html_screenshot) by the resources and endpoint used.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides technical details (scale, format, output modes) but does not explicitly state when to use this tool versus siblings like get_design_context or render_html_screenshot. No exclusion criteria or alternative suggestions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_variable_defsA
Get design tokens: tries the Enterprise variables/local endpoint first; on 403 falls back to published styles + tokens inferred from node fills/text styles. Every output is marked with source.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Full figma.com URL (design/file/proto). node-id query param is honored. | |
| nodeId | No | Node id, "1:2" or "1-2" form. Overrides node-id in url. | |
| fileKey | No | Figma file key (from the file URL). Provide either fileKey or url. | |
| includeInferred | No | Include tokens inferred from node styles in fallback mode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the fallback mechanism and that every output is marked with source, which is good transparency. However, does not mention potential side effects, authentication requirements, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. Front-loaded with main purpose, then details in second sentence. Very concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the core functionality and fallback behavior. No output schema, but return values are fairly standard (tokens with source markers). Could mention that it returns variable definitions, but sufficient for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. Description adds context about fallback behavior but does not enhance parameter understanding beyond existing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves design tokens with a specific verb 'Get'. It explains the dual approach: tries Enterprise endpoint and falls back to published styles/inferred tokens, distinguishing it from other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for retrieving design tokens but does not explicitly guide when to use this tool over siblings like 'search_design_system' or 'get_metadata'. No 'when not to use' or alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_html_replicaA
Import an HTML page or a replica spec into Figma as native frames via the plugin bridge. Give it an HTML file (htmlPath) or URL (htmlUrl) and it extracts layout + computed styles with headless Chromium, then rebuilds: main frame → section frames → nested containers / text / image nodes with absolute positions, border-radius, borders, shadows, gradients, and real image bytes. Alternatively pass a ready-made spec (spec/specPath, from get_html_replica_spec or hand-written). All degradations (missing fonts, SVG assets, failed images) are reported in the warnings array. Supports dryRun to preview the command plan.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Main frame landing X on the canvas (default 0). | |
| y | No | Main frame landing Y on the canvas (default 0). | |
| spec | No | Inline spec JSON. | |
| scale | No | ||
| dryRun | No | Return the command plan without executing. | |
| htmlUrl | No | http(s) URL to extract and import (mutually exclusive with spec/specPath/htmlPath). | |
| htmlPath | No | Path to a local .html file to extract and import (mutually exclusive with spec/specPath/htmlUrl). | |
| parentId | No | Target parent node id (default: current page). | |
| specPath | No | Path to a replica spec JSON. | |
| timeoutMs | No | Bridge timeout for the whole batch (default 120000). | |
| outSpecPath | No | Write the extracted spec JSON to this path for inspection. | |
| rootSelector | No | Extraction root element (default body). | |
| includeImages | No | Download asset bytes and insert real images (default true). | |
| mainFrameName | No | ||
| maxImageBytes | No | Per-image byte cap (default 5MB). | |
| viewportWidth | No | Extraction viewport width (default 1440). | |
| viewportHeight | No | Extraction viewport height (default 900). | |
| sectionSelector | No | Split the page into one section per matched element. | |
| skipEmptyFrames | No | Drop leaf frames with no visual style (default: keep as transparent containers). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses the use of headless Chromium, extraction of layout and computed styles, rebuilding into frames with specific node types, reporting of warnings, and support for dryRun. It also mentions mutual exclusivity of input parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, starting with a clear main purpose, but it is somewhat lengthy (around 200 words) and includes details that are also in the schema. It could be more concise while retaining essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (19 parameters, no output schema), the description covers the main inputs, process, and output (warnings array). It provides a high-level understanding, though not every parameter is explained in the narrative; the schema covers those details. The description is sufficiently complete for an agent to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 89%, so the schema already describes most parameters. The description adds value by explaining the relationship between parameters (e.g., mutual exclusivity of htmlUrl, htmlPath, spec, specPath) and the overall flow, which goes beyond individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool imports an HTML page or replica spec into Figma as native frames. It distinguishes from siblings like get_html_replica_spec (which only extracts spec) and render_html_screenshot (which only renders a screenshot).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description hints at using get_html_replica_spec to obtain a spec but does not explicitly state when to use this tool versus alternatives like render_html_screenshot or verify_html_parity. More explicit guidance would improve clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_html_screenshotA
Playwright (chromium) screenshot of a local/remote HTML page or an element selector. Waits for images to load, can hide fixed/sticky elements, supports full-page or selector-local captures.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Remote URL to render. | |
| html | No | Raw HTML string to render. | |
| inline | No | Also return the PNG inline as base64. | |
| outPath | Yes | Where to save the PNG. | |
| fullPage | No | ||
| htmlPath | No | Path to a local HTML file. | |
| selector | No | CSS selector for a partial (element) screenshot. | |
| settleMs | No | ||
| hideFixed | No | Hide position:fixed/sticky elements before shooting. | |
| initScript | No | JS run before page scripts (addInitScript) — e.g. seed localStorage/state so one HTML file can render multiple states. | |
| viewportWidth | No | ||
| waitForImages | No | ||
| viewportHeight | No |
TDQS
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 discloses using Playwright chromium, waiting for images, hiding fixed/sticky elements, and supporting full-page or selector captures. However, it omits details like performance impact or side effects (e.g., file system writes).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence that front-loads the core purpose. It is concise but could benefit from slight restructuring to improve readability (e.g., list key features).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 13 parameters and no output schema or annotations, the description covers the main functionality and key options. It is fairly complete but could include notes on error handling or output format (PNG is implied) to fully inform the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 62%, and the description adds context for key behaviors (waiting for images, hiding fixed elements, full-page vs selector). For parameters like 'settleMs' and 'viewportWidth', the description does not provide additional meaning beyond the schema defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a Playwright (chromium) screenshot of HTML content, specifying local/remote pages and element selectors. This distinguishes it from sibling tools like 'get_screenshot' and 'compare_html_to_image'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description details capabilities (image loading, hiding elements, full-page/selector captures) but does not explicitly state when to use this tool versus alternatives like 'get_screenshot'. 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.
search_design_systemA
Search the file's design system: components, component sets, and published styles. Local index, no extra API quota beyond one file fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Full figma.com URL (design/file/proto). node-id query param is honored. | |
| limit | No | ||
| query | Yes | Free-text query matched against names/descriptions. | |
| types | No | Restrict result kinds. | |
| nodeId | No | Node id, "1:2" or "1-2" form. Overrides node-id in url. | |
| fileKey | No | Figma file key (from the file URL). Provide either fileKey or url. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it uses a local index and consumes no extra API quota beyond one file fetch, which is useful behavioral context. However, it does not address other behaviors such as error handling, sorting, or pagination. With no annotations, the description carries the full burden and is only partially adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences, front-loading the main purpose and adding a key behavioral note. Every sentence adds value, though it could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters and no output schema or annotations, the description is insufficient. It does not explain how parameters like types, nodeId, or fileKey interact, nor does it describe the output format or error scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83%, so most parameters are already described in the schema. The description adds only the high-level search context, not additional parameter details. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches a file's design system for components, component sets, and published styles, which is a specific verb+resource. It also distinguishes from siblings like get_design_context or get_metadata by mentioning local index and quota.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for searching design system elements but does not explicitly state when to use this tool versus alternatives like get_variable_defs or get_design_context. No exclusion criteria or context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_html_parityA
The acceptance gate. Compares rendered HTML against a Figma replica spec: content gate (copy/font/color tolerances: font size ±1px, letter-spacing ±0.5px, line-height ±2px, color ±2/255), structural gate (position/size ±4px), visual gate (pixelmatch diff ratio ≤ 1%, 2px crop tolerance). Emits a JSON report + diff images.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Remote URL of the HTML page. | |
| html | No | Raw HTML string. | |
| spec | No | Inline spec JSON (string or object). | |
| outDir | No | Directory for report.json + diff images (default ./figmingo-parity-out). | |
| htmlPath | No | Local HTML file path. | |
| sections | No | HTML section selectors (default: auto-detect semantic elements). | |
| specPath | No | Path to a spec JSON from get_html_replica_spec. | |
| hideFixed | No | ||
| sectionMap | No | spec section id → html section id overrides. | |
| skipVisual | No | Run only content+structural gates. | |
| skipSections | No | Spec section ids/names to skip (e.g. floating widgets). | |
| viewportWidth | No | ||
| expectedCounts | No | ||
| looseRectHints | No | Extra rect slack per assetHint, e.g. {"product": 20}. | |
| viewportHeight | No | ||
| visualMaxRatio | No | default 0.01 | |
| positionTolerance | No | default 4 | |
| figmaScreenshotPath | No | Existing PNG of the Figma design (skips REST render). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description adequately discloses behavioral traits: it compares HTML vs Figma spec with tolerances, outputs JSON report and diff images. It does not mention side effects, rate limits, or auth needs, but the read-only nature is implied. The output format is clearly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4 sentences) and front-loaded with the main purpose. It packs many details efficiently, though a bullet list for the three gates could improve scannability. No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (18 params, no output schema, no annotations), the description explains the tool's core function and output well. However, it omits input requirements (e.g., need for either url or html) and does not mention edge cases or resource consumption, leaving minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 78%, so baseline is 3. The description does not add meaning beyond the schema; it focuses on overall behavior rather than parameter interactions (e.g., precedence rules for url, html, or spec). No parameter-specific details are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is an 'acceptance gate' that compares rendered HTML against a Figma replica spec, detailing three specific gates (content, structural, visual) with tolerances. This distinguishes it from siblings like compare_html_to_image or get_html_replica_spec, which are more limited in scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for final validation but does not explicitly state when to choose this tool over alternatives (e.g., compare_html_to_image). There is no guidance on prerequisites or exclusions, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiA
Token sanity check via GET /v1/me, plus rate-limit observations and disk-cache status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the action (GET request) and additional outputs (rate-limit and disk-cache). Implies non-destructive read operation. No annotations to contradict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence efficiently conveys purpose and scope. Front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Describes both the operation and expected outputs without an output schema. Provides sufficient context for an AI agent to understand what the tool returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so schema coverage is 100%. Description adds no param info, but none needed. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it performs a token sanity check via a specific endpoint (GET /v1/me) and adds extra functionality (rate-limit observations, disk-cache status). Distinct from sibling tools, which are all design/UI related.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage as a sanity check for token validity and system status. No explicit when-not-to-use, but context makes it obvious. Could be improved with a note about typical use cases.
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. Dates show when Glama detected each change.
15 tool updates
v0.1.1- First observed
bridge_status - First observed
compare_html_to_image - First observed
download_assets - First observed
execute_plugin_command - First observed
get_code_connect_map - First observed
get_design_context - First observed
get_html_replica_spec - First observed
get_metadata - First observed
get_screenshot - First observed
get_variable_defs - First observed
import_html_replica - First observed
render_html_screenshot - First observed
search_design_system - First observed
verify_html_parity - First observed
whoami
TDQS
Each tool targets a distinct aspect of the workflow: fetching Figma data, rendering HTML, performing comparisons, plugin control, and importing. Overlap between compare_html_to_image and verify_html_parity is minimal; the former is a simple pixel-diff while the latter is a comprehensive gate with multiple checks.
Most tools follow a verb_noun pattern (e.g., get_design_context, download_assets, execute_plugin_command). However, bridge_status and whoami are noun_first or single-word, breaking the pattern slightly. Overall, names are clear and consistent.
With 15 tools, the set is well-scoped for the domain of Figma-to-HTML comparison and design system interaction. Each tool serves a clear purpose without unnecessary duplication.
The tool surface covers the full lifecycle: extracting design data (get_design_context, get_metadata, get_variable_defs), rendering (render_html_screenshot, get_screenshot), comparison (compare_html_to_image, verify_html_parity), importing (import_html_replica, get_html_replica_spec), and plugin control (execute_plugin_command). No obvious gaps for the stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
The Figma MCP server brings Figma design context directly into your AI workflow.
MCP server for visual regression testing: triage a PR's UI diffs from your coding agent.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceLocal-first MCP server that connects AI coding agents to the currently open Figma file through a local plugin bridge, requiring no Figma API token.8MIT
- AlicenseNot gradedqualityCmaintenanceRead-only Figma MCP server that enables design-to-code workflows by talking to the Figma REST API with a personal access token, for use with Claude Code and GitHub Copilot.563MIT
- AlicenseBqualityBmaintenanceLocal MCP server connecting AI clients to the Figma desktop app for inspecting and editing Figma documents via the Plugin API.163761MIT
- AlicenseNot gradedqualityCmaintenanceA local MCP server that lets MCP clients inspect and edit the Figma document currently open in the Figma desktop app using a local bridge and development plugin.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/wenym8/figmingo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server