Skip to main content
Glama

Layerwright

Turn Claude Design and Claude Code designs into native, editable Figma files, and Figma designs into code that uses your own components.

CI npm MIT

Demo: a request sent from the Layerwright window in Figma; a Claude Code session builds mobile versions of two Persian screens with Auto Layout while its cursor shows the work

Select a desktop screen in Figma, press Mobile in the Layerwright window and send it to a Claude Code session. The session builds 390 px mobile versions of two right-to-left Persian screens with Auto Layout, its cursor showing where it works. The window lists the connected sessions and each request's answer. (2× speed.)

npx layerwright init   # in your project, then open the plugin in Figma desktop (see Quickstart)

Layerwright is an open-source MCP server and Figma plugin for Claude Code, Codex and Cursor. It imports HTML, such as a Claude Design "standalone HTML" export, into Figma as real frames with Auto Layout, text, images and vector icons. It builds new screens from your own Design System: real component instances, variables and text styles. And it works the other way: select a Figma frame and Claude implements it in your codebase with your existing components and tokens, then checks that it did.

Why

Claude Design exports to HTML, PDF, PPTX and Canva, but not to Figma. Claude Code can write UI code, but it has no native way to put a design into a Figma file your team can edit. Most "HTML to Figma" tools either paste a flat picture or need a cloud account.

Layerwright closes that gap locally:

  • Claude Design to Figma: export standalone HTML, run one command, and you get editable Figma frames.

  • Claude Code to Figma: ask Claude for a screen or a flow, and it is built from your Design System's components.

  • Figma to code: select a frame, and Claude implements it with the React components you already have (not a new copy of each button), mapped once and shared with your team.

  • Ask from Figma: select layers, press Mobile version or Build in code in the plugin window, and a session starts on it.

  • No API keys, no cloud, no account. Everything runs on your machine. The plugin only talks to localhost.

Related MCP server: Claude Talk to Figma MCP

Features

Bring designs into Figma

  • HTML to Figma import (import_html_to_plan)

    • Flexbox becomes Auto Layout: direction, gap, padding, alignment and wrap. Fixed CSS sizes stay fixed.

    • Colours, borders, radii, shadows, gradients, fonts, line height and letter spacing come across.

    • Text with inline <b>, <span> and <a> is one text layer with styled ranges.

    • Pictures come along: images (PNG, JPEG, GIF, WebP, AVIF), SVG files and inline SVG as vectors, sprite icons, CSS background images, CSS-mask icons in their colour, icon fonts and <canvas>, in both modes.

    • Desktop (1440) and mobile (390) screens are rendered side by side.

    • RTL is supported (Persian, Arabic, Hebrew). Rows keep their visual order and text stays right-aligned.

  • Pixel-faithful mode (figma_import_html) for review boards and art-heavy pages: exact layers, variant sets built from states, and instance swaps.

  • AI design to Figma from a prompt. Claude writes a typed Design Plan (a JSON DSL). The plan is validated and resolved against your components, variables and text styles, then built deterministically. Claude never writes Figma plugin code.

  • Prototypes. Click, hover and timed interactions, navigate / overlay / swap / back, smart animate and push transitions, scrolling frames and flow starting points, in plans or on existing frames.

  • Icons and pictures in one step (figma_import_assets): a folder of SVGs becomes editable vectors (or components, named by their path), pictures become image layers, in a grid on the page.

  • No AI needed for a plain import. npx layerwright import ./design.html --to-figma builds it in the open Figma file.

  • Fonts from exports: npx layerwright fonts ./export --install installs the TTF/OTF fonts a design ships.

Use your Design System

  • Design System automation. After a Design System scan, buttons, inputs and links become your real Figma components when they clearly match, and you can map any element yourself (mappings: [{ selector, component }]).

  • Design System sync. After an import, figma_analyze_design({ mode: "sync" }) swaps buttons and pills for your DS components (the variant that looks closest), gives text your text styles by size and weight, and binds colours to your variables and styles. You approve it; originals are kept hidden.

  • Audit and fix existing frames. Hard-coded colours become variables, raw text gets text styles, and custom buttons become component instances, in groups you can pick. Originals are hidden, never deleted.

  • Work on existing designs (figma_edit). Rename, move, duplicate, delete, restyle (font weight, size and family, text and fill colours), and turn existing frames into components or variant sets with text properties, in one undo step.

  • Figma back to a plan. Any subtree exports as an editable Design Plan to clone, refactor or implement in code: layout, tokens, text styles, instances, gradients, shadows, blurs, shapes, and vectors or boolean shapes as SVG icons.

Figma to code

figma_inspect → code_scan_components → code_mapping → code_verify_usage

  • Reads the frame as a plan: layout, spacing and colour tokens, text styles, and every component instance with its variant and properties.

  • Scans your React / Next.js codebase for exported components (and Tailwind or shadcn/ui) and suggests which code component each Figma component is.

  • The mappings you confirm are saved in .layerwright/mapping.json; commit it and the whole team reuses them.

  • Claude implements the frame with the mapped components and your theme tokens; code_verify_usage then flags design components that weren't used, raw <button> / <input> duplicates, and arbitrary Tailwind values.

Work together with your agents

  • Several sessions, several files. Claude Code, Codex and Cursor sessions on your computer share one connection to the plugin, with no port to configure. Open Layerwright in several Figma files at once: each stays connected, and each session works in one file (the one you send it a request from, or the one it's told to use). A change never lands in another file than the one the session works in. Sessions in a project that uses Layerwright join when they start; any other session joins on its first Figma call, and a session that hasn't used Layerwright for 30 minutes leaves until its next Figma call, so the plugin window lists only the sessions you use with Figma now, and what each is doing (sessions name themselves after their task). Your selection and requests from the window go to the session you pick there, until you pick another, and a session never overwrites a layer another one just changed.

  • Ask from Figma. Select layers in the plugin window, pick a session and send a request: Build in code, Polish design, Make component, Mobile version, or your own words. A Claude Code session with the plugin starts on it by itself (the plugin's monitor wakes the session); Codex gets it on its next Figma step or with /layer:inbox. Progress and the session's answer come back to the window.

  • Notes on the canvas. Type a text layer that starts with @<session> (or @claude when one session is connected) on the frame it's about, and that session gets it like a request from the window. Only notes you type count: edits by collaborators and text Layerwright writes never start a task.

  • AI cursor and a working toast. While a session works in Figma, a cursor in its colour shows it like a collaborator's, from its first step to the end of the task: it reads where the session reads, drag-selects and works on what it changes, thinks between steps, and goes once the session is done or quiet. Its tag is one short line: the session's name and what it's doing. It stays on while you keep working in the file (select, edit, change page), so you always see which session is at work and where; while the session waits for your answer it waits still, just above the frame, and it never takes your selection. Every undo step is closed with the cursor taken off the canvas, so no step holds one. A toast at the bottom of the canvas says what a session is doing too; it is never a layer. Questions show in the plugin window and on the cursor (Settings → AI cursor turns both off).

  • Figma links. Ask for a link to the selection, a frame, a section or a page (figma_link); what a session builds or selects comes back with links. Paste a Figma link to a session and it finds the layer, opens its page and works in its file.

  • A guide in the window. The ? in the plugin window's header explains each tab, the actions and canvas notes. It opens by itself the first time.

  • /layer: commands in Claude Code and Codex. init installs the Layerwright plugin for the agents it finds (it asks; Claude Code by default): /layer:help, /layer:connect, /layer:import, /layer:design, /layer:edit, /layer:code, /layer:check, /layer:components, /layer:prototype, /layer:shot, /layer:skills, /layer:inbox, /layer:update, /layer:doctor, /layer:report.

Check, learn and stay safe

  • You see what was built. figma_export_image renders any node, and compares it with the source HTML (or another node) with a diff heatmap. save: true writes the PNG to .layerwright/exports/ so the agent can show it to you (/layer:shot).

  • Accessibility and critique. WCAG contrast (on the real background), touch-target and text-size checks, plus consistency signals; Claude uses them with a picture in a critique loop to polish what it builds.

  • Safe by default.

    • Every run is one undo step, and a failed run rolls back completely.

    • Results are checked against the plan: structure, sizes, variants, text overrides and prototype links.

    • Existing nodes change only after you approve; deleting without approval only hides and labels a layer.

    • Everything Layerwright creates is tagged, so figma_cleanup can list and remove a session's leftovers.

    • Only your paired plugin window and your own sessions can use the local connection: web pages in your browser can't.

  • Learns per project. Font substitutions, mappings and component choices are reused next time, your corrections are kept as notes, and recurring problems come with a hint (.layerwright/memory.json, shareable). npx layerwright report drafts a redacted issue from them for you to send.

  • Updates in one step. When a newer Layerwright is out, Claude Code says so as a session starts (once a day), and so do the plugin window and doctor. /layer:update, the window's Update button (a session does it for you) or npx -y layerwright@latest update (any folder) updates the Figma plugin, the /layer commands and the server they run; then /reload-plugins (or a new session) and reopen the plugin in Figma.

  • Your own skills. Next to the skills that ship with it, press Create a skill with Claude in the plugin window's Skills tab: say what it should do, and it opens Claude (the app, a terminal or VS Code) with /layer:skills new … filled in, or asks a connected session, and Claude drafts it with you. You can also add one from a link, or write it yourself in the Skills tab (edit it there later). They stay on your computer across updates.

Quickstart (3 steps)

Requirements: Node.js 20+, Figma desktop, Claude Code or Codex (or Cursor: npx layerwright init --cursor).

# 1. In your project folder
npx layerwright init

init asks which agents get the Layerwright plugin (the ones it finds are preselected; --agents claude,codex or --no-agents skip the question), installs it with their own claude plugin / codex plugin commands, and pairs the Figma plugin with this computer.

  1. In Figma desktop (macOS or Windows: Figma has no desktop app for Linux, and the browser can't run development plugins), go to Plugins → Development → Import plugin from manifest…. The plugin sits in a hidden folder (~/.layerwright/figma-plugin/manifest.json), so init copies that path to your clipboard and shows the folder: in the file dialog press ⌘⇧G (Windows: click the File name box), paste, Enter. You do this once; afterwards run Plugins → Development → Layerwright and keep its small window open. npx layerwright plugin shows these steps again.

  2. Start a new Claude Code or Codex session, type /layer:help, or ask:

    • "Import ./design.html into Figma": a Claude Design HTML export becomes editable frames.

    • "Create a sign-up flow in Figma using our Design System": new screens built from your components.

    • Select a frame in Figma, then "Implement the selected Figma frame in code using our components": Figma → code with your mapped React components and theme tokens, checked afterwards.

Requests from the Figma window wake a Claude Code session by themselves: the plugin runs a monitor (layerwright inbox-watch) whose notifications reach the session. npx layerwright claude also turns on Claude Code channels (a research preview; Team and Enterprise organizations must enable them first). In Codex a request waits for the session's next Figma step or /layer:inbox. On Windows, Claude Code's monitor needs Git for Windows (its Git Bash); without it a request waits for the session's next Figma step or /layer:inbox too.

Install from GitHub instead: claude plugin marketplace add shayan-m81/layerwright then claude plugin install layer@layerwright; for Codex, codex plugin marketplace add shayan-m81/layerwright then codex plugin add layer@layerwright. npx -y layerwright@latest update updates it (and the Figma plugin) later.

Another MCP client (Claude Desktop, VS Code, Windsurf)? Add the same layerwright server to its MCP config and start from its prompts: figma_design (the whole guide), html_to_figma, build_in_figma, change_figma or figma_to_code. They are built from the same skill, so every client follows the same workflow.

Want these rules always in Claude's context? Paste this prompt into your project's CLAUDE.md.

Something not working? Run npx layerwright doctor.

For HTML import, Layerwright needs a Chromium. It uses Google Chrome if you have it installed. Otherwise run npx layerwright doctor: it prints the exact command that installs the Chromium it needs (npx -y playwright-core@<version> install chromium; add --with-deps on a fresh Linux).

Want to try the conversion without Figma? npx layerwright import ./design.html prints what would be built. Want it in Figma without Claude? Run the plugin, then npx layerwright import ./design.html --to-figma --page "Designs" (--faithful for exact layers, --scan to use your Design System's components).

How it works

flowchart LR
  A[Claude Code / Codex / Cursor] -- MCP / stdio --> B[layerwright server<br/>one per session]
  H[HTML file or folder] -- headless Chromium --> B
  B -- "Zod-validated Design Plan<br/>resolved against your DS" --> B
  B -- ws://127.0.0.1 --> K[hub<br/>one per computer]
  K -- ws://127.0.0.1 --> C[Figma plugin]
  C -- "fixed Plugin API calls<br/>one undo step" --> D[(Figma file)]
  1. Plan. Claude, or the HTML importer, produces a Design Plan: a small, typed JSON DSL of screens, frames, text, components, tokens and images.

  2. Validate and resolve. The server checks the plan with Zod. It then resolves every component, variant, property, variable and text style against a cached scan of your Figma file. Unknown names come back as errors with suggestions and never reach Figma.

  3. Execute. The plugin builds the resolved plan with fixed Plugin API calls. There is no eval and no model-written code.

  4. Verify. The result is re-inspected and compared with the plan and, for HTML imports, with the page's rendered boxes. figma_export_image shows the result next to the source.

Every session reaches Figma through one small local process, the hub. The first session that needs it starts it, and it stops by itself a minute after the last session leaves. It routes each request to the right Figma file's plugin window and the answer back to the session that asked, so several agents can work in one file, or in several files at once.

Read more in docs/architecture.md. The DSL is documented in docs/dsl.md.

MCP tools

Tool

What it does

import_html_to_plan

HTML file or folder → editable Design Plan (Auto Layout, DS components, your own mappings). Returns a planId

figma_execute_plan

Builds a plan in Figma: one undo step, rollback on failure, automatic verification

figma_preview_plan

Validates and resolves a hand-written plan and returns a summary

figma_edit

Rename, move, duplicate, set, delete, resize to fit, group / ungroup, boolean shapes, componentize (variants, text properties), swap instances, bind variables, apply styles, annotations, prototype links and flows

figma_export_image

A node as an image; compared with the source HTML or another node, with a diff heatmap. save: true writes it to .layerwright/exports/ to show the user

figma_inbox / figma_reply

Requests the user sent from the Figma window to this session, and the answer shown back in the window

figma_status / figma_scan_design_system / figma_get_design_context

Connection, page and the open Figma files (file to switch), Design System scan (components, variants, variables, styles, duplicate names), task-scoped context

figma_inspect / figma_verify / figma_select

Snapshots (tree, summary, text, instances, or the subtree as a plan, saved to a file with save), plan-vs-canvas checks, select and zoom (switches page)

figma_link

Links to the selection, layers or the page, and the file's own link. Any layer argument also takes a Figma link

figma_analyze_design / figma_apply_transformations

Audit a frame against the DS, or mode: "sync" after an import; apply the groups you approve

figma_import_html / figma_pages / figma_foundations

Pixel-faithful import, page setup, variables and text styles

figma_import_assets

Icons and pictures from files or folders: SVGs as vectors (or components), PNG/JPEG/GIF/WebP/AVIF as images, in a grid

figma_migrate

Move every instance of one component set to another, variant by variant, keeping overrides (dry run first)

figma_cleanup

List (and with approval remove) what Layerwright made in this session

layerwright_memory

What the project remembers (fonts, mappings, component choices, notes, recurring problems); add notes or forget entries

code_scan_components / code_mapping / code_verify_usage

Figma to code: find your code components, map them to Figma components, check the implementation uses them

FAQ

Is this an official Anthropic or Figma product? No. It is an independent open-source project that works with Claude Code and Figma.

Does it need an API key, an account or a server? No. Claude Code runs the MCP server locally, and the Figma plugin connects to it on localhost. Nothing is uploaded.

Can I use it without Claude Code? Yes. npx layerwright import ./design.html --to-figma builds an HTML file in Figma with no AI at all, and any MCP client can call the tools. The skill and the design workflows (building from a prompt, componentizing, prototyping) are written for Claude Code.

Can it make prototypes? Yes. Plans and figma_edit set click, hover, press, drag and timed interactions (navigate, overlay, swap, scroll to, change to, back, close, open URL) with transitions, scrolling frames and flow starting points. Overlays open centred: the Plugin API can't set their position.

Does it work with the official Figma MCP? It doesn't need it. If it's connected, Claude can use its library search to find a component your file doesn't use yet and pass its key to Layerwright.

Does the output use Auto Layout? Yes, where the HTML uses flexbox or evenly spaced stacks. Grid and overlapping layers become frames with absolutely positioned children, so the result still looks right.

Will it use my Design System? Yes. Scan the file that has your components (figma_scan_design_system), and imported buttons, inputs and links become instances of them. Anything that doesn't match stays a styled frame.

Does it work with right-to-left languages? Yes. Direction, text alignment and row order are preserved. Fonts such as Vazirmatn are matched to their real style names.

Can a web page or another app talk to it? No. The hub listens on 127.0.0.1 only and refuses browser connections. Sessions need the per-computer key that init creates (~/.layerwright/key), and only the plugin window paired with that key can send requests into your sessions. Canvas notes count only when you type them, not when a collaborator does.

Does it work in the Figma browser app? Development plugins need Figma desktop.

Troubleshooting

Start with npx layerwright doctor. It checks Node, .mcp.json, the skill, the plugin files, the running server, the plugin connection and Chromium, and it prints a fix for each problem. More cases are covered in docs/troubleshooting.md.

Limitations

  • CSS grid, floats and transforms are imported as positioned layers, not as Auto Layout.

  • Linear, radial and conic gradients and blur()/backdrop-filter: blur() come across; other filters and blend modes are dropped in plan mode (the pixel-faithful mode keeps blend modes). Only the top background layer is used.

  • The largest corner radius is used when the four corners differ.

  • The plan export keeps image fills by their hash, so they show only in the file they came from (a cropped image comes back as fill), keeps one colour, the top image and the top gradient when a layer stacks several fills, and turns a grid layout into a fixed frame with its children at their positions.

  • Fonts must be installed on the machine that runs Figma. A missing family falls back to Inter, with a warning.

  • Images must be PNG, JPEG or GIF (a Figma limit), up to 10 MB each.

  • The scan finds library components only when an instance of them exists in the open file. Others can be used by key (e.g. found with the official Figma MCP's library search).

  • Prototype overlays open centred (their position can't be set through the Plugin API). Plans can't hide instance layers by override yet.

  • One Layerwright window per Figma file: running the plugin again in the same file hands over to the new window. Sessions from an older Layerwright are asked to update before they can join.

  • Figma lets a development plugin read its file's link key; if it doesn't, paste one link from that file once and Layerwright remembers it.

  • AI cursors are real, locked layers while a session works (Figma has no API for overlays), so collaborators in the file see them too. They are taken off the canvas around every undo step, so no step holds one, but an undo (⌘Z / Ctrl+Z) during a session's task may first take the cursor away instead of your own last edit, since the cursor keeps working on the frame and Figma counts a plugin's latest drawing as the newest change: press it once more. The cursor comes back with the session's next step.

Roadmap

  • Per-corner radii, CSS grid → Auto Layout wrap

  • Design tokens export (W3C format) and import

  • Figma Community listing (plan)

  • Instance-swap properties and hidden-layer overrides in plans

Contributing

Issues and pull requests are welcome. See CONTRIBUTING.md. To develop from a clone:

git clone https://github.com/shayan-m81/layerwright && cd layerwright
npm install && npm run build && npm test
npx tsx apps/mcp-server/src/cli.ts init   # wires this checkout into the current folder

License

MIT © Shayan Montazeri


Keywords: claude design to figma, export claude design, claude code figma, html to figma, figma mcp, ai design to figma, design system automation.

Not affiliated with, endorsed or sponsored by Anthropic or Figma. Claude is a trademark of Anthropic; Figma is a trademark of Figma, Inc.

Available Tools

22 tools
code_mappingC

Read or upsert the Figma component → code component mapping stored in .layerwright/mapping.json (commit it to share with the team).

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
mappingsNo

TDQS

C2.8/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 discloses the storage path and that committing shares with the team, but says nothing about whether 'set' merges or overwrites existing mappings, auth/permission needs, or failure behavior.

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 the core purpose first and a useful parenthetical tip at the end. No wasted words.

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 two-parameter read/write tool with no annotations, no output schema, and 0% schema description coverage, the description is too thin. An agent cannot infer the mappings payload shape, return format, or merge semantics from it.

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 for both parameters. It only implies the get/set action via 'read or upsert' and adds nothing about the mappings array structure (figmaComponent, codeComponent, importPath, props, variants), leaving most semantics undocumented.

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

Purpose4/5

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

States a specific verb pair (read/upsert) and a concrete resource (the Figma→code component mapping) plus its storage location in .layerwright/mapping.json. Clear enough to distinguish from most siblings, though it does not explicitly contrast with code_scan_components or layerwright_memory.

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?

The description gives no guidance on when to use this tool versus siblings like code_scan_components or code_verify_usage, nor on choosing between the get and set actions. The parenthetical about committing is a workflow tip, not selection guidance.

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

code_scan_componentsA

Scan the codebase (React/Next) for exported UI components, framework/Tailwind/shadcn signals, and suggest Figma↔code mappings by name. Use before implementing a Figma design so existing components are reused.

ParametersJSON Schema
NameRequiredDescriptionDefault
rootNoProject root (default: server working directory)

TDQS

A3.8/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 burden. 'Scan' and 'suggest' imply a read-only, non-mutating operation, which is helpful, but it does not state that nothing is written, how large codebases are handled, or what the suggestions look like. Adequate but leaves real behavioral questions unanswered.

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 tightly written sentences, with the core action front-loaded and the usage cue second. No filler or repetition.

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 output schema and no annotations, the description still conveys the action, the target files, and the result category (mappings by name), which is enough for correct invocation. It could go slightly further on what the scan returns or how mappings are keyed, but the essentials are present.

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 (root) with 100% schema description coverage, so the schema already explains its meaning and default. The description adds nothing about the parameter, making the baseline 3 appropriate.

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

Purpose4/5

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

The description gives a specific verb and resource — 'Scan the codebase (React/Next) for exported UI components' — plus the secondary output of suggested Figma↔code mappings. It is clear and concrete, but it never names or distinguishes itself from the close sibling code_mapping, so an agent must infer the division of labor between the two.

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 states a clear usage moment: 'Use before implementing a Figma design so existing components are reused.' That is a genuine when-to-use directive, but there is no when-not guidance and no explicit alternative (e.g., code_mapping) called out for the mapping-lookup case.

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

code_verify_usageB

Verify an implementation file against the design: are the mapped code components for the plan's Figma components used? Flags raw / duplicates and arbitrary Tailwind values.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
planIdNo
figmaComponentsNo

TDQS

B3.4/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 usefully discloses the detection logic (duplicate primitives, arbitrary Tailwind values) but does not state that it is read-only, does not perform mutations, or note any auth/side-effect expectations.

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 compact sentences with the core purpose front-loaded and the specific checks appended. No filler; minor room to expand on parameter roles without bloat.

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?

With no annotations, no output schema, and 0% schema descriptions, the definition should do more: it omits the return value shape (pass/fail details?) and the meaning of the two optional parameters. Adequate for the core action but incomplete for correct invocation.

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 0% across 3 parameters. The description loosely maps 'file' to the implementation file and 'the plan's Figma components' / 'mapped code components' to planId/figmaComponents, but it never clarifies the interplay between planId and figmaComponents or acceptable formats.

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 (verify) plus resource (implementation file against the design's plan) and details the concrete checks it performs (raw <button>/<input> duplicates, arbitrary Tailwind values). It is distinct from scan/mapping siblings, though it never explicitly names code_scan_components or code_mapping as the alternatives.

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 nature of the check implies when it applies (post-implementation verification against the design plan), but there is no explicit when-to-use, when-not, or named alternative among the many figma_* and code_* siblings.

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

figma_analyze_designA

Mode B. Inspect the selected frame (or node id), compare it to the Design System, and propose NON-destructive transformations: custom buttons/inputs → DS instances, raw spacing/radius → tokens, raw colors → color variables, raw text → text styles, manual layout → Auto Layout. Returns an analysisId + grouped summary. Nothing is changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoaudit (default): exact matches only. sync: after an import (e.g. from HTML), match to the Design System like a designer: buttons and pills become DS components with the closest-looking variant, text gets the style with the same size and weight (even if the import used a stand-in font), colours get variables or colour styles. a11y: WCAG 2.2 checks (text contrast against its real background, touch target size, tiny text). critique: a11y plus consistency signals (spacing off the scale, font sizes, raw colours, near-miss alignment) for the visual critique loop
targetNo'selection' (default) or node id
verboseNoInclude every transformation (default: summary + first 40)

TDQS

A3.7/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 states 'NON-destructive', 'Nothing is changed', and discloses the return shape ('analysisId + grouped summary'). It doesn't cover permissions, scope limits, or how the analysisId is later consumed, so it's strong but not exhaustive.

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-loads the action and packs the transformation mapping into a scannable arrow list, with the safety guarantee and return value trailing. The leading 'Mode B.' is dead weight and the sentence is dense, but overall it is efficient.

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?

No output schema exists, but the description compensates by naming the return value and enumerating the analysis categories. Safety is explicit. It leaves the relationship between analysisId and downstream apply/execute tools unstated, which is the main residual gap for this multi-step workflow.

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 100%, so the schema already documents mode (with a detailed enum), target, and verbose. The description only echoes target ('selected frame (or node id)') and adds no format or default nuance beyond the schema, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource (inspect selected frame/node, compare to Design System, propose transformations) and enumerates concrete transformation types. An agent can distinguish it from apply/execute siblings because it explicitly only proposes. The cryptic 'Mode B.' prefix adds no clarity and the tool isn't contrasted with named siblings.

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?

'Inspect the selected frame (or node id)' and 'propose NON-destructive transformations' imply this is the analysis step before applying changes, but no explicit when-to-use or when-not guidance is given. Alternatives like figma_apply_transformations, figma_preview_plan, or figma_scan_design_system are never named, leaving the agent to infer the correct routing.

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

figma_apply_transformationsA

Apply transformations from figma_analyze_design. REQUIRES approved=true, which you may only set after the user explicitly approved. Pass ids to apply a subset (default all). Replaced originals are hidden and renamed, never deleted. One undo step.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNo
opsNoApply only these kinds of transformation
groupsNoApply only these groups (ids from figma_analyze_design, e.g. g1)
approvedYes
analysisIdYes
excludeGroupsNoApply everything except these groups

TDQS

A4.1/5.0
Behavior5/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 so well: it discloses that replaced originals are hidden and renamed rather than deleted, and that the operation is a single undo step. Both facts materially affect whether an agent should call it without confirmation.

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?

Five short sentences, each carrying a distinct load: source, approval gate, subsetting rule, mutation behavior, undo scope. The hard constraint (approved) is front-loaded ahead of the softer scoping details.

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 mutation tool with no annotations and no output schema, it covers the critical ground: approval gating, non-destructive replacement, undo semantics, and subsetting. It omits what the call returns and how the three filter parameters (ids/ops/groups/excludeGroups) compose, which is the remaining gap.

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 real value for two of six params: it explains that ids selects a subset with default-all semantics, and that approved is an approval gate. It says nothing about how ops, groups, and excludeGroups interact or whether they are combinable, so half the surface remains undocumented.

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

Purpose4/5

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

States a specific verb ('Apply') and the resource ('transformations from figma_analyze_design'), which pins the operation to a known upstream artifact. It does not, however, distinguish itself from nearby siblings such as figma_execute_plan or figma_preview_plan, leaving the agent to infer which stage of the pipeline this belongs to.

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 precondition (approved=true, only settable after explicit user approval) and a scoping rule ('Pass ids to apply a subset (default all)'). It stops short of saying when to prefer this over figma_preview_plan or figma_execute_plan, so alternative-selection is left implicit.

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

figma_cleanupA

List what Layerwright created (by session, run or node ids) — e.g. leftovers from failed attempts — and, with approved=true, remove it. Default: this session, list only.

ParametersJSON Schema
NameRequiredDescriptionDefault
runNoOnly one run (the `run` returned by figma_execute_plan)
scopeNosession (default): this server session; all: every Layerwright-made node in the file
nodeIdsNo
approvedNo

TDQS

A3.7/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 most important trait: removal is gated behind approved=true and defaults to a non-destructive list. However it omits permissions needed, whether removal is reversible/permanent, and what the listing returns.

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 an em-dash that separates the list behavior from the destructive variant and closes with the default. No wasted words, though it is dense and could be split for 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?

For a tool that can delete content with no annotations and no output schema, the description covers the mode switch and defaults but leaves gaps around return contents, required permissions, and reversibility of deletion. Adequate but not complete for a destructive operation.

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?

Despite only 50% schema coverage, the description compensates by naming the filtering dimensions (session, run, node ids) and the default (this session) plus the approved=true trigger semantics. This adds real meaning beyond the two documented schema params, though nodeIds/approved still lack detailed semantics.

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

Purpose4/5

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

The description states a specific verb pair (list/remove) and the exact resource (nodes Layerwright created), scoped by session, run, or node ids. It is clear what the tool does, though it does not explicitly name or contrast itself with siblings like figma_execute_plan or figma_verify.

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 concrete context for when to reach for it ('leftovers from failed attempts') and states the default behavior (this session, list only) plus the condition that enables removal (approved=true). It lacks explicit when-not-to-use guidance or named alternatives, but the usage condition is clear.

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

figma_editA

Change existing layers in one undo step: rename, move (to a parent, section or page), duplicate, set (visible, position, size, opacity, text, instance properties), delete, resizeToFit (sections grow to their content), prototype (click/hover/after-delay interactions: navigate, overlay, swap, scroll-to, back, close, url, and change-to between variants for interactive components, with transitions), flow (a prototype starting point), swap (an instance to another component or variant; overrides are kept), bind (a variable to fills, strokes, gap, padding, radius, size, opacity), style (a fill, stroke, text or effect style), annotate (native Figma annotations for dev handoff: markdown, measured properties, a category), group / ungroup, boolean (union, subtract, intersect, exclude or flatten shapes), and componentize (turn existing frames into a component, several components, or one component set with variants; works on copies by default, and can expose text layers as TEXT properties). Ops run in order and can use "$n" for the node made by op n. Changing or deleting existing nodes needs approved=true; without it, delete only hides and renames the node (🗑).

ParametersJSON Schema
NameRequiredDescriptionDefault
opsYes
approvedNoRequired for ops that change existing nodes; for delete it means really remove

TDQS

A3.7/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 the single-undo-step model, ordered execution with $n back-references, and the crucial soft-delete fallback when approved is absent (hide+rename with 🗑) versus a real removal. It stops short of describing failure/rollback behavior on partial op failure or any permission/rate constraints, which keeps it out of 5 territory.

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

Conciseness3/5

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

The single front-loaded sentence is appropriately sized for a tool with ~18 op variants, and every op clause carries some information. However, it is a run-on paragraph with nested parentheticals rather than a scannable structure, which hurts comprehension for such a dense op list.

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 complex, annotation-free, output-schema-free tool, the description covers op vocabulary, execution ordering, node referencing, and the approve/soft-delete contract. The remaining gap is error and partial-failure behavior, but the core information an agent needs to construct a valid call is present.

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%, but the description compensates by explaining op semantics the schema only names, e.g. 'resizeToFit (sections grow to their content)', 'swap ... overrides are kept', 'componentize ... works on copies by default'. The approved parameter's dual meaning (approve changes; for delete it means really remove) is also clarified beyond its schema text.

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 ('Change existing layers in one undo step') and then enumerates the full op vocabulary, so an agent knows exactly what surface it covers. It does not, however, distinguish itself from plausible siblings such as figma_execute_plan or figma_apply_transformations, leaving the agent to 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 Guidelines3/5

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

The description gives an operational precondition ('Changing or deleting existing nodes needs approved=true; without it, delete only hides and renames the node') and ordering semantics ('Ops run in order and can use "$n"'), which is genuine when-to-use context. But it never names an alternative tool or states when this tool should be chosen over siblings, so selection guidance is only implied.

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

figma_execute_planA

Execute a previously previewed plan in Figma (native frames, Auto Layout, component instances, variables, styles). One undo step. Rolls back fully on failure. Automatically verifies the result against the plan. Requires approved=true when the plan writes into an existing node.

ParametersJSON Schema
NameRequiredDescriptionDefault
planIdYes
approvedNo

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 a good job: it discloses that execution is a single undo step, that failure triggers a full rollback, that the result is automatically verified against the plan, and that approved=true is required when writing into an existing node. It stops short of describing permissions, connection state, or what a failed verification returns, but the mutation/risk profile is unusually well covered.

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?

Four short sentences, front-loaded with the core action, then rollback/verification guarantees, then the conditional requirement. Every sentence adds distinct information with no repetition.

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 mutating tool with no annotations and no output schema, the description covers the key risk surface (undo scope, rollback, auto-verification, approval gate). Gaps remain around how planId is obtained and what is returned on success vs. verification failure, but nothing critical to invoking it correctly is missing.

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 0%, so the description must compensate. It explains the conditional meaning of 'approved' (required when the plan writes into an existing node), which the bare boolean schema does not convey, and planId is implied to come from a prior preview. Neither parameter's format or provenance is fully specified, so it adds real but partial value.

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?

The description states a specific verb+resource combination ('Execute a previously previewed plan in Figma') and enumerates the artifact types it produces (native frames, Auto Layout, component instances, variables, styles). The phrase 'previously previewed plan' explicitly ties it to the figma_preview_plan sibling, so an agent can distinguish it from figma_edit or figma_apply_transformations without opening any schema.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: 'previously previewed plan' tells the agent this must follow a preview step, and the approved=true requirement gives one concrete prerequisite. However, no sibling is named as an alternative (figma_edit, figma_apply_transformations) and there is no explicit when-not guidance, so the agent must infer the routing.

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

figma_export_imageA

Render a Figma node as an image you can look at: use it after every build or edit to check the result visually (empty instances, wrong sizes and wrong variants are obvious in a picture). With compareWith, the source HTML is screenshotted in headless Chrome too, and you get both images, a diff heatmap and the share of changed pixels.

ParametersJSON Schema
NameRequiredDescriptionDefault
scaleNoDefault 1; capped so the longest side stays within maxDimension
formatNo
nodeIdYesNode to render (a frame, section, instance, ...)
compareWithNo
maxDimensionNoDefault 1600 px

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 burden and does disclose meaningful behavior: compareWith triggers a headless-Chrome screenshot of the source HTML and returns both images, a diff heatmap, and the share of changed pixels. It does not cover rate limits, permissions, or the plain (non-compare) return shape, so it is useful 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.

Conciseness4/5

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

Two tight sentences with the primary action front-loaded and the compare mode second. The parenthetical about empty instances/sizes/variants is slightly padded but does convey the motivation for the visual check.

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 5-parameter tool with a nested object and no output schema, the description supplies the output content for the compare mode and the general purpose of the render. It omits what a plain (non-compare) call returns, which an agent would otherwise have to infer.

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 60%, and the description adds real meaning for compareWith (it explains what that object produces). But scale, format, and maxDimension are left entirely to the schema, and the description adds nothing about their interaction or defaults. Baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb+resource: 'Render a Figma node as an image'. The stated intent ('check the result visually' after builds/edits) makes the job unambiguous. It does not explicitly distinguish itself from near-siblings like figma_verify or figma_inspect, so it falls 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 Guidelines4/5

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

Gives clear triggering context: 'use it after every build or edit to check the result visually', plus a named conditional mode (with compareWith) and what that mode adds. No explicit when-not-to-use or named alternative sibling is given, so it stops short of 5.

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

figma_foundationsA

Create or update Design System foundations in the open file: a variable collection (COLOR and FLOAT variables, e.g. "color/brand/deep-teal": "#176B66", "radius/media": 20), text styles, colour styles (a hex, a gradient, or bound to a colour variable so the style follows the token), effect styles (shadows, layer/background blur) and grid styles (columns, rows, square grid). Idempotent by name. Rescan the DS afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
colorsNo#RRGGBB or #RRGGBBAA
numbersNo
collectionNoTokens
gridStylesNo
textStylesNo
paintStylesNo
effectStylesNo

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses idempotency by name and the required post-step rescan, which is real behavioral context. However, it does not say whether existing styles not mentioned are removed, how name collisions overwrite content, or what permissions/side effects apply to a mutation of the open file.

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 the action, followed by a dense enumeration of the five artifact types and two short operational sentences. It is long but nearly every clause maps to a parameter or behavior; only the gradient/edit nuance could be trimmed.

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 seven-parameter, nested, no-output-schema mutation tool this is reasonably complete: it covers all five artifact families, naming/token semantics, idempotency, and the follow-up rescan. It stops short of describing return values or how conflicts with pre-existing styles are resolved, leaving minor gaps.

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 description coverage is only 14%, so the description must compensate and largely does: it defines the variable collection as COLOR/FLOAT variables with naming/value examples ('color/brand/deep-teal': '#176B66', 'radius/media': 20), and clarifies that paint styles may be a hex, a gradient, or bound to a colour variable. This adds genuine meaning beyond the sparse schema, though it never explains the 'numbers' or 'collection' parameters directly.

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 ('Create or update') and resource ('Design System foundations in the open file') and enumerates the five artifacts it manages, which map cleanly onto the top-level schema properties. It does not, however, name or differentiate itself from near siblings such as figma_scan_design_system or figma_execute_plan, so the agent must infer the relationship.

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

Usage Guidelines3/5

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

Usage is implied by scope ('in the open file') and the trailing 'Rescan the DS afterwards' hints at ordering with the scan tool, but there is no explicit when-to-use/when-not or named alternative. An agent gets a rough sense of context without clear routing.

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

figma_get_design_contextA

Retrieve ONLY the Design System parts relevant to a task (components with variants/properties, spacing/color/radius tokens, text styles, and known code mappings). Use before writing a Design Plan. Example task: 'password reset flow: email, OTP, new password, success'.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYes
limitNo
rolesNoExtra semantic roles, e.g. ['otp-input','toast']

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries full behavioral burden. 'Retrieve' implies a read-only, non-mutating call and the enumerated return contents (components, tokens, styles, code mappings) add useful transparency about what comes back. However, it says nothing about permissions, limits, pagination, or how filtering by task is performed, leaving meaningful gaps.

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 the core scope front-loaded, followed by a compact, high-signal example. Every element earns its place with 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?

With no output schema and no annotations, the description does a fair job describing the returned artifacts, but it omits the meaning of `limit` and `roles` and any behavioral constraints. For a 3-parameter retrieval tool with no structured support, this is adequate but incomplete.

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 only 33%, so the description should compensate more than it does. The example task string ('password reset flow: email, OTP, new password, success') usefully illustrates the `task` parameter format, but `limit` and `roles` are not addressed at all (roles is only documented in the schema), leaving part of the low coverage unresolved.

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 ('Retrieve') and resource ('Design System parts relevant to a task') and enumerates the payload (components with variants/properties, spacing/color/radius tokens, text styles, code mappings). It differentiates somewhat from siblings via the 'ONLY ... relevant to a task' scoping, though it never explicitly names alternatives like figma_scan_design_system or figma_foundations.

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?

'Use before writing a Design Plan' gives a clear when-to-use trigger, and the worked task example shows the intended input shape. It stops short of stating when NOT to use it or naming the sibling tools that also read design-system data, so no explicit exclusions are provided.

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

figma_import_htmlA

Import an HTML prototype into Figma at full fidelity for almost no tokens: renders it in headless Chrome, serializes the painted result (boxes, colors, gradients, shadows, radii, text, inline SVG) and builds it on a page. With no targets, every screen on a review board (nested .sc-host) is imported and named by its label. Use dryRun to list screens first.

ParametersJSON Schema
NameRequiredDescriptionDefault
gapNo
fileYesPath to the .html file
onlyNoKeep only screens whose name contains one of these strings
pageNoPage to build on (created if missing)
rootNoDirectory to serve (default: the file's grandparent, so ../fonts works)
swapsNoReplace matching elements with instances of existing components. Variant = first rule whose test matches, else default; an unknown variant is an error, never a silent fallback.
dryRunNo
actionsNoClicks to perform before capturing (open menus, advance steps)
fontMapNoReplace font families, e.g. { "YekanBakhFaNum": "IRANYekanX" }
replaceNoRemove an existing section with the same name on that page first
sectionNoWrap the screens in a Figma section with this name
targetsNoCSS selectors of the elements to import as screens
componentsNoTurn each imported root into a component. Names like "Wish card/State=Chosen" are combined into component sets.

TDQS

A3.8/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 reveals meaningful behavior: fidelity approach (headless Chrome + serialization of boxes/colors/gradients/shadows/radii/text/SVG), naming by screen label, and the 'almost no tokens' characteristic. It omits prerequisites (Figma connection, serving requirements beyond default root), reversibility of edits, and error behavior. Adequate but with gaps.

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 information-dense sentences front-load the core purpose and then describe default behavior and a pre-step. No filler, though the opening is packed with layers that could be structured as a list for faster scanning.

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 13 parameters, no annotations, and no output schema, the description is reasonably complete for the core call but thin on behavioral contracts for the many optional parameters (swaps, components, page/section/replace semantics). It should do more to compensate for the missing annotation and output schema coverage.

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 85%, so the schema already documents most parameters. The description adds value only for dryRun and the default-targets behavior; it does not explain the complex nested structures (swaps, targets, actions) beyond what the schema and its inline descriptions already convey. Baseline 3 is appropriate.

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?

Specific verb+resource ('Import an HTML prototype into Figma') with an explicit pipeline (headless Chrome render, serialize painted result, build on page). The default behavior with no targets is spelled out ('every screen on a review board ... imported and named by its label'), distinguishing it from siblings like figma_scan_design_system.

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?

Provides clear usage context: when targets is empty, all screens on a review board are imported; 'Use dryRun to list screens first' is a concrete pre-step. However, it never names an alternative tool (e.g., import_html_to_plan / figma_execute_plan) or when to prefer those, so it does not reach 5.

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

figma_inspectA

Read Figma nodes: the selection (default), the current page (top level) or a node id. format: tree (default; compact snapshot of layout, fills, bound variables, text styles, instances), summary (counts, instances per component, top-level children; cheap for big frames), text (every text layer, flat), instances (every instance with variants, props and overrides, flat), plan (the subtree as a Design Plan you can edit and send to figma_preview_plan: clone, refactor, or implement in code). Big answers are capped; use summary, a smaller depth, or offset/limit.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNo
limitNotext/instances: page through the list (default 100)
formatNo
offsetNo
targetNo'selection' (default) | 'page' | a node id
maxNodesNo
expandInstancesNotree: descend into instances (their text, hidden layers, overrides)

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are present, so the description carries the full behavioral burden. It usefully discloses that results are capped and how to work around that, plus the default target and format. It omits any mention of permissions, connection/auth prerequisites, or error behavior, so it is good but not fully complete for an unannotated tool.

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-loads the core action and target selection before the format catalog, and every clause carries information. It is dense and long, but little of it is wasted given the number of formats and parameters to document.

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 output schema, the description does the work of describing what each format returns, which is exactly what is needed here. Missing explanations for maxNodes and only partial guidance on expandInstances are the only real gaps for a seven-parameter tool.

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%, but the description compensates well: it fully explains all five format enum values (which the schema lists only as bare strings), the three target options, and the depth/offset/limit controls. It does not explain maxNodes or clarify expandInstances beyond the schema's own note, leaving a small gap.

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 ('Read Figma nodes') and immediately disambiguates the three possible targets (selection, page, node id). It also enumerates the five output formats with their defaults, so an agent knows exactly what the tool produces without opening the 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?

Gives clear format-selection guidance ('summary ... cheap for big frames', 'plan ... send to figma_preview_plan') and routing for oversized answers ('use summary, a smaller depth, or offset/limit'). It does not, however, state when to prefer this over sibling inspection tools like figma_get_design_context or figma_analyze_design, so there is no explicit exclusion.

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

figma_migrateA

Move every instance of one component (set) to another, e.g. from an old Accordion set to the new one, or from one library to another: each instance is swapped to the matching variant (same property values; map renamed properties or values), keeping its overrides. Without approved it only reports what would change (instances per target variant, and the ones with no match). With approved it applies everything in one undo step.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesNew component or set
fromYesOld component or set: name, { id } or { key }
targetNoWhere to look: a node id (a frame, section) or 'page' (default: the selection)
approvedNo
valueMapNoRenamed values per (new) property, e.g. { "Hierarchy": { "Primary": "Contained" } }
propertyMapNoRenamed variant properties, old → new, e.g. { "Type": "Hierarchy" }

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 well: it discloses the mutation, the dry-run vs apply distinction, single-undo reversibility, override preservation, and what the report contains (instances per target variant plus no-match cases). It omits permission/auth requirements and the exact effect on unmatched instances, so not quite full marks.

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, front-loaded with the core action followed by the variant-matching rule and the dry-run/apply behavior. Dense but every clause carries information; no filler.

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 6-parameter mutation tool with no annotations and no output schema, the description covers the key behaviors an agent needs (preview mode, apply mode, override retention, report contents). Missing only auth/prerequisite details and edge-case handling of unmatched instances.

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 83% so the schema already documents most parameters, but the description adds meaning beyond it: it ties propertyMap/valueMap to renamed variant properties and values, and clarifies the from/to migration targets and the 'matching variant' semantics. This exceeds the baseline-3 case.

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: moving every instance of one component (set) to another, with concrete examples (old Accordion set to new one, library to library). This is unambiguous and hard to confuse with a generic transform tool, though it names no sibling explicitly for differentiation.

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 clearly explains the two operating modes: without 'approved' it is a dry run that reports changes, and with 'approved' it applies everything in one undo step. This gives strong context for choosing how to call it, but it never names an alternative tool or states when-not to use it (e.g., vs figma_apply_transformations).

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

figma_pagesB

Create (or reorder) pages in the open Figma file, in the given order. Existing pages with the same name are reused; an empty default page is renamed instead of kept.

ParametersJSON Schema
NameRequiredDescriptionDefault
pagesYes

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 behavioral burden, and it does disclose two useful traits: same-named pages are reused (idempotent-ish) and an empty default page is renamed rather than kept. However, it is silent on whether pages omitted from the list are deleted, whether reordering is destructive, or what permissions are required — significant gaps for a mutation 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 tight sentences, front-loaded with the action and scope; the behavioral caveat follows without padding. 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 single-parameter, no-annotation, no-output-schema mutation tool, the description covers ordering and reuse but leaves the critical question of what happens to pages not listed unanswered. An agent could call it correctly but might cause unintended page loss.

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 0% for the single 'pages' array, so the description must compensate. It conveys ordering semantics ("in the given order") and name-matching behavior, which is genuinely useful, but omits the 1–40 item bounds and the per-item minLength constraint that the schema declares silently.

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 pair (create/reorder) and resource (pages) scoped to the open Figma file, plus the ordering constraint. It does not name or contrast with any sibling tool, but no sibling obviously overlaps with page creation, so an agent can identify its role.

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?

The description never says when to reach for this tool versus alternatives, nor states prerequisites such as needing a file open or an authenticated session. The reuse/rename clause hints at behavior but is not framed as usage guidance.

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

figma_preview_planA

Validate a Design Plan (Design DSL JSON) with Zod, resolve every component/variant/property/token against the cached Design System, and return a planId + human-readable summary WITHOUT touching Figma. Invalid plans or unresolved components return structured errors with suggestions — fix the plan and preview again.

ParametersJSON Schema
NameRequiredDescriptionDefault
planNoDesignPlan object: { name, screens: DesignNode[], target?, screenGap? }. See the figma-design skill for the DSL.

TDQS

A4.2/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 largely meets it: it discloses validation semantics (Zod), that resolution happens against the cached Design System, that no Figma state is mutated, and that failures return structured errors with suggestions. It doesn't say whether validation results or the planId are persisted/cached or what permissions/state the cache requires.

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, front-loaded with the action and the key constraint, followed by the return contract and the failure/recovery path. Every clause adds information; nothing is restated from the name or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description correctly supplies the return contract (planId + human-readable summary) and the error shape, which is what an agent needs to decide what to do next. Only the downstream role of the planId (e.g. passing it to figma_execute_plan) is left implicit.

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 100% and the single parameter already documents the DesignPlan shape and points at the figma-design skill for the DSL. The description adds the 'Design DSL JSON' framing and the validation/resolution context but no field-level meaning beyond the schema, so the baseline 3 is correct.

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 (validate/preview) and resource (Design Plan / Design DSL JSON) and pins the boundary 'WITHOUT touching Figma', which functionally separates it from figma_execute_plan without opening either schema. An agent can tell this is the dry-run counterpart to execution.

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 clear when-to-use context via the closing loop: 'Invalid plans or unresolved components return structured errors with suggestions — fix the plan and preview again.' That establishes the iterate-before-execute workflow. It stops short of explicitly naming figma_execute_plan as the follow-up step or stating when to skip previewing.

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

figma_scan_design_systemA

Scan the open Figma file for components, component sets/variants/properties, variables (+modes), text/paint/effect styles and library components used in the file. Normalizes, infers semantic roles, caches to disk, and returns a COMPACT summary (not the full dump). Use refresh=true after the DS changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
reloadNoRe-read the cache file from disk (after editing it) instead of scanning
refreshNo
maxInstancesNoHow many instances to check for library components (default: 3000, or every instance on the current page)
includeLibrariesNoInclude enabled library variable collections (default true)

TDQS

A3.5/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. It does disclose real behavioral traits: it normalizes and infers semantic roles, caches to disk (a side effect), and returns a compact summary rather than the full dump. However it omits whether the file is mutated, permission/auth needs, cache staleness behavior, and cost of a full scan.

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 the verb and scope, two sentences total, no filler. The parenthetical '(not the full dump)' and 'Use refresh=true...' each earn their place. Slightly dense enumeration of artifacts but not padded.

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 complex scanner with no output schema and 4 params, the description covers what is scanned, the caching behavior, and the shape of the return (compact summary). It stops short of describing summary contents or read-only guarantees, but is largely sufficient to invoke correctly.

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 75%; reload, maxInstances, and includeLibraries are already documented in the schema. The description usefully compensates for the undocumented refresh parameter by explaining 'refresh=true after the DS changed,' but adds little for the other three.

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 (scan) and resource (open Figma file's design system), and enumerates exactly what is collected: components, component sets/variants/properties, variables with modes, text/paint/effect styles, and library components. It is clear and non-tautological, but it never distinguishes itself from near siblings like figma_foundations, figma_inspect, or figma_analyze_design.

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 final sentence gives one concrete usage rule: 'Use refresh=true after the DS changed.' That is a useful trigger, but there is no guidance on when to reach for this tool versus the sibling scan/inspect tools, and no statement of prerequisites (an open Figma file).

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

figma_selectA

Select and zoom to node ids in Figma (to show the user what was created or will change). Switches to the page of the first node.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdsYes

TDQS

A3.6/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 a real side effect — 'Switches to the page of the first node' — which tells the agent the viewport/page state changes. However, it omits whether this requires an active Figma session, what happens with nodes on different pages, or any return value.

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 waste, with the core action front-loaded before the clarifying intent and the page-switch side effect.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter viewport/selection tool with no output schema, the description covers purpose, intent, and the page-switch behavior adequately. Only the lack of any permission/session or multi-page caveat keeps it from being fully complete.

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 0% schema description coverage and one parameter, the description adds some meaning: 'node ids' identifies the array contents and 'the page of the first node' conveys that array ordering matters for the page switch. That is a genuine semantic hint beyond the bare schema, but it is thin for a required parameter.

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

Purpose4/5

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

States a specific verb+resource ('Select and zoom to node ids in Figma') and adds the intent in parentheses. It is clearly distinguishable from siblings like figma_inspect or figma_execute_plan, though it never explicitly contrasts with them.

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

Usage Guidelines3/5

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

The parenthetical '(to show the user what was created or will change)' implies the usage context — surfacing results visually — but there is no explicit when-not guidance or named alternative (e.g., when to use figma_inspect instead). Usage is implied rather than directed.

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

figma_statusA

Check whether the Figma bridge plugin is connected, which file/page is open, the current selection, and whether a Design System scan is cached. Cheap; call first.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/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 specific state it reports (connection, file/page, selection, scan cache) plus a cost signal ('cheap'). It does not explicitly state that the call is side-effect free, but 'Check' and the read-only nature of the listed outputs make the safety profile reasonably clear.

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, fully front-loaded with the substantive content first and the actionable 'call first' cue last. Every clause earns its place by naming a distinct piece of state.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must indicate what comes back, and it enumerates the reported values well. It could say more about the response shape or failure modes (e.g., what happens when the plugin is disconnected), leaving a minor gap.

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; the schema is empty and consistent with the description. Baseline 4 applies for a parameterless tool.

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 ('Check') and enumerates the exact resources inspected: bridge connection, open file/page, current selection, and Design System scan cache. This is clearly distinguishable from siblings like figma_pages, figma_inspect, or figma_scan_design_system, which perform the actual scans or navigation.

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 directive 'Cheap; call first' gives an explicit ordering cue that tells the agent when to reach for this tool before others. It stops short of naming alternatives or when-not-to-call, but the sequencing guidance is concrete and actionable.

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

figma_verifyA

Re-inspect the nodes created by an executed plan and report structural mismatches against the plan (missing nodes, wrong component/variant, text, layout, unbound tokens). Use after the user edited things or before implementing code.

ParametersJSON Schema
NameRequiredDescriptionDefault
planIdYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations, so the description carries the full behavioral burden. It discloses the diagnostic scope (the five mismatch categories), which is genuine value, but says nothing about whether the operation is read-only/non-destructive, whether it mutates the document, or what permissions the plan requires. With zero annotation coverage these gaps matter.

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 the action front-loaded and the usage note second. Every clause earns its place; nothing is redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter diagnostic with no annotations and no output schema, the description covers what it checks and when to run it. It leaves the report/return shape and the safety profile (read-only vs. mutating) unstated, which are the only notable omissions.

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?

One required parameter (planId) at 0% schema description coverage. The description's repeated reference to 'an executed plan' implies planId identifies that plan, so the parameter is inferable, but no format, source, or provenance detail is added.

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 ('re-inspect'), the resource ('nodes created by an executed plan'), and enumerates the mismatch categories it detects (missing nodes, wrong component/variant, text, layout, unbound tokens). It is clearly distinct from figma_execute_plan and figma_inspect by content, though it never names a sibling to route against.

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 explicit timing guidance: 'Use after the user edited things or before implementing code.' That is concrete context for invocation, but it names no alternatives (e.g., why not figma_inspect or code_verify_usage) and states no preconditions beyond the plan existing.

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

import_html_to_planA

Convert an HTML page or folder (e.g. a Claude Design standalone HTML export) into an editable Design Plan: flexbox → Auto Layout, colors, borders, radii, shadows, gradients, fonts, text (incl. RTL), images and SVG icons. With a scanned Design System, buttons/inputs/links become real DS components. Returns a planId for figma_execute_plan, exactly like figma_preview_plan. Nothing is sent to Figma yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage (name or id) to build on when executed (default: the current page)
pathYesAn .html file, or a folder containing index.html
targetNoWhere to build: inside an existing node such as a section (needs approval), or at x/y on the page
fontMapNoReplace font families, e.g. { "YekanBakhFaNum": "IRANYekanX" } for a web font that isn't installed
targetsNoSeveral elements, each its own screen (e.g. the cards of a Claude Design review board); each keeps its rendered width
mappingsNoYour own element → component mappings; they win over automatic Design System matching
selectorNoCSS selector of the element to import (default body)
viewportNoViewport width(s). Default [1440, 390] (desktop + mobile)
useDesignSystemNoMap buttons/inputs/links to scanned DS components (default: true when a DS is cached)

TDQS

A4.1/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 reasonably well: it discloses the key safety trait ('Nothing is sent to Figma yet'), the return value (a planId), and conditional behavior (DS component substitution when a design system is scanned). It omits permissions, error behavior, and whether the plan persists, keeping it short of a 5.

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 sentences, front-loaded with the core action, and every sentence carries information (what converts, DS behavior, return value, side-effect scope). The long enumeration of converted properties is slightly run-on but still earns its place by conveying conversion fidelity.

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 output schema, the description compensates by naming the returned planId and its consumer. All nine parameters are schema-documented and the two-phase preview/execute pattern is explained, so an agent has enough to call it correctly; only error handling and plan lifetime are unaddressed.

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 100%, so the schema already documents all nine parameters, including nested target/targets/mappings/viewport details. The description only obliquely touches parameters (the design-system sentence gestures at useDesignSystem and mappings, and it mentions fonts), so the baseline of 3 for a fully documented schema is correct.

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?

The description states a specific verb and resource — 'Convert an HTML page or folder ... into an editable Design Plan' — and enumerates the fidelity of the conversion (flexbox→Auto Layout, colors, borders, fonts, RTL, SVG). It even names the downstream consumer (figma_execute_plan) and the analogous sibling (figma_preview_plan), so an agent can place it relative to siblings without opening a 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?

It clearly establishes the workflow context: this produces a plan, and execution happens later via figma_execute_plan; 'Nothing is sent to Figma yet' tells the agent this is the staging step. The main gap is that it never contrasts with the sibling figma_import_html, so the agent must guess which HTML entry point to pick.

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

layerwright_memoryC

What Layerwright remembers in this project (.layerwright/memory.json, shareable with the team): font substitutions and component mappings reused by imports, which of several same-named components the user chose, the user's notes, and recurring problems with hints. Save a note whenever the user corrects you ('use the Fa styles for Persian text'), so the next session starts from it.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNonote: the user's correction or preference, in their words
actionYes
forgetNo

TDQS

C2.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 burden. It discloses a meaningful side effect: this writes to a shareable file (.layerwright/memory.json) shared with the team, and that saved notes persist into the next session. That is useful non-obvious context. However it doesn't cover key behavioral questions: what 'get' returns, what 'forget' removes and whether it's reversible, what happens when a note conflicts with an existing mapping, or any rate limits. For a mutation tool with no annotations, this is incomplete.

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 sentences, front-loaded with the resource location and its contents, followed by the actionable trigger. No filler words and the example is concrete. It could be slightly tighter but everything present earns 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?

The tool has a nested 'forget' object with five fields, a required action discriminator, no annotations, and no output schema. Despite this complexity, the description only covers the 'note' action meaningfully. An agent would not know how to read memory ('get' return shape), how to selectively forget, or how the actions interact. Too little for the schema's complexity.

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 33%. The 'note' parameter has a schema description ('the user's correction or preference, in their words') and the description echoes the note concept, so that one is covered. But the 'forget' object and its five sub-fields (all, font, note, selector, component) have no descriptions in the schema and no explanation in the prose. The description says nothing about how to target a specific memory for removal, which is the tool's most semantically complex operation. It fails to compensate for the coverage gap.

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

Purpose3/5

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

The description explains what the memory store contains (font substitutions, component mappings, user notes, recurring problems) and gives a concrete example. However, it frames the tool as a store of knowledge rather than naming its operations. The action enum (get/note/forget) is the real purpose, and the description gives 'Save a note' as an example but never covers retrieval or forgetting. An agent can infer persistence but not the full action set from the description alone.

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 clear actionable trigger: 'Save a note whenever the user corrects you.' That covers the 'note' action well. But there is no guidance on when to use 'get' (e.g., at session start / before making substitutions) or when to use 'forget' (e.g., user retracts a preference or a mapping is wrong). Those are exactly the decisions an agent needs to make for the other two enum values, and they are left to inference.

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. 22 tool updatesv0.1.0
    • First observedcode_mapping
    • First observedcode_scan_components
    • First observedcode_verify_usage
    • First observedfigma_analyze_design
    • First observedfigma_apply_transformations
    • First observedfigma_cleanup
    • First observedfigma_edit
    • First observedfigma_execute_plan
    • First observedfigma_export_image
    • First observedfigma_foundations
    • First observedfigma_get_design_context
    • First observedfigma_import_html
    • First observedfigma_inspect
    • First observedfigma_migrate
    • First observedfigma_pages
    • First observedfigma_preview_plan
    • First observedfigma_scan_design_system
    • First observedfigma_select
    • First observedfigma_status
    • First observedfigma_verify
    • First observedimport_html_to_plan
    • First observedlayerwright_memory

TDQS

A3.5/5.0

Scored across 22 tools

Disambiguation4/5

Most tools target a distinct stage of the Figma workflow (status, scan, inspect, plan/preview/execute, verify, analyze/apply, edit, migrate). A few boundaries blur, notably figma_import_html vs import_html_to_plan and the all-in-one figma_edit overlapping with specialized ops like figma_apply_transformations and figma_migrate, but descriptions differentiate them well.

Naming Consistency4/5

Names are predominantly consistent snake_case with subsystem prefixes (figma_*, code_*, layerwright_*), which reads predictably. The outlier import_html_to_plan breaks the figma_ prefix used by its sibling figma_import_html, and a few tools are bare verbs (figma_inspect, figma_verify), a minor deviation.

Tool Count4/5

22 tools sits in the heavy range, but the scope (Figma bridge, design-system scan/foundations, plan preview/execute/verify, HTML import, code mapping) is genuinely broad and most tools earn their place. Slightly over-stuffed, with the two HTML-import tools and the mega figma_edit the main candidates for consolidation.

Completeness4/5

The surface covers a full design-to-code lifecycle: status/cleanup, DS scan and foundations, node inspection, plan preview/execute/verify, non-destructive analysis/apply, editing, migration, image export, selection, project memory, and code scan/mapping/verification. Gaps are minor, e.g. no explicit design-system element deletion or standalone code-generation output tool.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    An MCP server integration that enables Cursor AI to communicate with Figma, allowing users to read designs and modify them programmatically through natural language commands.
    19
    669 npm
    7,050
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables interaction with Figma files through intelligent API access, providing navigation, asset extraction, and design token retrieval with 95% token-optimized compact tree output format.
    15
    1
    -