figsnap-mcp
Provides tools for interacting with the open Figma file, allowing agents to inspect the selection, page layer tree, and component library, extract nodes as PNG, React, HTML, or CSS, and edit the canvas when enabled.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@figsnap-mcpextract the button component as React code"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Figsnap MCP
The Figma file you have open, as MCP tools — and nothing else.
claude mcp add figsnap-mcp -s user -- npx -y figsnap-mcpThose install the MCP server. It answers nothing until the daemon is running and the Figma plugin is open — see Getting it running, which is five steps and takes about two minutes.
A Figma plugin, a local daemon, and an MCP server. Your coding agent reads the design, extracts a node as PNG, React, HTML or CSS, edits the canvas when you allow it, and shares a saved set of components with you. No relay, no account, no network beyond loopback.
MCP client figsnap-mcp daemon the plugin
(Claude Code) stdio (stateless HTTP :3058 ws (open in Figma)
─────────────────► proxy) ──────────► /panel ──────────► figma.*
127.0.0.1 onlyThree processes and one rule: figma.* exists only while the plugin is open, so
the plugin holds the connection and everything else asks questions down it.
What this is not
This repo is a derivative of Figsnap, cut down to one job. Figsnap
ships four products from one package.json — the plugin, a Cloudflare Worker
relay with accounts, an ACP chat client, and this MCP server. If all you want is
MCP tools and a saved set, you had to clone all of it, build a 4,200-line panel
you would never open, and load a plugin whose manifest whitelists a Worker you
would never sign in to.
So: no ACP client, no harness discovery, no session store, no relay, no accounts, no chat, no API browser, no code-export UI. What is left is the extraction engine, the 39 tools, and a panel with three panes.
Figsnap is not modified by any of this, and the two can run side by side — this
daemon is on port 3058 with its token in ~/.figsnap-mcp/agent-token, where
Figsnap's is on 3056 with its token in ~/.figsnap/agent-token.
One caution on that manifest: Figma validates allowedDomains and refuses an IP
literal — Invalid value for allowedDomains. 'ws://127.0.0.1:3058' must be a valid URL — and a manifest it refuses is a manifest it does not load, so the
plugin quietly keeps running the last good one. Name localhost, and check the
console after any change here, because nothing else reports it.
They are kept apart in Figma too. clientStorage is keyed by plugin id, so the
manifest carries an id of its own rather than Figsnap's REPLACE_ON_PUBLISH, and
every key this plugin writes is prefixed figsnap-mcp: on top of that. Sharing
either one means sharing the stored daemon address, and a panel that inherits
ws://localhost:3056 is then blocked by its own manifest's CSP — with a console
error the designer never sees. The panel also refuses any stored or typed address
outside the port its manifest allows, and drops the token that came with it.
Related MCP server: figma-ui-mcp
Install
npm install -g figsnap-mcpTwo commands come with it:
| the bridge; leave it running while you work |
| the MCP server, spawned by your client — not run by hand |
You can skip the install and let npx fetch it, which is what an MCP client
config usually does. The Figma plugin ships in the package too: after a global
install its manifest is at
npm root -g # …/lib/node_modules — the manifest is figsnap-mcp/manifest.jsonOr clone the repository and npm install && npm run build, which is the same
thing with the sources beside it.
Getting it running
Five steps, once.
1. Build it.
npm install -g figsnap-mcpFrom a clone instead: npm install && npm run build.
2. Start the daemon. Leave it running; it is the only thing that talks to Figma.
figsnap-mcp-daemon # --allow-edits opens the writing tools at bootFrom a clone: npm run daemon. figsnap-mcp-daemon --help lists the rest.
It prints its address and its token:
figsnap-mcp-daemon 0.1.0
panel socket ws://127.0.0.1:3058/panel
http http://127.0.0.1:3058
token 8fT2qN4vRk1pXwLzYc7BhJ0mAeUdSg9T
edits off — turn them on in the plugin, or start with --allow-edits3. Load the plugin. In Figma desktop: Plugins → Development → Import
plugin from manifest, pick the package's manifest.json (npm root -g finds
it, or it is in the repository root), then run Figsnap MCP.
4. Pair the panel. Copy the token line from step 2 into the panel's
Connect pane and press Connect. The dot turns green and the Address
reads ws://localhost:3058/panel.
This is the only place a token is ever typed. It is stored in Figma's own per-user storage, so the panel reconnects itself every time from now on.
5. Register the MCP server.
claude mcp add figsnap-mcp -s user -- npx -y figsnap-mcpRestart the client, then claude mcp list shows figsnap-mcp · ✔ Connected.
From a clone, name the file instead: -- node /path/to/FigsnapMCP/agent/mcp-stdio.mjs.
Check the whole chain:
curl -s http://127.0.0.1:3058/health
# { "ok": true, "panelConnected": true, "editsAllowed": false, ... }panelConnected: true is the line that matters — it means Figma is on the
other end.
The token
An MCP client never needs it. This is the part that surprises people:
claude mcp add takes no token, no environment variable, no config. The MCP
server reads the daemon's own file on the way past.
Only two things use the token, and only one of them is you:
Who | How it gets it |
The Figma panel | You paste it, once, in Connect |
| Reads |
Where it comes from. The first time the daemon starts it makes one — 24
random bytes, base64url — and writes it to ~/.figsnap-mcp/agent-token with
mode 600. Every later start reads that same file back, so the token is stable
and the panel is not re-paired every morning.
How to see it again without restarting anything:
cat ~/.figsnap-mcp/agent-tokenWhy there is one at all. The daemon listens on a loopback port, and any web
page you happen to visit can open a socket to localhost. Two things stop it:
the Origin header, checked on upgrade, which a browser cannot forge; and this
token, because a browser WebSocket cannot set headers. Only GET /health is
reachable without it — so the panel can tell you the daemon is running before it
has been paired.
If it leaks, rotate it:
npm run daemon -- --new-tokenThat writes a fresh one and invalidates the old. Re-paste it in Connect; MCP clients pick the new one up on their own, because they read the file.
To use one of your own — a fixed token in a script, say — set
FIGSNAP_MCP_TOKEN and the daemon uses it instead of the file. Set the same
variable for the MCP client if it cannot read your home directory.
FIGSNAP_MCP_URL moves the address the client dials.
Wiring up an MCP client
claude mcp add figsnap-mcp -s user -- npx -y figsnap-mcpFor a client that takes JSON:
{ "mcpServers": { "figsnap-mcp": { "command": "npx", "args": ["-y", "figsnap-mcp"] } } }figsnap-mcp-daemon --mcp prints both, with paths already filled in.
Then claude mcp list should show figsnap-mcp · ✔ Connected, and in a session
figma_get_selection answers about whatever is selected on the canvas.
When it does not answer
Three things can be wrong, and each says so differently:
What the tool says | What to do |
|
|
| Open the file and run the plugin |
|
|
| Turn on Allow edits in the plugin's Tools pane |
Resources
Three things a question about a Figma file almost always needs are addressable
rather than called for, so a client can @-mention them:
URI | What it is |
| Everything selected, extracted |
| The layer tree, three levels deep |
| Components, styles and variables, with ids |
| One layer — |
The panel
Four panes, and the one it opens on is Selection.
Selection is a preview of whatever you have picked on the canvas — the picture, its name, type, size, child count and node id — with a folder picker and a Save button beside it. Saving from here is the short way round: no switching panes, no hunting for the layer again in a list.
The preview costs one PNG export. The panel used to run a full extraction on every selection change — HTML, TSX, two stylesheets and a 2× image — for a picture nobody was looking at; the code outputs are what MCP asks for, on request, not what a click costs. A small layer is magnified at most 4×, so an icon and a screen do not both fill the stage.
Minimise (the ▼ at the top right) drops the window to a 44px strip and the preview under it, so the canvas is clear while the plugin keeps running — the daemon needs the panel open, but you do not need to look at it. The strip still names what is selected and still has Save, because those are the two things worth having while you work. ▲ puts it back to whatever size you had dragged it to.
Connect and Tools are pairing and the tool list; Saved is the folder manager. Both are described below.
The tools
39 of them, 13 read and 26 write. The Tools pane lists them all with the
writing ones marked; GET /tools is the same list as JSON.
Reading is always allowed. Writing is not, until you say so — every mutating
tool is refused until Allow edits is on, which is a switch the designer holds
rather than a prompt the agent can talk past. A harness running with permission
prompts disabled still cannot get past it. --allow-edits opens the same gate
from the terminal, for when the work is happening there.
Two tools fold thirteen plugin commands into one argument each, because 39 tool descriptions already cost real context on every request:
figma_extracttakesnodeId, ornodeIds,urls,selection: true,saved: truefor a batch.figma_savedtakes anaction:list,folders,save,unsave,clear,move,newFolder,renameFolder,deleteFolder.
A picture comes back as a real image block, never as base64 in a text field —
that is what figma_export_png is for, one node at a time.
The saved set
The Saved pane is a place to keep the components you keep coming back to:
folders, Save selection, jump-to-node, move, remove. It is reachable over MCP
as figma_list_saved and figma_saved, so you and the agent are looking at the
same list.
It lives in figma.clientStorage, keyed by document id. That means: per user,
per file, per machine. Up to 100 entries and 30 folders, one level deep.
One deliberate loss. Figsnap also mirrors this set to its relay, so it follows you to a second machine. Without the Worker, these sets are local only. That is the right trade for this repo — no account, no network, and always writable even in a file you can only view — but it is a real difference. If cross-device sync is wanted later it is an additive change: the plugin would gain a sync target, not a new owner of the data.
Layout
index.mjs the library entry point; importing it starts nothing
index.d.mts hand-written types for it
manifest.json the Figma plugin manifest; localhost:3058 only
build.mjs esbuild → dist/code.js + a self-contained dist/ui.html
shared/ nodes.mjs (findable types), shape.mjs (what a body means)
agent/
index.mjs the daemon: WS server, HTTP server, the Edits gate
mcp-stdio.mjs the MCP server; a stateless proxy to the daemon
lib/tools.mjs the 39 tools — one command each, no logic in between
lib/plugin-socket.mjs the panel socket: origin check, token, request/response
lib/http.mjs /health, /tools, /tool
lib/gate.mjs the Edits switch
lib/paths.mjs the port, the host and the token file, defined once
src/
code.ts the main thread: 51 commands, extraction and codegen
figma-css.ts Figma's own CSS, rendered
daemon.ts the one address the plugin dials
ui/ the panel: bridge.ts, main.ts, index.html, style.css
test/ run.mjs and five suites; see Tests below
.github/workflows/ CI on Node 20, 22 and 24; publish on a version tagUsing it as a library
Most people want the two commands. If you are building your own bridge, the package exports the catalogue and the pieces the daemon is assembled from:
import { toolManifest, createGate, createPluginSocket, createHttpHandler } from 'figsnap-mcp'
console.log(toolManifest().length) // 39Importing it starts no server and opens no socket — agent/mcp-stdio.mjs
connects an MCP server to stdio the moment it loads, so it is deliberately not
re-exported, and the constants that used to live on it are in
agent/lib/paths.mjs. index.d.mts is hand-written and the test suite checks it
against the runtime in both directions.
Semver applies from 1.0.0. While this is 0.x, the factories are the part most likely to move; the catalogue and the constants are the stable half.
Security
The daemon binds 127.0.0.1 only, and two things guard the socket, because a
local port is reachable by any page you happen to visit:
Origin, checked on upgrade. A plugin iframe is a sandboxed document and sends
null; the editor sends figma.com. Anything else is closed with 4001. A browser cannot forge this header, and CORS does not apply to an upgrade, so it is the check that matters.A token in the query string, because a browser WebSocket cannot set headers. It is the same one HTTP callers send as
x-figsnap-token, and only/healthis reachable without it — so the panel can probe before it is paired.
--new-token rotates it if one ever leaks.
Tests
npm test # four suites: no wrangler, no network, no Figma
npm run typechecke2e-plugin.mjsruns the shippeddist/code.jsagainst a fakefigma, wired to a real daemon, and drives it throughPOST /tool— extraction fidelity,figma_find_nodes, the saved set including a reload, and a write with the gate both shut and open.e2e-mcp.mjsspawns the daemon, fakes the panel as a WebSocket client, and drives a real MCP client over stdio: the guards, the tool list, the batch and image rules, all ten saved-set commands, the resources, and the three ways a call can fail before it reaches Figma.e2e-panel.mjsloads the shippeddist/ui.htmlinto jsdom with the main thread and the daemon replaced, and drives the designer's side: the panes render what they are sent, the clicks mean what they say, and a destructive folder action arms before it fires.contract.mjsis the drift guard.shared/,agent/lib/tools.mjsandsrc/code.tsexist in both this repo and Figsnap, and the protocol between them has no shared type. So it asserts what a one-sided edit would break: every command a tool can name is a case insrc/code.tsand every case is reachable from a tool,MAX_BATCHagrees, the caps the panel prints are the caps the plugin enforces, thefind_nodesschema offers exactlyFINDABLE_TYPES, all three files agree on 3058, and nothing has quietly imported the relay, the accounts or the ACP client back in.
Publishing the plugin to your organisation
The plugin can stay a development install — import the manifest, done — but publishing it to your Figma organisation puts it in everyone's plugin list and updates them automatically, without it appearing in Community.
That option needs a Figma Organization or Enterprise plan. On Professional the only published option is Community, which is public; a development install is the private route there.
Build first:
npm run build. Figma publishes whatdist/holds, not whatsrc/says.Figma desktop → Plugins → Development → Figsnap MCP → Publish.
Choose Only rather than Community.
Fill in the listing: a 128×128 icon, a description, and a cover image. An org-only publish skips Community review, so it is live once you submit.
Figma writes a plugin id into manifest.json on that first publish,
replacing REPLACE_ON_PUBLISH_FIGSNAP_MCP. Commit that change — it is what
identifies later versions as updates rather than a new plugin, and it is also
what keeps this plugin's clientStorage separate from Figsnap's. To release an
update, build again and publish again from the same menu.
One thing worth being clear about: this repository and the npm package are public, and both carry the built plugin. Org-only publishing controls listing and distribution inside Figma, not who can obtain the code — it is MIT either way.
Releasing
CI runs the suites on Node 20, 22 and 24 for every push.
The first release is manual, because npm configures a trusted publisher on a package's own settings page and there is no page until the package exists:
npm login
npm publish --access publicThen turn on trusted publishing, once, at
npmjs.com/package/figsnap-mcp/access → Trusted Publisher → GitHub Actions:
Field | Value |
Organization or user |
|
Repository |
|
Workflow filename |
|
Environment name | leave empty |
Every release after that is a tag:
npm version patch # writes package.json and the v0.1.1 tag
git push --follow-tags.github/workflows/publish.yml picks the tag up, refuses it if it disagrees with
package.json, and publishes with provenance over OIDC — no token exists to
leak, which matters because npm is restricting tokens that bypass 2FA (account
changes August 2026, direct publishing January 2027).
prepublishOnly typechecks, builds and runs every suite first, so a release that
would not have worked cannot reach the registry. npm pack --dry-run shows
exactly what would be sent; test/e2e-package.mjs asserts those contents.
Licence
MIT.
Available Tools
39 toolsfigma_apply_styleApply a shared styleADestructive
Applies a paint, text or effect style from this file by id, from figma_list_library. The right way to make something "match": the layer follows the style afterwards, where a copied hex code does not.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. | |
| styleId | Yes | From figma_list_library. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a non-read-only, destructive operation, so the bar is lower. The description adds the useful behavioral fact that the layer follows the style afterward, but it does not detail what existing style values are overwritten or whether the action is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action, then the value proposition. Every sentence earns its place and neither restates the title nor pads with boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with annotations and full schema coverage, the description covers the core behavior and the source of styleId. It could briefly mention what happens to existing local style values, but annotations already signal the destructive nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents nodeId and styleId, including the selection fallback for nodeId. The description adds only that styleId comes from figma_list_library, which is helpful but not enough to exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: applies paint, text, or effect styles from the current file by id. It also clarifies the source via figma_list_library and the intended outcome ('layer follows style'), making it easy to distinguish from raw fill/stroke setters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'right way to make something match' sentence gives a clear when-to-use signal and explains why it beats copying hex codes. It does not explicitly name sibling alternatives or state when not to use the tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_bind_variableBind a variableADestructive
Binds a variable from this file to a property, so the value follows the token rather than being a copy of it. Use "fill" or "stroke" for a colour variable; for a number use the property name, like cornerRadius, itemSpacing, paddingLeft, width or opacity.
| Name | Required | Description | Default |
|---|---|---|---|
| field | Yes | "fill", "stroke", or a numeric property such as cornerRadius or itemSpacing. | |
| nodeId | Yes | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. | |
| variableId | Yes | From figma_list_library. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=true, and the description adds a meaningful behavioral trait: the bound value will follow the token rather than remain a copy. It does not detail what gets destroyed by the binding, but the annotation already carries that destructive signal, so the description adds enough beyond the structured metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no filler. It front-loads the core behavior and then gives directly actionable field-value guidance. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All three required parameters are covered by the schema, and the description supplies the necessary semantic guidance for the free-form 'field' parameter. The main context not spelled out—destructive side effects and lack of output format—is already handled by annotations and the absence of an output schema on this mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description enhances the 'field' parameter by pairing specific values with variable types (color vs. number) and adding useful numeric property examples. This goes beyond the schema's terse 'fill, stroke, or a numeric property' description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('binds'), a resource ('a variable from this file'), and a target ('a property'), while clearly distinguishing the behavior from setting a static value ('so the value follows the token rather than being a copy'). It effectively separates this tool from sibling tools like figma_set_fill or figma_set_stroke.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete guidance on when to use which field values: 'fill' or 'stroke' for color variables, property names like cornerRadius or opacity for numbers. It does not explicitly name alternatives or exclusion conditions, but the 'rather than being a copy' phrasing provides clear context that this tool is for linking to tokens instead of setting independent values.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_clone_nodeDuplicate a layerBDestructive
Copies a node, with everything inside it, into the same parent or one you name. The cheapest way to make a second row, card or list item that matches the first exactly.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| nodeId | Yes | The node to copy. | |
| parentId | No | Where the copy goes. Default: beside the original. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, but the description presents the operation as purely additive copying. Nothing in the description explains or supports a destructive side effect, so the description contradicts the annotation. It also does not mention what happens to the cloned node's position or children in edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler. The first sentence states the core operation and scope, and the second sentence earns its place by conveying exactly when this tool is preferable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core cloning behavior is clear and simple, and the use case is useful. However, the absence of x/y parameter semantics and the unresolved conflict with destructiveHint leave meaningful gaps for an agent invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents nodeId and parentId, and the description reinforces parent semantics. However, x and y are completely undocumented in both the schema and the description, despite being two of the four parameters. With 50% schema coverage, the description should have compensated for x/y but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('copies a node'), the object ('with everything inside it'), and the destination ('same parent or one you name'). This clearly distinguishes cloning from creating, moving, or deleting nodes, and adds useful context beyond the title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear use case: 'the cheapest way to make a second row, card or list item that matches the first exactly.' It does not explicitly name alternatives or state when not to use it, but the context is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_component_propertiesWhat a component exposesARead-only
The properties a component, component set or instance has: the variants, and the text, boolean and instance-swap properties, with what this instance currently has them set to.
Call this before figma_set_instance_properties. The key that setter needs carries an id suffix for everything but a variant — "Label#8:2", not "Label" — and there is no way to guess it.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses the key-format behavior ("Label#8:2", not "Label") and that the tool returns current instance values. This surfaces a non-obvious quirk an agent would otherwise only discover after a failed call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly written: the first sentence defines scope and output, the second gives essential sequencing and the key-format warning. No filler or redundant restating of the tool name appears.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining what the tool returns, and it does: it lists the property kinds and current values. It also provides the crucial prerequisite relationship to the setter, making the definition complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single nodeId parameter is already fully documented in the schema, including the optional behavior of using the current canvas selection. The description adds no additional parameter-level meaning, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: it retrieves the properties of a component, component set, or instance, enumerating variants and text, boolean, and instance-swap properties. This clearly distinguishes it from siblings like figma_get_tree and figma_set_instance_properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs the agent to call this tool before figma_set_instance_properties, and explains why: the setter requires keys with an id suffix that cannot be guessed. This is direct, actionable usage guidance tied to a concrete sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_create_ellipseAdd an ellipseBDestructive
Creates an ellipse. Equal width and height give a circle — an avatar, a dot, a radio button.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| fill | No | Hex colour. Omit for no fill. | |
| name | No | ||
| width | No | Default 100. | |
| height | No | Default 100. | |
| parentId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal mutation via destructiveHint=true, and the description does not contradict that. Yet the description adds no operational detail beyond 'creates': it does not explain where the ellipse is inserted, how parentId interacts with the current selection, or what side effects the creation has. For a create operation, this leaves important behavior undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one tight sentence that front-loads the core action and then adds one valuable nuance. There is no filler or repetition beyond an acceptable restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating creation tool with 7 parameters, no output schema, and no explicit insertion semantics, the description is too thin. An agent needs to know where the ellipse lands, whether parentId is effectively required, and what the call returns or affects. None of that is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 43% schema description coverage, the description should compensate for undocumented parameters, but it only adds meaning to width/height via the equal-dimensions-circle note. It does nothing for x, y, name, or parentId, so an agent still lacks semantics for most parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Creates an ellipse.' It adds the distinctive geometric behavior that equal width and height produce a circle, which differentiates it from sibling create_* tools such as create_rectangle or create_text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage via the examples 'an avatar, a dot, a radio button,' suggesting when a circle/ellipse is desired. However, it does not explicitly say when to choose this over alternatives like create_rectangle, nor does it mention exclusions or fallback conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_create_frameCreate a frameADestructive
Creates an empty frame, on the current page or inside a parent you name. Returns the new node’s id so the next call can fill it.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| fill | No | Hex colour for a solid background. Omit to keep Figma’s default white. | |
| name | No | Layer name. Default "Frame". | |
| width | No | Default 100. | |
| height | No | Default 100. | |
| parentId | No | Put it inside this node. Default: the current page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark the operation as non-read-only and destructive, and the description adds useful behavior beyond them: the frame starts empty, placement follows the page or parentId, and the node id is returned. It does not explain what the destructive hint refers to, but it does not contradict the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver the core action, placement behavior, and return value with no redundant filler. The most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple creation tool with no required parameters, the description plus schema provides defaults, placement, and the returned id, which is enough to invoke it. The only real gap is that the destructiveHint annotation's side effect is not clarified, though it is not central to calling this tool successfully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 71% of parameters, including fill, name, width, height, and parentId, so the schema does most of the work. The description adds only high-level reinforcement of 'fill' and 'parent' and does not explain x/y coordinates or units.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Creates an empty frame') and adds placement options ('current page or inside a parent you name'), which is enough to distinguish it from sibling creation tools. It also states the return value, making the tool's role in a build workflow explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys clear context: frames are created either on the current page or under a named parent, and the returned id is meant to be used by a subsequent call to fill the frame. It does not explicitly name alternatives or exclusion cases, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_create_instancePlace a componentADestructive
Creates an instance of a component in this file. Get the id from figma_list_library. Naming a variant set places its default variant. Prefer this over drawing a lookalike: an instance keeps its link to the component and updates with it.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| name | No | ||
| parentId | No | ||
| componentId | Yes | From figma_list_library. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a mutating, destructive-hinted operation. The description adds useful behavior beyond that: placing an instance keeps the link to the component, and naming a variant set results in its default variant. This gives agents expectations about side effects and variant handling that the annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each earning its place: core action, required id source, variant nuance, and rationale for preferring the tool. The purpose is front-loaded and there is no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with no output schema, the description does not mention return value or resulting node id, which an agent would likely need for follow-up operations like setting properties. It covers purpose, id source, and variant behavior, but omits what the caller gets back and where the instance is placed when parentId is not provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20%, so the description must compensate. It does help by explaining that componentId comes from figma_list_library and by adding variant-set behavior for name. However, x, y, and parentId receive no semantic explanation, so several parameters are still underspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Creates an instance of a component in this file.' It also differentiates itself from drawing a lookalike by emphasizing that an instance keeps its link to the component and updates with it, which clarifies what kind of creation this is versus sibling creation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: get the id from figma_list_library and prefer this tool over drawing a lookalike when you want the component link preserved. It does not explicitly name alternative sibling tools or state when not to use it, so it stops short of fully explicit exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_create_rectangleAdd a rectangleADestructive
Creates a rectangle. The workhorse shape: dividers, bars, backgrounds, placeholders. Omit the fill for an empty one.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| fill | No | Hex colour. Omit for no fill. | |
| name | No | ||
| width | No | Default 100. | |
| height | No | Default 100. | |
| parentId | No | Put it inside this node. Default: the current page. | |
| cornerRadius | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true and readOnlyHint=false, so the mutation intent is disclosed. The description adds a behavioral detail about the fill parameter ('Omit the fill for an empty one') but does not elaborate on other side effects, such as whether the rectangle is inserted into the current page or a specified parent, or what the return value is. It neither contradicts annotations nor adds substantial new behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero filler. It front-loads the essential action ('Creates a rectangle'), then adds the workhorse use cases and the fill nuance. Every sentence contributes value, and it is appropriately brief for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 optional parameters and no output schema, the description is too sparse. It omits key operational details like what x and y represent (coordinates, units), what the tool returns (likely a node reference), and the meaning of parameters like name and cornerRadius. The fill note is helpful but the overall context is insufficient for an agent to use the tool correctly without additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% (fill, width, height, parentId have descriptions), while x, y, name, and cornerRadius lack any schema description. The description only clarifies the fill parameter ('Omit the fill for an empty one'), leaving the undocumented parameters (x, y, name, cornerRadius) entirely unexplained. With half the parameters undocumented, the description fails to compensate, offering meaning for only one parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Creates a rectangle.' It adds practical context by calling it 'the workhorse shape' and enumerating typical uses (dividers, bars, backgrounds, placeholders), which helps an agent understand its primary role. It also conveys a behavioral nuance (omit fill for an empty rectangle), so the purpose is both specific and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies common use cases for rectangles but does not explicitly contrast this tool with siblings like figma_create_ellipse or figma_create_frame. There is no 'when not to use' guidance or mention of alternatives. It states 'the workhorse shape' and typical uses, but an agent would need to infer when this is preferred over other shape creators.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_create_svgDraw with SVGADestructive
Turns SVG markup into real Figma vectors — not an image, but editable paths in a frame. This is how to add an icon, a logo or any shape the other create tools cannot express. Extraction returns icons as SVG too, so a shape can be read out of one place and drawn into another unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| svg | Yes | The <svg> markup. | |
| name | No | ||
| width | No | Scale it to this width. | |
| height | No | ||
| parentId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=true), the description adds valuable behavioral detail: the output is real editable paths, not a flattened image, and SVG can round-trip unchanged from extraction. It doesn't describe what destructive effects occur, but annotations already flag mutating behavior, so this is not a major gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three focused sentences with no wasted words. The core transformation is front-loaded, followed by the use case and a round-trip nuance. Every sentence adds distinct value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The main behavior is clear, but with 7 parameters, no output schema, and minimal schema descriptions, the agent still lacks guidance on positioning, frame placement, scaling behavior, return value, and what destructive side effects might occur. Adequate for high-level understanding, but not fully complete for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 29%, and the description only reinforces the 'svg' parameter meaning. It does not explain x/y placement, parentId, name, height, or how scaling relates to width/height. With most parameters undocumented in the schema, the description should compensate but doesn't.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it turns SVG markup into editable Figma vectors, not an image. It explicitly differentiates itself from image insertion and other create tools by saying 'any shape the other create tools cannot express.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: use this for icons, logos, or shapes other create tools can't express, and it implicitly rules out image insertion by emphasizing these are editable vectors. It doesn't name specific sibling tools or state explicit when-not conditions, but the context is strong enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_create_textAdd a text layerADestructive
Creates a TEXT layer with the words you give it. The font is loaded before anything is typed, and a font this machine does not have is refused rather than substituted. Give a width to make it wrap; without one it hugs its text.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| name | No | Layer name. Defaults to the text itself. | |
| text | Yes | The characters. | |
| color | No | Hex colour for the text. | |
| width | No | Fixed width, so the text wraps. | |
| fontSize | No | ||
| parentId | No | Put it inside this node. Default: the current page. | |
| fontStyle | No | Weight or style, like "Bold". Default Regular. | |
| fontFamily | No | Default Inter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given annotations (readOnlyHint=false, destructiveHint=true), the description adds useful behavioral context beyond them: it discloses the font loading sequence, refusal of unavailable fonts rather than substitution, and the width-to-wrapping behavior. These are meaningful traits that inform the agent about expected side effects and failure modes. It does not contradict the annotations; it complements them with specifics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. The primary action is front-loaded, and every sentence adds information: the creation action, font handling, and width behavior. It is concise and structured effectively for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a somewhat complex tool with 10 parameters and no output schema, the description covers the key behaviors: creation, font loading and substitution refusal, and width semantics. It omits details like parent handling, color, or position, but these are reasonably inferred from the schema. Given the annotations already cover the destructive nature, the description is sufficiently complete for an agent to call the tool correctly in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 70%, so some parameters lack descriptions. The description adds context for the width parameter (wrap vs. hugging text) which is already in the schema's width description, and it mentions font behavior that relates to fontFamily but is more behavioral than parameter-specific. It does not clarify the undocumented parameters (e.g., fontSize) or add syntax details. The added value is modest, so a baseline of 3 is appropriate given the 70% coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a TEXT layer with given words, using specific verb 'Creates' and resource 'TEXT layer'. It differentiates from sibling creation tools (rectangle, ellipse, svg) by specifying text, and from editing tools like set_text by the creation action. The text is explicit that it adds a new text layer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives like figma_set_text or figma_set_text_style. It implies creation of a new text layer, but offers no guidance on when not to use it or conditions that select this tool over siblings. The behavioral notes about font availability are more akin to constraints than usage guidance, so the tool falls short on this dimension.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_delete_nodeDelete a layerADestructive
Removes a node and everything inside it. One undo step, so the designer can take it back with a single Cmd-Z — but say what you are deleting before you do it.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The node to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, covering the destructive nature. The description adds valuable behavioral context beyond annotations by disclosing that the operation is one undo step (reversible by a single Cmd-Z) and includes a caution to communicate the deletion. This exceeds what annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with the core operation front-loaded in the first clause and a brief, useful caution appended. No wasted words; every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive single-parameter tool with annotations covering safety, the description is nearly complete. It discloses reversibility and a precaution. The only missing element is behavior on invalid/nonexistent node IDs, but that is a common expectation and not critical for correct invocation. No output schema exists, but a delete operation typically returns success/void, so the absence is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100% (nodeId has a description: 'The node to delete.'), so the description adds no additional parameter semantics beyond reinforcing that the node is targeted. Per the baseline for high schema coverage, this is a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear, specific verb ('Removes') and resource ('a node'), and explicitly includes the scope ('everything inside it'). This distinguishes it from siblings like figma_move_node or figma_clone_node without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit when-to-use or when-not-to-use guidance, nor does it name alternative tools. However, the operation is self-evident as a deletion, so the lack of routing is a minor gap. It does caution to 'say what you are deleting before you do it,' which implies a usage context but does not elaborate on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_export_pngSee the designARead-only
Renders one node and returns the picture itself, so a model that can see gets to look at the design rather than read a description of it. Nothing is stored anywhere.
| Name | Required | Description | Default |
|---|---|---|---|
| scale | No | Render scale. Default 2. | |
| nodeId | Yes | The node to render. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false, and the description adds a meaningful guarantee beyond that: 'Nothing is stored anywhere.' It doesn't discuss output format details, but the returned picture behavior is stated directly and no annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core rendering behavior is front-loaded, and the second sentence adds a distinct privacy/durability signal rather than repeating the annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter, read-only tool with a documented result ('returns the picture itself'), the description, schema, and annotations together cover everything an agent needs. No output schema exists, but the essential return semantics are stated explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so nodeId and scale are already documented in the schema. The description adds nothing about how scale behaves or what nodeId refers to, but it also doesn't have to compensate for missing schema information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Renders one node') and a concrete result ('returns the picture itself'), so an agent knows exactly what the tool produces. It doesn't explicitly name a sibling tool or contrast with one, but the 'rather than read a description' phrase hints at the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended context is implied: use this when a 'model that can see' needs to inspect the visual design instead of a textual description. However, there is no explicit guidance on when to prefer this over siblings like figma_extract or figma_get_tree, and no exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_extractRead a design as codeARead-only
The full extraction of one node: HTML measured against what Figma draws, byte-exact figmaCss, a React component, plain CSS and CSS modules. Images are inlined and icons come out as real SVG, so the HTML stands on its own. This is the tool that answers "what does this design actually say".
Several nodes at once, instead of one call each: nodeIds, urls, selection: true, or saved: true with an optional folder. A batch answers {results:[…]}, one entry per input, each {ok:true,extraction} or {ok:false,error}, so one bad id never sinks the rest. It is capped at 20 entries, and no batch returns an image — ask figma_export_png for a picture, a node at a time.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | A Figma link, as an alternative to nodeId. | |
| urls | No | Several Figma links, extracted in one call. Up to 20. | |
| saved | No | Extract the designer’s saved set. Narrow it with folder. | |
| scale | No | Render scale for any image output. Default 2. | |
| folder | No | With saved: true, one folder of it. "" is the root. | |
| nodeId | No | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. | |
| formats | No | Which representations to return. Default html and figmaCss. "png" comes back as a real image you can look at, alongside the text — there is no base64 in the answer, so ask for it freely on a single node. figma_export_png is the same picture with nothing else attached. | |
| nodeIds | No | Several node ids, extracted in one call. Up to 20. | |
| selection | No | Extract every layer the designer has selected, not just the first. | |
| topLayerOnly | No | Stop at the selected layer rather than walking into it. | |
| inlineInstances | No | Expand component instances instead of referencing them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark the tool as read-only and non-destructive, and the description adds substantial behavioral context beyond that: images are inlined, icons are real SVG, batches are capped at 20, failures are isolated per entry, and there is no base64 in the response. This gives the agent a reliable model of how the tool behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then moves into batch behavior and alternatives. It is longer than minimal, but nearly every sentence carries a distinct fact; only a small amount of redundancy exists between the formats discussion and the later png note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with 11 optional parameters and no output schema, the description provides the essential operational details: output formats, batch result shape, per-entry error handling, the 20-entry limit, and where to route image requests. Nothing an agent needs to choose or invoke this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all 11 parameters at 100% coverage, so the baseline is 3. The description adds meaningful behavior around those parameters, especially the {results:[…]} contract, the 20-entry cap, and the image/export distinction. It does not walk through every parameter, but it does not need to given the schema's completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: it extracts a Figma node into HTML, figmaCss, React, and CSS variants. It even frames itself as 'the tool that answers what does this design actually say,' making its role unmistakable against siblings like figma_export_png or figma_get_tree.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly explains the batch input modes (nodeIds, urls, selection, saved) and when to prefer alternatives: 'ask figma_export_png for a picture, a node at a time.' It also clarifies that batches never return images, giving the agent a clear routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_find_nodesFind layersARead-only
Finds layers by type, by name and by the words in them. Every filter is optional and they narrow together.
This is the cheap way to locate something. Walking with figma_get_tree and figma_get_children costs a round trip per level and returns every sibling; asking here for {types:["INSTANCE"], name:"button"} costs one call. Searches the current page unless you pass nodeId to search inside one branch, or allPages to search the whole file — which is the only way to find something that is not on the page the designer happens to have open.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Substring of the layer name, case-insensitive. | |
| text | No | Substring of a text layer’s words, case-insensitive. Implies TEXT. | |
| limit | No | Most rows to return. Default 50. | |
| types | No | Layer types to keep. Omit for any type. | |
| nodeId | No | Search inside this branch instead of the whole page. | |
| allPages | No | Search every page in the file. Slower, and the answer names the page each row is on. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description explains that filters are optional and narrow together, that searches target the current page unless overridden, that allPages is slower and includes page names in results, and that text implies TEXT. It even notes cost characteristics relative to other tools. This is rich behavioral context well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact but information-dense: three sentences cover purpose, filter behavior, efficiency, scope options, and cost trade-offs. Every sentence earns its place, and the most important facts are front-loaded in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with zero required parameters and a fully described schema, the description covers everything needed to invoke it correctly: scope, filter semantics, and performance trade-offs. It does not document the exact return fields, but there is no output schema and the description gives enough about rows and page names to make the behavior expectable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all six parameters with complete descriptions, including defaults, constraints, and implications such as 'Implies TEXT' for text. The tool description does not add meaningful parameter semantics beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it finds layers by type, name, or contained text. It also explicitly distinguishes itself from tree/children navigation tools, which search layer hierarchies instead of filtering across a scope. The behavior is unambiguous and easy to tell apart from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly contrasts this tool with figma_get_tree and figma_get_children, explaining that this is the cheaper single-call option. It also clarifies scope behavior: current page by default, a specific branch with nodeId, or the whole file with allPages. This gives an agent clear when-to-use conditions and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_get_childrenChildren of one layerARead-only
The direct children of one node, by id. The cheap way to explore a page a branch at a time.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | How many levels to walk. Default 1. | |
| nodeId | Yes | The node whose children to list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the useful 'direct children' and 'cheap' performance context, but does not describe recursion behavior with depth, response format, or other runtime traits beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no wasted words; the core action and scope are front-loaded, and the guidance about cheap traversal is packed into the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, simple listing operation with fully documented parameters and a readOnlyHint annotation, this description is nearly sufficient. It does not explain return shape, but the tool's purpose is simple enough that 'direct children' plus the schema gives an agent what it needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both nodeId and depth are already documented there. The description's 'by id' and 'direct children' wording adds slight clarification but does not significantly extend the schema's parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'direct children of one node, by id.' The phrase 'the cheap way to explore a page a branch at a time' also distinguishes it from tree-wide navigation tools like figma_get_tree.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context — use this to traverse a page incrementally branch by branch — and implies it is cheaper than fetching a full tree. It does not explicitly name alternatives or exclusion conditions, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_get_selectionWhat is selectedARead-only
The layers the designer has selected on the canvas right now, with their ids, names, types and sizes. Start here when the request says "this", "the selected frame", or names nothing at all.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the tool reads live selection state and returns specific attributes, but it does not mention edge cases such as an empty selection or whether an active document is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences: the first front-loads what the tool returns, the second gives usage guidance. Every word earns its place and nothing is repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only getter, the description adequately covers what is returned and when to use it. The lack of an output schema means the exact response envelope is unspecified, but the key attributes are listed and this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema already reflects this with an empty object and 100% coverage. The description reinforces that no input is needed beyond the current Figma context, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it returns the currently selected layers with their ids, names, types, and sizes. This distinguishes it clearly from sibling tools like figma_select and figma_get_tree.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it: 'Start here when the request says "this", "the selected frame", or names nothing at all.' This gives clear contextual guidance, though it does not name specific alternative tools or exclusion cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_get_treeLayers on the current pageARead-only
The top-level layers of the page the designer is looking at. Increase depth to walk further down, but note that a deep page is thousands of rows: prefer figma_get_children on one branch.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | How many levels to walk. Default 1. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false). The description adds genuine behavioral context beyond that: it discloses that the operation walks the layer tree from the page down, that depth is the mechanism, and that a deep page yields thousands of rows — a scale warning an agent needs before calling. It stops short of describing the return structure, so it doesn't reach 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The core purpose is front-loaded first, and the depth caveat plus sibling routing come second. Every clause earns its place; no redundancy with the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete enough for a single-parameter, read-only navigation tool. The only gap is that the return format of the layers (node IDs, names, types) isn't described, and there's no output schema to fill that in. But for walking a layer tree, the missing structure detail is minor against a strong purpose, usage, and scale warning.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the depth parameter is already well documented ('How many levels to walk. Default 1.'). The description adds minor value by contextually framing depth as walking down and tying it to the row-volume trade-off, but the schema already does most of the work, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('The top-level layers of the page the designer is looking at') with a clear scope tied to the current page. Explicitly names the sibling it is not — 'prefer figma_get_children on one branch' — so an agent can distinguish it from the closest alternative without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit alternative (figma_get_children) and the condition that selects it (walking down one branch vs. the whole page). Also warns about the cost of increasing depth ('a deep page is thousands of rows'), which directly informs the agent's decision to stay shallow or switch tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_groupGroup or ungroupADestructive
group — puts nodeIds in a new group, inside the first one’s own parent. ungroup — dissolves a group or frame and returns the children it let go.
A group is the honest answer when several layers are one thing but need no layout of their own; reach for figma_create_frame with auto layout when they do.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | For group: what to call it. | |
| action | No | Default group. | |
| nodeId | No | For ungroup: the group or frame to dissolve. | |
| nodeIds | No | For group: the layers to gather, up to 20. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral detail beyond the annotations: grouping places the new group inside the first node's parent, and ungrouping returns the released children. Since destructiveHint=true already flags mutation, this additional placement and return behavior is valuable and non-contradictory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loads the core operations, uses a clear 'group — ... / ungroup — ...' structure, and ends with a useful routing guideline. Every sentence contributes meaning without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-action mutation tool with four parameters and no output schema, the description covers the main behavior, placement, and the main alternative. Ungroup's return behavior is stated. Minor gaps remain, such as what group returns and edge-case constraints, but these are not critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter has a clear description (name for group, action for which operation, nodeId for ungroup, nodeIds for group with a max of 20). The main description adds only the parent-placement nuance already reflected in the schema, so it does not need to compensate further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description precisely defines both supported actions: group puts nodeIds into a new group inside the first node's parent, and ungroup dissolves a group or frame and returns its children. It clearly distinguishes this dual-purpose tool from sibling creation tools like figma_create_frame.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when grouping is the right choice ('several layers are one thing but need no layout of their own') and names the alternative figma_create_frame with auto layout when layout is needed. This gives an agent a clear decision rule between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_insert_imagePut an image on the canvasADestructive
Places a PNG, JPG or GIF, passed as base64. With nodeId it becomes that layer’s fill, which is how a placeholder gets its picture; without one it arrives as a new rectangle at its own pixel size.
Base64 rather than a URL on purpose: the plugin’s manifest allows only the relay and the local daemon as network destinations, so the plugin cannot fetch an image from anywhere a designer keeps one. Read the file yourself and send the bytes. The cap is 700KB of base64, which is roughly a 500KB image.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| data | Yes | The image as base64. A data: URL prefix is accepted and ignored. | |
| name | No | ||
| width | No | Default: the image’s own width. | |
| height | No | Default: the image’s own height. | |
| nodeId | No | Fill this layer instead of making a new one. | |
| parentId | No | Where a new rectangle goes. Default: the current page. | |
| scaleMode | No | How it sits in the frame. Default FILL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true and readOnlyHint=false. The description adds context beyond annotations: the reason for base64 (network constraints), the 700KB cap, and the behavior of becoming the fill of a node (implying replacement). It does not contradict annotations and provides useful operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and economical: a single opening sentence states the core behavior, followed by a short paragraph explaining modes and constraints. No redundant fluff, and the key limitation is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters and no output schema, the description covers the essential behavioral choices (modes, size semantics, network limitation, cap). Parameters are sufficiently documented in the schema, and the description fills gaps not covered elsewhere. It does not explain edge cases like invalid nodeId, but that's not required for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 67% schema coverage, the description adds meaningful value: it explains the base64 vs URL rationale, the cap, and clarifies the two use modes (fill vs. new rectangle). It complements the schema descriptions for parameters like data, width/height, and nodeId by giving real-world context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Places'), resource types (PNG, JPG, GIF), and the input format (base64). It also clearly differentiates the two operational modes (fill vs. new rectangle), which distinguishes it from siblings like figma_set_fill or figma_create_rectangle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the intended use case (e.g., placeholder images) and why base64 is used (network restrictions in the manifest). It gives clear context for when to use it, but does not explicitly name alternative tools or conditions for when not to use it, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_list_libraryThe design system in this fileARead-only
The components, styles and variables this file has, with the ids the other tools need. Read this before "make it match our button" or "use our brand colour" — instantiating the real component or binding the real variable is what makes a change survive contact with the design system, rather than a hex code that looks right today.
| Name | Required | Description | Default |
|---|---|---|---|
| only | No | Narrow the answer. Default all three. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds useful context about the ids being prerequisites for other tools, but it doesn't describe output shape, result size, or edge cases. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the resource and outcome, then immediately give practical usage guidance. The examples and rationale earn their place without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with one optional parameter and full schema coverage, the description is complete: it says what the tool returns, why those ids matter, and when to call it. No output schema is needed for this simple listing use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one optional enum parameter and its schema description already documents 'Narrow the answer. Default all three.' The prose description adds no further parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly names the resource: the file's components, styles, and variables, and states the outcome: returning the ids other tools need. It is specific and understandable, though it does not explicitly differentiate itself from siblings like figma_list_saved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Read this before "make it match our button" or "use our brand colour"'. It explains why the ids matter, but it does not mention alternative tools or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_list_savedThe designer’s saved setARead-only
The nodes the designer curated in the panel, by folder. A shortlist of what matters in this file, which is usually a better starting point than the whole page.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | No | Restrict to one folder. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful context about the curated, folder-scoped nature of the data, but does not disclose what happens with an unspecified folder, the response shape, or whether the listing is a flat array or grouped structure. This is acceptable for a simple read-only list, but not richly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler, and the central concept—curated nodes by folder—is front-loaded. The second sentence adds practical guidance about why this tool is useful rather than redundant praise. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with one optional parameter, an understood resource, and no output schema, the description gives enough conceptual orientation for an agent to invoke it correctly. It could be slightly more complete by stating the default folder behavior or the return shape, but the low complexity and annotation coverage keep this gap minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, folder, is fully described in the schema as 'Restrict to one folder', so schema coverage is 100%. The description's mention of 'by folder' reinforces the parameter's meaning but adds no syntax, value formats, or edge-case behavior beyond the schema. This matches the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as 'the nodes the designer curated in the panel' and the operation as listing them 'by folder', which is specific and distinguishes it from broader page- or library-oriented tools. It does not use an explicit imperative like 'list', but the meaning is clear. Its sibling figma_list_library points to a different content type, so the curation focus provides enough differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'usually a better starting point than the whole page' gives an implied use case: prefer this when you want the designer-curated shortlist rather than everything. However, it does not name alternatives or state when not to use it, so the agent is left to infer routing from the sibling tool names rather than explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_move_nodeReparent or reorder a layerADestructive
Moves a node into another parent, or to a different position among its siblings. Index 0 is the back of the canvas and the top of a layer list; leaving it out puts the node last.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | Position among siblings. | |
| nodeId | Yes | The node to move. | |
| parentId | No | New parent. Default: keep the one it has. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description adds concrete ordering semantics: index 0 means back of canvas/top of layer list, and omitting index appends last. It also reinforces the default parent behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences: the first states the purpose, the second clarifies the key index behavior. No filler or redundant restating of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation with no output schema, the description covers core intent, the two operational modes, and the important index default. It could mention side effects of reparenting, but the destructiveHint annotation already signals risk.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all three parameters, so the baseline is 3. The description adds meaningful detail for 'index' by explaining layer order and default placement, which goes beyond the schema's simple 'Position among siblings'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Moves') and resource ('a node') and clearly covers both reparenting and sibling reordering. This distinguishes it from nearby mutators like figma_delete_node or figma_clone_node without requiring the agent to infer intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete conditions for both use cases: moving into another parent or changing position among siblings, and explains the default when index is omitted. It does not explicitly name alternative tools or exclusions, but the context is clear enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_pagesThe pages, and which one is openA
list — every page in the file, and which is current. open — switch to one, by pageId or by name.
Worth calling before concluding something is missing: every other reading tool answers about the current page only, so a frame on another page looks exactly like a frame that does not exist. Opening a page moves the designer’s view, which is the same kind of act as figma_select — nothing in the file changes and there is nothing to undo, so it is not behind the Edits switch.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | For open: the page name, if you have no id. | |
| action | Yes | Which of the two. | |
| pageId | No | For open: the page id from list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by disclosing that opening a page moves the designer's view, changes nothing in the file, has nothing to undo, and is not gated by the Edits switch. These are meaningful behavioral details that an agent cannot infer from readOnlyHint or destructiveHint alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The two actions are front-loaded in a compact, scannable format, and the second paragraph earns its place by explaining when and why the tool matters. No sentences are wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-action navigation tool, the description covers both operations, parameter selection, the side effect of moving the designer's view, and the relationship to sibling tools. There is no output schema, but list's return meaning is stated clearly enough for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are already fully documented in the input schema, so the baseline is 3. The description adds only a light restatement of the 'by pageId or by name' routing, which does not provide meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource for each action: list returns every page and the current one, open switches to a page by pageId or name. This makes it easy to distinguish from the sibling reading tools, which are all page- or node-focused.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to call this before concluding something is missing, because every other reading tool only answers about the current page. It also contrasts open with figma_select and explains that it is not behind the Edits switch, giving clear when-to-use and when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_resolve_urlWhat a Figma link points atARead-only
Turns one or more Figma links into the nodes they name, without exporting anything.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | Figma links to resolve. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true and destructiveHint=false already provided, the description adds useful behavioral context: it handles one or more links, resolves them to nodes, and has no export side effect. This clarifies the operation beyond the bare annotation flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence carries all needed information, opens with the action, and wastes no words. The exclusion clause 'without exporting anything' earns its place by preventing confusion with export tools.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only tool with strong annotations, the description is largely complete: it names the input, the transformation, and a key non-behavior. A small gap is that it does not describe the shape or granularity of the returned node information, and there is no output schema to fill that in.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning by specifying the input must be 'one or more Figma links' and that resolution yields named nodes. This goes beyond the schema's minimal 'Figma links to resolve.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific verb ('Turns'), a concrete resource ('Figma links'), and the expected outcome ('into the nodes they name'). It also distinguishes itself from export-related siblings by explicitly saying 'without exporting anything.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for resolving links to node identity, and the phrase 'without exporting anything' hints that export tasks belong elsewhere. However, it does not explicitly state when to use this tool versus alternatives like figma_extract or figma_export_png.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_savedCurate the saved setA
Read and change the designer’s shortlist of nodes in this file, and the folders it is grouped into. One action argument: list, folders, save, unsave, clear, move, newFolder, renameFolder, deleteFolder.
list — the entries, optionally in one folder. folders — the folders with their counts; "" is the root. save — add nodeIds, or whatever is selected when you give none. unsave — remove nodeIds. clear — empty one folder, or the whole set when you name none. move — put nodeIds in folder. newFolder / renameFolder / deleteFolder — the folders themselves; deleteFolder keeps the entries and returns them to the root unless deleteEntries is true.
This is a bookmark list, not the design: it lives in the plugin’s own storage, so none of it is behind the Edits switch and none of it can be undone with Cmd-Z. Saving what a long job is about is a cheap way to leave the designer something to look at afterwards.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | For renameFolder: what to call it instead. | |
| from | No | For renameFolder: the folder as it is called now. | |
| name | No | For newFolder and deleteFolder. | |
| action | Yes | Which of the nine. | |
| folder | No | For list, save, clear and move. "" is the root; the folder must already exist for move. | |
| nodeIds | No | For save, unsave and move. Omitting them on save means the current selection. | |
| deleteEntries | No | For deleteFolder: remove what was in it too, rather than returning it to the root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important non-obvious behavior beyond the annotations: changes live in plugin storage, are not behind the Edits switch, cannot be undone with Cmd-Z, and deleteFolder returns entries to root by default unless deleteEntries is true. This is rich, accurate behavioral context with no contradiction against the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but appropriately so for nine distinct actions. It front-loads the overall purpose, then uses a compact action-by-action list, and each sentence carries operational meaning. The closing rationale, while not strictly necessary, reinforces the intended use without bloating the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-action tool with no output schema, this description is exceptionally complete: it covers every action, all parameter scoping rules, defaults, special cases, and persistence semantics. An agent has enough to call the tool correctly across all nine actions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds action-level semantics that the schema alone does not fully convey: omitting nodeIds on save means current selection, "" means root, and deleteFolder's default non-destructive behavior. These details help an agent bind parameters correctly per action.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair: 'Read and change the designer’s shortlist of nodes in this file, and the folders it is grouped into.' It then enumerates all nine actions, making the scope unmistakable and distinguishing this curation tool from read-only siblings like figma_list_saved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this tool is appropriate: it manages a persistent bookmark list separate from the design, and the closing sentence provides a concrete use case. It does not explicitly name sibling alternatives or say when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_save_versionCheckpoint the fileADestructive
Saves a named point in the file’s version history. Call this before a run that will change several things, so there is one place to fall back to that is not a stack of undos.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | What this checkpoint is for. | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the agent knows this is a mutating operation. The description adds useful context about creating a restore point versus relying on undos, but it does not disclose what the destructive aspect might involve or what happens to existing version-history entries. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. It front-loads the core action ('Saves a named point...') and then provides a practical usage rationale without repeating schema details or annotation information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter write tool, the description covers the core purpose and when to use it. However, it leaves the 'description' parameter unexplained and does not mention return behavior. Since there is no output schema, these gaps make the definition minimally viable rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%. The 'title' parameter is explained in the schema as 'What this checkpoint is for,' but the 'description' parameter has no schema documentation and the tool description adds nothing about it. The description therefore fails to compensate for the undocumented parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Saves a named point in the file’s version history.' This clearly differentiates the tool from siblings like figma_list_saved, figma_set_fill, or figma_delete_node, and the title 'Checkpoint the file' reinforces the intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to call it: 'before a run that will change several things...' and explains the benefit of a single fallback point. It does not mention when not to use it or name specific alternatives, but the context is clear enough to route an agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_selectShow it on the canvasA
Selects one or more layers and scrolls the canvas to them, so the designer is looking at whatever you are talking about. Use it before describing a node you found by walking the tree — pointing is faster than naming an id — and after an edit, so the change is on screen.
It changes no design data, which is why it works whether or not Edits is on, and why it leaves no undo step. It does move the designer’s viewport, so say what you are showing them.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No | One node to select and scroll to. | |
| nodeIds | No | Several, selected together and framed together. Up to 20. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the generic annotations: it changes no design data, works without Edits, leaves no undo step, and moves the viewport. It even warns the agent to narrate what it is showing the designer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact paragraphs with the core action front-loaded. Every clause earns its place: timing, side effects, and a caveat about moving the viewport are all useful and non-redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a side-effect-only viewport tool with no output schema, the description covers effect, timing, mutation safety, and the viewport caveat. The optionality of nodeId/nodeIds is clear enough from the schema and description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes both parameters: nodeId as one node and nodeIds as several nodes up to 20. The description adds no parameter-specific meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb ('Selects'), resource ('one or more layers'), and the canvas-scroll effect. This clearly distinguishes it from data-mutation and tree-walking siblings like figma_set_fill or figma_get_tree.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly prescribes when to use it: before describing a tree-walked node and after an edit. It does not explicitly name alternatives or give when-not-to-use guidance, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_set_auto_layoutSet auto layout on a frameADestructive
Turns auto layout on for a frame and sets its direction, spacing, padding and alignment. Pass mode "NONE" to turn it off. Only the properties you name are changed.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Layout direction. | |
| nodeId | Yes | The frame, component or instance to lay out. | |
| padding | No | Shorthand: sets all four paddings. | |
| paddingTop | No | ||
| itemSpacing | No | Gap between children. | |
| paddingLeft | No | ||
| paddingRight | No | ||
| paddingBottom | No | ||
| counterAxisAlignItems | No | Alignment across the layout direction. | |
| primaryAxisAlignItems | No | Alignment along the layout direction. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as destructive/non-read-only, so the bar for behavioral disclosure is lower. The description adds a useful caveat—'Only the properties you name are changed'—which clarifies the partial-update behavior. It does not warn about potential side effects like layout recalculation or child position changes, but the destructiveHint annotation covers the main mutability signal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no filler. The core action comes first, the NONE behavior is immediately stated, and the partial-update caveat is included without redundant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential behavior and the NONE escape hatch, and the schema documents required and enum parameters. However, for a tool with 10 parameters and no output schema, it leaves important edge cases unaddressed, such as whether layout properties still apply when mode is NONE, and what happens if a non-frame node is targeted. The destructive semantics are present in annotations, not in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%, and the description adds a high-level framing by naming direction, spacing, padding, and alignment. This helps relate concepts like itemSpacing and the alignment enums, but it does not compensate for undocumented parameters such as paddingTop, paddingLeft, paddingRight, and paddingBottom. An agent still has to infer their exact meaning from context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('a frame') and the specific action ('Turns auto layout on'), and enumerates the exact property categories affected: direction, spacing, padding, and alignment. This distinguishes it from sibling tools like figma_set_fill or figma_set_layout_sizing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: whenever auto layout needs to be enabled, configured, or disabled on a frame. However, it does not explicitly mention when not to use it or name alternative tools that a user might consider, leaving the routing to the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_set_boundsMove or resizeADestructive
Sets position and size. Position is ignored inside an auto-layout frame, where the parent decides it — use figma_set_layout_sizing and the parent’s spacing there instead.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| width | No | ||
| height | No | ||
| nodeId | Yes | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=true, so the description is not burdened with basic safety disclosure. It adds useful context about the auto-layout behavior, but does not elaborate on what destructive changes may occur, coordinate semantics, or the outcome when size parameters are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the core function front-loaded. The second sentence earns its place by providing a critical usage caveat and routing to the sibling tool. No filler or redundant restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the most important exclusions (auto-layout behavior) but leaves gaps for a 5-parameter tool with poor schema coverage: units, coordinate space, whether size is also ignored in auto-layout, and what 'sets' implies for existing bounds. The description is adequate for a simple case but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20%, with just nodeId documented. The description maps loosely to x/y/width/height by saying 'Sets position and size,' and adds one semantic constraint for x/y inside auto-layout, but it does not explain units, coordinate systems, optionality, or what happens when individual parameters are omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Sets position and size.' The title 'Move or resize' is clarified, and the description distinguishes itself from figma_set_layout_sizing by explicitly naming that sibling tool in the auto-layout caveat.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when not to rely on this tool: inside auto-layout frames, position is ignored. It also names the alternative approach (figma_set_layout_sizing and parent spacing), leaving no ambiguity about the correct tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_set_corner_radiusRound the cornersBDestructive
Sets one radius for every corner, or each corner on its own.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. | |
| radius | No | All four corners. | |
| topLeftRadius | No | ||
| topRightRadius | No | ||
| bottomLeftRadius | No | ||
| bottomRightRadius | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish destructiveHint=true and readOnlyHint=false, so the mutation profile is known without the description. The description does add useful behavioral context by distinguishing uniform versus per-corner application. However, it does not disclose what happens when both 'radius' and individual corner parameters are supplied, whether existing radii are overwritten, or what occurs when called with only nodeId and no radius values. The annotation coverage lowers the bar, making 3 appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 13-word sentence that front-loads the verb and packs both operating modes into minimal space. Every word earns its place with no boilerplate or repetition of schema fields. It is efficiently structured, though additional edge-case detail could still have been added without hurting conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with 33% schema coverage and no output schema, the description is under-specified. It omits edge-case behavior (mixing uniform and per-corner radii), node-type applicability (which Figma nodes support corner radius), and the effect of invoking with only the required nodeId and no radius values. An agent could call it incorrectly without further information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% — nodeId and radius are described, while the four corner parameters have bare schema entries. The description partially compensates by mapping 'one radius for every corner' to the radius parameter and 'each corner on its own' to the four corner parameters, giving those undocumented params meaning. It does not clarify conflict resolution between uniform and per-corner inputs or units, so compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Sets') with a clear resource (corner radius) and conveys the two operating modes: a single uniform value versus independent per-corner values. The title 'Round the corners' reinforces intent. It earns a 4 rather than 5 because sibling differentiation is implicit — no sibling is named — though no other sibling handles corner radius, so confusion risk is low.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, exclusions, or alternatives are provided. The description implies rounding corners but never states prerequisites (e.g., the node must support corner radius) or when to prefer this over sibling set tools like figma_set_bounds or figma_set_effects. An agent gets no help choosing among the many figma_set_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_set_effectsSet shadows and blursADestructive
Replaces a node’s effects with the list you give. An empty list clears them. Elevation in most design systems is a drop shadow, so this is what "make it look raised" means.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. | |
| effects | Yes | In back-to-front order. Empty clears every effect. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, and the description aligns by saying 'Replaces' (overwrites existing effects). It additionally discloses that an empty list clears all effects, which is not in the annotations. The description adds useful context (design-system meaning) without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, purposeful sentences. The main action is front-loaded, the edge case (empty list) is stated early, and the design-context note is a single salient sentence. No fluff or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive setter with fully documented parameters, the description covers the core behavior, the clearing scenario, and the semantic intent. It doesn't mention multi-node behavior or side effects, but those aren't critical given the schema and annotations. Slight room to note that it replaces all existing effects on the node, though 'replaces' already implies that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% — both parameters and their nested properties are documented in the schema, including defaults and the order/clearing semantics for the effects array. The description adds no new parameter information beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Replaces') and a clear resource ('a node’s effects'), and it immediately explains the empty-list behavior. This distinguishes it from sibling tools like figma_set_fill or figma_set_stroke, which target different properties. The added design-systems hint ('what make it look raised means') reinforces the intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear trigger condition ('this is what
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_set_fillSet a solid fillADestructive
Replaces a node’s fills with one solid colour, and answers with the colour read back off the node — so a write that did not land is visible without a screenshot. It replaces every fill the node had, which is worth knowing before pointing it at a gradient or a photograph; the answer names what was there. Borders are strokes, not fills: use figma_set_stroke for those. One call is one undo step, so the designer takes it back with a single Cmd-Z.
| Name | Required | Description | Default |
|---|---|---|---|
| color | Yes | Hex colour, like "#1e88e5". | |
| nodeId | Yes | The node to fill. | |
| opacity | No | Fill opacity, 0 to 1. Default 1. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true), the description discloses that the operation destroys all existing fills, that the response includes the read-back color so failed writes are detectable, and that one call maps to one undo step. This is rich behavioral detail well beyond the boolean annotation flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the core action, the read-back safety behavior, the destructive replacement warning, the stroke routing, and the undo granularity. It is front-loaded with the primary purpose and avoids redundancy with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description explains what the tool returns (the read-back color and what was replaced). It also covers the destructive nature, the undo behavior, and the boundary with strokes, making it complete for an agent to safely invoke this tool on a node with any fill type.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already fully documents nodeId, color, and opacity. The description adds context about the fill being solid and the replace-all behavior, but it does not add new meaning to the individual parameters beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Replaces') and a precise resource ('a node’s fills') with the outcome 'one solid colour'. It also distinguishes itself from the sibling figma_set_stroke by noting that borders are strokes, not fills, which removes ambiguity about what the tool operates on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when not to use this tool: 'Borders are strokes, not fills: use figma_set_stroke for those.' It also warns about a key contextual consideration — the tool replaces every existing fill — which is exactly the kind of guidance that helps an agent decide whether this is the right tool for a gradient or photograph.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_set_instance_propertiesSet an instance’s propertiesADestructive
Sets which variant an instance is, and the text and booleans its component exposes. Take the keys from figma_component_properties; a key given without its id suffix is matched anyway, and one that matches nothing is refused with the list of what does.
This is the difference between placing a component and using it. figma_create_instance gives you the default variant — this is how it becomes the large one, or the disabled one, with the right label.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. | |
| properties | Yes | Key to value. A variant takes its option name, a boolean property true or false, a text property a string. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive, and the description adds useful behavioral details: it mutates the existing instance, tolerates keys missing their id suffix, and refuses invalid keys by returning the list of valid ones. No contradiction with annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences in the first paragraph carry the core behavior and validation rules, and the second paragraph gives a helpful analogy to create_instance. It is efficient and front-loaded, though the analogy could be trimmed without losing essential content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating instance-property tool with only two params, the description covers what the tool changes, where to get valid keys, how key matching works, and how failure behaves. The nodeId omission behavior is handled in the schema, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes both parameters well, so a 3 is the baseline, but the description adds meaningful semantics: properties should use keys from figma_component_properties, variant values are option names, booleans are true/false, and text properties are strings. This enriches what the schema alone provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sets an instance's variant, text properties, and boolean properties. It also distinguishes itself from placing a component (figma_create_instance), so an agent can tell exactly what this tool does beyond its name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs the agent to take keys from figma_component_properties, explains id-suffix matching behavior, and says what happens when a key matches nothing. It also names when to use this instead of figma_create_instance, making the usage boundary unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_set_layout_sizingHug, fill or fix a sizeADestructive
How a child behaves inside an auto-layout frame: HUG shrinks to its contents, FILL stretches to the parent, FIXED keeps its size. This, not figma_set_bounds, is how widths are set inside auto layout.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. | |
| vertical | No | ||
| horizontal | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive and not read-only. The description adds behavioral meaning by explaining what HUG, FILL, and FIXED do to the child. It does not elaborate on destructive side effects, but the annotations carry that responsibility, so the added semantics are sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver the core concept, define all enum values, and provide a routing rule away from a sibling tool. Every sentence earns its place and the key guidance is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a focused mutator with few parameters and no output schema, the description gives the enum semantics, the relevant context (auto-layout frame), and sibling disambiguation. It could add a note about prerequisites, but the essential information for correct invocation is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, but the description meaningfully defines the three enum values shared by the vertical and horizontal parameters. NodeId is already well described in the schema, and the parameter names make the axis association clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title and description clearly identify the tool as controlling child sizing behavior inside auto-layout frames, distinguishing HUG, FILL, and FIXED. It also explicitly differentiates itself from figma_set_bounds, making the tool's purpose and scope immediately understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states that this tool, not figma_set_bounds, is the correct way to set widths inside auto layout. This directly gives the agent a when-to-use and when-not-to-use signal with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_set_node_nameRename a layerBDestructive
Renames a layer. Layer names are what the generated code turns into class names, so tidying them is a real change and not cosmetic.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| nodeId | Yes | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as readOnly=false and destructiveHint=true, so the description does not need to restate the mutation. It adds value by explaining the consequence: renaming affects generated code class names, making it a real change rather than cosmetic. No contradiction with annotations, but no further behavioral detail such as undo, required permissions, or effects on references.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The core action is front-loaded, and the second sentence adds important context without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter rename tool, the description plus schema and annotations cover the essential facts: what it does, the key consequence, mutability, and parameter meaning. No output schema is needed for a rename operation. Could be slightly more complete with explicit mention of scope or return behavior, but it is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents nodeId, including an example and the fallback to the current selection. 'name' is left without schema description, but the tool description gives it meaning by explaining that names become class names in generated code. This partially compensates for the 50% schema coverage, though no format, length, or uniqueness constraints are mentioned.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Renames a layer') and the target resource, matching the title. It adds meaningful context by explaining that layer names map to generated code class names, which clarifies why the tool exists. However, it does not explicitly distinguish this from siblings, though no direct rename sibling exists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives or when to avoid it. The note about generated code is a rationale for why the change matters, not a usage condition. An agent is left to infer the appropriate context solely from the name and title.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_set_strokeSet or clear a strokeADestructive
Replaces a node’s strokes with one solid colour, and optionally sets the stroke weight. Pass remove: true to take the stroke off entirely. Borders in Figma are strokes, not fills — a row outline or an icon drawn as an outline needs this rather than figma_set_fill.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | Hex colour, like "#1e88e5". Omit only with remove. | |
| nodeId | Yes | The node to stroke. | |
| remove | No | Remove every stroke instead of setting one. | |
| weight | No | Stroke weight in pixels. Left alone when omitted. | |
| opacity | No | Stroke opacity, 0 to 1. Default 1. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal mutability and destructiveness, and the description adds useful behavioral detail: replacing all existing strokes rather than appending, and removing the stroke entirely with remove: true. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: the main behavior, the removal mode, and the key alternative are each front-loaded and useful. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is nearly complete for a 5-parameter mutation tool with rich schema coverage. It covers the primary behavior, the remove variant, and the fill-vs-stroke distinction. It doesn't describe return values or side effects on unmentioned stroke properties, but those are minor given the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents color, nodeId, remove, weight, and opacity. The description adds conceptual meaning around stroke-as-outline and the role of remove, but doesn't substantially extend parameter-level semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Replaces a node’s strokes with one solid colour'. It also explicitly distinguishes strokes from fills and from figma_set_fill, so an agent can tell this tool apart from the closest sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives direct when-to-use guidance: 'a row outline or an icon drawn as an outline needs this rather than figma_set_fill'. It also explains the remove: true case for clearing strokes, giving clear conditions for both configuration modes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_set_textSet the characters of a text layerADestructive
Replaces the text of one TEXT node. The font is loaded first; a layer whose font is missing from this machine is refused rather than silently retyped in a substitute.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The new characters. | |
| nodeId | Yes | The TEXT node to retype. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a destructive write operation. The description adds meaningful non-obvious behavior: the font is loaded first, and missing fonts cause a refusal rather than silent substitution. This gives the agent important expectations about failure modes beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states the core purpose, and the second adds the critical font-loading behavior. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with rich annotations and full schema coverage, the description adequately covers the operation and a key edge case. It does not describe return values or explicit error behavior beyond missing fonts, but those are not essential for correct invocation of this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents both nodeId and text clearly. The description adds no additional parameter-specific meaning beyond restating that text is 'new characters' and nodeId is the 'TEXT node to retype,' which is already covered by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Replaces'), a specific resource ('the text of one TEXT node'), and clearly distinguishes this from sibling text-related tools like figma_create_text or figma_set_text_style. It is immediately obvious what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: use this tool to change the text content of an existing text layer. However, there is no explicit guidance on when to prefer this over alternatives such as figma_create_text or figma_set_text_style, and no mention of constraints like requiring a selected node or a text layer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_set_text_styleSet type on a text layerADestructive
Font, size, line height, letter spacing, alignment and colour, on a TEXT layer. Only what you name is changed. Prefer figma_apply_style where the file has a text style for it — a named style survives a redesign and a hard-coded 14px does not.
| Name | Required | Description | Default |
|---|---|---|---|
| align | No | ||
| color | No | Hex colour. | |
| nodeId | Yes | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. | |
| fontSize | No | ||
| fontStyle | No | Weight or style, like "Semi Bold". | |
| autoResize | No | ||
| fontFamily | No | ||
| lineHeight | No | In pixels. | |
| letterSpacing | No | In pixels. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The destructiveHint annotation already signals mutation, and the description adds meaningful behavioral context by clarifying that only named properties are overwritten and others are preserved. It doesn't describe reversibility or what exactly gets destroyed, but the partial-update disclosure is valuable beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: the first gives scope, the second defines update semantics, and the third supplies routing rationale. The most important caveat ('Only what you name is changed') is front-loaded right after the scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers what to change and when to prefer an alternative. Minor gaps remain: it doesn't describe return behavior, failure modes, or the autoResize parameter, but the schema compensates for the parameter details and the annotations cover the destructive nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 56%, so the schema carries some parameter descriptions. The description adds value by grouping the parameters into readable categories (font, size, line height, etc.) and by explaining that each named parameter is applied independently. It does not mention autoResize, leaving one parameter semantically under-covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact operation (set type on a text layer) and enumerates the specific attributes it affects: font, size, line height, letter spacing, alignment and colour. It also differentiates itself from the most confusable sibling, figma_apply_style, by framing hard-coded values as a fallback rather than a substitute for named styles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The last sentence gives explicit routing: prefer figma_apply_style when a text style exists, with a concrete reason (a named style survives redesigns). The phrase 'Only what you name is changed' also tells the agent this is a targeted partial update, not a full style reset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_set_visibilityHide, lock or fade a layerADestructive
Sets opacity, visibility and lock. Hidden layers are skipped by extraction, which is often the point.
| Name | Required | Description | Default |
|---|---|---|---|
| locked | No | ||
| nodeId | Yes | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. | |
| opacity | No | ||
| visible | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=true), the description adds the important behavioral detail that hidden layers are skipped by extraction. This helps an agent understand a non-obvious side effect. It does not contradict the destructive hint, though it could say more about the consequences of locking or changing opacity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no wasted words. The core action is first, and the extra behavioral context is front-loaded and directly useful. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple setter tool, the description plus annotations cover the basics: what it does, that it can be destructive, and why hiding matters. However, with three undocumented parameters and no output schema, more detail about parameter behavior and interaction would make the tool fully self-contained for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (only nodeId is documented). The description merely lists 'opacity, visibility and lock' without explaining their semantics, interactions, or defaults. With low coverage, the description should compensate, but it does not meaningfully clarify the parameter meanings beyond their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the exact operation: 'Sets opacity, visibility and lock.' The title reinforces the same intent with 'Hide, lock or fade a layer,' which makes the tool's purpose immediately obvious and distinguishes it from sibling setter tools like figma_set_fill or figma_set_stroke.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives one concrete use case: hiding layers so extraction skips them ('which is often the point'). However, it does not explicitly say when to use this tool over alternatives, nor does it mention when not to use it. The guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Descriptions are detailed and usually point to distinct purposes, but several tools overlap: figma_list_saved duplicates the list action of figma_saved, and get_tree/get_children/find_nodes plus set_fill/apply_style/bind_variable all occupy nearby territory. An agent could easily pick the wrong one without reading the full descriptions carefully.
Most tools follow figma_verb_noun (create_frame, set_fill, get_children), but there are clear outliers: figma_saved, figma_pages, and figma_component_properties omit verbs, and select/extract/group are verb-only. The pattern is readable but not enforced.
39 tools is well past the 25+ threshold and will tax an agent's selection and context budget. Many setters (fill, stroke, text, effects, bounds, layout) could arguably be consolidated without losing clarity.
CRUD coverage for design nodes is strong: create, read via tree/children/find, update through many setters, delete, plus export, bookmarks, styles, variables, and versioning. Minor gaps remain—no direct get-node-by-id, no component/style creation—but agents can work around them.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
The Figma MCP server brings Figma design context directly into your AI workflow.
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to create, modify, and manage Figma designs through natural language commands via a specialized MCP server and plugin bridge. It supports a wide range of operations including element creation, property modification, component management, and accessibility checks.13104MIT
- AlicenseAqualityBmaintenanceEnables MCP clients to read design structure, take screenshots, create nodes, and edit UI directly on Figma canvas via a bridge between MCP and Figma Desktop.10375MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to read and write Figma designs through a local WebSocket relay, turning Figma selections into framework-aware code and building/editing designs directly on the canvas. Provides 112 MCP tools for bidirectional design-code workflows with support for any MCP client.MIT
- AlicenseNot gradedqualityBmaintenanceEnables MCP-compatible AI clients to read and modify the user's currently open Figma file by executing JavaScript in Figma's sandbox, all through a local bridge with status monitoring, node jumping, and automatic rollback on errors.2MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/arimunandar/figsnap-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server