Figma Write Bridge MCP
Enables AI agents to write into and edit an open Figma file via a local bridge, supporting creation and editing of frames, text, shapes, sections, vectors, auto layouts, grids, fills, effects, strokes, text styles, variables/themes, components and instances, prototyping reactions, motion timelines, shaders, and design tokens, plus node search, reparenting, resizing, bulk operations, and page management.
Click on "Deploy 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., "@Figma Write Bridge MCPcreate a login screen with email and password fields"
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.
Figma Write Bridge
Figma Write Bridge lets a local tool (like an AI assistant or a script) safely “write” into your open Figma file by connecting a Figma plugin to a local bridge server on your computer.
This repo contains:
figma-plugin/— the Figma plugin (connects your Figma file to the bridge)mcp-server.js— the local bridge server (runs on your computer)package.json— Node.js setup (starts the server)skills/figma-write-bridge/— agent skill; zip this folder and upload the zip to your AI agent (see below)
What You’ll Use It For
Let an assistant generate frames, text, shapes, styles, and structured layouts in your Figma file.
Keep control: nothing happens unless your Figma file is open and the plugin is connected.
Related MCP server: Figma MCP Server
What It Can Do
Frames, text, shapes, sections, and vectors — create and edit nodes, including sections (
create_section,set_section_propertiesto flipSECTION/VIEWPORT), vectors from SVG paths, and boolean groups.Move anything anywhere —
move_node(absolutex/yor relativedx/dyon freeform parents; inside auto layout this is rejected unless you passignoreAutoLayout: truefor an overlay),reparent_node/insert_child(move any node into/out of frames, sections, groups, auto-layouts, and slots, with anindexfor order — omitindexto append),append_to_slot(into component slots; children join the slot’s layout flow),move_node_to_page(cut or copy to another page), andclone_node_into_parent(copy into any container).Resize to fit —
resize_to_fitscales any layer to fit inside a target layer (fit: "contain"letterboxes,fit: "cover"fills/crops, both aspect-preserving and centered), or shrink-wraps a container tightly to its own children when notargetNodeIdis given.Find nodes by query —
find_nodesfilters the whole document server-side by type, name/text, fill color, style/variable binding, instance overrides, and more (all combinable), so a search like "red button instances" or "hardcoded colors with no style" returns only the matches instead of a full tree dump.Layout & structure — auto layout, padding/spacing/alignment, layout grids, one-call grid generators (
generate_grid), and layout helpers (distribute_nodes,arrange_children). Those helpers skip auto-layout children instead of pulling them out of the flow — useset_item_spacing/set_axis_align/insert_childon stacks. Primary-axis alignment includesSPACE_AROUNDandSPACE_EVENLY.create_framedefaults to no fill; nested auto-layout wrappers omit width/height so they do not ship at 320×200.Grid auto-layout —
set_grid_layoutturns a frame into a true two-dimensionalGRIDcontainer (row/column counts, gaps, and per-trackFLEX/FIXED/HUGsizing),set_grid_child_positionplaces each child by cell, span, and in-cell alignment,get_grid_layoutreads the whole arrangement back, andreorder_grid_tracksmoves entire rows or columns with their children.Fills & effects — solid/gradient/image fills (from a URL, base64, or a local file path via
localPath), and the full effect set: drop/inner shadows, normal and progressive blurs, plusNOISE,TEXTURE, andGLASS. Apply existing styles or variable-bound colors.create_framedefaults to no fill (transparent layout containers); passfillHexonly for visible surfaces.set_fill_color/set_stroke_colorsupportclear: true.Strokes —
set_stroke_colorsets color/weight plusstrokeAlign,dashPattern,strokeCap,strokeJoin, or applies a paintstyleId; preferapply_stroke_style/bind_color_variable_to_strokewhen the file has tokens.Text styling — apply existing text styles or set font/font-size/line-height/letter-spacing/case/alignment directly, with variable binding, paragraph-level
textWrapStyle(BALANCE/PRETTY),textTruncation+maxLines, and variable-fontvariationSettings(afterget_font_variation_axes). Generate a whole type scale from a base size + ratio withcreate_typography_scale.Design tokens — export local variables as a W3C-style Design Tokens JSON (
export_tokens) and import a tokens JSON into variables + paint styles (import_tokens).Style guides & palettes — extract a usage style guide (
get_style_guide: colors, fonts, sizes, spacing), list fonts used (get_font_list), and generate tonal color palettes with swatches/styles/variables (generate_palette).Components — create/import components and instances (imports accept a
nameto rename the main node), batch-convert frames into a variant component set (extract_component_set), and move/copy a local component to another open file's channel withmove_component_to_file.get_local_componentsis paged (limit/offset+total).Undo/redo — snapshot-based
undo/redofor the most recent mutating actions, shared between the agent's tools and Undo/Redo buttons in the plugin UI itself (best-effort; cannot restore deleted nodes or structural changes).Pages — create, rename, duplicate (auto-names like
Name 2or takes aname), reorder, switch, and delete pages;create_page/duplicate_pageacceptactivate: trueto switch to the new page.Bulk & template work —
bulk_rename,bulk_update,replace_all_instances, and page duplication.Variables & themes — variable types cover
COLOR,FLOAT,STRING,BOOLEAN, and the motion typesEASINGandTIMING, so animation curves and durations can be tokenized alongside color and spacing. Read variable values in every mode (list_variableswithincludeValues: truefor the catalog,get_variablefor one variable in detail with alias-resolved values per mode), create/rename/delete variable modes and collections, write values into any mode (set_variable_values(valuesByMode)), and theme-switch whole frames/pages withset_variable_mode. Catalog listings are paged to keep responses token-cheap:list_variables/get_local_components/get_stylestakelimit/offset(default 500) and returntotalso you can page through large catalogs.Prototyping — frame-to-frame links with typed transitions and easing (
set_transition_reaction,set_smart_animate_reaction), multi-action triggers (set_reactions,upsert_reaction), overlays, flows, and start points.Motion (timeline animation) — animate properties over a frame's timeline rather than between frames: manual keyframe tracks for transform, opacity, radius, size, spacing and path trim, plus indexed fill/stroke/effect color tracks (
set_keyframe_track), reusable animation styles (list_animation_styles/apply_animation_style), and timeline length (set_timeline_duration). Read it all back withget_motion. Requires Figma to have enabled Motion for your account; the tools say so plainly when it hasn't.Shaders —
list_shadersenumerates shader effects/fills available to the file.import_shader_by_idmaterializes one into the file;apply_shaderapplies it as an effect, fill, or stroke (withpropertieskeyed by name or definition id).Variable fonts —
get_font_variation_axesreads OpenType axes;create_text/set_text_style/create_text_styleacceptvariationSettings(e.g.{ wght: 550 }).Live push events — subscribe to
selectionchange/documentchangeso the agent can react to your selection or canvas without polling.Channel dashboard —
list_channelsshows which file each connected channel belongs to.REST API extras — file JSON, image downloads, bulk frame exports, file comments, and component search (with
FIGMA_TOKEN). Video export of Motion frames (MP4/GIF/WEBMviaexport_node_as_image) is plugin-side and does not need a token.
Prerequisites
Figma Desktop app (recommended for local plugin + localhost connections)
Node.js (LTS) installed on your computer
Install the Figma Plugin
Open Figma Desktop.
Go to Plugins → Development → Import plugin from manifest…
Select this file:
figma-write-bridge\figma-plugin\manifest.json
The plugin appears as “Figma Write Bridge (Local)” under Plugins → Development.
Start the Local Bridge Server
In a terminal (PowerShell is fine), run the following, replacing the path with the actual path to this repo on your computer:
cd "C:\path\to\figma-write-bridge"
npm install
npm startBy default, the server listens on:
ws://localhost:8787
Keep this terminal window open while you use the bridge.
Add to Your AI Agent (MCP config)
If your AI agent supports MCP tool servers, you can register this bridge so the agent can call Figma tools.
Make sure the Figma plugin is connected in the file you want to edit.
Add this to your agent's MCP config file. Replace
argswith the absolute path tomcp-server.json your computer (on Windows, JSON strings need\\for each backslash).FIGMA_TOKENis optional — only needed if you want the REST API tools (get_figma_data,download_figma_images); omit that line entirely if you don't have a token yet:
{
"mcpServers": {
"figma-write-bridge": {
"command": "node",
"args": [
"C:\\path\\to\\figma-write-bridge\\mcp-server.js"
],
"env": {
"FIGMA_BRIDGE_HOST": "127.0.0.1",
"FIGMA_BRIDGE_PORT": "8787",
"FIGMA_BRIDGE_CHANNEL": "default",
"FIGMA_BRIDGE_TIMEOUT_MS": "180000",
"FIGMA_TOKEN": "your_figma_personal_access_token"
}
}
}
}Notes:
If your agent starts the MCP server automatically, do not also run
npm start(only one process can use port8787).After adding the config, restart your AI agent app so it picks up the new server.
Running more than one MCP server? Each server needs its own port and channel: set
FIGMA_BRIDGE_PORTandFIGMA_BRIDGE_CHANNELper server (e.g. server A → port8787, channeldefault; server B → port8788, channeldesign). Each server should use a port in the plugin's scan range (8787–8797) so it shows up in the plugin's Discovered servers dropdown — then in Figma just pick the server for the agent you want. One plugin UI connects to exactly one channel / MCP server.MCP tools let the agent call Figma. The skill in the next section tells it how to use those tools — zip and upload it too.
Upload the Agent Skill (Required)
The MCP config is not enough on its own. Zip the skill folder and upload that zip in your AI agent (Cursor, Claude, etc.) so the agent loads Figma write-bridge rules.
Zip
skills/figma-write-bridge/— the folder that containsSKILL.md, not the repo root and not the parentskills/directory.Confirm the zip root is
SKILL.md(open the zip: you should seeSKILL.mdimmediately, notfigma-write-bridge/SKILL.md).In your AI agent, upload / import that
.zipas a skill (the agent's "Skills" or "Upload skill" UI).Restart or reload the agent if it does not pick up new skills automatically.
PowerShell (from the repo root):
Compress-Archive -Path "skills\figma-write-bridge\*" -DestinationPath "figma-write-bridge-skill.zip" -ForcemacOS / Linux:
(cd skills/figma-write-bridge && zip -r ../../figma-write-bridge-skill.zip .)The folder looks like this:
skills/figma-write-bridge/
├── SKILL.md # always-on rules (~90 lines)
├── setup.md # preconditions and channels
├── library.md # file-library catalog
├── layout.md # auto layout, hug/fill, placement, default fills
├── schema.md # closed schema + error table
├── handoff.md # screen annotations
├── tools.md # full tool catalog
├── heuristics.md # product-designer rules
└── playbooks.md # copy / screen / component / prototype / motionSKILL.md links those files one level deep; the agent should read only the file the current step needs. Re-zip and re-upload after you pull skill updates.
Target Frames (Safety)
set_target_frame / get_target_frames / clear_target_frames let the agent record which frame(s) you intend it to work in. Target-frame scoping is enforced by the plugin: when target frame(s) are set, write/delete actions targeting nodes outside those frame(s) are rejected with an error (create actions use the target frame as their host when one is set). A small, explicit set of delete/reset/clear actions is allowed by default (deleting a node, a page, a variable, a variable mode, or a component property/slot, and clearing prototype reactions) so the agent can actually make the changes you ask for — everything else matching "delete/remove/reset/clear" is blocked.
The server syncs targetFrameIds into the plugin automatically whenever they change (set_target_frame / clear_target_frames) and whenever a plugin connects, so enforcement stays in sync even if the plugin UI reloads.
Recommended workflow:
In Figma, select the frame you want the AI to work on.
From your AI agent, call
get_selectionand take the selected frameid.Call
set_target_framewith thatframeId.Use create/edit tools to add content within that frame.
Tip: If you call create_frame (or figma_create_frame) with no target set, the created frame becomes the target automatically.
Figma REST API Tools (No Plugin Required)
If you provide FIGMA_TOKEN, the server also exposes tools that call the Figma REST API directly:
get_figma_data(fetch file JSON, and optionally node JSON)download_figma_images(download images/exports to a local folder)list_comments/post_comment/delete_comment(file comments)export_frames_to_disk(bulk-export a set of frames or a whole page to a local folder)search_components(find components/component-sets across your account or a team)
Examples:
get_figma_data({ fileKey, nodeId? })download_figma_images({ fileKey, nodes, localPath, pngScale? })export_frames_to_disk({ fileKey, pageId, localPath, format: "png", scale: 2 })post_comment({ fileKey, message, nodeId })search_components({ teamId?, fileKey?, pageSize? })
Connect from Figma (Setup in Your File)
Use the Figma Desktop app. The plugin connects to the bridge over
ws://localhost, which only works in the Figma Desktop app — the browser version cannot reach a local WebSocket server.
Open the Figma file you want to work in.
Run the plugin:
Plugins → Development → Figma Write Bridge (Local)
The plugin auto-connects using the defaults shown (Server
localhost:8787— host and port in one field;ws://is added automatically, Channeldefault) — if the server is already running, the status flips to Connected with nothing else to click.Discovered servers — on load (and via the Scan button) the plugin scans localhost ports
8787–8797for running figma-write-bridge servers. Every running agent's MCP server appears in the dropdown, labelledchannel · host:port — fileName. Picking one auto-fills Server + Channel and connects immediately, so with several agents you just choose which one should control this file.Channel defaults to
default. If you started the MCP server with a non-defaultFIGMA_BRIDGE_CHANNEL(see Channels below), type that same channel here so the plugin joins the right server. Only touch the fields if you changedFIGMA_BRIDGE_PORTor use a custom channel, then click Connect.
As long as the plugin stays open and connected, the bridge can send commands into this Figma file. If you close and reopen the plugin, it reconnects automatically the same way.
Channels (One Plugin = One Channel / MCP Server)
A “channel” is just a name that targets the right Figma file through the right MCP server.
By default the channel is
default, and that is the only channel a single server needs.To run multiple MCP servers (e.g. one per Figma file/team), give each server its own port and channel:
Server A →
FIGMA_BRIDGE_PORT=8787,FIGMA_BRIDGE_CHANNEL=defaultServer B →
FIGMA_BRIDGE_PORT=8788,FIGMA_BRIDGE_CHANNEL=design(or any custom name)
Then in each open Figma file, run the plugin and enter the matching server host:port and channel in the UI. Each plugin UI connects to exactly one channel / MCP server.
Your external tool can see and select channels per server:
figma_bridge_statuslists every connected channel with itsfileKey/fileNameon that server's WebSocket.join_channelswitches which connected channel subsequent commands target.list_channelsshows the dashboard of connected channels.
Useful Notes / Safety
The bridge is meant to run locally. By default it binds to
127.0.0.1(only your computer can access it).Treat this like “edit access”: only run the bridge when you trust the tool/script driving it.
Keep a backup: duplicate your Figma file before running large generations/changes.
The plugin must remain open; if you close the plugin UI, the connection is lost.
Deleting top-level content requires confirmation:
delete_node/delete_multiple_nodesrefuse to remove a page, a top-level frame, or a top-level section unless you passconfirmFrameOrPageDeletion: true— an explicit safety guard against wiping a whole page/frame in one call.
Troubleshooting
Plugin says “Reconnecting…”
Make sure
npm startis running and no firewall is blocking port8787.Confirm the WS URL matches the server (
ws://localhost:8787). Bothlocalhost:8787andws://localhost:8787are accepted — the plugin adds thews://prefix if it’s missing.Run the plugin in the Figma Desktop app (not a browser tab) — the browser version cannot connect to a local WebSocket server.
If you changed the plugin code, re-import the plugin from the manifest (Plugins → Development → Import plugin from manifest…) — Figma caches the previously imported copy and does not pick up file changes automatically.
Server/tool says “Figma plugin not connected”
Open the Figma file and run the plugin, then click Connect.
If you have multiple files, ensure you’re using the correct Channel.
“No servers found on ports 8787–8797”
The dropdown only lists servers running inside the scan range. Make sure
npm start(or your agent) is actually running, and that each server uses aFIGMA_BRIDGE_PORTin8787–8797. Otherwise type thehost:portmanually in Server.Check a server directly with
curl http://127.0.0.1:8787/health.
Port already in use
Start the server on a different port by setting
FIGMA_BRIDGE_PORT, then use the same port in the plugin UI WS URL.
Advanced (Optional): Server Settings
Environment variables supported by the server:
FIGMA_BRIDGE_HOST(default127.0.0.1)FIGMA_BRIDGE_PORT(default8787)FIGMA_BRIDGE_CHANNEL(defaultdefault; pin this to run multiple MCP servers, each on its own port)FIGMA_BRIDGE_TIMEOUT_MS(default180000)FIGMA_BRIDGE_MAX_RESULT_BYTES(default50000) — cap on a single tool result before it is truncated, to stop one big read from filling the agent's context. Raise it if you genuinely need a large single read. Catalog tools (list_variables,list_variable_collections,export_tokens,get_styles,get_local_components) are exempt from the cap so the agent always receives the full catalog for that call — they are instead paged (limit/offset, default 500, plustotal) so a single tool call stays token-cheap while every entry stays reachable. Truncation is JSON-safe: for JSON results it trims the largest arrays and sets atruncated: trueflag instead of corrupting the payload.FIGMA_TOKEN(required for the REST API tools:get_figma_data,download_figma_images, comments,export_frames_to_disk,search_components)
Example (PowerShell):
$env:FIGMA_BRIDGE_PORT="8790"
$env:FIGMA_BRIDGE_CHANNEL="default"
npm startThen connect in Figma to ws://localhost:8790 with Channel default.
Port already in use? The server stops immediately with a clear message instead of silently failing. If you hit it, another
figma-write-bridgeinstance is already bound to that port — stop it, useFIGMA_BRIDGE_PORTfor a different one, and point the plugin UI at that new port (and matching channel).
Health check / discovery — every server answers
GET http://127.0.0.1:<port>/healthon its WebSocket port with{ "name": "figma-write-bridge", "wsUrl", "host", "port", "channel", "connectedChannels" }. The Figma plugin uses this to populate the Discovered servers dropdown (scan range8787–8797, tunable via thescanPortStart/scanPortCountconstants at the top offigma-plugin/code.js). You can also check a server yourself, e.g.curl http://127.0.0.1:8787/health.
Available Tools
188 toolsadd_component_propertyC
Add a BOOLEAN, TEXT, INSTANCE_SWAP, or VARIANT property to a component or component set.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | Yes | ||
| nodeId | No | ||
| componentId | No | ||
| defaultValue | No | ||
| componentSetId | No | ||
| preferredValues | No | ||
| preferComponentSet | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden for a mutation tool, yet it says nothing about permissions, whether the property is immediately effective, what happens when a name collides with an existing property, or the consequences of defaultValue/preferredValues. It discloses only the accepted value types, which is surface-level information.
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 front-loaded sentence with no filler; the verb and the enumerated property types come first. It is appropriately sized for a sentence, though the brevity here reflects under-specification rather than disciplined concision.
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 an 8-parameter mutation tool with no annotations, no output schema, and 0% schema coverage, the description is far too thin. An agent cannot determine how to select the target (nodeId vs componentId vs componentSetId), what preferredValues or preferComponentSet do, or what a successful call returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 8 parameters, so the description must compensate and largely does not. It names the four `type` values but leaves name, nodeId, componentId, componentSetId, defaultValue, preferredValues, and preferComponentSet completely unexplained, including the critical question of which identifier targets a component versus a component set.
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 (Add) and resource (a component property) and enumerates the four supported property types, which an agent can map directly to the `type` enum. It is clearly distinguishable from sibling mutators like edit_component_property and delete_component_property by the 'Add' action, though it never names those alternatives.
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 'to a component or component set' hints at the target, but there is no guidance on when to use this versus edit_component_property, bind_component_property, or set_variant_properties, and no prerequisites or ordering constraints are given. An agent gets no help choosing among the several property-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
append_to_slotB
Reparent existing nodes into a SLOT. Children join the slot's layout flow (AUTO + FILL when the slot is auto layout) at 0,0 when it is freeform. Do not move_node afterwards. Optionally pass index and layoutSizing.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | ||
| nodeIds | Yes | ||
| slotNodeId | Yes | ||
| ignoreAutoLayout | No | ||
| layoutSizingVertical | No | FIXED | HUG | FILL | |
| layoutSizingHorizontal | No | FIXED | HUG | FILL — default FILL when the slot itself is auto layout. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It usefully discloses layout behavior (children join the slot's flow, AUTO+FILL under auto layout, 0,0 when freeform) and warns against a follow-up move_node, but omits whether the operation is reversible, what happens on conflicts, or permission requirements.
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 front-loaded sentences with no filler; the core action and the caution against move_node are stated first. Phrasing such as "at 0,0 when it is freeform" is slightly terse but acceptable.
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 annotations, no output schema, and low param coverage, the description covers the key layout outcome but leaves gaps around reversibility, conflict handling, and the undocumented parameters. It is minimally adequate 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 33% across 6 parameters. The description names index and layoutSizing as optional but adds no meaning beyond that, and never addresses ignoreAutoLayout, nodeIds, or slotNodeId. It does not compensate for the coverage gap.
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 (Reparent) and resource (existing nodes into a SLOT), making the operation clear and distinguishable from generic node operations. It does not explicitly differentiate itself from close siblings like reparent_node, insert_child, or move_node, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an implicit usage constraint ("Do not move_node afterwards"), which hints at workflow sequencing, but never states when to use this over reparent_node, insert_child, or move_node. Usage is implied rather than explicitly scoped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_animation_styleA
Apply a reusable animation style to a node. Identify it by styleId from list_animation_styles, or by styleName for a substring match. duration and timelineOffset are seconds and are top-level, not props. Returns the applied instance id needed by remove_animation_style. Verify the result against animationStyles in the response — applying a style does not materialize tracks into animations.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| props | No | ||
| nodeId | Yes | ||
| styleId | No | ||
| duration | No | ||
| styleName | No | ||
| extendTimeline | No | ||
| timelineOffset | No | ||
| allowTopLevelFrame | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and largely succeeds: it discloses that duration/timelineOffset are top-level rather than nested in props, that it returns an instance id, and the non-obvious fact that applying a style does not materialize tracks into animations. It omits auth/permission and error/rate behavior, but the semantic gotchas are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded and each sentence adds information about identification, units, return value, or verification. It is dense but avoids filler, though it reads as a run-on sequence rather than cleanly separated concerns.
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 9-param mutation tool with no annotations and no output schema, the description supplies the critical path: how to identify the style, unit semantics, the return value, its downstream consumer, and how to verify the result. The gap is the undocumented secondary params (extendTimeline, allowTopLevelFrame, props).
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 0% across 9 params, so the description must compensate. It clarifies styleId, styleName (substring match), duration, and timelineOffset (seconds, top-level not props), but leaves name, props, nodeId, extendTimeline, and allowTopLevelFrame undocumented, 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 first sentence states a specific verb and resource ('Apply a reusable animation style to a node'), and the mention of remove_animation_style plus the returned instance id distinguishes it from adjacent animation tools. An agent can identify the action without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names list_animation_styles as the source for styleId and remove_animation_style as the consumer of the returned instance id, giving clear routing context. It stops short of an explicit when-to-use/when-not statement, but the identification instructions make usage unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_effect_styleC
Apply an effect style to a node's effects.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| styleId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and delivers almost none of it. It doesn't disclose whether existing effects are replaced or merged, whether the node must be a compatible type, or whether the styleId must resolve to a local effect style.
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 short, front-loaded sentence with no wasted clauses. But it is terse to the point of under-specification, and the 'effect style to a node's effects' construction is redundant rather than economical.
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 annotations, no output schema, and 0% schema description coverage, the description is the only source of context and it leaves the mutation semantics, prerequisite (does the style need to exist?), and parameter meaning unexplained. For a two-required-parameter mutation tool this is a clear 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?
Schema description coverage is 0% for both required parameters. The description's words 'node' and 'effect style' give only the roughest hint that nodeId and styleId take a node identifier and a style identifier; no format, ID type, or lookup source is specified.
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 ('Apply an effect style'), so the agent knows it performs a style application. However, 'to a node's effects' is circular phrasing and the description does nothing to distinguish it from the many sibling appliers (apply_fill_style, apply_stroke_style, apply_text_style, apply_grid_style), though the 'effect' noun does implicitly scope it.
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 at all. It does not say whether the style must already exist locally (vs. one created by create_effect_style or import_style_by_key), nor whether to prefer set_effects for raw effect data instead of a style reference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_fill_styleC
Apply a paint style to a node's fills.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| styleId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does very little: it does not say whether existing fills are replaced or appended, whether the style must be local/imported, what permissions are needed, or whether the change is undoable. 'Apply' implies mutation but nothing is disclosed about its effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero filler. It is efficient, though its brevity is partly under-specification rather than disciplined 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 mutation tool with no annotations, no output schema, and 0% parameter documentation, the description is far too thin. An agent lacks the information needed to invoke it correctly or to anticipate side effects.
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 0% and both parameters (nodeId, styleId) are undocumented in the schema. The description loosely maps them to 'node' and 'paint style', but adds no format, ID scheme, or constraint details, so it does not compensate for the coverage gap.
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 (apply), resource (paint style), and target (a node's fills), which is enough to distinguish it from apply_stroke_style, apply_text_style, and apply_effect_style. It does not, however, explicitly name any sibling or note the difference from the generic set_fill_color.
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?
There is no guidance on when to apply a style versus setting a fill directly (set_fill_color / figma_set_solid_fill), nor any prerequisite such as the style needing to exist locally or be imported first. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_grid_styleC
Apply a grid style to a frame's layout grids.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| styleId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It implies a mutation but does not disclose whether applying a style replaces existing grids, whether it is reversible, what permissions or preconditions are required, or what happens on failure. Only the barest mutation signal is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with no wasted words. It is appropriately compact for the action, though its brevity reflects under-specification rather than disciplined economy.
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 no annotations, no output schema, and 0% parameter documentation, the description is far too thin. An agent cannot confidently call it without knowing what the IDs must reference or how existing grids are affected.
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 0% for both required parameters (nodeId, styleId). The description implies a frame (nodeId) and a style (styleId) but adds no format, ID-source, or constraint detail, so it barely compensates for the undocumented 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 (apply) and resource (grid style) plus the target ('a frame's layout grids'), which is clearer than the bare name. It does not, however, distinguish itself from sibling operations like set_layout_grids or create_grid_style, so an agent must still infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives such as set_layout_grids (which also touches layout grids) or the parallel apply_fill_style/apply_stroke_style family. No prerequisites, e.g. that the style must already exist, are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_shaderA
Import (if needed) and apply a shader to a node. Effect shaders go on effects; fill shaders go on fills or strokes. properties may be keyed by property-definition id or by the author-defined name from propertyDefinitions. Prefer this over set_effects when applying a SHADER. Pass replace:false to append an effect shader alongside existing effects.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Shader name from list_shaders, if you do not have the id. | |
| nodeId | Yes | ||
| target | No | Where to apply. Defaults to effects for type=effect shaders and fills for type=fill shaders. | |
| replace | No | For effect shaders: true (default) replaces all effects; false appends. | |
| visible | No | For effect shaders. Default true. | |
| shaderId | No | Shader id from list_shaders. | |
| paintIndex | No | For fills/strokes, which paint slot to write. Default 0. | |
| properties | No | Property values keyed by definition id or property name. Hex strings are accepted for COLOR properties. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the key behaviors: an import side effect ('Import (if needed)'), the destructive default (replace:true replaces all effects), and the append override. It does not cover failure behavior or permissions, but the destructive default and side effect are the critical disclosures for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with purpose and followed by routing, alternative, and the append case. Mostly earns its place, though the 'properties may be keyed by...' sentence overlaps with the schema's own description of that parameter.
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 an 8-parameter, nested-object, no-output-schema mutation tool, the description covers the non-obvious essentials: import side effect, target routing, replace default, and append behavior. The remaining per-parameter details (visible, paintIndex) are already documented 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?
Schema coverage is already 88%, so the baseline is 3; the description adds real meaning beyond the schema by explaining target routing (effect vs fill shaders) and the replace:false append semantics. The properties-keying sentence largely restates the schema description, so it is not fully additive.
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 ('Import (if needed) and apply a shader to a node') and immediately differentiates from the sibling by name ('Prefer this over set_effects when applying a SHADER'). An agent can tell it apart from set_effects and the fill/style tools without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing rules ('Effect shaders go on effects; fill shaders go on fills or strokes'), names the alternative and the condition that selects it ('Prefer this over set_effects when applying a SHADER'), and states the append case ('Pass replace:false to append'). Little is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_stroke_styleA
Apply a paint style to a node's strokes (design-system preferred). For raw color/weight/align/dash without a style, use set_stroke_color instead.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| styleId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It implies mutation but does not disclose whether existing stroke properties are overwritten, what permissions or preconditions are required, or how the operation affects the node beyond applying a style.
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 zero waste. The primary purpose is front-loaded and the routing instruction follows immediately.
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?
Adequate for a simple two-parameter tool with no output schema, but missing key behavioral context such as overwrite semantics and prerequisites. With no annotations available, the description should do more to make invocation safe and predictable.
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 0% for both parameters. The description links styleId to 'paint style' and nodeId to 'a node's strokes' only indirectly, but does not clarify formats, constraints, or whether the style must already exist.
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 (Apply), resource (a paint style to a node's strokes), and explicitly distinguishes itself from the sibling set_stroke_color by naming the alternative and the condition that selects it.
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 to use set_stroke_color instead when applying raw color/weight/align/dash without a style, and notes design-system preference. The when-to-use and alternative path are fully stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_text_styleC
Apply a text style to a TEXT node.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| styleId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it discloses almost nothing beyond the mutation implication. It does not say whether applying a style overwrites existing text properties, requires the style to already exist locally, or requires specific permissions, leaving meaningful behavioral gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence that is front-loaded and waste-free. It is appropriate in size, though its brevity comes at the cost of detail rather than being overcooked.
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 annotations, no output schema, and 0% parameter documentation, the description is far too thin. An agent lacks the prerequisites, side-effect information, and parameter constraints needed to invoke it confidently.
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 0%, and the description does not explain what nodeId or styleId must reference, whether styleId accepts remote/imported style keys, or what happens with a mismatched style type. With two required undocumented parameters, the description fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'apply' and resource 'text style' on a TEXT node, which is clearer than a bare name restatement. However, the sibling list contains near-identical tools like set_text_style and apply_fill_style/apply_stroke_style, and the description offers no differentiation between apply_text_style and set_text_style.
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 indication of when to use this tool versus set_text_style, apply_fill_style, or apply_stroke_style. The only constraint ('to a TEXT node') is an eligibility condition rather than usage guidance, so an agent must infer routing from names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
arrange_childrenC
Distribute the direct children of a frame/node along the main axis (horizontal or vertical). Accepts the same mode/gap/crossAlign options as distribute_nodes. Bounds default to the parent.
| Name | Required | Description | Default |
|---|---|---|---|
| gap | No | ||
| axis | No | ||
| mode | No | ||
| crossAlign | No | ||
| parentNodeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses that bounds default to the parent, but says nothing about permissions, reversibility, how non-auto-layout children are handled, or failure modes for a mutation-style layout operation.
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 compact sentences with the core action front-loaded and no filler. The dependency on distribute_nodes' option set is stated efficiently rather than re-enumerated.
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 5-parameter mutation tool with no annotations, no output schema, and zero schema coverage, the description covers the basics but omits allowed values, error/edge behavior, and how it differs operationally from distribute_nodes. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It names and explains the roles of axis ('horizontal or vertical'), mode, gap, and crossAlign, and implies parentNodeId via 'the parent', but gives no allowed values or formats for mode/crossAlign, leaving key semantics to guesswork.
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 ('distribute') and resource ('direct children of a frame/node') and names the axis of operation, so the core action is unmistakable. It references the sibling distribute_nodes but does not clearly delimit the boundary between them, leaving the agent to infer which to pick.
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?
There is no explicit when-to-use or when-not-to-use guidance. The reference to distribute_nodes implies a shared option surface but never says which tool applies to a selection versus a parent's children, and the only usage hint is 'Bounds default to the parent.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bind_color_variable_to_fillC
Bind a COLOR variable to a node's fill paint.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| paintIndex | No | ||
| variableId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure, and it discloses almost nothing: not whether the fill is replaced or added, not what happens when a node has multiple paints, not error/permission behavior, not reversibility. One short sentence cannot cover a mutation tool with zero annotation support.
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 front-loaded sentence with no filler or repetition; the verb and target come first. It is efficient, though its brevity borders on under-specification rather than tight concision.
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 annotations, no output schema, three undocumented parameters, and near-identical siblings (bind_color_variable_to_stroke, bind_variable_to_property), the definition omits paintIndex semantics, sibling differentiation, and failure behavior. It is not complete enough to guarantee a 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 description coverage is 0% for all three parameters, so the description must compensate. It hints at nodeId and variableId implicitly ('node's fill paint', 'COLOR variable') but says nothing about paintIndex, which is the most ambiguous parameter (which paint in the stack gets bound when 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?
The description names a specific verb (bind), a specific resource type (COLOR variable), and a precise target (a node's fill paint), so the action is unambiguous. It implicitly separates itself from the fill/stroke-style siblings by saying 'fill paint', though it never names bind_color_variable_to_stroke or bind_variable_to_property explicitly.
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?
There is no guidance on when to use this instead of bind_color_variable_to_stroke, bind_variable_to_property, or figma_set_solid_fill. No prerequisites (e.g. variable must be a COLOR variable, node must exist, which paints are eligible) are stated, leaving the agent to infer selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bind_color_variable_to_strokeC
Bind a COLOR variable to a node's stroke paint.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| paintIndex | No | ||
| variableId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it delivers almost nothing: no indication of whether the node must already have a stroke paint, whether binding replaces an existing binding, what happens to paintIndex if omitted, or what errors occur. Only the mutation intent is implied by 'bind'.
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 front-loaded sentence with no filler or repetition. It is efficient, though its brevity is more under-specification than true 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 mutation tool with no annotations, no output schema, and zero schema documentation, the description does far too little. An agent cannot tell how to target the correct paint or what state the node must be in before binding.
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 0% across three parameters. The description hints at nodeId and variableId via 'a node's stroke paint' and 'COLOR variable', but paintIndex — the index that selects which stroke paint to bind — is entirely unexplained in both schema and 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?
States a specific verb (bind) and precise resource (a COLOR variable to a node's stroke paint), which implicitly separates it from the sibling bind_color_variable_to_fill. The COLOR-variable restriction is a useful scoping detail. It never names the alternatives or clarifies when stroke binding applies, so differentiation is left to inference.
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, no prerequisites, and no mention of the obvious neighbors (bind_color_variable_to_fill, bind_variable_to_property). An agent must infer the correct choice purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bind_component_propertyC
Bind a BOOLEAN/TEXT/INSTANCE_SWAP property to a node field using componentPropertyReferences.
| Name | Required | Description | Default |
|---|---|---|---|
| field | Yes | ||
| nodeId | Yes | ||
| unbind | No | ||
| propertyName | No | ||
| propertyOwnerId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It implies a mutation of node/component state but says nothing about required permissions, whether the binding is reversible, what the 'unbind' path does, or what happens to existing references. Only the operation type is disclosed.
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 front-loaded sentence with zero filler. Nothing in it is wasted, and the core action leads.
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 5-parameter mutation tool with no annotations, no output schema, and no per-parameter documentation, the description is too thin. It should at least explain the required vs optional params and the bind/unbind semantics.
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 0% across 5 parameters, so the description must compensate and largely does not. It gestures at the property types and the node-field concept, but leaves nodeId, propertyOwnerId, propertyName, and unbind unexplained 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?
States a specific verb (bind) plus the resource (component property) and target (node field), and names the property kinds BOOLEAN/TEXT/INSTANCE_SWAP. This differentiates it from sibling bind_variable_to_property, but the trailing 'using componentPropertyReferences' is implementation jargon rather than agent-facing meaning.
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?
There is no when-to-use guidance, no preconditions (e.g. the component property must already exist via add_component_property), and no named alternatives such as bind_variable_to_property or set_instance_properties. The agent must infer the context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bind_variable_to_propertyB
Bind a FLOAT/STRING/BOOLEAN/EASING/TIMING variable to a node property via setBoundVariable(property, variable). Use property "opacity" to token-bind layer opacity (pair a FLOAT variable with a color rather than detaching the fill). Also used for padding, radius, spacing, and fontSize.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| property | Yes | ||
| variableId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the accepted variable types and the underlying setBoundVariable call, plus a hint about preserving a fill via a FLOAT-variable token bind. It does not mention permission requirements, failure/type-mismatch behavior, or what state changes on the node, so disclosure is partial for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and the API signature; every clause adds usable content. The parenthetical about opacity/color is slightly dense but still earns its place as an example.
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 annotations, no output schema, and 0% parameter coverage, the description is adequate but incomplete — it omits error/precondition behavior and nodeId/variableId semantics. It covers enough to attempt a call but not enough to call it safely in edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% with 3 parameters, so the description should compensate. It maps well to the 'property' parameter via examples (opacity, padding, radius, spacing, fontSize) and references a 'variable', but says nothing about nodeId format or variableId expectations, leaving two of three parameters undocumented.
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 ('Bind a ... variable to a node property') and names the underlying API call setBoundVariable(property, variable), so the action is unambiguous. It enumerates the accepted variable types (FLOAT/STRING/BOOLEAN/EASING/TIMING), which helps distinguish it from the color-binding siblings. It stops short of explicitly differentiating itself from bind_color_variable_to_fill/stroke by 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?
Gives concrete usage context ('Use property "opacity" to token-bind layer opacity' and 'Also used for padding, radius, spacing, and fontSize'), which implies when to reach for it. However, it never states when NOT to use it or points to bind_color_variable_to_fill/stroke as alternatives, leaving the agent to infer the routing between sibling bind tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
boolean_groupC
Combine 2+ vector nodes into a boolean group (UNION, SUBTRACT, INTERSECT, EXCLUDE).
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | ||
| name | No | ||
| nodeIds | Yes | ||
| parentNodeId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose that boolean operations are destructive to the source nodes, what happens to the originals, whether permission or selection is required, or whether the operation is reversible. For a document-mutating boolean op this is a real 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?
A single front-loaded sentence with no filler; the core action and its operation vocabulary are presented first with nothing 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 4-parameter mutation tool with no annotations, no output schema, and 0% schema coverage, the description is thin. It omits the role of name and parentNodeId, the destructive nature of the operation, and any return behavior, so an agent cannot call it confidently.
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 0%, so the description must compensate. It usefully explains the nodeIds requirement (2+ nodes) and names the valid op values (UNION, SUBTRACT, INTERSECT, EXCLUDE), which the schema does not enumerate. However name and parentNodeId receive no explanation at all, leaving half the parameters undocumented.
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 (combine) and resource (vector nodes into a boolean group) and enumerates the boolean operations, which is far more than a tautology. It does not explicitly contrast itself with the sibling group_nodes, which is the most likely confusion point, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus group_nodes, ungroup_node, or create_vector, nor any prerequisite or exclusion guidance. Usage must be inferred entirely from the name and the operation list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bring_to_frontA
Bring a layer to the front of its parent (z-order). In Figma, children[last] is front-most.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The layer to bring to the front. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the z-order model ('children[last] is front-most'), but says nothing about required permissions, what happens if the node is already front-most, or whether the operation 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 tight sentences with no waste, and the purpose is front-loaded ahead of the clarifying 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?
For a simple single-parameter mutation tool with no output schema, the description covers purpose and the key z-order semantic adequately. The main gap is the absence of any safety or edge-case behavior, which annotations would normally supply.
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 fully documented in the schema (100% coverage), so the baseline is 3. The description adds no meaning about nodeId beyond what the schema already 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?
States a specific verb and resource ('Bring a layer to the front of its parent') and clarifies the z-order semantics with 'children[last] is front-most.' It is clearly distinguishable from the inverse sibling send_to_back by intent, though it does not name that sibling explicitly.
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?
Usage is implied by the self-explanatory operation, but there is no explicit guidance on when to use this versus send_to_back or arrange_children, and no prerequisites (e.g., node must have a parent) are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_renameB
Find-and-replace text in node names across a subtree (defaults to current page). Supports regex and dryRun. Returns a before/after diff.
| Name | Required | Description | Default |
|---|---|---|---|
| find | Yes | ||
| dryRun | No | ||
| replace | No | ||
| useRegex | No | ||
| rootNodeId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It usefully discloses the regex capability, a dryRun preview mode, the default scope (current page), and the before/after diff return. However, it never states that matching is destructive/irreversible once dryRun is off, nor what permissions or undo path exist.
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 tight sentences, zero filler, with the core action front-loaded ahead of modifiers and the return-value note last. Every clause carries 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 5-parameter mutation tool with no annotations and no output schema, the description covers the essential mechanics (what changes, scope, preview, return). It still omits irreversibility, required auth, and how rootNodeId is specified, leaving real gaps for a bulk mutation.
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 0%, so the description must compensate. It explains useRegex and dryRun by name, implies find/replace, and implies rootNodeId via 'subtree (defaults to current page)' – covering four of five params conceptually, though without naming rootNodeId or giving format/syntax details.
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+resource ('Find-and-replace text in node names') and narrows scope ('across a subtree, defaults to current page'). This implicitly separates it from sibling find_and_replace_text (text content) and rename_node (single node), but never names those alternatives explicitly.
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 no when-to-use or when-not-to-use guidance and does not point to the obvious alternative (rename_node for a single node, find_and_replace_text for text content). The subtree-default note hints at selection context but is not framed as a usage condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_updateB
Apply one property across many nodes. Supported properties: fillColor, cornerRadius, opacity, visible, name, fillStyle, textStyle, cornerRadii. Target by nodeIds, by nodeTypes under rootNodeId, or the whole current page.
| Name | Required | Description | Default |
|---|---|---|---|
| value | No | ||
| nodeIds | No | ||
| property | Yes | ||
| nodeTypes | No | ||
| rootNodeId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden for what is a bulk mutation. It discloses nothing about reversibility, undo support, permissions, partial-failure behavior when some nodeIds are invalid, or whether the result reports affected nodes, leaving an agent unable to predict side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: purpose first, then the supported-property list, then the targeting modes. Every clause earns its place and nothing is padded.
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 5-parameter bulk mutation with no annotations and no output schema, the description covers targeting and valid properties but omits value semantics, return behavior, and failure/undo characteristics. It is adequate but leaves meaningful gaps for a mutation of this scope.
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 0%, so the description must compensate, and it does explain the valid property values plus the nodeIds/nodeTypes/rootNodeId targeting combination. The critical 'value' parameter, whose expected type varies with the chosen property, is left entirely unexplained in both the schema and the 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 and scope ('Apply one property across many nodes') and enumerates the supported properties, so an agent knows exactly what operation this performs. It does not explicitly distinguish itself from close siblings such as bulk_rename or the single-property setters (set_corner_radius, set_fill_color), so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It describes three targeting modes (nodeIds, nodeTypes under rootNodeId, or the whole current page), which is useful selection guidance. However, it never states when to prefer this tool over the per-node/per-property siblings, nor any prerequisites or exclusions, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_reactionsC
Remove all prototype reactions from a node.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses what is destroyed ('all prototype reactions') but says nothing about irreversibility, undo/checkpoint behavior, permissions, or whether the removal cascades across child nodes.
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 front-loaded sentence with no filler. The action and scope are stated immediately, though it is minimal rather than optimally informative.
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 destructive operation with no annotations and no output schema, the definition is minimally viable: purpose is clear, but reversibility and the parameter's expected input are left unaddressed.
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 0% and the single nodeId parameter has no type/format documentation. The description never references nodeId or explains whether it expects a node ID, key, or selection, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Remove) plus resource (prototype reactions) plus scope (from a node), and the quantifier 'all' cleanly separates it from the sibling set_reactions/upsert_reaction. It does not explicitly name those siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when/when-not guidance and no alternative named. The agent must infer from the name alone that this is the bulk-clear counterpart to get_reactions/set_reactions rather than a filtering or additive operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_target_framesB
Clears the active target frameIds.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it only states the verb and object. It does not say whether this removes all targets or just the active one, whether the operation is reversible, or what side effects occur on subsequent frame operations.
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 front-loaded sentence with no filler, which is appropriately sized for a simple clear operation, though its extreme terseness borders on under-specification.
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 0-param, no-output-schema tool this is minimally viable, but with no annotations it leaves unanswered what state results after clearing (e.g., does it fall back to a default frame or to none) and when this should be called relative to set_target_frame.
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 takes zero parameters and describes the cleared state, which is the complete input surface. Baseline for a 0-parameter tool is 4, and nothing here undermines that.
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 pairs a clear verb ('Clears') with a specific resource ('target frameIds'), so the agent knows it manipulates the target-frame selection. It does not, however, distinguish itself from the related siblings set_target_frame and get_target_frames beyond the verb.
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?
There is no when-to-use guidance and no mention of the obvious alternatives (set_target_frame to add, get_target_frames to inspect). The agent must infer the workflow from the sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clone_nodeC
Create a copy of an existing node with optional position offset and name.
| Name | Required | Description | Default |
|---|---|---|---|
| dx | No | ||
| dy | No | ||
| name | No | Name for the copy. Defaults to the source name. | |
| nodeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It says a copy is created but does not disclose permissions needed, whether the copy is independent or linked, how children/components are handled, or any side effects of cloning.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It states the core action and the optional parameters efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and only 25% schema description coverage, the description is too thin. It omits return behavior, required permissions, and sufficient parameter detail for an agent to invoke the tool confidently.
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 25%, so the description must compensate. It mentions an optional position offset and name, which loosely covers dx/dy and name, but it does not explain dx/dy units or coordinate space, and the required nodeId parameter is completely undocumented in both schema and 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 gives a specific verb and resource: 'Create a copy of an existing node.' It does not distinguish this tool from the sibling clone_node_into_parent or explain boundary cases, but the core operation is unambiguous.
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?
There is no guidance on when to use this tool versus alternatives such as clone_node_into_parent or create_instance_from_instance. The mention of optional offset and name implies basic cloning, but no conditions or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clone_node_into_parentA
Clone a node and append it into a specified parent container (frame, section, group, auto-layout, slot, or page). In auto-layout parents the copy joins the flow unless dx/dy are non-zero (then it is set to absolute positioning).
| Name | Required | Description | Default |
|---|---|---|---|
| dx | No | ||
| dy | No | ||
| name | No | Name for the copy. Defaults to the source name. | |
| index | No | Insert the copy at this child index instead of appending at the end. | |
| nodeId | Yes | ||
| parentNodeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose a genuinely non-obvious behavioral trait: in auto-layout parents the copy joins the flow unless dx/dy are non-zero, in which case it becomes absolutely positioned. That is real beyond-schema context. It still omits whether the source node is left untouched and what the call returns, so it stops short of full disclosure.
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, zero filler, with the primary purpose front-loaded and the conditional auto-layout nuance following immediately. 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?
For a 6-param mutation tool with no annotations and no output schema, the description covers purpose, accepted container types, and the tricky auto-layout positioning case well. The main gap is the return value (e.g. the new node's id) that an agent would need to chain follow-up calls, plus interaction between index and dx/dy.
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 low (33%), so the description needs to compensate, and it does for dx/dy by explaining their flow-vs-absolute effect, which the bare 'number' schema does not convey. The two required params (nodeId, parentNodeId) and name/index are left to the schema, which is acceptable since name and index are already documented there.
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 (clone), resource (node) and destination (parent container), then enumerates the container types it accepts (frame, section, group, auto-layout, slot, page). This clearly separates it from clone_node (no parenting) and reparent_node/move_node (no duplication) without the agent needing to open another 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?
The description implies when to reach for it (duplicating a node directly into a container) and hints at dx/dy behavior, but never explicitly says when to prefer clone_node + reparent_node or insert_child instead. Usage is inferable but not stated, which is the textbook 'implied usage' level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
combine_as_variantsC
Combine existing component nodes into a component set and lay them out to avoid overlap.
| Name | Required | Description | Default |
|---|---|---|---|
| gap | No | ||
| gapX | No | ||
| gapY | No | ||
| name | No | ||
| index | No | ||
| columns | No | ||
| componentIds | Yes | ||
| parentNodeId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses one useful trait ('lay them out to avoid overlap'), but for a structural mutation it omits whether source nodes are modified/destroyed, permission requirements, and failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence with the action front-loaded and zero filler. It is appropriately sized, though it could carry more information given 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 an 8-parameter mutation tool with no annotations and no output schema, the description is too thin. It neither explains the layout/placement parameters nor the return value, leaving an agent unable to invoke it confidently.
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 8 parameters at 0% schema coverage, the description must compensate but largely does not. Only 'existing component nodes' loosely maps to the required componentIds; gap, gapX, gapY, name, index, columns, and parentNodeId are entirely undocumented in both schema and 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 gives a specific verb ('Combine') and resource ('existing component nodes into a component set'), which is clearly distinguishable from the inverse sibling extract_component_set. It does not explicitly name or contrast with siblings, but the action is unambiguous.
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?
There is no guidance on when to use this tool versus alternatives (e.g. create_component, extract_component_set) and no prerequisites stated, such as whether the input nodes must already be component variants or be selected. The agent is left to infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_checkpointA
Snapshot a handful of common mutable properties (position, size, rotation, opacity, visibility, fills, strokes, corner radius, text characters) on the given nodes so they can be restored later with restore_checkpoint. NOT true undo: it cannot restore a deleted node or undo structural changes (reparenting, new/removed children), and state is lost if the Figma plugin UI reloads.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | ||
| nodeIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and discloses useful constraints: the limited set of properties captured, inability to restore deleted nodes or structural changes, and loss of state on plugin UI reload. It omits side effects (whether creating a checkpoint mutates document state) and any return value information.
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 snapshot action and property list, then immediately follows with limitations. The property list is long but earns its place by defining scope, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives strong behavioral context for a checkpoint tool but leaves important gaps: the optional label parameter is unexplained, and with no output schema the return value or checkpoint identifier is not described. It is adequate for basic invocation but incomplete for fully informed use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description only indirectly clarifies nodeIds ('on the given nodes') and completely omits the optional 'label' parameter, so it does not compensate for the undocumented 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: 'Snapshot a handful of common mutable properties' on 'the given nodes.' It also names the exact property categories and distinguishes itself from restore_checkpoint and true undo, so an agent can identify its purpose without opening another tool.
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 clearly links usage to later restoration with restore_checkpoint and explicitly states when not to rely on it: 'NOT true undo: it cannot restore a deleted node or undo structural changes.' However, it does not explicitly describe the workflow condition (e.g., create before applying batch edits) or name undo/redo as the alternative for structural changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_componentA
Create a new empty component. Pass parentNodeId to insert into a frame, auto-layout stack, or slot. Inside auto layout omit x/y and use index. Nested into auto layout, omit width/height unless you want a fixed size.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| name | No | ||
| index | No | ||
| width | No | ||
| height | No | ||
| parentNodeId | No | ||
| ignoreAutoLayout | No | ||
| layoutSizingVertical | No | FIXED | HUG | FILL | |
| layoutSizingHorizontal | No | FIXED | HUG | FILL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses auto-layout interaction behavior (coordinate and sizing delegation) that would not be obvious otherwise, but omits other behavioral facts: default placement when x/y are omitted, whether the component lands on the current page, and whether parameters like ignoreAutoLayout override the stated rules.
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 tightly packed sentences, front-loaded with the core action and then the conditional rules. Every clause carries actionable information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation tool with no annotations and no output schema, the description covers the trickiest geometric/auto-layout semantics well but is not complete: it omits behavior for ignoreAutoLayout and the two layoutSizing enums, and says nothing about what is returned or where the component is placed by default.
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% and there are 10 parameters, so the description should compensate. It does a good job on the interaction-heavy params (parentNodeId, x/y, index, width/height) but leaves name, ignoreAutoLayout, layoutSizingVertical and layoutSizingHorizontal entirely undocumented, and never clarifies how ignoreAutoLayout relates to the 'omit x/y inside auto layout' rule.
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+resource ('Create a new empty component'), and the qualifier 'empty' usefully distinguishes it from the sibling create_component_from_node, which builds a component from an existing node. It stops short of naming that sibling explicitly, so differentiation relies on inference.
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 solid conditional guidance on how to use the tool (pass parentNodeId to insert into a frame/stack/slot; omit x/y inside auto layout; omit width/height unless fixed). However it never says when to choose this over alternatives like create_component_from_node or create_component_slot, so the when-to-use dimension is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_component_from_nodeC
Convert an existing node into a main component.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| nodeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose whether the source node is consumed/converted in place, whether the operation is reversible (undo/checkpoint), or what permissions or preconditions apply.
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 front-loaded sentence with no filler or redundancy. It is efficient, though the brevity shades into under-specification rather than tight editing.
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 annotations, no output schema, and 0% parameter coverage, the description is the only source of behavioral and parameter information and it provides almost none. It is insufficient for a mutation-style tool with an undocumented optional parameter.
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 0%, so the description must compensate and largely does not. 'Existing node' loosely maps to nodeId, but the optional 'name' parameter is never explained (is it the new component's name, and what happens if 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 ('Convert') and resource ('existing node into a main component'), so the agent knows exactly what transformation occurs. It does not, however, distinguish itself from the sibling create_component, which sounds like it produces a similar artifact.
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, when-not-to-use, or alternative is stated. The sibling create_component and combine_as_variants are obvious candidates for confusion, and nothing here routes the agent between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_component_instanceA
Create an instance of a local component. Pass parentNodeId to insert into a frame, auto-layout stack, or slot. Inside auto layout omit x/y and use index.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| index | No | ||
| componentId | Yes | ||
| parentNodeId | No | ||
| ignoreAutoLayout | No | ||
| layoutSizingVertical | No | FIXED | HUG | FILL | |
| layoutSizingHorizontal | No | FIXED | HUG | FILL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full behavioral burden and does disclose the non-obvious auto-layout interaction (omit x/y, use index). However, it says nothing about what happens on invalid componentId, whether overrides carry over, or the mutation's side effects, which matters for a create tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core action and then the placement rules. No filler, though the sentence could be marginally denser.
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 an 8-parameter mutation tool with no annotations and no output schema, the description covers the trickiest placement semantics but leaves several parameters and all failure/return behavior unexplained. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25%, so the description must compensate. It explains parentNodeId, x/y, and index usage well, but ignoreAutoLayout and the two layoutSizing parameters go undocumented anywhere, so the compensation is 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?
States a specific verb+resource with a scope qualifier ('local component'), which implicitly separates it from key-based siblings like create_instance_from_component_key and create_instance_from_set_key. It stops short of naming those alternatives explicitly.
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 clear conditional guidance: pass parentNodeId to insert into a frame, auto-layout stack, or slot, and inside auto layout omit x/y and use index. This is real when/how routing, though it addresses parameter combinations more than choosing this tool over a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_component_slotC
Create a slot inside a component variant. This also creates the corresponding SLOT property.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| name | No | ||
| width | No | ||
| height | No | ||
| nodeId | No | ||
| componentId | No | ||
| componentSetId | No | ||
| variantComponentId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose one important side effect – creation of the corresponding SLOT property – which is genuinely useful. But it says nothing about required permissions, whether the parent must already be a component variant, or what fails if componentId/componentSetId/variantComponentId are missing.
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, front-loaded sentences with zero filler. Efficient, though the brevity is partly the problem – it's concise at the cost of under-specification.
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?
A 9-parameter mutation tool with zero required-parameter markers, 0% schema coverage, no annotations, and no output schema. The description explains the core action and one side effect but leaves the agent unable to know which IDs to supply or how params map to slot geometry. Inadequate for the complexity.
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?
Nine parameters at 0% schema description coverage and no description-level explanation of any of them. The description doesn't say what x/y/width/height mean (slot placement size vs position?), how name relates to the SLOT property, or which of nodeId/componentId/componentSetId/variantComponentId is authoritative. This is the largest gap in the definition.
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+resource: 'Create a slot inside a component variant.' Clear what the tool does, and siblings like edit_component_slot/delete_component_slot clarify the create-vs-edit distinction. Minor gap: 'slot' is Figma-domain jargon and the relationship to component vs componentSet is not spelled out.
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, no prerequisites, no mention of how this differs from edit_component_slot or how it interacts with create_component/combine_as_variants. The side-effect note is informational, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_effect_styleC
Create or update a local effect style.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| effects | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It states mutation and local scope, but omits permissions, reversibility, overwrite behavior on update, and what happens to the effects array.
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 front-loaded sentence with no filler or repetition. It is concise, though its brevity comes from under-specification rather than tight information design.
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 tool has two required parameters, including an array, with no annotations and no output schema. The description supplies only a scope statement and leaves parameter and behavioral details for the agent to guess.
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 0% for both required parameters. The description does not explain 'name' or the expected structure of the 'effects' array, adding no meaning beyond the raw property 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?
States a specific verb and resource ('create or update a local effect style'), clearly distinguishing it from paint, text, and grid style siblings. However, it does not differentiate create vs. update behavior or separate itself from apply_effect_style.
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?
Provides no when-to-use guidance, prerequisites, or alternatives. An agent cannot infer when to choose this over apply_effect_style, set_effects, or updating an existing style.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_frameA
Create a new frame. Defaults to NO fill (transparent) — Figma's native white fill is cleared so layout containers stay invisible. Pass fillHex only when the frame is a visible surface (card, screen bg, chip). Nested into auto layout: omit x/y and omit width/height (do not ship at 320×200); pass parentNodeId + index + layoutSizing. Optional layoutMode (HORIZONTAL|VERTICAL|GRID).
| Name | Required | Description | Default |
|---|---|---|---|
| b | No | ||
| g | No | ||
| r | No | ||
| x | No | Parent-relative x. Ignored inside auto layout unless ignoreAutoLayout is true. | |
| y | No | ||
| name | No | ||
| index | No | Child index inside the parent. Use this to order items in auto layout. | |
| width | No | Omit for nested auto-layout wrappers so they hug/fill instead of shipping at 320×200. | |
| height | No | ||
| fillHex | No | Solid fill hex like #FFFFFF. Omit for transparent layout containers. | |
| opacity | No | ||
| layoutMode | No | NONE | HORIZONTAL | VERTICAL | GRID | |
| parentNodeId | No | ||
| keepDefaultFill | No | If true, keep Figma's default white fill. Prefer omitting fills instead. | |
| ignoreAutoLayout | No | If true, overlay with absolute x/y inside an auto-layout parent. | |
| layoutSizingVertical | No | FIXED | HUG | FILL | |
| layoutSizingHorizontal | No | FIXED | HUG | FILL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose a genuinely non-obvious behavior: Figma's native white fill is cleared so containers default to transparent, plus the auto-layout sizing caveat. It omits return values, coordinate space for root frames, and permissions.
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?
Front-loads the create action and default-fill behavior before the conditional guidance; every sentence carries usable information. Slightly dense but no obvious 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 17-parameter creation tool with no annotations and no output schema, the description covers fills and auto-layout nesting well but leaves several parameters (r/g/b, opacity, name, keepDefaultFill semantics) and any return behavior unaddressed.
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 53%, and the description compensates by explaining fillHex, x/y, width/height, parentNodeId, index, and layoutSizing usage. However the unexplained r/g/b parameters are never addressed anywhere, leaving a real gap.
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+resource ('Create a new frame') and immediately characterizes its default behavior. It doesn't explicitly differentiate from close siblings like create_rectangle, create_section, or group_nodes, so it's clear but not sibling-routing.
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 concrete conditional guidance: pass fillHex only for visible surfaces, and omit x/y and width/height when nesting into auto layout. It doesn't name alternative tools or state exclusions, but the when-to-omit rules are actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_grid_styleC
Create or update a local grid style.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| layoutGrids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Create or update' signals a mutation, but it omits permissions, reversibility, whether an update overwrites existing style data, and any response behavior.
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 front-loaded sentence with no filler. Its brevity is structurally clean, though it stems partly from under-specification rather than deliberate efficiency.
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 two required parameters, no annotations, no output schema, and zero parameter documentation, the description is inadequate. It does not give an agent enough information to invoke 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?
Schema description coverage is 0% and both required parameters (name, layoutGrids) are undocumented. The description does not explain expected values, format, or structure for either parameter, adding no meaning beyond the bare 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?
States a specific verb (create/update) and resource (local grid style), making the action clear. It does not explicitly differentiate itself from sibling tools like create_paint_style, apply_grid_style, or set_layout_grids, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance on when to use this tool versus alternatives such as apply_grid_style or set_layout_grids, nor when to create versus update. Usage context must be inferred entirely by the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_instance_from_component_keyB
Create an instance from a library component key inside the target frame/parent. Pass parentNodeId + index for auto-layout stacks; omit x/y unless the parent is freeform.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| index | No | ||
| componentKey | Yes | ||
| parentNodeId | No | ||
| ignoreAutoLayout | No | ||
| layoutSizingVertical | No | FIXED | HUG | FILL | |
| layoutSizingHorizontal | No | FIXED | HUG | FILL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses a meaningful conditional behavior (auto-layout positioning requires parentNodeId+index, freeform requires x/y), which is real context. But it says nothing about what the created instance returns, permission/auth needs, or how ignoreAutoLayout and layout sizing interact.
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 tightly written sentences with zero filler, and the core purpose is front-loaded before the placement caveat. Efficient for the amount of information conveyed.
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 an 8-parameter mutation tool with no annotations and no output schema, the description covers placement adequately but leaves auto-layout option parameters (ignoreAutoLayout, layoutSizing*) unexplained. An agent can likely call it, but with avoidable guesswork on the layout-related fields.
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?
Coverage is only 25%, so the description must compensate, and it partially does by clarifying the intended use of parentNodeId, index, x, and y relative to parent type. The remaining four parameters (componentKey semantics, ignoreAutoLayout, layoutSizingVertical/Horizontal) are left undocumented beyond the two enum hints in 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?
States a specific verb+resource ('create an instance from a library component key') and the placement target (inside the target frame/parent). The 'from component key' phrasing implicitly distinguishes it from siblings like create_instance_from_set_key and create_instance_from_instance, though it never names them explicitly.
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 genuinely actionable invocation guidance: use parentNodeId + index for auto-layout stacks, omit x/y unless the parent is freeform. However, it offers no guidance about when to choose this tool versus sibling instance-creation tools, so usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_instance_from_instanceA
Create a new instance of whatever main component an existing instance points at. Pass parentNodeId (or parentId) to drop it into a frame, stack, or slot. Inside auto layout omit x/y and use index.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| index | No | ||
| parentId | No | Alias for parentNodeId. | |
| instanceId | Yes | ||
| parentNodeId | No | ||
| ignoreAutoLayout | No | ||
| layoutSizingVertical | No | FIXED | HUG | FILL | |
| layoutSizingHorizontal | No | FIXED | HUG | FILL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It does disclose useful behavior (auto-layout handling, the parentId alias, index-based insertion), but is silent on permissions, whether the new node adopts overrides/slot content, and the auto-layout interaction with ignoreAutoLayout and the sizing params.
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, front-loaded with the core action, and each sentence adds distinct information. There is no redundant filler; it could be marginally tighter but nothing is 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 9-parameter mutation tool with no annotations and no output schema, the description covers the tricky placement semantics but omits the layout-sizing and ignoreAutoLayout parameters and any safety/return context. Adequate minimum, with visible gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, so the description has to compensate, and it usefully explains parentNodeId/parentId aliasing plus the x/y-vs-index rule. It says nothing about ignoreAutoLayout or layoutSizingVertical/Horizontal (FIXED|HUG|FILL), leaving a third of the parameters undocumented in both places.
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 ("create a new instance") and pins the source precisely ("whatever main component an existing instance points at"), which cleanly separates it from the sibling factories create_instance_from_component_key and create_instance_from_set_key without needing to name them.
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 clear conditional context: pass parentNodeId/parentId to place it into a frame, stack, or slot, and omit x/y and use index inside auto layout. This is real 'how/when' guidance, but it never names an alternative tool or states exclusions, 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.
create_instance_from_set_keyA
Create an instance from a library component set key (default variant) inside the target frame/parent. Pass parentNodeId + index for auto-layout stacks; omit x/y unless the parent is freeform.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| index | No | ||
| parentNodeId | No | ||
| componentSetKey | Yes | ||
| ignoreAutoLayout | No | ||
| layoutSizingVertical | No | FIXED | HUG | FILL | |
| layoutSizingHorizontal | No | FIXED | HUG | FILL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that the default variant is created and how placement behaves in auto-layout vs freeform parents, but it says nothing about permissions, error behavior for invalid/missing keys, mutability/reversibility, or what ignoreAutoLayout does. Moderate but incomplete for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences: purpose and target first, then the placement rules. Zero filler and 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 an 8-parameter mutation tool with no annotations and no output schema, the description covers the central placement decision adequately but omits prerequisites, failure modes, and any sense of the returned instance, leaving meaningful gaps 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 only 25%, so the description must compensate, and it does explain the key parameter interactions: parentNodeId + index for auto-layout and x/y only for freeform. That adds genuine meaning for four parameters the schema leaves bare, though componentSetKey format, ignoreAutoLayout, and the layoutSizing enums remain unexplained.
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 gives a specific verb and resource ('Create an instance from a library component set key') plus the target context ('inside the target frame/parent'), and the '(default variant)' qualifier implicitly separates it from create_instance_from_component_key and create_instance_from_instance. It doesn't explicitly name those siblings, so an agent must infer the distinction, but the purpose is unambiguous.
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 second sentence provides real conditional guidance: use parentNodeId + index for auto-layout stacks, omit x/y unless the parent is freeform. However, it offers no help choosing between this tool and the many sibling instance-creation tools, and states no prerequisites (e.g., the set must already be imported).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_pageC
Create a new page in the document. Pass activate: true to also switch to it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| activate | No | Set the new page as the current page. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It says creation happens and that activate switches to the new page, but it omits permissions, side effects, default naming behavior, and what happens if name is omitted. It largely repeats the schema description for activate rather than adding 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 short, front-loaded sentences with no wasted words. The main action comes first, followed by the only optional behavior mentioned.
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 annotations, no output schema, and 50% parameter description coverage, the description is too thin. It does not explain the purpose of name, whether the new page is named by default, or what the tool returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%: activate is documented in the schema, while name is undocumented in both schema and description. The description repeats the activate behavior already present in the schema and adds no meaning for the name parameter, so it does not compensate for the coverage gap.
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: 'Create a new page in the document.' It is clear enough to distinguish from delete_page, rename_page, and reorder_page, but it does not explicitly differentiate from duplicate_page or mention page scope. No sibling alternative is named.
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 no guidance on when to use create_page versus siblings such as duplicate_page, set_current_page, or create_section. It only explains a parameter option for activation, which is not usage guidance for the tool selection itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_paint_styleC
Create or update a local paint style.
| Name | Required | Description | Default |
|---|---|---|---|
| hex | No | ||
| name | Yes | ||
| paints | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses upsert semantics ('create or update'), but says nothing about required permissions, what happens to an existing style of the same name, side effects, or return behavior for what is effectively a mutation.
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 efficient, front-loaded sentence with no filler. It is only marginally penalized because the terseness edges into under-specification rather than pure 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 an upsert mutation with no annotations, no output schema, and 0% parameter coverage, the definition is too thin. An agent lacks the parameter formats, upsert collision behavior, and usage routing needed to invoke it 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?
Schema description coverage is 0% with three params (hex, name, paints). The description mentions 'paint style' but adds no detail on name, hex format, or the structure of the paints array, leaving the undocumented params unexplained in both places.
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+resource (create/update a local paint style), which lets an agent distinguish it from apply_fill_style (applies to a node) and set_fill_color (sets a color). However it offers no explicit contrast with the near siblings create_text_style/create_effect_style/create_grid_style or import_style_by_key.
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?
There is no when-to-use, when-not-to-use, or alternative routing guidance. An agent cannot tell from the description whether to use this versus set_fill_color, figma_set_solid_fill, or apply_fill_style when it wants paint on a node versus a reusable style.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_rectangleA
Create a rectangle. Pass parentNodeId to insert into a frame, auto-layout stack, or slot. Inside auto layout, omit x/y and use index + layoutSizing; x/y only apply to freeform frames or ignoreAutoLayout overlays.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Parent-relative x. Ignored inside auto layout unless ignoreAutoLayout is true. | |
| y | No | ||
| name | No | ||
| index | No | Child index inside the parent. Use this to order items in auto layout. | |
| width | No | ||
| height | No | ||
| parentNodeId | No | ||
| ignoreAutoLayout | No | If true, overlay with absolute x/y inside an auto-layout parent. | |
| layoutSizingVertical | No | FIXED | HUG | FILL | |
| layoutSizingHorizontal | No | FIXED | HUG | FILL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose a non-obvious behavioral trait: x/y are ignored inside auto layout unless ignoreAutoLayout is set, and index+layoutSizing must be used instead. It stops short of covering what happens when parentNodeId is omitted, default sizing, or the return value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences, front-loaded with the action followed by the conditional layout guidance. No filler and 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?
For a 10-parameter creation tool with no annotations and no output schema, the description covers the layout nuance but omits what happens without a parent (default placement), default dimensions, and return behavior. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, but the description adds genuine meaning by explaining the relationship between parentNodeId, x/y, index, layoutSizing, and ignoreAutoLayout in the auto-layout system. It leaves name/width/height implicit (self-explanatory) and adds no enum detail for the layoutSizing params.
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+resource ('Create a rectangle'), which is clearly distinguishable from siblings like create_frame, create_vector, or create_text. It does not explicitly name or contrast with any sibling, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains two usage modes (freeform frames vs auto-layout/overlay) and how to insert via parentNodeId, which is real context. However, it never states when to choose this tool over alternatives such as create_vector or create_frame, so usage 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.
create_sectionC
Create a SECTION node. Optional fillColor {r,g,b,a}, sectionProperties (e.g. {sectionType}), and parentNodeId.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| name | No | ||
| width | No | ||
| height | No | ||
| fillColor | No | ||
| parentNodeId | No | ||
| sectionProperties | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden for a mutation tool. It says nothing about permissions, defaults for the optional fields, what coordinates/size semantics apply, whether the new section is returned or selected, or whether it is undoable.
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 action front-loaded and no filler. It is efficiently written, though the terse style is what leaves the parameter gaps rather than compensating for them.
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 an 8-parameter mutation tool with no annotations, no output schema, and a nested object parameter, the description is far too thin. It should at minimum explain the coordinate/size semantics, the meaning of parentNodeId (including the default), and what sectionProperties accepts.
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 0% across 8 parameters, and the description only touches fillColor, sectionProperties, and parentNodeId. The five geometry/name parameters (x, y, name, width, height) are undocumented in both the schema and the description, leaving required-for-correct-use meaning unstated.
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 ("Create a SECTION node") and names the constructor-style optional fields, so an agent can immediately tell it is a creation tool. It does not differentiate itself from nearby creators such as create_frame or create_rectangle, nor from the sibling set_section_properties, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus create_frame, create_rectangle, or set_section_properties. No prerequisites, no placement context, no mention of what happens if parentNodeId is omitted. Only implied usage from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_textA
Create a text node. Defaults to auto-width hug (textAutoResize WIDTH_AND_HEIGHT + HUG sizing). Pass parentNodeId to insert into a frame/stack/slot — inside auto layout omit x/y and use index. Pass textAlignHorizontal (LEFT|CENTER|RIGHT|JUSTIFIED), textAlignVertical (TOP|CENTER|BOTTOM), textAutoResize (WIDTH_AND_HEIGHT|HEIGHT|NONE|TRUNCATE), and layoutSizingHorizontal/Vertical (FIXED|HUG|FILL). For variable fonts, pass variationSettings (e.g. {wght:550}) and optionally omit fontStyle.
| Name | Required | Description | Default |
|---|---|---|---|
| b | No | ||
| g | No | ||
| r | No | ||
| x | No | ||
| y | No | ||
| name | No | ||
| index | No | Child index inside the parent. Use this to order items in auto layout. | |
| fillsHex | No | ||
| fontSize | No | ||
| fontStyle | No | ||
| characters | Yes | ||
| fontFamily | No | ||
| parentNodeId | No | ||
| textAutoResize | No | WIDTH_AND_HEIGHT (default hug) | HEIGHT (wrap+auto height) | NONE (fixed) | TRUNCATE | |
| ignoreAutoLayout | No | If true, overlay with absolute x/y inside an auto-layout parent. | |
| textAlignVertical | No | TOP | CENTER | BOTTOM | |
| variationSettings | No | Variable-font axis values keyed by OpenType tag, e.g. { wght: 550, slnt: -10 }. Omit fontStyle to let Figma pick the matching named instance. | |
| textAlignHorizontal | No | LEFT | CENTER | RIGHT | JUSTIFIED | |
| layoutSizingVertical | No | FIXED | HUG | FILL | |
| layoutSizingHorizontal | No | FIXED | HUG | FILL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it does disclose non-obvious traits: default auto-width hug behavior (WIDTH_AND_HEIGHT + HUG) and the rule that fontStyle may be omitted for variable fonts. It stops short of side effects, error behavior, or what the call returns.
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?
Purpose is front-loaded in the first sentence and each following clause adds usable detail (defaults, parent insertion, enum values, variable fonts). It is dense rather than bloated, though the parameter enumeration runs long in a single paragraph.
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 20-parameter creation tool with no annotations and no output schema, the description covers the tricky parameters well but omits about half the inputs (x/y, name, fontSize, fillsHex, r/g/b) and says nothing about the returned node identity. Adequate but with clear gaps against the tool's complexity.
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 40% and the schema declares zero enums, so the description meaningfully compensates by spelling out allowed values for textAlignHorizontal, textAlignVertical, textAutoResize, and layoutSizingVertical/Horizontal, plus the variationSettings format. It leaves obvious params (x/y, name, characters, fontSize, fillsHex, r/g/b) undocumented, which is why it is not a 5.
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 precise verb+resource: 'Create a text node.' The resource is distinct from siblings like create_rectangle, create_frame, and set_text_content, so an agent can immediately tell which operation this is without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear conditional usage context — pass parentNodeId to insert into a frame/stack/slot, omit x/y inside auto layout and use index instead — but never names an alternative tool or states when NOT to use it. Solid context without explicit alternatives/exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_text_styleB
Create or update a local text style. For variable fonts, pass variationSettings (OpenType axis map) and optionally omit fontStyle so Figma picks the matching named instance.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| fills | No | ||
| fillsHex | No | ||
| fontSize | No | ||
| textCase | No | ||
| fontStyle | No | ||
| fontFamily | Yes | ||
| lineHeight | No | ||
| letterSpacing | No | ||
| textDecoration | No | ||
| paragraphSpacing | No | ||
| variationSettings | No | Variable-font axis values keyed by OpenType tag, e.g. { wght: 550 }. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses upsert semantics and the variable-font interaction between variationSettings and fontStyle, but omits whether an existing style is overwritten or merged, permission/bridge requirements, and any side effects of updating a shared style.
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: the core action is front-loaded, followed by a targeted caveat. No filler, though the variable-font sentence is somewhat dense and could have been split.
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 12-parameter mutation tool with no annotations, no output schema, and 8% schema coverage, the description is too thin. It covers purpose and one parameter nuance but leaves most inputs and all return/side-effect behavior undocumented.
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 8%, so the description must compensate for roughly 10 undocumented parameters (fills, fillsHex, fontSize, textCase, lineHeight, letterSpacing, textDecoration, paragraphSpacing, name, fontFamily). It explains variationSettings and its relationship to fontStyle, but leaves the majority of parameters with no added meaning.
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+resource ("Create or update a local text style") with a scoping qualifier ("local"). It is clear what the tool does, though it does not explicitly distinguish itself from close siblings like set_text_style, apply_text_style, or create_typography_scale.
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 "create or update" phrasing implies upsert behavior, so the agent can infer it is used to author a style rather than apply one. However, there is no explicit when-to-use guidance, no mention of alternatives such as apply_text_style, and no prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_typography_scaleB
Create a text-style scale (caption/body/h3/h2/h1/display by default, or custom steps) from a baseSize and ratio: fontSize = base * ratio^offset. Can also create sample text nodes in a frame (createSampleFrame) spanning the steps. For variable fonts, pass variationSettings and optionally omit fontStyle.
| Name | Required | Description | Default |
|---|---|---|---|
| ratio | No | ||
| steps | No | ||
| prefix | No | ||
| baseSize | No | ||
| fontStyle | No | ||
| fontFamily | No | ||
| lineHeight | No | ||
| parentNodeId | No | ||
| letterSpacing | No | ||
| lineHeightRatio | No | ||
| createSampleFrame | No | ||
| variationSettings | No | Variable-font axis values keyed by OpenType tag, e.g. { wght: 550 }. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose meaningful behavior: the deterministic sizing formula, the default step set, and the side effect that createSampleFrame produces sample text nodes in a frame. However, it says nothing about permissions, where the scale is stored (styles vs. nodes), or what parentNodeId affects, which are significant gaps for a creation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the core purpose and formula, followed by the optional behaviors. Parentheticals are used efficiently; only minor tightening would help.
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 12-parameter, nested-object creation tool with no annotations and no output schema, the description explains the core algorithm and a few key options but leaves half the parameters and the tool's side effects incompletely covered. Adequate but not 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 8% (just variationSettings), so the description must compensate. It explains baseSize and ratio via the formula, and touches steps, createSampleFrame, variationSettings, and fontStyle, but leaves prefix, fontFamily, lineHeight, lineHeightRatio, letterSpacing, and parentNodeId entirely unexplained.
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 clear verb+resource ('Create a text-style scale') and goes further by defining the underlying formula (fontSize = base * ratio^offset) and the default step names. It distinguishes itself implicitly from siblings like create_text_style/set_text_style by describing a whole generated scale rather than a single style, though it never names those alternatives.
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?
Offers conditional guidance for one case ('For variable fonts, pass variationSettings and optionally omit fontStyle') and mentions the createSampleFrame option, so usage is implied for those scenarios. It gives no when-not-to-use guidance and no explicit routing against the many sibling style/text tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_variableB
Create a local variable in a collection and set values by mode. resolvedType: COLOR, FLOAT, STRING, BOOLEAN, EASING, or TIMING — EASING and TIMING hold motion easing curves and durations, letting a design system tokenize animation alongside color and spacing.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| scopes | No | ||
| description | No | ||
| collectionId | Yes | ||
| resolvedType | Yes | ||
| valuesByMode | No | ||
| valuesByModeEntries | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It helpfully discloses that resolvedType is an enum-like set and clarifies that EASING/TIMING hold motion curves and durations, but it says nothing about mutation effects, duplicate-name behavior, required modes, scope semantics, or error conditions.
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, with no filler. The trailing explanation of EASING/TIMING is slightly tangential but earns its place by documenting a value the schema never documents.
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 7 parameters, nested valuesByMode/valuesByModeEntries objects, no annotations, and no output schema, the description covers only the type field. It omits how values-by-mode should be supplied, what scopes do, and what the creation side effects are, leaving an agent under-informed for the call.
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 0% across 7 parameters, so the description's enumeration of resolvedType values is genuinely additive and the only documentation of that critical field. However, collectionId, name, scopes, description, valuesByMode, and valuesByModeEntries remain unexplained, so it only partially compensates for the coverage gap.
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 ('Create a local variable in a collection') plus the value-setting scope ('set values by mode'), which is enough to distinguish it from create_variable_collection, set_variable_values, and rename_variable. It stops short of naming siblings explicitly, so it is clear but not maximally differentiated.
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?
There is no when-to-use or when-not-to-use guidance and no mention of alternatives such as set_variable_values (for populating an existing variable) or create_variable_collection (for the container itself). The phrase 'in a collection' only weakly implies a precondition that a collection must already exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_variable_collectionC
Create a local variable collection, optionally naming modes.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| modes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet it only reveals that the collection is 'local' and that modes may be named. It says nothing about persistence scope, whether duplicates are allowed, permissions required, or what is returned.
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 front-loaded sentence with no waste. It is efficient, though the brevity is partly a symptom of under-specification rather than disciplined editing.
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 annotations, no output schema, and zero parameter documentation, the description is too thin. An agent lacks enough to call it correctly in edge cases such as naming collisions or empty modes.
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 0%, so the description must compensate. It only implies that 'modes' is optional and that 'name' labels the collection; it gives no format, uniqueness, or ordering semantics for either 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?
States a specific verb+resource (create a variable collection) and adds the scoping detail 'local'. It implicitly contrasts with the sibling set (list/rename/delete_variable_collection), though it does not name them.
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, prerequisites, or alternatives are given. The agent must infer that this is the creation step preceding create_variable_mode and create_variable from sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_variable_modeC
Add a new mode to a variable collection.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| collectionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It is a mutating create operation but says nothing about permission requirements, whether the mode name must be unique, what happens if collectionId is invalid, or what is returned. This is a significant gap for an unannotated mutation.
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 efficient sentence with the action front-loaded and zero filler. It is well-sized, though the brevity reflects under-specification rather than tight editing of rich 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 two-parameter mutation with no annotations, no output schema, and 0% schema description coverage, the description should cover prerequisites, uniqueness, and error behavior. As written it is too thin to fully guide a 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 description coverage is 0%, so the description must compensate. It only loosely implies the two params ('mode' -> name, 'variable collection' -> collectionId) and gives no format, id type, or naming constraints. It adds marginal meaning over the bare 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 gives a specific verb+resource ('Add a new mode') and its container ('to a variable collection'), so the agent knows exactly what is created. It does not distinguish this from siblings like set_variable_mode, rename_variable_mode, or delete_variable_mode, so it falls short of 5.
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?
There is no statement of when to use this versus the sibling mode tools (set/rename/delete_variable_mode) or versus create_variable_collection. No prerequisites are given, such as requiring an existing collection. The agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_vectorC
Create a VECTOR node from SVG path data. vectorPaths: [{data, windingRule?}]. Supports fills, strokes, strokeWeight, parentNodeId, x, y.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| name | No | ||
| fills | No | ||
| strokes | No | ||
| vectorPaths | Yes | ||
| parentNodeId | No | ||
| strokeWeight | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It says the tool creates a node but does not disclose what is returned (e.g. the new node id), where the node lands when parentNodeId is omitted, whether the operation is undoable, or any permission requirements. For a creation/mutation tool this is a significant 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 short, front-loaded sentences with no filler; the core action leads and the parameter hints follow. Efficient, though the parameter list reads as a compressed inventory rather than explanatory prose.
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 annotations, no output schema, and zero schema-level parameter descriptions for an 8-parameter mutation tool, the description is too thin. It omits return behavior, default placement behavior, and parameter semantics that an agent needs to invoke it 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?
Schema description coverage is 0%, so the description must compensate. It names most parameters (vectorPaths, fills, strokes, strokeWeight, parentNodeId, x, y) and shows the vectorPaths item shape, but adds no meaning beyond names and structure — no units, formats, defaults, or relationships between fills/strokes and strokeWeight.
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 — create a VECTOR node from SVG path data — which is concrete enough to distinguish it from neighbors like set_vector_paths or create_rectangle. It does not explicitly name a sibling or clarify how it differs from set_vector_paths, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of the alternative set_vector_paths for editing existing vectors. The agent must infer usage entirely from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_commentB
Delete a comment from a Figma file via the REST API (requires FIGMA_TOKEN).
| Name | Required | Description | Default |
|---|---|---|---|
| fileKey | Yes | ||
| commentId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It correctly discloses the destructive nature and the authentication requirement (FIGMA_TOKEN, REST API), which is real added value, but says nothing about irreversibility, whether threaded replies are also removed, or required permissions beyond the token.
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 front-loaded sentence with zero filler; the destructive action and the auth prerequisite are both delivered compactly.
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 delete with no output schema, the description covers the action and auth need, which is close to sufficient. It falls short on parameter meaning and on consequences of deletion, both of which an agent would want before calling a destructive 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 0% for both required parameters, so the description must compensate and does not – it never explains what fileKey or commentId are or their expected format. Only the implied file/comment context of the verb gives any hint.
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 (Delete) and resource (a comment in a Figma file), which cleanly separates it from sibling post_comment and list_comments. It adds transport context (REST API) but never explicitly names or contrasts with those 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?
Usage is implied by the verb – an agent can infer you call this when you want a comment removed – but there is no explicit when-to-use statement, no exclusions, and no mention of alternatives such as editing a comment instead. The FIGMA_TOKEN note is a prerequisite, not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_component_propertyB
Delete an existing component property from a component or component set.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No | ||
| componentId | No | ||
| propertyName | Yes | ||
| componentSetId | No | ||
| preferComponentSet | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It states a mutation ('Delete') but does not disclose whether deletion is reversible, what permissions are required, or what happens if the property is bound or in use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single front-loaded sentence with no filler. Every word contributes to stating the action and target.
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 5-parameter tool with no annotations and no output schema, the description is too sparse. It omits parameter semantics, safety/behavioral context, and usage guidance, leaving the agent under-informed 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 description coverage is 0% for 5 parameters. The description only vaguely references the property ('component property') and the target ('component or component set'), leaving nodeId, preferComponentSet, and the distinction between componentId and componentSetId unexplained.
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 (Delete) and resource (component property), and clarifies the target (component or component set). This distinguishes it from siblings like add_component_property, edit_component_property, and bind_component_property by action.
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, alternatives, or prerequisites are provided. The usage is only implied by the verb 'Delete'; it does not mention edit_component_property or bind_component_property as alternatives, nor when a property should be deleted versus unbound.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_component_slotA
Remove a SLOT node from a component and delete its corresponding SLOT property. Any content placed in instances of that slot is discarded.
| Name | Required | Description | Default |
|---|---|---|---|
| slotNodeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose a genuine destructive side effect: content placed in instances of the slot is discarded. That is exactly the kind of impact an agent needs on a delete tool. It stops short of stating irreversibility, permissions, or related cleanup, so it is not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the primary action and followed by the consequential side effect. No filler, no repetition 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 one-parameter destructive tool with no annotations and no output schema, the description covers the action and its most important consequence (discarded slot content). Minor gaps remain around reversibility and permission requirements, preventing a 5.
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 a single parameter with 0% schema description coverage. The description implies slotNodeId identifies the SLOT node being removed, which adds modest meaning, but it never defines the parameter explicitly or its expected format.
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 gives a specific verb+resource pair ('Remove a SLOT node from a component') and adds the secondary effect ('delete its corresponding SLOT property'), leaving no ambiguity about what is being deleted. It does not explicitly name a sibling to differentiate from (e.g., delete_node, edit_component_slot), which keeps it at a 4.
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?
Usage is only implied by the operation itself; there is no statement of when to use this versus delete_node, edit_component_slot, or other slot tools, and no prerequisites are given. The scope ('from a component') offers mild context but no explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_multiple_nodesA
Delete multiple nodes by nodeIds (only within the allowed target frame). When any nodeId is a page or top-level frame, confirmFrameOrPageDeletion: true is required for that node.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeIds | Yes | ||
| confirmFrameOrPageDeletion | No | Required true when nodeIds include a PAGE or a top-level FRAME. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses two useful traits: the target-frame scoping restriction and the guard requiring confirmFrameOrPageDeletion for pages/top-level frames. It omits irreversibility, child-node handling, and undo/checkpoint behavior, which matter for a destructive bulk operation.
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, front-loaded with the primary action and followed by the exception condition. No filler or 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 two-parameter destructive tool with no annotations and no output schema, the description covers scope and the confirmation guard but leaves out reversibility, partial-failure behavior, and the outcome/return. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: confirmFrameOrPageDeletion is documented in the schema, but nodeIds is undocumented. The description partially compensates by describing nodeIds as the deletion targets and noting the target-frame restriction, but adds no format detail (e.g., must all be in the same frame) beyond that.
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 ('Delete multiple nodes by nodeIds'), and the plural 'multiple' implicitly distinguishes it from the sibling delete_node. It does not explicitly name delete_node or delete_page as alternatives, so an agent must infer the routing, but the core purpose is unambiguous.
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 one usage constraint ('only within the allowed target frame') and a conditional prerequisite for pages/top-level frames, which is genuine context. However, it never says when to prefer this over delete_node or delete_page, nor what to do if a nodeId falls outside the target frame.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_nodeA
Delete a node by nodeId (only within the allowed target frame). Deleting a page or a top-level frame requires confirmFrameOrPageDeletion: true.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| confirmFrameOrPageDeletion | No | Required true to delete a PAGE or a top-level FRAME. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. It usefully discloses the target-frame scope constraint and the confirm requirement for pages/frames, but says nothing about reversibility (undo/checkpoints exist), child-node handling, or permission requirements expected of a destructive operation.
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, zero waste, with the primary action stated first and the guard condition second. Appropriately sized 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 destructive tool with no annotations and no output schema, the description covers the confirm requirement and scope, which is the minimum viable. It omits consequences (child deletion), reversibility, and failure modes that an agent would need to invoke this safely.
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 50%: confirmFrameOrPageDeletion is already documented in the schema, while nodeId has no description anywhere. The description repeats the confirm semantics and adds the target-frame scope, but never clarifies nodeId format or provenance, so it only partially compensates for the gap.
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 (delete a node) plus the identifying key (nodeId), so the agent knows exactly what the tool does. It does not distinguish itself from close siblings like delete_multiple_nodes or delete_page, which the definition could have named.
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 parenthetical 'only within the allowed target frame' implies a scope precondition, and the confirm flag hints at a guarded path, but there is no explicit when-to-use vs alternatives guidance toward delete_multiple_nodes or delete_page. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_pageA
Delete a page by pageId. Requires confirmDelete=true.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | ||
| confirmDelete | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose the confirmDelete safety gate, which is genuine behavioral information beyond the schema's boolean type, but it never states whether deletion is irreversible, what happens to child nodes, or whether undo can revert it.
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 the constraint front-loaded after the action. No filler, and the mandatory flag is surfaced before the agent reads 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 destructive tool with no annotations and no output schema, the definition covers the action and the confirmation flag but omits reversibility, side effects on child content, and failure modes. Adequate to invoke, thin on consequence.
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 0%, so the description must compensate for two bare parameters. It explains confirmDelete's required value, adding real meaning, but pageId is left as an unexplained string with no mention of format, source, or how to obtain it.
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 ('Delete a page'), and names the identifier parameter, so the action is unambiguous. It does not differentiate itself from adjacent destructive siblings such as delete_node, delete_multiple_nodes, or delete_variable, which is the only real gap.
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 implicitly conveys a prerequisite ('Requires confirmDelete=true'), which tells the agent it cannot be called casually. However, it offers no when-to-use context relative to alternatives like delete_node or undo, and no guidance on whether deletion is recoverable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_variableB
Delete an existing variable by variableId. Requires confirmDelete=true.
| Name | Required | Description | Default |
|---|---|---|---|
| variableId | Yes | ||
| confirmDelete | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the confirmation guard ('Requires confirmDelete=true'), which signals this is guarded and intentional, but never states the deletion is permanent/irreversible, whether dependent bindings are affected, or what authorization is needed.
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 the action and the safety requirement front-loaded; nothing is wasted. It is arguably tighter than needed for a destructive tool, but structurally efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, annotation-free tool with no output schema and undocumented parameters, the description should at minimum state permanence and consequences. It conveys identity and the confirm flag but leaves irreversibility, side effects, and error behavior unaddressed.
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 0%, so the description must compensate. It clarifies that variableId identifies the target and that confirmDelete must be true (not merely present), adding real semantic value for the boolean, but it adds nothing about the expected id format or failure modes for either 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?
Clear verb+resource ('Delete an existing variable') with the identifier named, which separates it from delete_variable_mode and delete_variable_collection by resource noun. It does not explicitly contrast itself against those siblings or note that it operates on a single variable rather than a collection, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites (e.g. variable must exist, collection must be editable), and no routing to alternatives such as delete_variable_mode or delete_variable_collection. Usage is only implicitly inferable from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_variable_collectionA
Delete an entire variable collection (and all its variables/modes). Requires confirmDelete=true.
| Name | Required | Description | Default |
|---|---|---|---|
| collectionId | Yes | ||
| confirmDelete | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does meaningful work: it discloses the cascading destructive effect ('and all its variables/modes') and the safety gate (confirmDelete=true). It stops short of stating irreversibility or permission requirements.
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 tight sentence (plus a short requirement clause) with the destructive scope front-loaded. Every clause earns its place and nothing is padded.
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 two-param tool with no annotations and no output schema, the description covers the critical facts: cascade scope and the confirmation requirement. It would be complete with a note on irreversibility, but nothing essential to calling it 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?
Schema coverage is 0%, so the description must compensate. It explains confirmDelete's meaning as a confirmation guard, but adds nothing about collectionId beyond what the name implies. One of two parameters is enriched, so partial compensation.
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 (Delete) and resource (variable collection), and clarifies the blast radius: the entire collection including all its variables and modes. This distinguishes it from the sibling delete_variable (single variable) and delete_variable_mode. Lacks an explicit sibling callout, so 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scope ('entire variable collection') implies when this tool is appropriate versus delete_variable/delete_variable_mode, but there is no explicit when-to-use or when-not-to-use guidance. The confirmDelete note is a usage precondition but is framed as a requirement rather than a routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_variable_modeC
Remove a mode from a variable collection. Requires confirmDelete=true.
| Name | Required | Description | Default |
|---|---|---|---|
| modeId | Yes | ||
| collectionId | Yes | ||
| confirmDelete | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and discloses little. It signals a destructive 'Remove' and mentions the confirmDelete guard, but says nothing about reversibility, whether deletion fails when the mode is in use, or what happens to variables bound to the mode.
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, front-loaded with the action and scope, followed immediately by the required precondition. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive tool with no annotations, no output schema, and 0% schema description coverage needs more: failure modes, reversible-or-not, and side effects on bound variables are all absent. What exists is minimally viable at best.
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 0%, so the description should compensate. It adds genuine meaning for confirmDelete (must be true) beyond the bare boolean in the schema, and collectionId/modeId are implied by the scope phrase, but the identifier parameters remain unelaborated (format, source).
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 ('Remove a mode from a variable collection'), which cleanly separates it from delete_variable and delete_variable_collection. It does not explicitly name those siblings, but the collection-scoped wording makes the target unambiguous.
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 or routing versus related siblings like set_variable_mode, rename_variable_mode, or delete_variable. The confirmDelete precondition is operational, not usage context, so an agent gets no help deciding when this deletion is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
distribute_nodesA
Space or align a set of nodes along an axis. axis: horizontal|vertical. mode: gap (fixed gap), spaceBetween/evenly (fill bounds), center (center the cluster). crossAlign: none|start|center|end. Bounds default to the common parent; pass bounds {x1,y1,x2,y2} to override (horizontal coordinates) or {y1,x1,y2,x2} semantics for vertical.
| Name | Required | Description | Default |
|---|---|---|---|
| gap | No | ||
| axis | No | ||
| mode | No | ||
| bounds | No | ||
| nodeIds | Yes | ||
| crossAlign | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the mode behaviors (gap, spaceBetween/evenly, center) and crossAlign options, which is genuine behavioral context, but says nothing about side effects, whether it disrupts auto-layout, required permissions, or reversibility for a mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then enumerated parameter semantics in a compact block. Dense but no wasted sentences; the bounds coordinate-swap sentence is slightly convoluted but necessary.
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 no annotations, no output schema, and 0% schema coverage, the description covers most parameters and behavioral modes. Gaps remain around side effects and node-type requirements, but an agent has enough to invoke it 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?
Schema coverage is 0%, so the description must compensate and largely does: it defines enum values for axis, mode, and crossAlign, and explains the bounds override and its coordinate ordering. It leaves gap units and nodeIds semantics to inference, but the critical optional params are documented.
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 (space/align) on a specific resource (a set of nodes) with a scope constraint (along an axis). It clearly differs in intent from siblings like arrange_children or set_axis_align, though it never names an alternative outright.
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 mode breakdown implies what each option is for (fixed gap vs fill bounds vs center), which is implied usage guidance. It does not state when to prefer this tool over arrange_children/set_axis_align or any exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_figma_imagesC
Download SVG/PNG/GIF images used in a Figma file via the Figma REST API.
| Name | Required | Description | Default |
|---|---|---|---|
| nodes | Yes | ||
| fileKey | Yes | ||
| pngScale | No | ||
| localPath | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It reveals only that the Figma REST API is used; it does not say that files are written to localPath, whether existing files are overwritten, what auth/permissions are needed, or how format selection works.
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 clean sentence with no waste and the action front-loaded. It is appropriately sized, though its brevity here reflects under-specification rather than disciplined economy.
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 write-to-disk tool with no annotations, no output schema, and zero parameter documentation, the description is far too thin. An agent cannot determine how to select a format, what localPath semantics are, or how the nodes array maps to downloaded files.
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 0% across 4 parameters, and the description compensates for none of them. fileKey, nodes (with its nested nodeId/fileName/imageRef/cropTransform fields), localPath, and pngScale are all left completely unexplained, including how the image format is chosen.
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 (Download) plus the resource (SVG/PNG/GIF images used in a Figma file) and even the mechanism (Figma REST API). It is clear what the tool does, though it never differentiates itself from near-siblings like export_node_as_image or export_frames_to_disk.
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 or when-not-to-use guidance is given. With several closely related export/download siblings in the toolset, the agent is left to guess which one applies, and no prerequisites or context are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_pageA
Duplicate a page (including all contents) by pageId. Auto-suffixes the name (Page 2, Page 3...) unless a name is given. Pass activate: true to switch to the duplicate.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Explicit name for the duplicate. Omit to auto-name (base 2, base 3...). | |
| pageId | Yes | ||
| activate | No | Set the duplicate as the current page. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose two useful behavioral traits: automatic name suffixing ('Page 2, Page 3...') and that activate:true switches the current page. However, it omits whether the duplicate is created adjacent to the source, permission/auth requirements, and whether the original is unaffected.
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 tight sentences, zero filler, with the core action front-loaded and the conditional naming/activation details following. 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?
No output schema and no annotations, so the description should carry more. It never states what is returned (e.g. the new page's id/name), which an agent likely needs to act on the duplicate afterward, and gives no indication of failure modes if pageId is invalid.
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 67% (name and activate documented, pageId not), so the baseline is a 3. The description adds meaning for the naming fallback ('auto-suffixes... unless a name is given') and confirms activate semantics, but adds nothing for the undocumented pageId beyond restating it.
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 ('Duplicate a page') plus the scope of the copy ('including all contents'). This clearly distinguishes it from siblings like create_page (blank page) and clone_node (node-level copy), so an agent can route without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the naming and activation behavior, but the description never states when to choose duplicate_page over create_page or clone_node, nor any prerequisite (e.g. the page must exist / be in the current document). No explicit exclusions or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_component_propertyC
Rename or update the default value/preferred values of an existing component property.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No | ||
| updates | Yes | ||
| componentId | No | ||
| propertyName | Yes | ||
| componentSetId | No | ||
| preferComponentSet | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden for a mutation tool. It implies a write but says nothing about required permissions, whether a rename propagates to instances/overrides, whether changes are reversible, or what happens to values not included in the update. Significant disclosure 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?
A single focused sentence with the action front-loaded and no filler. It is efficient, though its brevity is partly a consequence of under-specification rather than deliberate restraint.
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 a nested updates object, no annotations, no output schema, and 0% schema description coverage, the description leaves too much unspecified. An agent cannot determine which identifier parameter to use or how the nested update payload is interpreted from this text alone.
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 0%, so the description must compensate, yet it only loosely names three updatable fields (name, defaultValue, preferredValues) that live inside the nested 'updates' object. It never addresses propertyName, nodeId, componentId, componentSetId, or preferComponentSet, nor the type/key shape or COMPONENT/COMPONENT_SET enum.
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 gives a specific verb ('rename or update') and resource ('an existing component property'), and it enumerates the editable facets (default value / preferred values). It does not explicitly distinguish itself from sibling tools like add_component_property, delete_component_property, or bind_component_property, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'existing' faintly implies this is for properties that already exist rather than creating them, but there is no explicit when-to-use guidance, no prerequisites, and no reference to alternatives such as add_component_property or delete_component_property. The agent is left to infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_component_slotB
Rename, resize, or reposition an existing SLOT node inside a component. Figma keeps the SLOT property's name in sync with the slot node's name.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| name | No | ||
| width | No | ||
| height | No | ||
| slotNodeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose one real side effect beyond the schema – that Figma syncs the SLOT property name with the slot node name on rename. However, it omits mutation semantics such as whether omitted properties are left untouched, permission requirements, and behavior on an invalid slotNodeId.
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 the action front-loaded and the name-sync caveat immediately after. No filler or restatement 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 mutation tool with no annotations, no output schema, and 0% parameter documentation, the description should do more. It covers the action and one side effect but leaves coordinate semantics and partial-update behavior unexplained, which are the details an agent most 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 coverage is 0% across 6 parameters, and the description only loosely maps its verbs to fields (name, width/height, x/y). It does not clarify whether x/y are absolute or relative to the component/parent, nor units for width/height, leaving the coordinate parameters ambiguous.
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 gives specific verbs (rename, resize, reposition) and a precise resource ('an existing SLOT node inside a component'), which separates it from create_component_slot and delete_component_slot. It does not explicitly name siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage only: the word 'existing' signals this is for modifying a slot rather than creating or deleting one, but there is no explicit when-to-use, when-not-to-use, or named alternative. The agent must infer routing from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_frames_to_diskA
Bulk-export frames from a Figma file to local disk via the REST API (requires FIGMA_TOKEN). Pass nodeIds, or pass pageId to export all top-level frames on a page. Renders PNG/JPG/SVG/PDF into a folder inside the figma-write-bridge repo.
| Name | Required | Description | Default |
|---|---|---|---|
| scale | No | ||
| format | No | ||
| pageId | No | ||
| fileKey | Yes | ||
| nodeIds | No | ||
| localPath | Yes | ||
| fileNamePrefix | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the auth requirement (FIGMA_TOKEN), that it goes through the REST API, and that output lands in a folder inside the figma-write-bridge repo rather than an arbitrary location. It omits overwrite behavior, rate limits, and error semantics for a disk-writing side effect.
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, front-loaded with the core action and mode selection before the output-location detail. No filler, though the parenthetical auth note could be folded in more tightly.
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 7-parameter export tool with no annotations and no output schema, the description covers the workflow and destination but never states what the call returns (paths? manifest? confirmation), nor how scale/fileNamePrefix affect results. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains nodeIds and pageId and implies the format values ('PNG/JPG/SVG/PDF') and the output folder for localPath. But scale, fileNamePrefix, and fileKey get no semantic treatment, leaving nearly half the parameters undocumented.
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 (bulk-export), resource (frames from a Figma file), and destination (local disk), plus the transport (REST API). The word 'bulk' implicitly separates it from the single-node export_node_as_image sibling, so an agent can pick it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit selection logic between two input modes: 'Pass nodeIds, or pass pageId to export all top-level frames on a page.' That resolves the main ambiguity an agent faces. It stops short of naming alternatives (export_node_as_image, download_figma_images) or stating 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.
export_node_as_imageA
Export a node as an image (PNG, JPG, SVG, or PDF) or as video (MP4, GIF, WEBM) for a top-level frame with Motion. Prefer localPath so bytes are written to disk inside the figma-write-bridge repo instead of returning base64. If the payload would exceed the MCP result cap, the server auto-saves under exports/ and returns the path. Video export is only available in Figma Desktop for animated top-level frames.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Video only. Frames per second. | |
| scale | No | ||
| format | No | PNG | JPG | SVG | PDF | MP4 | GIF | WEBM | |
| nodeId | Yes | ||
| quality | No | Video only. Quality preset, e.g. HIGH. | |
| localPath | No | ||
| loopCount | No | GIF only. Number of loops; omit for infinite. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the base64-vs-disk tradeoff, the auto-save fallback when the payload exceeds the MCP result cap (returning a path under exports/), and the platform/format restriction for video. It does not mention permission requirements or error behavior, but the core behavioral traits of an export operation are covered.
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 tight sentences with purpose front-loaded, then the localPath recommendation, then the fallback behavior, then the video constraint. No filler, and the most decision-relevant information comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema or annotations, so the description must stand alone; it covers output handling (base64 vs disk path), the size-cap fallback, and the video platform constraint. It leaves gaps around scale semantics and failure modes, but is largely sufficient for calling 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?
Schema coverage is 57%, so the description must partially compensate. It adds real meaning for format (enumerates all image and video options) and localPath (why to prefer it), but scale is undocumented in both schema and description, and fps/quality/loopCount get no elaboration beyond the schema text. Marginal value over structured data.
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 (export), resource (node), and the full output format set (PNG/JPG/SVG/PDF/MP4/GIF/WEBM), plus a scope qualifier ('top-level frame with Motion'). It is clear what the tool does, but it never names or contrasts with close siblings like export_frames_to_disk or download_figma_images, so differentiation is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Offers guidance on parameter choice ('Prefer localPath so bytes are written to disk instead of returning base64') and one hard constraint ('Video export is only available in Figma Desktop for animated top-level frames'). However, it never says when to pick this tool over the export_frames_to_disk or download_figma_images siblings, so alternative selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_tokensExport design tokensA
Export local Figma variables as a W3C-style Design Tokens object (nested by collection/variable name), plus a flat variables list. Colors are emitted as hex. With includeModes (default true) every mode's values are returned under tokensByMode like "Color/Dark"; the response also includes collections (each with its full modes list), modes (all mode keys emitted) and modeCount so you can verify all modes (not just the first) came through. Set includeModes=false to skip per-mode views. Pass collections (array of collection names or ids) to export only those collections — keeps the response small on large files.
| Name | Required | Description | Default |
|---|---|---|---|
| collections | No | Export only these collections (by name or id). Omit to export all. | |
| includeModes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses the return shape (tokensByMode keys like 'Color/Dark', collections with modes lists, modes and modeCount), hex color emission, and the includeModes default. It omits any note on permissions or whether it is purely read-only, but 'Export' plus the detail given makes behavior largely predictable.
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?
Front-loaded with the core purpose, then layers output structure and parameter behavior efficiently. It is dense and slightly long with em-dash asides, but each clause carries distinct information and nothing is 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 2-parameter tool with no output schema and no annotations, the description supplies the missing return-value contract in detail (tokensByMode, collections, modes, modeCount) plus parameter behavior. Only auth/permission context is absent, which is minor for an export/read operation.
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% (includeModes is undocumented in the schema), and the description compensates by explaining includeModes' default, its per-mode output effect, and how to disable it. The collections parameter adds the 'name or id' and response-size rationale beyond the schema text.
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: exports local Figma variables as a W3C-style Design Tokens object. It further disambiguates scope (nested by collection/variable name, plus a flat variables list) so it is clearly distinct from siblings like import_tokens and list_variables.
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 concrete conditional guidance for both parameters: includeModes=false to skip per-mode views, and passing collections 'keeps the response small on large files'. However, it never names an alternative tool (e.g., list_variables) or states when to prefer this over them, so it stops short of full when-vs-what guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_component_setB
Convert multiple existing frames (or components) into a variant component set: each frame becomes a COMPONENT, then they are combined into a COMPONENT_SET via combine_as_variants. Set propertyName to attempt adding a VARIANT property (best-effort).
| Name | Required | Description | Default |
|---|---|---|---|
| gap | No | ||
| gapX | No | ||
| gapY | No | ||
| name | No | ||
| columns | No | ||
| nodeIds | Yes | ||
| parentNodeId | No | ||
| propertyName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses that propertyName is 'best-effort' (i.e., may silently fail) and that nodes are destructively converted into components, but it omits permissions, reversibility, and what happens to the original frames/nodes.
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 dense sentence, front-loaded with the core action and followed by the mechanism and the propertyName hint. No filler, though the run-on clause structure slightly reduces scannability.
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 complex, mutating, 8-parameter tool with no annotations and no output schema, the description explains the transformation but leaves most parameters, permissions, and failure modes unaddressed. It is not sufficient on its own to call 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?
With 8 parameters at 0% schema description coverage, the description should compensate, yet it only addresses propertyName. The seven others (gap, gapX, gapY, name, columns, parentNodeId, nodeIds) are undocumented in both schema and description, so an agent cannot infer layout or naming behavior.
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+resource ('Convert multiple existing frames ... into a variant component set') and explains the mechanism: frames become COMPONENTs then combined into a COMPONENT_SET via combine_as_variants. An agent can distinguish this from the sibling combine_as_variants, which only combines pre-existing components.
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 only usage guidance is for propertyName ('set ... to attempt adding a VARIANT property'), with no explicit statement of when to pick this tool over combine_as_variants or create_component_from_node. Usage is implied by the described pipeline rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_bridge_statusA
Returns whether the local Figma plugin is connected, the active channel, and every connected channel with the Figma file it belongs to. The channel defaults to "default" and is tied to this server's FIGMA_BRIDGE_CHANNEL; the plugin UI joins that channel (one plugin = one channel/server).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does meaningfully disclose the channel model (one plugin = one channel/server, defaults to 'default', tied to FIGMA_BRIDGE_CHANNEL) and what is returned. It stops short of explicitly confirming the operation is side-effect-free.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the return payload, then the channel semantics. Efficient and low-waste, though the second sentence is dense with config 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?
With no output schema, the description does the necessary work of describing what is returned (connection status, active channel, connected channels). For a zero-param read status tool this is largely complete, missing only explicit usage/return-format specifics.
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 takes zero parameters, so per the rubric the baseline is 4. The schema is empty and nothing further is needed on the parameter front.
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 ('Returns') and a clear resource set: plugin connection state, active channel, and all connected channels with their Figma files. It's distinct from write/modify siblings, though it overlaps somewhat with list_channels and offers no explicit differentiation from that 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 explains the channel default and its tie to FIGMA_BRIDGE_CHANNEL but never says when to call this tool versus alternatives like list_channels or join_channel, and gives no preconditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_set_solid_fillSet solid fillC
Sets a SOLID fill on a node by nodeId.
| Name | Required | Description | Default |
|---|---|---|---|
| b | Yes | ||
| g | Yes | ||
| r | Yes | ||
| nodeId | Yes | ||
| opacity | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it discloses almost nothing beyond the verb. It does not say whether the fill replaces existing paints, whether the node must be a supported type, what permissions are needed, or what the response contains.
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 single sentence is front-loaded and free of padding, but it is under-specified rather than genuinely concise. It spends its one clause restating the tool name without adding the detail needed to call a 5-parameter color mutation.
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 annotations, no output schema, and five parameters at 0% schema description coverage, the definition is insufficient. Missing color-range conventions, replacement semantics, and node-type constraints leave real gaps an agent would need filled.
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 0% across five parameters, and the description only touches nodeId as the target identifier. The critical range conventions for r, g, b (0-1 vs 0-255) and opacity are entirely undocumented in both the schema and the description, so an agent cannot construct correct color values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Sets a SOLID fill on a node') and the emphasis on SOLID implicitly separates it from the gradient and image fill siblings. However, it does not explicitly name set_gradient_fill, set_image_fill, or set_fill_color, leaving the agent to infer the distinction.
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?
There is no when-to-use guidance and no mention of alternatives such as set_gradient_fill, set_image_fill, apply_fill_style, or set_fill_color, all of which are plausible siblings for a fill operation. The agent must guess which fill setter applies to its situation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_set_textSet textB
Sets characters on a TEXT node (by nodeId or current selection).
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No | ||
| characters | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It implies a mutation ('Sets') on a TEXT node, but does not say whether existing characters are replaced, what happens if the node is not TEXT, what permissions are required, or what the call returns. For a write operation with zero annotation coverage, this is a significant 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?
One front-loaded sentence with no filler; the verb, resource, and targeting mechanism are conveyed immediately. The length is appropriate for a two-parameter tool and every word 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 two-parameter mutation with no annotations, no output schema, and 0% schema coverage, the description gives enough to attempt a basic call: it names the required text input and optional node targeting. It remains incomplete on behavioral impact and parameter constraints, but the core invocation 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?
Schema coverage is 0% for two parameters, so the description must add semantics. It clarifies that nodeId is optional and falls back to the current selection, which is useful, and 'characters' is implicitly the text to set. However, it provides no format, constraints, or behavior for the characters parameter, so it only partially compensates for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Sets characters') and resource ('TEXT node'), and explains the targeting mechanism (nodeId or current selection). It is clear on its own but never distinguishes itself from sibling tools like set_text_content or set_multiple_text_contents, so it does not reach a 5.
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 offers no guidance on when to use this tool versus alternatives such as set_text_content, find_and_replace_text, or set_multiple_text_contents. The parenthetical only explains how to target a node, not when this tool is appropriate or when another tool should be chosen.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_and_replace_textA
Search TEXT node characters for a literal string or regex and replace matches, optionally across every page in the file (not just the current one). Pass dryRun: true first to preview matches before committing.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| dryRun | No | Preview matches without writing changes. | |
| allPages | No | Default false: only search the current page. | |
| useRegex | No | ||
| matchCase | No | ||
| wholeWord | No | Ignored when useRegex is true. | |
| rootNodeId | No | Restrict the search to this node's subtree on the current page. Ignored on other pages when allPages is true. | |
| replacement | Yes | ||
| maxPreviewLength | No | Truncate before/after preview snippets in dryRun results. Default 200. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the destructive nature of replacement, the current-page vs all-pages scope, and the dry-run preview mechanism, which is meaningful behavioral context. It does not state reversibility/undo behavior, auth requirements, or what happens on zero matches.
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, front-loaded with the core search/replace action, followed by scope and the dry-run recommendation. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter mutation tool with no annotations and no output schema, the description covers purpose, scope, and the preview flow but leaves several flags (useRegex, matchCase, wholeWord) and no-match/return behavior unexplained. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 56% (only dryRun, allPages, wholeWord, rootNodeId, maxPreviewLength are documented). The description adds that query accepts a literal string OR regex (implying useRegex) and reinforces dryRun/allPages, but is silent on useRegex, matchCase, wholeWord, and maxPreviewLength, so it only partially compensates for the coverage gap.
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 clear verb+resource pair ("Search TEXT node characters ... and replace matches") that an agent can distinguish from generic text siblings like set_text_content or bulk_rename. It scopes the target to TEXT node characters, but never explicitly contrasts itself with those 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?
Provides a useful operational workflow hint ("Pass dryRun: true first to preview matches before committing") and clarifies the optional cross-page scope. However, it names no alternatives and gives no when-not-to-use guidance relative to the many text-editing siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_nodesA
Query the document for nodes matching a set of predicates, evaluated inside Figma so only matching rows come back (use this instead of reading a whole subtree and filtering). All predicates are optional and are ANDed together. Returns a columnar table: fields names the columns, rows holds one array per match, plus scanned/total/truncated counts. Examples: {types:["INSTANCE"], mainComponentName:"Button", fillHex:"#ff0000"} finds red button instances; {missingFillStyle:true} finds hardcoded fills with no style or variable bound (design-system drift); {types:["INSTANCE"], hasOverrides:true} finds overridden instances.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Glob against the node name: * and ? wildcards, anchored (e.g. "Button/*"). | |
| limit | No | Max matches to return. Default 200, cap 1000. | |
| types | No | Node types to match, e.g. ["INSTANCE","TEXT"]. | |
| fields | No | Extra per-match columns: fillHex, characters, boundVariableIds, or any node property (e.g. opacity). | |
| offset | No | Skip this many matches, for paging. | |
| fillHex | No | Match nodes with a SOLID fill of this hex, e.g. "#ff0000". | |
| verbose | No | Return an array of objects instead of the columnar fields/rows table. | |
| visible | No | Filter by visibility. | |
| allPages | No | Search every page. Default false (current page only). | |
| matchCase | No | Case-sensitive name/text matching. Default false. | |
| nameRegex | No | Regex against the node name (unanchored). Use instead of name for complex patterns. | |
| layoutMode | No | Match auto-layout mode: NONE, HORIZONTAL, VERTICAL, or GRID. | |
| rootNodeId | No | Restrict to this node's subtree (any page). When set, allPages is ignored. | |
| fillStyleId | No | Match nodes using this paint style id. | |
| textStyleId | No | Match nodes using this text style id. | |
| hasOverrides | No | Instances only: true = has overrides, false = clean. Implies types:["INSTANCE"]. | |
| textContains | No | Substring of a TEXT node's characters. Implies types:["TEXT"]. | |
| fillTolerance | No | 0-1 RGB distance allowed around fillHex. Default 0 (exact). ~0.1 catches near shades. | |
| boundVariableId | No | Match nodes bound to this specific variable id. | |
| hasBoundVariable | No | true = nodes with any bound variable; false = nodes with none. | |
| missingFillStyle | No | true = nodes with a solid fill but no paint style and no bound variable (hardcoded colors); false = the inverse. | |
| mainComponentName | No | Instances only: substring of the main component's name. Implies types:["INSTANCE"]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses in-engine evaluation, that all predicates are optional and ANDed, the columnar return shape (fields/rows plus scanned/total/truncated counts), and implicit type constraints. It does not cover permissions, error behavior, or performance limits, so it falls just short of complete.
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?
Front-loaded with the core purpose and the anti-pattern it replaces, followed by predicate semantics and then worked examples. Efficient, though the example block is dense; every element still earns its place by illustrating the predicate system.
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 22-parameter, no-required, annotation-less query tool, the description supplies the execution model, combination semantics, and return format (including truncation counts) that no other field provides. A reader has enough to call it correctly; only edge-case/error behavior is absent.
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 baseline is 3, but the description adds real meaning beyond the schema: it explains AND-combination semantics and shows how individual predicates (mainComponentName, fillHex, missingFillStyle, hasOverrides) compose into queries, including the design-system-drift use case.
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+resource (query the document for nodes matching predicates) and its execution model (evaluated inside Figma so only matching rows return). It also distinguishes itself from the read-subtree-and-filter approach used by siblings like get_document_tree, so the agent can tell them apart.
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 'use this instead of reading a whole subtree and filtering,' naming the alternative pattern being replaced. Three concrete examples map conditions (red button instances, hardcoded fills/design-system drift, overridden instances) to predicate combinations, leaving no ambiguity about when to reach for it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_gridA
Generate a grid of items inside a parent. Clones itemNodeId if given, otherwise creates rectangles of itemWidth x itemHeight. Use {i} in name for the running index.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| rows | No | ||
| columns | No | ||
| spacingX | No | ||
| spacingY | No | ||
| itemWidth | No | ||
| itemHeight | No | ||
| itemNodeId | No | ||
| parentNodeId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the two behavioral branches (clone itemNodeId when supplied, otherwise create rectangles of itemWidth x itemHeight), which is genuinely useful. However it says nothing about permissions, whether existing children are affected, or what the call returns, leaving meaningful behavioral gaps for a 9-param mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, and the core behavior is front-loaded. The {i} naming convention is a well-placed detail that earns its 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 9-parameter tool with no annotations and no output schema, the description covers the essential generation logic but leaves notable holes: spacing semantics, defaults for rows/columns, return value, and the fact that parentNodeId is listed as optional despite the description saying items go 'inside a parent'. The description is serviceable but not 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 0%, so the description must compensate. It usefully explains the non-obvious parameters (itemNodeId cloning, itemWidth/itemHeight rectangle sizing, and the {i} placeholder in name), but says nothing about rows, columns, spacingX, or spacingY, and never clarifies the role or requiredness of parentNodeId.
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 ('Generate') and resource ('a grid of items inside a parent'), which is a distinct batch-creation operation not covered by siblings like create_rectangle or clone_node_into_parent. It does not name any sibling for differentiation, but the purpose is unambiguous.
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?
Usage is only implied: an agent can infer it is for producing repeated grid content in one call, but there is no explicit when-to-use, when-not-to-use, or routing against alternatives such as create_rectangle plus clone_node_into_parent. Adequate but with a clear gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_paletteB
Generate a tonal 50..900 palette (default 10 steps) from a seed hex color. Light steps mix toward white, dark steps toward black. Optionally creates paint styles (createStyles=true), COLOR variables in a ' Tokens' collection (createVariables=true), and a swatch frame with labeled rectangles (createFrame=true).
| Name | Required | Description | Default |
|---|---|---|---|
| gap | No | ||
| hex | Yes | ||
| name | No | ||
| steps | No | ||
| prefix | No | ||
| createFrame | No | ||
| swatchWidth | No | ||
| createStyles | No | ||
| parentNodeId | No | ||
| swatchHeight | No | ||
| createVariables | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It helpfully explains the palette algorithm (light steps mix toward white, dark steps toward black) and names the optional side effects, but it omits whether the tool overwrites existing assets, what context it needs (e.g., current page, target node), and what it returns.
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, front-loaded with the core action and followed by behavior and optional modes. Every sentence adds actionable information 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 an 11-parameter tool with no annotations and no output schema, the description is not complete enough. It does well on the overall behavior but omits explanations for over half the parameters and provides no operational context such as Figma environment requirements or expected return value.
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 0% for 11 parameters. The description gives meaning to only a subset: hex (seed), steps (default 10), createStyles, createVariables, createFrame. It leaves gap, name, prefix, swatchWidth, swatchHeight, and parentNodeId completely undocumented in both schema and prose.
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 ('Generate a tonal 50..900 palette') with a clear input ('from a seed hex color') and scope (default 10 steps). It also names the optional artifacts it can produce, making the tool easily distinguishable from siblings like create_paint_style or create_variable, which each handle single artifacts.
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?
There is no explicit when-to-use guidance, no alternatives suggested, and no prerequisites mentioned. The optional flags imply modes of use, but the description never tells the agent when to set createStyles, createVariables, or createFrame versus calling other tools, nor whether the tool requires a Figma selection or existing collection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_pagesA
Compact map of every page in the open file: id/name/childCount. Pass includeTopLevel: true to also list each page's top-level frames (id/name/type/childCount). Use this once to get a full-file overview before targeted reads.
| Name | Required | Description | Default |
|---|---|---|---|
| includeTopLevel | No | Include each page's top-level frames. Default false to keep output small. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does reasonably well: it discloses the output shape (id/name/childCount), the optional frame expansion, and that includeTopLevel defaults false 'to keep output small'. It does not state read-only status or note any size/pagination limits on very large files, leaving a minor 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 short sentences with the primary purpose front-loaded, the optional expansion next, and the usage hint last. No filler or 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?
Although there is no output schema, the description specifies the returned fields and how includeTopLevel changes them, which is what an agent needs to call it correctly. Missing only edge-case behavior such as large-file handling or ordering.
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 includeTopLevel, giving a baseline of 3. The description restates the effect ('also list each page's top-level frames') without adding syntax or format detail beyond what the schema 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 states a concrete verb and resource ('Compact map of every page in the open file') and even enumerates the returned fields (id/name/childCount), so the agent knows exactly what this produces. It does not name a sibling like get_document_info or get_document_tree to differentiate itself, which keeps it from a 5.
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?
'Use this once to get a full-file overview before targeted reads' gives a clear condition for when this tool applies and positions it ahead of the read tools. It stops short of explicitly naming alternatives or stating when-not-to-use, so it lands at 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_animation_presetsA
List curated motion presets plus the official Figma transition and easing values supported by this bridge. Use these values with set_reactions, upsert_reaction, set_transition_reaction, and set_smart_animate_reaction.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only lookup and discloses that the values are the ones 'supported by this bridge', which is useful scoping. It says nothing about response shape, pagination, or whether the preset list is static or file-dependent, leaving behavioral gaps for a tool with zero annotation coverage.
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, zero waste. The resource is front-loaded and the downstream usage note follows immediately. Nothing is repeated from the title or 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 lookup with no output schema and no annotations, the description covers what is returned and how to consume it. The remaining gap is that the caller cannot anticipate the shape of the returned preset/transition/easing data, but for a simple enumeration this 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 tool takes no parameters and the schema is an empty object, so there is nothing to document and no semantic burden to carry. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it lists curated motion presets plus the official Figma transition and easing values the bridge supports. The scope is concrete enough that an agent knows what it gets back. It does not explicitly distinguish itself from the sibling list_animation_styles, which is the one nearby name that could be confused with it.
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 tells the agent what to do with the output: feed the values into set_reactions, upsert_reaction, set_transition_reaction, and set_smart_animate_reaction. That is real routing guidance. It gives no when-not condition or statement of when this lookup is unnecessary, 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.
get_annotationsA
Get annotations on a node or in a subtree. Page-wide scans are paged (default limit 100). Pass nodeId for one node, or rootNodeId to scope. includeCategories defaults to false (pass true to expand category labels).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max annotated nodes to return. Default 100. | |
| nodeId | No | ||
| offset | No | ||
| rootNodeId | No | Subtree to scan when nodeId is omitted. Defaults to the current page or single target frame. | |
| includeCategories | No | Include category id/label/color on each annotation. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that page-wide scans are paged (default limit 100) and that includeCategories defaults to false, which is real behavioral context. It says nothing about ordering, output shape, or failure modes, so the disclosure is helpful but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences that each carry actionable information: scope, paging, and parameter routing. No filler, though the includeCategories note is somewhat parenthetical.
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 5-parameter read tool with no output schema and no annotations, the description covers scope selection, pagination, and a key default. The one real gap is the undocumented offset parameter, which no structured field compensates for.
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 60%, with nodeId and offset undocumented in the schema. The description compensates by explaining that nodeId targets one node and rootNodeId scopes to a subtree, and by clarifying the includeCategories expansion behavior. offset remains undocumented in both places, keeping it below 5.
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 (get annotations) plus scope (a node or a subtree), so an agent can distinguish it from the setter siblings set_annotation and set_multiple_annotations. It does not, however, name or contrast with those siblings explicitly.
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 clear context for parameter routing: 'Pass nodeId for one node, or rootNodeId to scope.' That tells the agent how to choose between the two mutually exclusive scoping paths. It offers no explicit when-not guidance or comparison against alternative read tools like get_node_info.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_changes_sinceB
Return nodes this bridge mutated since a cursor (re-read only what changed, not the whole doc). Pass prior currentSeq as sinceSeq to page. Cursor resets when the MCP server restarts.
| Name | Required | Description | Default |
|---|---|---|---|
| sinceSeq | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that the cursor is ephemeral and resets when the MCP server restarts, and that only mutated nodes come back, but it omits return shape, ordering, and behavior when the cursor is stale/invalid.
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, front-loaded sentences with no filler; the core behavior leads and the paging and reset caveats follow. Efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description should carry more weight. It hints that a currentSeq is returned ('Pass prior currentSeq') but never states the actual return contents, leaving the paging loop underspecified.
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 has 0% description coverage on the single sinceSeq parameter, so the description must compensate. It explains that sinceSeq is a prior currentSeq used to page, which helps, but never says where currentSeq originates (presumably the return value), leaving the parameter only partially grounded.
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 ('Return nodes this bridge mutated since a cursor') and contrasts itself with a full-document read. An agent can grasp it is an incremental/diff read, though it never names a sibling to disambiguate against.
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 paging hint ('Pass prior currentSeq as sinceSeq to page'), which implies you call it after holding a cursor. But there is no explicit when-to-use vs alternatives or when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_component_property_definitionsC
Inspect component or component-set property definitions for authoring and verification.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No | ||
| componentId | No | ||
| componentSetId | No | ||
| preferComponentSet | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Inspect' implies a non-mutating read, but the description says nothing about permissions, what happens with the componentId/componentSetId/nodeId combinations, or what the result contains. For a zero-annotation tool this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is efficient, though the vague 'for authoring and verification' clause is filler rather than useful specification.
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 annotations, no output schema, and four completely undocumented parameters, the description is far too thin for an agent to call this tool correctly. It should at minimum explain the identifier options and the read-only nature of the call.
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?
Four parameters (nodeId, componentId, componentSetId, preferComponentSet) with 0% schema description coverage and no mention of any of them in the description. The critical ambiguity - whether nodeId, componentId and componentSetId are alternatives or combinable, and what preferComponentSet resolves - is left entirely undocumented.
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 ('Inspect') and a precise resource ('component or component-set property definitions'), so the agent knows this is the read counterpart to add_component_property/edit_component_property. It does not, however, explicitly name or distinguish itself from those 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 trailing phrase 'for authoring and verification' loosely implies a context, but there is no explicit when-to-use, no when-not-to-use, and no alternative tool named. An agent must infer that this is the lookup step before add/edit/delete/bind operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_infoC
Get information about the current Figma document.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. 'Get' implies a read, but nothing is said about return contents or scope, and no output schema exists to compensate, so the disclosure is thin for a context-fetch tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with no waste and the verb front-loaded. It is well-structured and appropriately brief, though its brevity is arguably under-specification rather than tightness.
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 annotations, no output schema, and no parameters, the description is the only source of information and it says almost nothing about what the returned document info contains or its scope relative to get_document_tree/get_all_pages. Too incomplete for an agent to use confidently.
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 takes zero parameters, which is the baseline-4 case: there is nothing for the description to disambiguate beyond what the empty schema already conveys.
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?
It names a clear verb and resource ('Get information about the current Figma document'), so the basic purpose is legible. But 'information' is vague about what is actually returned, and it offers no differentiation from heavily overlapping siblings such as get_document_tree, get_all_pages, and get_figma_data.
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?
There is no when-to-use guidance, no prerequisites, and no named alternative, despite a crowded sibling set of other document/pages/data readers where selection guidance is exactly what an agent needs. Usage must be entirely inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_treeA
Compact structural tree of the whole document (or a subtree). Returns a flattened columnar table: fields lists the column names, rows holds one array per node in pre-order, and the depth column gives nesting level (depth 0 is the root, each +1 is a child of the nearest preceding row with depth-1). Every node is {id, name, type}; no extra fields unless requested. Default maxDepth is 3. Hidden layers are omitted unless includeHidden is true. Pass fields to pull extra per-node values (characters, fills, fillHex, fillCount, strokes, x, y, width, height, absoluteBoundingBox, strokeWeight, cornerRadius, fillStyleId, strokeStyleId, textStyleId, layoutMode, layoutWrap, layoutSizingHorizontal, layoutSizingVertical, layoutPositioning, primaryAxisAlignItems, counterAxisAlignItems, layoutGrow, itemSpacing, padding, visible, opacity). Use rootNodeId to scope to a frame/page and excludeTypes (e.g. ["VECTOR"]) to drop icon noise. verbose returns the nested tree instead.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Extra per-node fields. Add "characters" to include TEXT content. | |
| verbose | No | Return the nested {..., children:[...]} tree instead of the flattened columnar table. | |
| maxDepth | No | Levels of children to expand. Default 3. Omit for compact overview. | |
| rootNodeId | No | ||
| excludeTypes | No | ||
| includeHidden | No | Include hidden layers. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and handles it well: it discloses the pre-order flattening convention, the depth-encoding rule, default maxDepth=3, that hidden layers are omitted unless includeHidden is true, and that nodes carry only {id,name,type} unless extra fields are requested. It omits any mention of auth/permission needs or result-size limits, which keeps it short of a 5 for a whole-document read.
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?
Front-loaded and information-dense, with the output contract stated first. However, the exhaustive enumeration of ~25 field names is a large inline block that reads more like reference material than description, and could be pushed to schema or docs without losing agent-relevant meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must explain return values — and it does so fully: columnar layout, row/node shape, ordering, depth semantics, and the verbose alternative. Combined with defaults and filtering behavior, an agent has everything needed to call it 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?
Schema coverage is a middling 67%, and the description compensates by explaining every parameter: fields (with examples and the 'characters' tip), verbose (nested vs flattened), maxDepth (default + 'omit for compact overview'), rootNodeId (scoping), excludeTypes (example value), and includeHidden. It adds real meaning beyond the schema, especially for the two undocumented params.
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+resource ('structural tree of the whole document (or a subtree)') and immediately specifies the output shape (flattened columnar table with fields/rows/depth). It also distinguishes itself from its own verbose mode, so an agent knows exactly what it gets.
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 clear operational guidance: use rootNodeId to scope to a frame/page, excludeTypes to drop icon noise, fields to pull extras, verbose for the nested alternative. It does not, however, contrast itself against nearby siblings like get_node_info, read_my_design, find_nodes, or scan_nodes_by_types, so an agent must infer when this beats those.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventsA
Read pushed Figma events (selectionchange/documentchange) since a sequence cursor. Pass the previous call's currentSeq as sinceSeq to page forward. Cursor state lives in the MCP server process and resets on restart.
| Name | Required | Description | Default |
|---|---|---|---|
| sinceSeq | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and usefully discloses that cursor state lives in the MCP server process and resets on restart. It also identifies the event types read. It does not describe authentication needs, blocking behavior, or return payload details.
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 tight sentences, front-loaded with the core action. Every sentence adds necessary information about event types, paging, or cursor lifetime.
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 tool with no annotations and no output schema, the description covers the important cursor mechanics and server-state reset. It leaves some return-value and first-call details implicit, but the essential invocation context 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 coverage is 0%, so the description must explain sinceSeq; it does so by defining it as the previous call's currentSeq used for paging forward. It does not say what happens when sinceSeq is omitted or provide a default-start example.
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 specifies a clear verb and resource: reading pushed Figma events of types selectionchange/documentchange since a sequence cursor. It does not explicitly differentiate itself from siblings such as subscribe_events or get_changes_since, so sibling selection relies on inference.
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 operational guidance: pass the previous call's currentSeq as sinceSeq to page forward. It provides clear usage context but does not state when to prefer this tool over subscribe_events, unsubscribe_events, or get_changes_since.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_figma_dataA
Get Figma file data via the REST API. Pass nodeId to fetch only that node (avoids pulling the whole file). depth limits recursion on file/nodes. Returns file (or nodes), plus styles/components/component_sets when no nodeId is given.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| nodeId | No | ||
| fileKey | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure. It reveals that the call goes through the REST API (network dependency), that nodeId avoids pulling the whole file, that depth limits recursion, and what gets returned ('file (or nodes), plus styles/components/component_sets when no nodeId is given'). Missing are authentication requirements, rate limits, and error-handling behavior, so it is useful but not comprehensive.
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 tightly written sentences. Purpose is front-loaded, then parameter effects, then return values. Every sentence adds distinct information with no redundancy 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?
No output schema exists, so the description appropriately summarizes return values. It also covers the key behavioral effects of the two optional parameters. It omits auth prerequisites and fileKey format details, but for a simple read-only getter the coverage 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?
Schema description coverage is 0%, so the description must compensate. It explains nodeId ('fetch only that node') and depth ('limits recursion on file/nodes'), and ties nodeId presence to the return shape. fileKey is not explained, but it is the obvious required identifier; overall the description adds substantial meaning beyond the bare 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?
States a specific verb and resource: 'Get Figma file data via the REST API.' Distinguishes itself from plugin-local siblings by specifying the REST API path, and clarifies optional node-level fetching. Does not name a sibling directly, so 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives parameter-level guidance: 'Pass nodeId to fetch only that node (avoids pulling the whole file)' and 'depth limits recursion.' This implies when to pass nodeId vs omit it, but there is no explicit when-to-use vs alternatives or when-not-to-use guidance, leaving the agent to infer selection among many getter siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_font_listA
List the distinct fonts (family + style, plus variationSettings when the text uses a variable font) used in the current page or a rootNodeId subtree, with usage counts. Pair with get_font_variation_axes to inspect a family's OpenType axes.
| Name | Required | Description | Default |
|---|---|---|---|
| rootNodeId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does meaningful work: it discloses the returned fields, the conditional presence of variationSettings (only for variable fonts), and the inclusion of usage counts. It does not state read-only status explicitly or mention auth/permission needs, but for a List operation the behavioral picture is largely conveyed.
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 zero filler; the scope and return content are front-loaded, and the cross-reference comes last. 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?
With no output schema and no annotations, the description must cover purpose, scope, and returns, which it does. It leaves the read-only nature and default scope only implicit, but for a simple one-parameter list tool the definition is essentially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain the single parameter, and it does: rootNodeId is framed as selecting a 'subtree', implying its scoping role and that omission defaults to the current page. That is genuine meaning beyond the bare string type in 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 (List) and resource (distinct fonts) and pins down the scope precisely: 'the current page or a rootNodeId subtree'. It also enumerates the return shape (family + style, variationSettings, usage counts) and references the complementary sibling get_font_variation_axes, so an agent can distinguish it from that tool without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when the tool applies (current page vs. a rootNodeId subtree) and directs the agent to a related tool for axis inspection. However, it stops short of explicit when-not guidance or naming a true alternative, since no competing font-listing tool exists among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_font_variation_axesA
Return the OpenType variation axes a font family exposes (e.g. wght, slnt, opsz), or null/variable:false for a static family. Use this before setting variationSettings on create_text / set_text_style / create_text_style. Requires Figma Desktop with Plugin API Update 138 (variable fonts).
| Name | Required | Description | Default |
|---|---|---|---|
| family | Yes | Font family name, e.g. "Inter". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and largely delivers: it discloses the platform prerequisite (Figma Desktop with Plugin API Update 138 for variable fonts) and the two possible result shapes (axis list vs. null/variable:false). It does not describe the axis objects' internal fields (e.g. min/max/default), which leaves a modest gap for a read tool with no output 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 tightly packed sentences: the first front-loads what is returned including edge cases, the second covers usage and prerequisites. Zero filler and 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?
For a one-parameter read tool with no output schema, the description adequately explains the return (axes or null/variable:false) and the environment requirement. It stops short of detailing the axis payload structure, which is the only thing an agent might still want to know.
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 the single 'family' parameter is documented in the schema with an example ('Inter'). The description adds no syntax or format detail beyond what the schema already provides, 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?
States a specific verb (Return) and resource (the OpenType variation axes a font family exposes), gives concrete examples (wght, slnt, opsz), and covers the static-family case (null/variable:false). An agent can distinguish this from sibling text/style tools without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it — 'Use this before setting variationSettings on create_text / set_text_style / create_text_style' — naming the exact downstream tools it precedes. No inference required about timing or purpose relative to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_grid_layoutA
Read a GRID frame's track counts, gaps, per-track sizes, and every child's cell, span, and alignment. Returns isGrid:false for a frame that is not in GRID layout. Call this before repositioning children so you know the grid's bounds.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose a non-obvious behavior: isGrid:false is returned for frames not in GRID layout, which prevents the agent from misinterpreting the response. It stops short of confirming read-only safety, permission requirements, or failure modes for an invalid nodeId.
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 tight clauses: what it reads, the edge-case return, and the recommended timing. Front-loaded with the primary payload and no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must describe returns itself, and it does name the return fields plus the isGrid flag. It is complete enough to call correctly, though the exact shape of the returned data and nodeId semantics remain implicit.
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 required nodeId has 0% schema description coverage and is never mentioned in the description. The phrase "a GRID frame" implicitly indicates the id targets a frame node, but there is no explicit statement of what the id refers to, so compensation for the coverage gap 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?
Specific verb (Read) plus precise resource (a GRID frame's layout) and an enumerated return set: track counts, gaps, per-track sizes, and each child's cell, span, and alignment. This clearly separates it from the write-side siblings set_grid_layout, set_grid_child_position, and reorder_grid_tracks.
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 to call it: "Call this before repositioning children so you know the grid's bounds." That gives a real workflow condition, but it does not name the specific alternative tools or state what to do for non-grid frames beyond the isGrid:false return.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_instance_propertiesC
Get componentProperties for an instance.
| Name | Required | Description | Default |
|---|---|---|---|
| instanceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, yet it says nothing about error behavior for a missing/invalid instanceId, whether the read is non-destructive, or the shape of what comes back. 'Get componentProperties' is purely informational and adds no 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?
A single short sentence with the resource front-loaded and zero padding or filler. It is appropriately sized for what it attempts, though its brevity reflects under-specification rather than disciplined economy.
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, no annotations, and an undocumented parameter, the description is the only source of information, and it omits the return structure (what a componentProperty looks like) and error conditions. For a tool whose whole value is returning a specific property payload, this is a substantial 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?
Schema description coverage is 0%, so the description must compensate for the undocumented instanceId parameter. It only implies via 'for an instance' that instanceId identifies the target instance, adding no format, source (node id vs. key), or lookup detail beyond what the parameter name already suggests.
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 (Get) and a specific resource (componentProperties) scoped to an instance, which is more precise than a bare tautology. It is distinguishable from set_instance_properties (the mutation counterpart) and get_instance_slots (slots rather than properties), but it never names those siblings to reinforce the distinction.
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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as get_component_property_definitions or get_instance_slots, which an agent could easily confuse with this call. Usage must be entirely inferred from the name and the one-word resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_instance_slotsB
List SLOT nodes inside an instance (for inserting content into slots).
| Name | Required | Description | Default |
|---|---|---|---|
| instanceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. 'List' implies a read-only operation, but nothing is said about return format, ordering, pagination, empty-slot behavior, or whether it errors on non-instance nodes.
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?
One short, front-loaded sentence with no waste and the resource named first. It is efficient, though arguably too thin for the disclosure burden it carries.
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 and no annotations, the description is the only documentation, and it covers the basic operation adequately for a single-parameter list tool. It falls short on return shape and the handoff to append_to_slot.
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 0%, so the description must compensate and largely does not. 'Inside an instance' loosely ties instanceId to its meaning, but no ID format, source, or example is given.
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 (List) and resource (SLOT nodes) plus scope (inside an instance), so an agent immediately knows what it retrieves. It does not distinguish itself from nearby siblings such as get_instance_properties or get_instance_source, which also target instance internals.
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 parenthetical '(for inserting content into slots)' implies the workflow context — call this before append_to_slot — but never states when to use it, when not to, or names the follow-up tool explicitly. Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_instance_sourceB
Get main component/component-set keys and properties for an instance (to verify design system provenance).
| Name | Required | Description | Default |
|---|---|---|---|
| instanceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It only implies read-only via 'Get' and says roughly what is returned; it does not state what happens if instanceId is not an instance node, whether detached instances are handled, or any error/auth behavior.
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 front-loaded sentence with the verb and resource first and the rationale in a trailing parenthetical. Efficient, though terse enough that it trades brevity for missing detail rather than earning every clause.
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?
There is no output schema, so the description must carry the return-shape burden; it does name 'keys and properties', which is helpful, but leaves the exact response structure and edge cases unstated for a tool with no annotations and an undocumented parameter.
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 0% and the single instanceId parameter has no description in the schema. The description's mention of 'an instance' only weakly signals that instanceId is an instance node; it adds no format guidance (e.g. Figma node-key syntax) beyond the parameter name.
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: retrieve the main component/component-set keys and properties for an instance. The parenthetical scopes the intent (design system provenance), which separates it from generic getters like get_instance_properties. It does not explicitly name a sibling it is not, so a 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'to verify design system provenance' implies when an agent would reach for this rather than get_instance_properties or get_instance_slots, but no alternative tool or exclusion is stated. Usage is inferable, not prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_local_componentsA
Get information about local components across all pages: id, name, type, description, publish key, and a property count, returned as { components, total, offset, limit, pageCount } so you can page every component (default limit 500). Pass includeProperties: true to also get simplified component property definitions (for building library catalogs). Pass verbose to skip compacting; the columnar format is used otherwise.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max components per page (default 500). | |
| offset | No | Skip this many (default 0). | |
| verbose | No | Return an array of objects instead of the columnar fields/rows table. | |
| includeProperties | No | Include full componentPropertyDefinitions. Default false (returns propertyCount only) to keep output small. | |
| includeComponentSets | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the default page limit, the columnar-vs-verbose output format behavior, and the compacting trade-off that includeProperties affects. It stops short of stating read-only semantics or rate limits, but the disclosure of output structure and format is substantive.
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?
Front-loads the resource and returned shape, then layers parameter guidance efficiently. Dense but each sentence earns its place; minor packing of multiple ideas into single sentences keeps it from a 5.
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 and no annotations, the description compensates by spelling out the returned object shape ({ components, total, offset, limit, pageCount }) and paging behavior. The one gap is includeComponentSets, which is undocumented everywhere.
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 80%, so the schema already documents limit, offset, verbose and includeProperties, making 3 the baseline. The description adds marginal value (default limit 500, catalog use-case for includeProperties) but omits any mention of includeComponentSets, leaving one parameter unexplained in both places.
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 (Get) and resource (local components across all pages), then enumerates the exact fields returned (id, name, type, description, publish key, property count). An agent can distinguish it from siblings like search_components or get_component_property_definitions without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Offers contextual guidance on parameters (paging every component, using includeProperties 'for building library catalogs'), but never names an alternative tool or states when to prefer this over search_components. Usage is implied through parameter hints rather than explicit selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_motionA
Read Motion state — timelines (with durations in seconds), the current playheadPosition in seconds (undefined when no timeline is active), manual keyframe tracks, applied animation styles, and resolved animations — for the given nodes, or the current selection when none are given. Motion is distinct from prototype reactions: reactions link frames on click, Motion animates properties over a timeline inside one top-level frame. Returns motionEnabled:false when the account lacks the Motion feature flag.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No | ||
| nodeIds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden and does it well: it names returned fields, notes playheadPosition is 'undefined when no timeline is active', and warns that motionEnabled:false is returned when the feature flag is absent. It omits edge-case behavior for invalid/empty nodeId input, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and the resource enumeration, and the two follow-on sentences (reaction distinction, feature-flag behavior) each add real routing value rather than filler. The first sentence is dense with em-dash clauses but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations exist, so the description is the sole carrier of both return shape and behavioral traits, and it covers both substantively. Only minor gaps remain, such as error handling for invalid node identifiers.
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 0% across two parameters, so the description must compensate. It does document the optionality and fallback behavior ('current selection when none are given'), which is genuinely useful, but it never distinguishes the singular nodeId from the array nodeIds or whether one overrides the other.
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?
A specific verb (Read) plus resource (Motion state), with an explicit enumeration of what the state contains: timelines, playheadPosition, keyframe tracks, animation styles, and resolved animations. It also carves out a clear conceptual boundary versus sibling reaction tools ('reactions link frames on click, Motion animates properties over a timeline'), so an agent can separate it from get_reactions/list_animation_styles without opening schemas.
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?
States the calling condition precisely — 'for the given nodes, or the current selection when none are given' — and contrasts the concept with prototype reactions. However, it stops short of explicit when-to-use/when-not routing among nearby siblings like get_animation_presets or list_animation_styles, so alternative selection is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_infoA
Compact layout-aware summary of a node: size, auto-layout (mode, hug/fill, positioning, padding, gap, alignment), fillHex/fillCount, truncated text, and childCount. VECTOR children are omitted unless excludeTypes is []. Default maxDepth is 0 (the node itself). Pass fields to request a subset, or verbose for the raw REST dump.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Replace the compact default with only these fields (plus id/name/type). | |
| nodeId | Yes | ||
| verbose | No | Return the raw JSON_REST_V1 dump instead of the compact layout summary. | |
| maxDepth | No | Levels of children to expand. Defaults to 0 (node itself). | |
| excludeTypes | No | Skip these node types. Default skips VECTOR children; pass [] to include them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does disclose concrete behavior: VECTOR children are omitted by default, maxDepth defaults to 0, text is truncated, and verbose swaps the compact summary for the raw REST dump. It does not state read-only safety or error conditions, but the default-suppression and truncation behaviors are genuinely useful disclosures beyond structured data.
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 return contract is front-loaded in the first clause, followed by the two important default overrides and the verbose alternative. Dense but every clause carries information; no filler sentences.
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?
There is no output schema and no annotations, so the description must describe the return shape, which it does via the field list and the verbose escape hatch. It omits failure modes (e.g., invalid nodeId) and auth requirements, but is largely sufficient for an agent to call it 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?
Schema coverage is 80%, so the baseline is 3, but the description adds real meaning: fields replaces the compact default rather than appending, excludeTypes changes the default VECTOR-skipping when passed [], and maxDepth confirms the 0 default meaning 'the node itself'. It slightly exceeds the schema-provided definitions.
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 gives a specific verb+resource ('Compact layout-aware summary of a node') and enumerates exactly what the summary contains: size, auto-layout properties, fill, text, childCount. It is clearly distinguishable in purpose from mutators, though it never names the plural sibling get_nodes_info which would remove remaining 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?
Usage is implied through parameter semantics (defaults for maxDepth and excludeTypes, fields vs verbose), which guide invocation, but there is no explicit when-to-use/when-not statement or pointer to an alternative such as get_nodes_info or get_figma_data. The agent must infer which of the closely-named read tools applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nodes_infoA
Compact layout-aware summaries for several nodes. Same defaults as get_node_info. Prefer this over looping get_node_info.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Replace the compact default with only these fields (plus id/name/type). | |
| nodeIds | Yes | ||
| verbose | No | Return the raw JSON_REST_V1 dump instead of the compact layout summary. | |
| maxDepth | No | Levels of children to expand. Defaults to 0 (node itself). | |
| excludeTypes | No | Skip these node types. Default skips VECTOR children; pass [] to include them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses that output is a compact layout-aware summary and that defaults mirror get_node_info, which is useful, but says nothing about read-only nature, error behavior for unknown ids, or what the compact summary actually contains.
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 sentences with zero padding: purpose first, defaults reference second, routing preference last. 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 tool with no output schema and 80% parameter coverage, the description supplies the essentials: batch scope, inherited defaults, and the alternative to use instead. Only the shape of the compact summary and failure behavior are left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema already documents fields, verbose, maxDepth and excludeTypes well. The description adds only the inherited-defaults note and no per-parameter 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?
States a specific resource and scope ('compact layout-aware summaries for several nodes') and explicitly names the sibling it replaces ('looping get_node_info'). An agent can tell this is the batch read variant without opening the schema, though the description never uses an explicit retrieval verb.
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?
'Prefer this over looping get_node_info' gives an explicit routing rule against the closest alternative, and 'Same defaults as get_node_info' tells the agent behavior is inherited. It stops short of saying when a single get_node_info call is still preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_overlay_settingsA
Read a frame/component's overlay prototype settings (position type, background, click-outside behavior). These control HOW an overlay appears; the interaction that opens it is a NODE reaction with navigation OVERLAY, set via set_reactions or set_transition_reaction.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool reads settings but doesn't clarify return shape, whether it errors on nodes without overlays, or access requirements. For a read tool with zero annotation coverage this is a meaningful gap, though the read-only nature is implied by 'Read'.
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 tightly packed sentences with zero filler. The scope of returned settings is front-loaded, followed by the critical relationship to reactions, so the reader gets the essential framing immediately.
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 effectively covers purpose and relationship to sibling tools, which is the highest-value context. However with no annotations, no output schema, and 0% schema description coverage, an agent gets no information about return format or error behavior, leaving a nontrivial completeness 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?
Schema has one required param (nodeId) with 0% description coverage, so the description must compensate. It refers to 'a frame/component's ... settings', clarifying the expected node type, which adds value beyond the raw string param. No format detail for nodeId, hence not a 5.
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 (Read) and resource (overlay prototype settings) and enumerates the exact settings returned (position type, background, click-outside behavior). Clearly distinguishes itself from siblings like set_overlay_settings and set_reactions by defining what it does and what it does NOT cover.
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?
Explanation that overlay settings control HOW an overlay appears while the opening interaction is a node reaction configured via set_reactions/set_transition_reaction gives an explicit boundary and names the alternative tools. No explicit when-to-avoid clause, but the distinction is clear enough to route calls correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_parent_chainC
Walk up the parent chain of a node, returning id/name/type at each level.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| maxDepth | No | ||
| stopAtId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose the return shape (id/name/type per level), which is useful given there is no output schema, but it says nothing about ordering (root-first vs node-first), root/termination behavior, or how the optional depth/stop parameters alter traversal.
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 front-loaded sentence with zero waste, and the core action and return value lead. It is arguably under-sized for three undocumented parameters, which slightly undercuts 'appropriately sized'.
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 annotations, no output schema, and 0% parameter coverage, the description is the only carrier of behavioral meaning and it stops at one sentence. It omits traversal order, termination conditions, and the role of maxDepth/stopAtId, leaving real gaps for an agent to fill.
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 0% and two of three parameters (maxDepth, stopAtId) have non-obvious names that the description never explains. Only nodeId is implicitly covered by 'of a node', leaving the depth-limit and stop-node semantics undocumented in both schema and 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 gives a specific verb+resource ('walk up the parent chain of a node') and even states what is returned (id/name/type at each level). It is clear what the tool does, though it never names or contrasts itself against ancestry-adjacent siblings like get_node_info or get_document_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?
There is no when-to-use guidance, no prerequisites, and no alternatives named. An agent gets no help deciding between this and the many other node-reading tools such as get_node_info or get_selection_context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_prototype_settingsB
Get the current page's prototype start node and Flows starting points.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It conveys that this is a read of current page state, but says nothing about the return shape (node ID? list of flows?), what happens on a page with no prototype data, or whether it requires the plugin bridge to be connected — notable gaps for a 0-param tool with no output 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?
A single front-loaded sentence with no filler; the retrieved scope (start node and flow starting points) is stated immediately.
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 tool is simple (no params, no nesting), and the description covers what is fetched. However, with no output schema and no annotations, the agent still has no picture of the returned structure or failure modes, which the description could have sketched in a clause.
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 takes no parameters, so the schema is trivially complete and the description correctly adds no parameter detail. Baseline 4 applies for a zero-parameter tool.
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 ('Get') and a specific resource pair ('the current page's prototype start node and Flows starting points'), so an agent knows exactly what is retrieved. It does not name its write-side siblings (set_prototype_start_node, set_flow_starting_points), so it is clear but not fully differentiated from the tool family.
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?
There is no guidance on when to use this read tool versus the set_prototype_start_node / set_flow_starting_points siblings, and no stated prerequisites (e.g. a page must be current, prototype mode required). Usage is only implied by the word 'Get'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reactionsC
Get all prototype reactions from nodes.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It implies a read-only operation but does not disclose the return shape (a list of reactions, their fields), whether order is guaranteed, or how empty results are handled for nodes with no reactions.
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 front-loaded sentence with zero waste. It is concise, though bordering on under-specification given the missing behavioral context rather than being genuinely economical.
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 one required parameter, no output schema, and no annotations, the description should say more about what a 'reaction' contains and what the caller receives. It omits any sense of the return structure or the semantics of a prototype reaction.
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 0% for the single nodeIds parameter. The phrase 'from nodes' (plural) reinforces that multiple node IDs are accepted, adding marginal value over the schema, but no format or constraint details are given.
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 ('Get') and resource ('all prototype reactions') plus the source ('from nodes'), which is a distinct resource from set_reactions/clear_reactions. However it offers no explicit differentiation from sibling tools like clear_reactions or get_annotations, so the agent must infer the distinction.
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?
There is no guidance on when to use this tool versus alternatives such as clear_reactions, set_reactions, or upsert_reaction. The plural 'reactions' implies a bulk read, but no conditions or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_selectionB
Get information about the current selection.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read operation but does not state whether the selection can contain multiple nodes, what information is returned, or what happens when nothing is selected.
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 that is front-loaded and free of waste. It is appropriately sized for a parameterless tool, though its terseness leaves little room for the additional context an agent might need.
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 annotations and no output schema, the description does not explain what 'information' is returned or how the selection is represented. For an agent to use the result correctly, more detail about the return shape would be needed.
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, so there are no parameter semantics to document. Per the baseline rule for parameterless tools, a 4 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 (Get) and resource (current selection information), making the basic purpose clear. However, it does not differentiate this tool from similar siblings like get_selection_context or get_node_info, so the agent must infer the distinction.
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?
There is no guidance about when to use this tool instead of alternatives such as get_selection_context, get_node_info, or set_selections. The description gives only a bare purpose statement with no context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_selection_contextA
One-call bundle for the current selection: compact layout-aware node info plus (for instances) main component id, property definitions/values, and slots. Use instead of chaining get_selection→get_node_info→get_component_property_definitions.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Replace the compact default with only these fields (plus id/name/type). | |
| verbose | No | Use the raw REST dump for the node summary. | |
| maxDepth | No | Levels of children to expand. Defaults to 0 (node itself). | |
| excludeTypes | No | Skip these node types. Default skips VECTOR children; pass [] to include them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it does disclose a meaningful trait beyond the schema: the response conditionally includes instance-only data (main component id, property definitions/values, slots). It does not state read-only status, side effects, or cost, but for a getter that bundles several reads the disclosed conditional behavior and bundling semantics are substantive.
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: the first front-loads the purpose and payload contents, the second front-loads the usage routing. No filler, no restatement of the name or 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?
There is no output schema, so the description reasonably sketches the return payload (compact node info plus instance extras), which is enough for an agent to call it correctly. It is slightly thin on how fields/maxDepth/excludeTypes shape the response, but the schema covers those mechanics.
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 all four parameters (fields, verbose, maxDepth, excludeTypes) are documented in the schema itself, so the baseline is 3. The description hints at the 'compact' default and mentions property/slot content but adds no syntax or format detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (one-call bundle for the current selection) and enumerates exactly what is returned: layout-aware node info, main component id, property definitions/values, and slots. It explicitly names the sibling tools it consolidates, so an agent can distinguish it from get_selection, get_node_info, and get_component_property_definitions without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives an explicit routing instruction: use this instead of chaining get_selection→get_node_info→get_component_property_definitions. That names the alternatives and the condition that selects this tool, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_style_guideA
Extract a usage style guide from the current page (or rootNodeId subtree): counts of distinct solid colors (hex), color variable bindings, font family/style combos, font sizes, line heights, spacing/gap/padding values, corner radii, stroke weights, and opacities.
| Name | Required | Description | Default |
|---|---|---|---|
| rootNodeId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Extract' implies a read-only aggregation and the description details the returned dimensions, but it never states that nothing is mutated, nor does it cover permissions, cost, or performance on large subtrees.
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 dense sentence with the scope stated first and the enumerated outputs after. Every item in the list is substantive rather than filler, though the enumeration is long enough to be slightly heavy.
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 and no annotations, the description does the heavy lifting by spelling out the aggregated dimensions and the scope selector. It is close to complete for a read/aggregation tool, missing only an explicit read-only statement and any note on output shape.
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 one parameter (rootNodeId) with 0% schema description coverage, so the schema alone is uninformative. The description compensates by explaining that the extraction targets the current page or the rootNodeId subtree, giving the parameter real meaning, though it doesn't specify format or behavior when the id is invalid.
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 ('Extract') and resource ('usage style guide') and enumerates exactly what is aggregated (solid colors, font combos, spacing, radii, stroke weights, opacities), which is genuinely distinct from siblings like get_styles or get_document_info. It does not, however, name or contrast any alternative tool, so sibling differentiation is left to inference.
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 parenthetical '(or rootNodeId subtree)' tells the agent the scope of extraction from the current page, which implies when the tool is relevant. There is no explicit when-to-use/when-not guidance and no mention of which sibling to prefer for related tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stylesA
Get information about local styles. Paged per style type: pass limit/offset to bound each response (default 500); totalPaintStyles/totalTextStyles/totalEffectStyles/totalGridStyles report the full counts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max styles of each type (default 500). | |
| offset | No | Skip this many (default 0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does add real behavioral context: pagination is per style type, each response defaults to 500, and the total* counters report full counts. It stops short of stating auth/permission needs or how the style objects themselves are shaped.
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, no filler, with the core purpose front-loaded ahead of the paging mechanics. The backtick-heavy enumeration of the four total* fields is slightly dense but earns its place by explaining the return shape.
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 usefully discloses the four count fields an agent will receive. Combined with clear pagination semantics for a two-optional-parameter read tool, this is nearly complete; missing only deeper detail on the returned style entries themselves.
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 both parameters are documented there ('Max styles of each type (default 500)', 'Skip this many (default 0)'). The description restates the same defaults and the per-type scoping, adding essentially no syntax or edge-case detail 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?
States a specific verb and resource ('Get information about local styles'), and the word 'local' narrows scope meaningfully. However, it does not distinguish itself from nearby siblings such as get_style_guide or list_animation_styles, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the agent can infer this is the tool for enumerating design styles, and the paging note hints at large collections. There is no explicit when-to-use vs. when-not, and no alternative tool is named (e.g. get_style_guide, import_style_by_key).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_target_framesA
Returns the current target frameIds the agent is allowed to modify.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the useful permission scoping ('frameIds the agent is allowed to modify'), which tells the agent these are the currently writable targets, but says nothing about the return format, empty-state behavior, or whether it errors when no targets are set.
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 front-loaded sentence with no filler. Every clause (current, target frameIds, allowed to modify) adds distinct meaning.
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, no-output-schema getter this is nearly complete: it names the returned entity and its scope. The only gap is the return shape (array of ids? count?), which the description implies but does not confirm.
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 takes zero parameters, so there is no parameter semantics to convey; the schema is empty and nothing is missing. Baseline 4 applies for a parameterless getter.
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 (Returns) and resource (the current target frameIds), plus a scope qualifier (frames the agent is allowed to modify). It is clearly distinguishable from write-oriented siblings like set_target_frame and clear_target_frames, though it does not name them.
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?
There is no explicit when-to-use guidance and no mention of the companion tools (set_target_frame, clear_target_frames) that an agent would naturally pair this with. The read-before-modify workflow is only implied by 'allowed to modify'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_variableA
Read one variable's values in EVERY mode. Find it by variableId, by publish key, or by name (if the name is not unique, pass collectionId/collectionName to disambiguate). Returns valuesByMode / valuesByModeName (raw values, aliases as {type:"VARIABLE_ALIAS",id}) plus resolvedValuesByMode / resolvedValuesByModeName that follow aliases to a concrete value (colors as hex) with cycle/unresolved markers if needed.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | The variable's publish key. | |
| name | No | The variable's name (exact, or unique partial). | |
| variableId | No | The variable's id (from list_variables). | |
| collectionId | No | Disambiguate an ambiguous name by collection id. | |
| collectionName | No | Disambiguate an ambiguous name by collection name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return shape in detail: raw valuesByMode vs resolvedValuesByMode, alias representation as {type:"VARIABLE_ALIAS",id}, hex colors on resolution, and cycle/unresolved markers. That is strong behavioral context for a read tool, though it says nothing about permissions or failure modes.
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 dense sentences, front-loaded with the core action and scope before the lookup and return details. Every clause carries information, though the second sentence is long enough to require careful parsing.
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 fully compensates by describing both raw and resolved return maps, alias encoding, and cycle markers. Coupled with the complete lookup-path coverage, an agent has everything needed to call it 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?
Schema coverage is already 100%, so baseline is 3, but the description adds meaning beyond the schema by tying name to the disambiguation parameters and clarifying that a name can be exact or unique partial. It doesn't elaborate on key vs variableId tradeoffs, keeping it just above 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?
States a specific verb (Read) and resource (one variable's values) with explicit scope (EVERY mode), and enumerates the three lookup paths (variableId, publish key, name). An agent can distinguish it from list_variables and set_variable_values without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditions for each lookup path and explains the disambiguation path (pass collectionId/collectionName when the name isn't unique). It stops short of naming alternatives like list_variables for enumeration, but the when-to-use context is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
group_nodesC
Wrap existing nodes in a GROUP.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| nodeIds | Yes | ||
| parentNodeId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and does not meet it. "Wrap" implies mutation of the scene graph, but it does not state whether the group is a new node, whether children are reparented, whether existing parenting/parentNodeId behavior is overridden, or whether the operation is reversible (undoable).
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?
One short, front-loaded sentence with no filler, which is structurally fine. The problem is under-specification rather than verbosity, so it is neither wasteful nor adequate.
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 annotations, no output schema, and three undocumented parameters (0% schema coverage), the description is incomplete. It omits prerequisites, resulting behavior, and where the new group is placed, leaving the agent unable to predict the outcome of the call.
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 0% across three parameters, and the description only loosely implies that "existing nodes" maps to nodeIds. The optional "name" and "parentNodeId" parameters are documented in neither the schema nor the description, so the agent gets no guidance on placement or naming 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?
The description states a verb ("Wrap") and a resource ("existing nodes") with an outcome ("in a GROUP"), so the basic operation is inferable. However, it is close to a restatement of the tool name and gives no differentiation from closely related siblings such as boolean_group, ungroup_node, or arrange_children, which an agent would need to choose between.
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?
There is no when-to-use guidance, no conditions, and no mention of alternatives. With siblings like boolean_group and ungroup_node in the same namespace, the agent receives no help deciding when grouping is the right operation versus those alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_component_by_keyC
Import a library component into the current file using its componentKey. Optionally rename the imported main component.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New name for the imported main component. | |
| componentKey | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a mutation into the current file but says nothing about required permissions, behavior when the component is already imported, whether it fails on unknown keys, or what is returned.
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 the core action front-loaded and the optional behavior second. No filler or 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 mutation tool with no annotations, no output schema, and a required parameter left undocumented, the description is too thin. It omits prerequisites, result shape, and the distinction from sibling import tools.
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%, and the undocumented parameter is the required one: componentKey has no schema description. The description merely restates 'using its componentKey' without adding format, source, or validation meaning, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Import a library component into the current file') and even names the key identifier. However, it does not distinguish itself from the near-identical sibling import_component_set_by_key, leaving the agent to infer the component-vs-set distinction.
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?
There is no when-to-use guidance and no mention of alternatives, despite several closely related siblings (import_component_set_by_key, import_variable_by_key, import_style_by_key, create_instance_from_component_key). The agent gets no help choosing between these import tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_component_set_by_keyA
Import a library component set into the current file using its componentSetKey. Optionally rename the imported main component set.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New name for the imported main component set. | |
| componentSetKey | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the useful optional-rename behavior and the target (current file), but says nothing about permissions, behavior when the key is missing/already present, reversibility, or return shape for what is clearly a mutation.
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 tightly written sentences with the core action front-loaded and the optional behavior second; no filler or 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 two-parameter import tool with no annotations and no output schema, the description covers the essentials but leaves gaps: no collision/overwrite semantics, no permission notes, and no hint of what the call returns or how success is signaled.
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% (componentSetKey has no schema description), so the description must compensate. It explains that componentSetKey identifies the source set and that name optionally renames the imported main set, covering both parameters meaningfully.
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 precise verb and resource (import a library component set) plus scope (into the current file) and the key mechanism (componentSetKey). The 'component set' resource implicitly differentiates it from the sibling import_component_by_key, but no sibling is named explicitly.
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?
Usage is implied by 'import ... into the current file', but there is no explicit when-to-use vs when-not guidance and no pointer to alternatives like import_component_by_key or extract_component_set. The agent must infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_shader_by_idA
Import a shader into the current file so it can be applied. Pass shaderId (from list_shaders) or name. Idempotent if the shader is already imported; returns the shader with imported:true and populated propertyDefinitions.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Shader name from list_shaders, if you do not have the id. | |
| shaderId | No | Shader id from list_shaders. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses idempotency ('Idempotent if the shader is already imported') and the return shape ('imported:true and populated propertyDefinitions'). It omits permission requirements and failure behavior, but the operation's mutability and safety profile are reasonably clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the core action front-loaded, then usage, then idempotency/return behavior. Every sentence contributes; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description itself explains the meaningful return fields, and it covers sourcing of parameters plus idempotency. An agent has enough to invoke it correctly; only permission/error details are absent.
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 both parameters are already documented as coming from list_shaders. The description only adds the 'or' alternation between id and name, which the schema conveys independently; 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?
States a specific verb and resource ('Import a shader into the current file') and adds the purpose clause 'so it can be applied,' which distinguishes it from apply_shader and from the list_shaders source it names. It also clarifies that either id or name is accepted despite the '_by_id' 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?
Tells the agent exactly where the inputs come from ('from list_shaders') and that either shaderId or name may be used, which is the key precondition. It stops short of stating when to import vs. apply or any when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_style_by_keyC
Import a published library style into the file by key.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It hints that the source style is published, but says nothing about whether a local style is created, what happens on a key collision, whether it requires network/library access, or how failures surface.
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 front-loaded sentence with no filler, correctly leading with the action and the resource. It is efficient, though the terseness contributes to the missing behavioral 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?
For a mutation-style import tool with no annotations, no output schema, and an undocumented parameter, the definition leaves out the key's origin/format and the post-import result. The agent lacks what it needs to call this correctly and interpret the outcome.
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 0% and the single parameter 'key' is undocumented in the schema. The description's 'by key' merely restates the parameter name and gives no format, source, or example for obtaining a valid style key.
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 (Import), a specific resource (a published library style), and the target (into the file), which separates it from import_component_by_key, import_component_set_by_key, and import_variable_by_key. It stops short of explicitly routing the agent between those siblings, so it is clear but not fully differentiated.
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?
There is no when-to-use guidance, no prerequisite (e.g. the style must already be published to a library), and no mention of alternatives such as apply_fill_style or get_styles. The agent must infer the entire usage context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_tokensImport design tokensA
Import a W3C-style Design Tokens JSON object into Figma variables (and optionally paint styles). Accepts nested {group:{name:{$type,$value}}} or plain nested values (types inferred from values). Creates/updates a variable collection (default 'Design Tokens') and a Default mode, then sets values. color -> COLOR variable + paint style, number/dimension -> FLOAT, string -> STRING, boolean -> BOOLEAN.
| Name | Required | Description | Default |
|---|---|---|---|
| tokens | Yes | ||
| modeName | No | ||
| createStyles | No | ||
| collectionName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the mutation side effects (creates/updates a collection, creates a Default mode, sets values) and the value-to-variable-type mapping. It omits overwrite/idempotency semantics for existing variables and any permission or error behavior, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with the core action before format details and type mapping. Every sentence carries information; only the final mapping clause is slightly crammed, but nothing is 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 4-param mutation tool with deeply nested input, no annotations and no output schema, the description covers format, side effects, and type mapping adequately. It leaves return behavior and overwrite semantics unstated, which are the remaining gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: it defines the accepted 'tokens' shape, the default collection name ('Design Tokens') mapping to collectionName, the Default mode relating to modeName, and 'optionally paint styles' matching createStyles. It adds real meaning beyond the bare typed 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?
States a specific verb and resource ('Import a W3C-style Design Tokens JSON object into Figma variables') and names the secondary effect (paint styles). It is easily distinguished from siblings like import_variable_by_key (single key) and export_tokens (the inverse direction). No ambiguity about 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 description implies the scenario (bulk-importing a W3C token file) but never states when to prefer it over alternatives such as create_variable_collection + create_variable + set_variable_values, nor any prerequisites or exclusions. Usage is inferable from the purpose, not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_variable_by_keyC
Import a published library variable into the file by key.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a file-mutating import but says nothing about permissions, what happens if the variable already exists, behavior on an invalid key, or the return value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the verb and resource front-loaded. Efficient, though it stops short of useful extra detail given the space available.
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 one-parameter tool with no output schema, the description covers the basic purpose, but with no annotations it leaves behavioral questions (existing-variable handling, key discovery, failure modes) unanswered.
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?
One required parameter with 0% schema description coverage. The description conveys that the operation is keyed by an identifier ('by key'), but adds no format, source, or discovery information beyond that.
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 (import) and resource (a published library variable) plus the target (into the file by key). This clearly distinguishes it from siblings like import_style_by_key and import_component_by_key by naming the resource type, though it doesn't explicitly reference those alternatives.
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, no prerequisites, and no mention of alternatives such as list_variables or get_variable for discovering a key before importing. The agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_childA
Insert an existing child node at an index inside a parent container. Omit index to append at the end. Inside auto layout this keeps the child in the flow (layoutPositioning AUTO) unless ignoreAutoLayout is true.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | ||
| childId | Yes | ||
| parentId | Yes | ||
| ignoreAutoLayout | No | ||
| layoutSizingVertical | No | FIXED | HUG | FILL | |
| layoutSizingHorizontal | No | FIXED | HUG | FILL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses auto-layout behavior (keeps child in flow as layoutPositioning AUTO unless ignoreAutoLayout is true), which is real behavioral context. But it omits whether the child is detached from any prior parent, permission/auth requirements, and failure modes for a mutation that clearly repositions an existing node.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action followed by the index default and the auto-layout caveat. No filler or redundancy; 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 6-parameter mutation with no annotations and no output schema, the description covers the main action and two parameters well. Gaps remain on reparenting side effects, the layoutSizing parameters, and error conditions, so it is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (33%), so the description should compensate more. It clarifies index (optional, appends when omitted) and ignoreAutoLayout (controls auto-layout flow behavior), but says nothing about layoutSizingVertical/layoutSizingHorizontal beyond the enum hint in the schema, and adds nothing for parentId/childId.
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 (insert) plus resource (existing child node) and scope (at an index inside a parent container). The word 'existing' usefully signals this is not node creation, distinguishing it from create_rectangle/create_frame, though it never names the closest siblings (reparent_node, move_node, append_to_slot) that an agent might confuse it with.
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 clause 'Omit index to append at the end' gives concrete usage guidance for one parameter's default behavior. However, it offers no when-to-use versus alternatives (reparent_node, move_node, clone_node_into_parent) and no prerequisites or exclusions, leaving routing between the several node-placement tools to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
join_channelA
Selects which connected Figma plugin channel to target for subsequent commands. Channels default to "default" and are configured per MCP server via FIGMA_BRIDGE_CHANNEL; the plugin UI joins that channel. Use figma_bridge_status to see which channel maps to which file.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden, and it discloses real behavior beyond the schema: the default channel value ('default'), per-server configuration via FIGMA_BRIDGE_CHANNEL, and that the plugin UI joins the selected channel. It does not cover error behavior for an unknown channel or whether selection persists across sessions, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose in the first sentence, then adds default/config detail and a sibling pointer. Efficient and well-ordered, with only mild verbosity in the configuration clause.
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 state-selection tool with no annotations or output schema, the description covers purpose, default, configuration source, and the related status tool. Missing only failure/error semantics for an invalid channel.
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 0% for the single required 'channel' param, so the description must compensate. It usefully defines what a channel is, that it defaults to 'default', and how it is configured via FIGMA_BRIDGE_CHANNEL, but gives no accepted-value format or validation rules.
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: selecting which connected Figma plugin channel subsequent commands target. It distinguishes itself from list_channels/figma_bridge_status by naming the latter as the tool for viewing channel-to-file mappings. Clear and specific, though it doesn't explicitly frame the sibling boundary in one sentence.
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 clear context for use: this sets the target for 'subsequent commands', and it explicitly routes the agent to figma_bridge_status for channel/file discovery. No explicit when-not conditions, but the usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_animation_stylesA
List Figma's first-party animation styles, each with its styleId and the props it accepts. Call this before apply_animation_style to get a real styleId. Note name is an i18n key (e.g. 'motion.preset_name.position') and each entry in props is a documentation string describing the prop, not a value to send back.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden and usefully explains the return shape and two non-obvious caveats: `name` is an i18n key and `props` entries are documentation strings not values to send back. It does not explicitly state that the operation is read-only or that it has no document side effects, though 'List' strongly implies that.
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 sentences, front-loaded with purpose, followed immediately by the required usage prerequisite and then the critical output caveat. Every sentence adds distinct value with no 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 zero-parameter list tool with no output schema and no annotations, the description is complete: it explains what is returned, how the returned fields should be interpreted, and when to call it. No additional structured fields are available to carry that 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?
The tool takes zero input parameters, so there are no parameter semantics for the description to clarify. Per the rubric, zero parameters yields a baseline of 4.
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 ('List Figma's first-party animation styles') and immediately states what each entry contains: styleId and accepted props. It also distinguishes the tool from the mutating sibling apply_animation_style by framing it as a prerequisite lookup.
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 when-to-use condition: 'Call this before apply_animation_style to get a real styleId.' However, it does not explicitly say when not to call it or what to do if a styleId is already known, so it stops short of a full when/when-not/alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_channelsA
Channel dashboard: lists every connected Figma plugin channel with its fileKey/fileName and connection time.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return contents (fileKey/fileName, connection time) which is genuinely useful, but 'lists' only implies read-only; it never states that the call is non-mutating, whether a channel must be joined first, or whether results paginate.
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?
One sentence, front-loaded with the 'Channel dashboard' purpose and then the return payload. No filler, no repetition of the tool name, nothing that fails to earn 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?
With no parameters, no output schema, and no annotations, the description compensates by naming the returned fields, which is the main thing an agent needs for this simple list tool. It remains a little thin on preconditions (must a channel be joined?) but is otherwise adequate.
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 takes zero parameters, so per the rubric the baseline is 4. There is nothing to document and the description does not need to compensate for any schema gap.
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?
Specific verb (lists) plus a precisely scoped resource (every connected Figma plugin channel) and the fields returned. It does not, however, distinguish itself from channel-related siblings like join_channel, subscribe_events, or figma_bridge_status, so the agent gets no routing signal from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Channel dashboard' framing implies a monitoring/inspection use case, but there is no explicit when-to-use, when-not-to-use, or named alternative among the many channel and bridge siblings. Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_checkpointsB
List checkpoints captured so far in this plugin session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses only that the listing is scoped to the current plugin session, with no statement about whether checkpoints must exist first, ordering, or what the response contains. For a tool with zero annotation coverage this is thin.
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 front-loaded sentence with no filler or redundancy. It is appropriately sized for a parameterless list operation, though it offers little beyond the minimum.
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 is the only place return values could be characterized, and it says nothing about what a listed checkpoint looks like or how items are ordered. For a simple read tool this is adequate but not 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?
The tool takes zero parameters, so the baseline of 4 applies. There is nothing for the description to disambiguate beyond the implicit session scoping it already states.
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 (list) and resource (checkpoints) and scopes it to 'this plugin session', which is more than a bare restatement of the name. It does not explicitly contrast with sibling tools such as create_checkpoint or restore_checkpoint, but the read-vs-write distinction is self-evident from the verbs.
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 no when-to-use guidance and never mentions the natural companion tools create_checkpoint or restore_checkpoint. Any usage pattern (e.g. list before restoring) must be inferred entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_commentsC
List comments on a Figma file via the REST API (requires FIGMA_TOKEN).
| Name | Required | Description | Default |
|---|---|---|---|
| fileKey | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the auth requirement (FIGMA_TOKEN) and that it hits the REST API rather than a plugin bridge, which is real context, but says nothing about pagination, ordering, or result shape.
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?
One tight sentence with the verb front-loaded and the auth note tucked into a parenthetical; nothing is wasted. It is terse to the point of under-specification, but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No annotations and no output schema mean the description must explain the operation's contract, and it does not: the return format (comment ids, authors, timestamps) and pagination behavior are absent, and the lone required parameter is undocumented.
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 parameter fileKey has 0% schema description coverage and the description adds no meaning at all about what a file key is or where to obtain it. With one undocumented parameter, the description is expected to compensate and 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?
States a specific verb ('List') and resource ('comments on a Figma file') and even names the transport (REST API), so an agent knows exactly what the tool returns. It does not, however, differentiate itself from the comment-family siblings post_comment and delete_comment, which a 5 would require.
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?
There is no when-to-use guidance, no mention of the sibling post_comment/delete_comment alternatives, and no stated preconditions beyond the token. The agent is left to infer that 'list' is the read path of the comment family.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_shadersA
List shader effects and fills available to this file (in-file, subscribed libraries, and owned shaders), with ids, type (effect|fill), and imported. Property definitions are omitted unless includeProperties is true — import_shader_by_id already returns them. Shaders with imported:false must be imported before apply_shader.
| Name | Required | Description | Default |
|---|---|---|---|
| includeProperties | No | Include propertyDefinitions on every shader. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the return shape (ids, type, imported), the default and conditional behavior of includeProperties, and the import prerequisite. It does not cover pagination, ordering, or error behavior, but the core behavioral profile is clear.
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, no filler, front-loaded with the resource and its sources before the parameter caveat and the prerequisite. Slightly dense but 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?
For a one-parameter read tool with no output schema and no annotations, the description supplies everything needed: what is returned, what is conditionally omitted and why, and the cross-tool workflow for applying shaders. Nothing essential 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?
Schema coverage is 100% so baseline is 3, but the description adds genuine meaning: it explains the default (false) and the rationale for the parameter ('import_shader_by_id already returns them'), which tells the agent when to set it rather than just what it does.
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 (List) and resource (shader effects and fills), and scopes it precisely to 'available to this file' with the three sources enumerated. It also names the sibling tools import_shader_by_id and apply_shader, so an agent can distinguish it from related shader tools without opening schemas.
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 clear conditional guidance: omit properties by default because import_shader_by_id already returns them, and set includeProperties only when needed. It also states the workflow prerequisite that shaders with imported:false must be imported before apply_shader. No explicit when-not-to-use, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_variable_collectionsB
List local variable collections in the current file.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose a real behavioral constraint (only local collections, only the current file), but it says nothing about return shape, ordering, or whether collections outside the current file are excluded by scope or excluded from results.
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 tight sentence with the scope qualifier front-loaded. No waste, nothing to trim.
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 is the only place the return value could be characterized, and it doesn't say what a listed collection contains (name, id, modes). For a trivial zero-param read this is survivable but leaves a small 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 takes zero parameters, so there is nothing for the description to clarify beyond what the schema shows. The baseline for a parameterless tool 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?
States a specific verb (List) plus resource (variable collections) and adds a useful scope qualifier ('local', 'current file'). However, it does nothing to distinguish itself from the adjacent sibling list_variables, which an agent could easily confuse with this tool.
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?
There is no explicit when-to-use, when-not-to-use, or alternative routing. With siblings like list_variables, get_variable, and create_variable_collection, the agent is left to infer that this reads collection-level metadata rather than the variables themselves.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_variablesA
List local variables in the current file (optionally filtered by resolvedType). Pass includeScopes: true to also return each variable's scopes, or includeValues: true to also return each variable's value in EVERY mode (valuesByMode by modeId, valuesByModeName by mode name, defaultValue from the collection's first mode, and the mode list) — use this to read theme/dark-mode values, not just the default mode. Results are paged: default limit 500 per call with total/offset/pageCount so you can page through every variable instead of reading them all at once.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max entries per page (default 500). | |
| offset | No | Skip this many entries (default 0). Page with offset until you reach `total`. | |
| resolvedType | No | ||
| includeScopes | No | Include per-variable scopes arrays. Default false to keep output small. | |
| includeValues | No | Include per-variable values for every mode (valuesByMode, valuesByModeName, defaultValue, modes). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses pagination behavior (default limit 500, total/offset/pageCount) and the exact shape of returned values (valuesByMode, valuesByModeName, defaultValue, modes) — substantial behavioral context for a read tool. It omits any auth/permission notes, preventing a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then progressively adds filter and flag semantics and paging. It is dense but every clause carries information; the middle parenthetical is long yet justified by being the only explanation of multi-mode return values.
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 and no annotations, the description compensates by detailing the return structure and paging protocol, which is what an agent needs to iterate results. It leaves resolvedType semantics unstated, a minor gap for a 5-param 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 80%, and the description adds real meaning beyond it: it explains what includeValues actually returns across modes and why includeScopes exists. Only resolvedType lacks explanation in both schema and description, keeping it just under a 5.
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 with scope: 'List local variables in the current file'. The 'local' and 'current file' scoping, plus the resolvedType filter, distinguish it from siblings like list_variable_collections and get_variable.
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 concrete guidance on when to set includeScopes and includeValues ('use this to read theme/dark-mode values, not just the default mode') and how to page. It does not explicitly name a sibling alternative or an exclusion case, 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.
move_component_to_fileMove component to another fileA
Import a component or component-set from this file into another connected channel's file, then optionally delete the source (move). Requires the target file to be open with the plugin connected to this server on a different channel (see figma_bridge_status / list_channels). Use mode: 'copy' to keep the source. Accepts componentId, componentKey, or componentName to identify the source.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Default 'move': delete the source after a successful import. 'copy' keeps it. | |
| name | No | New name for the imported component/component-set in the target file. | |
| componentId | No | Source component/component-set node id in this file. | |
| componentKey | No | Source component/component-set key (globally unique). | |
| componentName | No | Source component/component-set name in this file (must match exactly one). | |
| targetChannel | Yes | Channel name of the destination file (must be connected on this server). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses that the source is deleted by default (destructive), that 'copy' preserves it, and that a cross-channel connection is required. It doesn't cover failure/partial-import behavior or auth, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all front-loaded: the core action first, then prerequisites, then the source-identifier alternatives. No filler and every clause adds actionable 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 6-parameter cross-file operation with no annotations and no output schema, the description covers action, prerequisites, identifier options, and mode semantics adequately. Only the return/error behavior is left unaddressed.
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 explaining that componentId, componentKey, or componentName are alternative ways to identify the same source and reiterates the default mode, which helps the agent choose an identifier.
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 (import/move) and resource (component or component-set) across files, and its cross-channel scope makes it clearly distinct from same-file siblings like import_component_by_key or replace_all_instances.
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 the prerequisite that the target file must be open with the plugin connected on a different channel and points to figma_bridge_status / list_channels for verifying that. It also explains the copy-vs-move choice, though it doesn't explicitly state when a same-file alternative should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_nodeA
Move a node on the canvas. Pass absolute x/y, or relative dx/dy to nudge. Inside auto layout this is rejected unless ignoreAutoLayout is true (Ignore auto layout / overlay). Reorder stacks with insert_child; align with set_axis_align.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Absolute target x. Omit to keep current and use dx instead. | |
| y | No | Absolute target y. Omit to keep current and use dy instead. | |
| dx | No | Relative x offset. Applied only when x is omitted. | |
| dy | No | Relative y offset. Applied only when y is omitted. | |
| nodeId | Yes | ||
| ignoreAutoLayout | No | Required to x/y-move a child of an auto-layout parent. Pins the node as an overlay. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the meaningful behavioral trait: x/y moves are rejected inside auto layout unless ignoreAutoLayout is true, which pins the node as an overlay. It stops short of covering permissions, reversibility, or return behavior, so it is solid but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with purpose then the positional semantics, the constraint, and the alternatives. No filler; each sentence carries distinct 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?
Covers purpose, parameter semantics, the key auto-layout constraint, and sibling routing, which is enough to invoke it correctly. For a mutation tool with no annotations and no output schema, it could say more about failure/return behavior, but nothing essential to a correct call 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?
Schema coverage is 83%, so the parameters are largely documented already. The description adds the useful absolute-vs-relative framing ('absolute x/y, or relative dx/dy to nudge') but does not go beyond the schema's own per-parameter rules on when dx/dy apply. 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?
Names a specific verb (move) and resource (node on the canvas) and immediately distinguishes its scope from siblings by routing reorder to insert_child and alignment to set_axis_align. An agent can identify the tool's job without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the auto-layout condition under which the move is rejected (unless ignoreAutoLayout is true) and names two sibling alternatives for the adjacent tasks of reordering (insert_child) and aligning (set_axis_align). When-to-use, when-not, and alternatives are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_node_to_pageB
Move (cut) a top-level node to another page, or copy it there (duplicate into page, keeping the original). Set copy: true to keep the original.
| Name | Required | Description | Default |
|---|---|---|---|
| copy | No | Default false: cut/move the node. true: duplicate it into the target page and keep the original. | |
| name | No | Name for the copied node when copy: true. Defaults to the source name. | |
| nodeId | Yes | ||
| targetPageId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose two meaningful traits: the cut-vs-copy distinction and the 'top-level node' constraint. It omits other relevant behavior such as whether the target page must pre-exist, permission requirements, what happens to existing placements, or the return shape.
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 tightly scoped sentences with the primary move action front-loaded and the copy variant immediately after. There is minor redundancy between 'copy it there (duplicate into page, keeping the original)' and 'Set copy: true to keep the original,' which slightly repeats the same idea.
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 cross-page mutation with no annotations, no output schema, and half its parameters undocumented in the schema, the description covers the core modes but leaves the reader without permission, return, or failure context. It is minimally adequate 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 coverage is only 50%, so nodeId and targetPageId have no schema descriptions. The description partially compensates by implying nodeId must be a top-level node and targetPageId is a page, but it adds little beyond the schema's own copy/name documentation, which already covers the two documented parameters. A 3 fits given the partial coverage gap.
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 (move/cut) and resource (top-level node) with the destination (another page), and clarifies the alternate copy behavior. It is far more specific than the name alone, though it never names or contrasts the closely related siblings move_node, reparent_node, or clone_node_into_parent.
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 a clear rule for the copy flag ('Set copy: true to keep the original'), which is genuinely useful guidance on mode selection. However, it offers no guidance on when to reach for this tool versus move_node, reparent_node, or clone_node_into_parent, leaving the choice between overlapping siblings to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_commentA
Create a comment on a Figma file via the REST API (requires FIGMA_TOKEN). Optional nodeId anchors it to a node; clientMeta {x,y[,nodeId]} positions it on the canvas.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No | ||
| fileKey | Yes | ||
| message | Yes | ||
| clientMeta | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden, and it does disclose a genuinely useful behavioral trait: the FIGMA_TOKEN auth requirement and the fact that this goes through the REST API. It does not disclose whether the comment is created immediately, what permissions are needed, or what the response contains, leaving the mutation profile partially opaque.
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 dense sentences with no filler, front-loading the action and then layering the auth prerequisite and the two parameter semantics in priority order.
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 4-param mutation tool with no annotations and no output schema, the description covers the action, the auth prerequisite, and the anchoring/positioning semantics of the nested object. It is largely sufficient, though it omits any note on return behavior or access requirements.
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 0%, so the description must compensate, and it explains the two non-obvious parameters: nodeId anchors the comment to a node, and clientMeta {x,y[,nodeId]} positions it on the canvas (with the bracket notation signaling the nested nodeId is optional). fileKey and message are self-evident from their names, so only minor value is left on the table.
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 ('Create a comment on a Figma file') and specifies the transport ('via the REST API'), so the operation is unambiguous. It does not, however, differentiate itself from the sibling list_comments or delete_comment, so the agent gets no routing help from the text itself.
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?
Usage is implied rather than stated: the description notes the FIGMA_TOKEN prerequisite and the REST transport, which tells the agent when the tool is viable. There is no explicit when-to-use/when-not guidance relative to delete_comment or list_comments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_my_designA
Compact layout-aware summary of the current selection. Default fields cover size, auto-layout (mode, hug/fill, padding, gap, alignment), fillHex/fillCount, and truncated text. VECTOR children are omitted unless you pass excludeTypes: []. Pass verbose for the raw REST dump. Use instead of chaining get_selection when you only need structure.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Replace the compact default with only these fields (plus id/name/type). | |
| verbose | No | Return the raw JSON_REST_V1 dump instead of the compact layout summary. | |
| maxDepth | No | Levels of children to expand. Defaults to 0 (node itself). | |
| excludeTypes | No | Skip these node types. Default skips VECTOR children; pass [] to include them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does disclose meaningful behavior: the compact default field set, that VECTOR children are skipped by default, and that verbose returns the raw REST dump. It omits auth/permission needs and any error or pagination behavior, but for a read tool the disclosed output semantics are solid.
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 dense sentences, front-loaded with the core purpose before defaults, the VECTOR caveat, the verbose flag, and the sibling routing. No wasted words; every clause conveys a distinct fact.
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 and no annotations, the description is responsible for describing what comes back, and it does so well (default fields, omission rules, verbose escape hatch). It could be more complete on return shape limits or permissions, but it is sufficient 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%, so the schema already documents all four parameters. The description largely restates what the schema says (excludeTypes: [] to include vectors, verbose for the raw dump) rather than adding new syntax or format 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?
States a specific verb+resource ('Compact layout-aware summary of the current selection') and enumerates the default field coverage, so the agent knows exactly what this returns. It also explicitly distinguishes itself from the sibling get_selection, so an agent can pick between them 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 a clear condition ('when you only need structure') and names the alternative (get_selection) to avoid chaining. It does not mention when NOT to use it or the other related readers (get_selection_context, get_node_info), so it falls just short of fully explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
redoRedo last undone actionA
Re-applies the most recently undone action (snapshot-based, best-effort).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It adds useful behavioral context ('snapshot-based, best-effort'), signaling that it relies on snapshots and may not always succeed, but it omits details such as prerequisites (e.g., requiring a prior undo), what gets restored, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It efficiently conveys the core action and the key behavioral qualifier.
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 annotations and no output schema, the description is somewhat thin. It states the action and 'snapshot-based, best-effort' but does not address edge cases, failure modes, or how it interacts with checkpoint tools, leaving an agent with gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics to describe. The baseline score of 4 is appropriate because the description does not need to add meaning beyond the empty 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 ('Re-applies') and resource ('most recently undone action'), making the tool's purpose immediately clear. It implicitly contrasts with the sibling 'undo' but does not explicitly name alternatives like 'restore_checkpoint', so it falls short of a full 5.
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 say when to use this tool versus alternatives such as undo or restore_checkpoint. However, the tool's name and the phrase 'most recently undone action' strongly imply it should be used after an undo operation, giving minimal viable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_animation_styleA
Remove one applied animation style from a node by its appliedId (read it from get_motion's animationStyles), or pass all:true to remove every applied style.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | ||
| nodeId | Yes | ||
| appliedId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the mutation (removing applied styles) and the two modes, but says nothing about undo/reversibility, permission requirements, or behavior when appliedId is invalid or absent. Adequate but incomplete for a destructive operation.
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?
One sentence, front-loaded with the core action and immediately followed by the mode distinction. Zero filler; every clause carries 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?
Covers all three parameters and the branching behavior, which is much of what an agent needs, but with no annotations and no output schema it omits failure modes, undo semantics, and result feedback. Minimum viable for a 3-param 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 0%, so the description must compensate. It explains appliedId's source (get_motion's animationStyles), the meaning of all:true, and implies nodeId scoping, giving meaning beyond bare field names. It could state the appliedId/all mutual exclusivity and required status more explicitly.
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 ('Remove one applied animation style from a node') with clear scope. The two operating modes (single appliedId vs all:true) are spelled out, so an agent can distinguish this from apply_animation_style or get_motion immediately.
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?
Explains how to obtain the appliedId (read it from get_motion's animationStyles) and the two mutually exclusive modes, giving clear invocation context. It stops short of explicitly contrasting with sibling tools like apply_animation_style or stating when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_keyframe_trackA
Remove one manual keyframe track from a node by field (same field naming as set_keyframe_track), or pass all:true to clear every manual track on the node.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | ||
| field | No | ||
| nodeId | Yes | ||
| paintIndex | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses a genuine trait — only MANUAL tracks are affected, and all:true clears 'every manual track' — which is useful. However it omits error behavior (e.g., what happens if the field/track does not exist), reversibility, and permission requirements.
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 well-formed sentence with the primary action front-loaded and the alternative mode following. The parenthetical field-naming reference earns its place; nothing is padded, though the sentence is dense.
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?
A mutating tool with no annotations, no output schema, and 0% schema coverage demands more than one sentence. The undocumented 'paintIndex' and the absence of any success/failure or reversibility semantics leave real gaps for an agent invoking a destructive operation.
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 0%, so the description must compensate. It meaningfully clarifies the two semantically complex params ('field' reuses set_keyframe_track naming; 'all' clears everything) and 'nodeId' is self-evident, but 'paintIndex' is left entirely undocumented in both the schema and 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?
States a specific verb (remove) and resource (manual keyframe track) scoped to a node by field, and explicitly references the sibling 'set_keyframe_track' for field naming, so an agent can distinguish it. It does not survey other animation siblings (apply_animation_style, set_timeline_duration), but the core purpose is unambiguous.
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?
Clearly lays out the two invocation modes: remove one track by 'field', or pass 'all:true' to clear every manual track. This gives the agent a decision rule for the two operating modes, though it offers no explicit when-not guidance or routing between the broader animation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_nodeC
Renames a node by nodeId.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| nodeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it does almost nothing with it. It does not state whether the rename is reversible/undoable, whether it requires permissions, whether names must be unique, or what is returned. For a mutation tool with zero annotation coverage, this is a significant 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?
A single, front-loaded sentence with no wasted words. Its terseness is appropriate structurally, though the brevity is partly what causes the informational gaps elsewhere.
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 no annotations, no output schema, and 0% schema description coverage, the description is too thin. An agent knows the basic intent but lacks permissions, side effects, and parameter semantics needed to call it confidently.
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 0%, so the description must compensate. 'By nodeId' clarifies that nodeId is the target selector, but the 'name' parameter (the new name) is only implied by the word 'Renames' and no format, length, or uniqueness semantics are given for either 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?
States a specific verb (Renames) and resource (node) and identifies the selector (by nodeId). It is clear what the tool does, but it does not differentiate itself from siblings such as bulk_rename, rename_page, or rename_variable beyond the bare noun 'node'.
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 on when to use this versus alternatives like bulk_rename or rename_page, and no preconditions (e.g., node must exist, name constraints). The agent is left to infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_pageC
Rename a page by pageId.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| pageId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says nothing about mutation effects, whether the page must exist, whether the new name must be unique, permissions required, or what happens on success/failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. However, its extreme brevity leaves it feeling under-specified rather than optimally concise for a mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple but mutating tool with zero schema description coverage, no annotations, and no output schema, the description is too sparse. It should at least explain the second parameter and mention basic behavioral expectations for a rename operation.
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 0%, so the description must explain both parameters. It clarifies that 'pageId' identifies the page to rename, but says nothing about the required 'name' parameter (e.g., that it is the new page name) or any format constraints.
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 ('Rename') and resource ('a page'), so an agent knows what the tool does. However, it does not differentiate itself from sibling tools like rename_node, bulk_rename, or rename_variable, leaving ambiguity about when this tool is the correct choice.
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?
There is no guidance on when to use this tool versus alternatives. The description does not mention that it targets a single page by ID, nor does it point to bulk_rename for multiple pages or rename_node for non-page nodes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_variableC
Rename an existing variable by variableId.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| variableId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'Existing' hints that the variable must already exist, but it does not disclose what happens on a missing/duplicate variableId, whether the new name must be unique, permission requirements, or whether the rename propagates to bound nodes.
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 tight sentence with the operation and identifier front-loaded and zero filler. Its brevity is efficient but borders on under-specification rather than maximal 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 two-required-parameter mutation with no annotations, no output schema, and 0% schema coverage, the description leaves key gaps: the semantics of the 'name' argument, error behavior, and scope relative to mode/collection renames. It is not sufficient on its own 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 0%, so the description must compensate. It names variableId as the identifier but adds no format details, and the required 'name' parameter — likely the new name — is only implied by the verb 'rename', with no constraints on length, uniqueness, or allowed characters.
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 (rename) and resource (existing variable), so the operation is unambiguous. However, it offers no differentiation from close siblings like bulk_rename, rename_variable_mode, or rename_variable_collection, leaving the agent to infer scope from the name alone.
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 says what happens but never when to prefer this tool over bulk_rename or rename_variable_mode/rename_variable_collection. No exclusions, prerequisites, or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_variable_collectionC
Rename a variable collection by collectionId.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| collectionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It implies mutation through 'Rename' but says nothing about permissions, reversibility, error behavior for missing collections, name uniqueness, or what is returned. For a mutation tool with zero annotations, this is a significant 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?
The description is a single front-loaded sentence with no wasted words. Its structure is efficient and immediately readable. It is too terse to be truly helpful, but the conciseness dimension itself is satisfied.
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 no annotations, no output schema, and 0% schema description coverage, the description is substantially incomplete. It does not cover permissions, constraints, return behavior, or error cases. Only the core operation and one parameter's role are minimally conveyed.
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 0% for both parameters. The description identifies collectionId as the lookup key but does not explain its format, and it leaves the name parameter entirely uncharacterized beyond the verb 'Rename'. This does not compensate for the complete lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Rename) and resource (variable collection), and scopes it by collectionId. This is clear enough to distinguish it from sibling rename_variable and rename_variable_mode by resource name. However, it does not explicitly name or route away from any sibling, so it falls short of the 5 benchmark.
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 offers no when-to-use guidance, no prerequisites, and no alternatives. It does not say when to choose rename_variable_collection versus rename_variable, rename_variable_mode, or create/delete collection. Usage must be entirely inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_variable_modeC
Rename a mode within a variable collection.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| modeId | Yes | ||
| collectionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not say whether the rename requires specific permissions, whether it is reversible, whether name collisions are allowed, or what the response contains — all material for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the verb front-loaded and no filler. It is efficient, though its brevity contributes to the gaps in other dimensions.
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 3-required-parameter mutation tool with no annotations, no output schema, and zero parameter documentation, the description is too thin. An agent cannot confirm scope, permissions, or failure behavior before invoking it.
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 (collectionId, modeId, name) have 0% schema description coverage, and the description only hints that 'name' is the new label. It does not explain that collectionId and modeId are identifiers or what format they take, so the coverage gap is not compensated.
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 ('rename') and resource ('a mode within a variable collection'), so the action is unambiguous. However, it does not distinguish itself from near-identical siblings such as rename_variable, rename_variable_collection, set_variable_mode, or create_variable_mode, so an agent must infer which rename applies.
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 no when-to-use guidance, no prerequisites (e.g. that the mode must already exist), and never mentions alternatives like rename_variable_collection or set_variable_mode. The agent is left to infer routing from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reorder_grid_tracksB
Move whole rows or columns of a GRID frame, taking their children with them. fromIndices lists the 0-based tracks to move and insertionIndex is where they land.
| Name | Required | Description | Default |
|---|---|---|---|
| axis | Yes | ||
| nodeId | Yes | ||
| fromIndices | Yes | ||
| insertionIndex | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the key non-obvious behavior that children travel with the moved tracks. However, it says nothing about whether insertionIndex is evaluated before or after the source tracks are removed, what happens to sibling track indices, permission requirements, or error conditions for non-grid nodes.
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, and the core action is front-loaded before the parameter clarification. Nothing is redundant, though it is terse enough that the missing edge-case behavior could not be squeezed in.
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 4-required-param mutation tool with no annotations and no output schema, the description covers purpose, the child-carrying behavior, and two parameter meanings. It still leaves index-shift behavior and failure modes unexplained, so it is adequate but incomplete.
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 0%, so the description must compensate, and it explains two of the four parameters: fromIndices as 0-based tracks to move and insertionIndex as the landing spot. nodeId and axis are self-evident from their names and the ROWS/COLUMNS enum, but the subtle index-shift semantics of insertionIndex after removal are left unresolved.
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 ('Move whole rows or columns of a GRID frame') and clarifies the scope with 'taking their children with them', which separates it from generic node movers like move_node or arrange_children. It does not name a sibling alternative directly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool only applies to GRID frames, but gives no explicit when-to-use guidance, no exclusions, and no pointers to related tools such as set_grid_layout or set_grid_child_position. An agent must infer applicability from the phrase 'GRID frame' alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reorder_pageB
Move a page to a new index in the page tab bar (0-based).
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | ||
| pageId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: it does not say whether other pages shift, whether the index is clamped or errors when out of range, or whether the move is persisted/undoable. For a mutation tool with zero annotation coverage this is a material 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?
A single front-loaded sentence with no filler; the operation, the target, and the indexing convention are all stated compactly.
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 tool is genuinely simple (two required scalars, no nested objects, no output schema), so the description is close to adequate, but with no annotations and no schema descriptions it leaves the mutation's side effects on sibling pages unexplained.
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 0%, so the description must compensate. It does add the one non-obvious fact — that 'index' is 0-based — while 'pageId' is self-evident from its name. That is partial compensation, not full, since index bounds and negative-index behavior remain undefined.
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 ('Move a page') plus the exact target domain ('page tab bar'), which is enough to separate it from node-level movers like move_node or move_node_to_page. It stops short of naming those siblings explicitly, so an agent must infer the distinction.
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?
There is no when-to-use guidance, no mention of alternatives (move_node_to_page, arrange_children), and no prerequisites such as the page needing to exist or the document needing to be open. The agent gets a definition but no routing logic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reparent_nodeB
Move (cut) an existing node into a new parent container (frame, section, group, auto-layout, slot, or page). Inside auto layout the node joins the flow (omit x/y, pass index). Pass ignoreAutoLayout + x/y only for overlays.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Parent-relative x. Ignored inside auto layout unless ignoreAutoLayout is true. | |
| y | No | ||
| index | No | Insert at this child index instead of appending at the end. Controls order inside auto-layout containers. | |
| nodeId | Yes | ||
| newParentId | Yes | ||
| ignoreAutoLayout | No | ||
| layoutSizingVertical | No | FIXED | HUG | FILL | |
| layoutSizingHorizontal | No | FIXED | HUG | FILL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the key behavioral quirk – 'cut' implies removal from the old parent, and joining the auto-layout flow vs overlay placement are non-obvious behaviors. But it omits permission requirements, reversibility, and how existing layout sizing/constraints are affected on reparent.
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 dense sentences, front-loaded with the core action and then the two operating modes. Minimal waste, though the parenthetical list of container types and mode rules pack a lot into a compact block.
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 an 8-parameter mutation tool with no annotations and no output schema, the description covers the critical auto-layout/overlay distinction but leaves permission needs, return/error behavior, and layoutSizing parameters unaddressed.
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 50%. The description adds real value by explaining the interaction of x/y, index, and ignoreAutoLayout across auto-layout vs overlay contexts, which goes beyond the schema. But it does not cover y (no schema description either) or layoutSizingVertical/Horizontal, leaving those semantic gaps unfilled.
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+resource: 'Move (cut) an existing node into a new parent container' and enumerates valid container types (frame, section, group, auto-layout, slot, page). An agent can distinguish it from generic siblings, though it never explicitly contrasts with close alternatives like move_node, insert_child, or clone_node_into_parent.
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?
Provides conditional guidance for the auto-layout case (omit x/y, pass index) and the overlay case (ignoreAutoLayout + x/y), which is implied usage. However there is no explicit when-to-use-this vs use move_node/insert_child routing, and no precondition info.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_all_instancesA
Swap every instance whose main component key matches sourceComponentKey to targetComponentKey. Supports dryRun and a rootNodeId scope.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | ||
| rootNodeId | No | ||
| sourceComponentKey | Yes | ||
| targetComponentKey | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that the operation is bulk (potentially wide-reaching), that dryRun is available as a safety preview, and that rootNodeId limits scope. It omits permanence/undo behavior, what happens to unmatched keys, and whether partial failures are reported.
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, zero filler, with the core bulk-swap behavior front-loaded ahead of the optional modifiers. Nothing redundant or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No annotations and no output schema, so the description is the sole source of behavioral context. It covers the core action and two modifiers but leaves out irreversibility, result reporting, and failure semantics for a bulk mutation that could affect many nodes.
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 0%, so the description must compensate. It names all four parameters and gives meaning to two (dryRun as preview, rootNodeId as scope filter), but supplies no key format, type, or default guidance for sourceComponentKey/targetComponentKey beyond the swap relationship.
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: swap every instance whose main component key matches sourceComponentKey to targetComponentKey. The bulk scope ('every instance') clearly separates it from the singular swap_instance_component sibling, though that sibling is never named. Purpose is unambiguous without needing the 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?
Usage is implied by the bulk matching condition and the mention of dryRun (preview) and a rootNodeId scope, which hints at when to constrain the blast radius. There is no explicit when-to-use, when-not-to-use, or reference to the single-instance alternative, so the agent must infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resize_nodeA
Resize a node. Width and/or height may be passed. For TEXT: WIDTH_AND_HEIGHT (hug) refuses resize — pass textAutoResize HEIGHT (width only) or NONE (fixed). Setting only width on hug auto-promotes to HEIGHT. Prefer set_layout_sizing for HUG/FILL.
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | ||
| height | No | ||
| nodeId | Yes | ||
| forceFixed | No | TEXT only: force textAutoResize NONE before resizing | |
| textAutoResize | No | TEXT only: WIDTH_AND_HEIGHT | HEIGHT | NONE | TRUNCATE |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries behavioral load. It discloses non-obvious behavior: WIDTH_AND_HEIGHT hug refuses resize, hug auto-promotes to HEIGHT when only width is passed, and forceFixed forces textAutoResize NONE — all real behavioral traits beyond the schema. Doesn't cover permissions, errors, or side effects, hence 4 not 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?
Four tight sentences, front-loaded with the core action, then conditional TEXT rules, then the alternative-tool pointer. Every sentence earns its place; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param mutation tool with no annotations and no output schema, the description covers the tricky TEXT auto-resize semantics, edge cases (hug refuses resize), and the sibling alternative. Missing: behavior on non-TEXT nodes, whether the wrapper is allowed, and error cases, but the essentials for correct invocation are 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 coverage is 40% and only forceFixed/textAutoResize have schema descriptions. The description compensates well by explaining what width/height, textAutoResize values (WIDTH_AND_HEIGHT vs HEIGHT vs NONE) do and the hug auto-promotion behavior, adding meaning beyond the bare schema. Still incomplete for TRUNCATE and nodeId.
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+resource ('Resize a node') and immediately distinguishes from sibling resize_to_fit by describing exact behavior, plus names set_layout_sizing as the preferred alternative for HUG/FILL. An agent can disambiguate from siblings like resize_to_fit and set_layout_sizing without opening schemas.
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 clear conditional guidance for the TEXT/auto-resize case and explicitly routes to set_layout_sizing for HUG/FILL. Doesn't spell out when-not to use this tool generally (e.g. vs resize_to_fit, or for non-node contexts), but the alternative routing is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resize_to_fitA
Fit a layer. Two modes: (1) pass targetNodeId to scale nodeId to fit inside that layer, preserving aspect ratio and centering it (fit: 'contain' letterboxes, 'cover' fills and crops); (2) omit targetNodeId to shrink-wrap nodeId to tightly fit its own children (Figma's 'Resize to Fit').
| Name | Required | Description | Default |
|---|---|---|---|
| fit | No | contain = fit entirely inside the target (default); cover = fill the target, cropping overflow. | |
| nodeId | Yes | The layer to resize or shrink-wrap. | |
| targetNodeId | No | Scale nodeId to fit inside this layer's bounds. Omit to shrink-wrap nodeId to its own children. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses aspect-ratio preservation, centering, letterboxing/cropping per fit mode, and the shrink-wrap side effect. It omits privilege requirements, reversibility, and what happens to children/position in mode 1, so it falls short of full disclosure.
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 dense sentences that lead with the purpose, then enumerate the modes in priority order. No filler; every clause maps to a distinct behavior an agent needs.
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 an unannotated mutation tool with fully documented params and no output schema, the description covers both operating modes and their visual outcomes thoroughly. Minor gaps remain around side effects (does mode 1 reposition the node, how are children affected) but nothing essential to invoking it 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?
Schema coverage is 100% and each of the three parameters already has a description that mirrors the prose (fit enum values, nodeId, targetNodeId omit-to-shrink-wrap). The description adds only marginal framing over the schema, 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?
States a specific verb and resource ('Fit a layer') and immediately enumerates the two distinct operations (scale-to-target vs shrink-wrap-to-children). An agent can distinguish this from sibling resize_node or set_layout_sizing without opening the schema, since the two modes are named and their semantics spelled out.
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 explicit mode-selection rules: pass targetNodeId for fitting inside another layer, omit it for shrink-wrapping to own children, plus the contain-vs-cover trade-off. It never names or contrasts alternative tools (e.g. resize_node), so a true 5 for alternatives is not met.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_checkpointC
Reapply a snapshot captured by create_checkpoint to whichever of its nodes still exist. See create_checkpoint for what is and isn't covered.
| Name | Required | Description | Default |
|---|---|---|---|
| checkpointId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it discloses one genuinely non-obvious trait: restoration only affects nodes that still exist. However, it omits whether this is destructive, whether it overwrites current node state, whether it is reversible, and what happens to nodes added since the checkpoint; the coverage question is explicitly punted to create_checkpoint.
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 the core action front-loaded and the caveat immediately after; nothing is repetitive. The trailing cross-reference sentence earns its place as the only pointer to coverage semantics.
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 annotations, no output schema, and an entirely undocumented parameter, the description does not say what a restore returns, how failures (e.g. no surviving nodes) are surfaced, or where checkpointId comes from. It covers purpose and one caveat but leaves the operation's contract largely unstated.
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 0% and the single required parameter checkpointId is undocumented in both schema and description. The description never says where to obtain the id (presumably from create_checkpoint or list_checkpoints) or what format it takes, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('reapply') and resource ('snapshot captured by create_checkpoint'), making clear it is the inverse of create_checkpoint rather than a listing or creation tool. An agent can distinguish it from create_checkpoint and list_checkpoints from the text alone, though the phrasing 'reapply a snapshot' is slightly indirect about the mutation.
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?
Usage is only implied: the agent must infer that this is for reverting to a previously captured state. It points to create_checkpoint for coverage details, which is a useful routing hint, but there is no explicit when-to-use, when-not-to-use, or statement about prerequisites such as which checkpoints are restorable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_batchA
Execute multiple bridge actions in one round trip instead of one WebSocket call per action. Runs sequentially inside the plugin; by default stops at the first error (partial results are still returned in order). This is NOT a transaction: steps that already succeeded are not rolled back if a later step fails. Use create_checkpoint first if you need a rollback path for the nodes you're about to batch-edit.
| Name | Required | Description | Default |
|---|---|---|---|
| actions | Yes | ||
| stopOnError | No | Default true: stop at the first failing step. Set false to run every step regardless of earlier failures. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses sequential execution, first-error stopping by default, that partial results are returned in order, and critically that this is NOT a transaction (no rollback of succeeded steps). These are exactly the behavioral traits an agent needs before batching mutations.
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 tight sentences, front-loaded with the core purpose, then error behavior, then the transaction caveat, then the rollback recommendation. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation-batching tool with no annotations and no output schema, the description covers execution order, error policy, non-atomicity, and rollback strategy. An agent has everything needed to decide whether and how to call it; return values are implicitly described as ordered partial results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, so the description must compensate. It explains stopOnError's default and effect ('by default stops at the first error') and that partial results come back in order. The actions array's per-item shape ('action' + opaque 'payload') is left to the schema, but the description adds meaningful semantics beyond it.
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 mechanism: 'Execute multiple bridge actions in one round trip instead of one WebSocket call per action.' This distinguishes it clearly from the dozens of single-action siblings (set_fill_color, create_frame, etc.) by explaining the batching purpose rather than just naming it.
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 explicit when-to-use ('multiple bridge actions in one round trip') and names a concrete alternative for the rollback case ('Use create_checkpoint first if you need a rollback path'). The stopOnError default is also explained, so the agent knows the two execution modes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_instances_with_sourcesC
Scan instances under a root node and return their main component/component-set keys.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| chunkSize | No | ||
| rootNodeId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden, and it discloses almost nothing beyond the return payload. It omits pagination behavior despite offset/chunkSize parameters, whether traversal is recursive, and what 'main' component means for instance-of-set vs instance-of-component 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?
A single front-loaded sentence with no filler, and the core operation is stated first. It is terse to the point of under-specification, but structure itself is clean.
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/scan tool with no annotations, no output schema, and three zero-coverage parameters, the description is too thin. An agent lacks pagination semantics, recursion behavior, and the shape of the returned keys, all of which matter for calling it 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?
Schema description coverage is 0% and all three parameters are undocumented. The phrase 'root node' loosely maps to rootNodeId, but offset and chunkSize — clearly a pagination pair — receive no explanation of units, defaults, or bounds anywhere.
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 ('scan instances') plus scope ('under a root node') and the return payload ('main component/component-set keys'). However, it does not differentiate from nearby siblings like scan_nodes_by_types or get_instance_source, so the agent must infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use, when-not-to-use, or alternative is named, despite several closely related scanning tools in the sibling list. The 'under a root node' phrasing only weakly implies the scoping condition, leaving selection guidance to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_nodes_by_typesA
List nodes of given types in a subtree. Prefer find_nodes for anything more selective than a type filter. Defaults to the current page, or the single target frame if one is set. Pass rootNodeId to scope. Paged (default limit 200). Returns a columnar table plus total/offset/limit/truncated.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows to return. Default 200. | |
| types | Yes | ||
| offset | No | Skip this many matches, for paging. | |
| verbose | No | Return an array of objects instead of the columnar fields/rows table. | |
| rootNodeId | No | Subtree to scan. Defaults to the current page, or the single target frame. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the default scope, the paging behavior (default limit 200), and the result shape (columnar table plus total/offset/limit/truncated). It does not state result ordering, permission requirements, or explicitly that the operation is read-only, though "List" strongly implies it.
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?
Five tight sentences, front-loaded with purpose and the sibling routing rule, then scope defaults, paging, and return shape. No redundant restatement of the name or wasteful prose.
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 and no annotations, the description supplies the return shape, paging semantics, and default scope, which is most of what an agent needs. The missing piece is guidance on valid values for the required 'types' array and any result ordering.
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 80%, so the schema already documents limit, offset, verbose, and rootNodeId; the description only reinforces rootNodeId scoping. The required 'types' parameter has no schema description, and the description does not enumerate or constrain valid node type strings, which is the one gap the description could have filled.
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 ("List nodes of given types in a subtree") with scope made explicit. It also names the sibling it is not (find_nodes) and the condition that separates them, so an agent can route 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?
"Prefer find_nodes for anything more selective than a type filter" gives an explicit alternative plus the selecting condition. The default scoping rule (current page, or a single target frame) tells the agent when rootNodeId is needed versus omitted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_text_nodesC
Scan text nodes with basic chunking support. Matches are returned as a columnar table: fields lists the column names and rows holds one array per node in the same order.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| verbose | No | Return items as an array of objects instead of the columnar fields/rows table. | |
| maxChars | No | Truncate each returned characters string to this many chars. Default 120. Pass a large value (e.g. 100000) for full text. | |
| chunkSize | No | ||
| rootNodeId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the return shape (a columnar fields/rows table), which is genuinely useful given there is no output schema, but it omits whether the operation is read-only, what 'chunking' does, and what constitutes a match.
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 the purpose front-loaded and the output format second. Nothing is padded, though the brevity contributes to the documentation gaps rather than compensating for them.
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 5-parameter tool with 40% schema coverage, no annotations, and no output schema, the description explains only the return table and nothing about parameters, usage, or behavior. It is well short of what an agent needs to invoke it 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?
Schema coverage is only 40%: verbose and maxChars are documented in the schema, but offset, chunkSize, and rootNodeId have no description anywhere. The description text adds nothing about any parameter, leaving three of five undocumented in both places.
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?
It names a specific verb (scan) and resource (text nodes) and adds 'basic chunking support', but it never states what the scan is looking for — no pattern, predicate, or match criterion is given, so 'Matches are returned' is left undefined. It is distinguishable from siblings like scan_nodes_by_types only by the 'text' resource noun.
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?
There is no when-to-use guidance, no prerequisites (e.g., a required rootNodeId or current selection), and no mention of alternatives such as find_nodes, scan_nodes_by_types, or find_and_replace_text. The agent must guess the intended context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_componentsA
Search for components/component-sets via the Figma REST API (requires FIGMA_TOKEN). Provide teamId to use /v1/team/{teamId}/components, or omit it to use /v1/me/components. Optional fileKey and pageSize filter the results.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| teamId | No | ||
| fileKey | No | ||
| pageSize | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden; it does disclose the auth prerequisite (requires FIGMA_TOKEN) and the endpoint that each input mode maps to, which is real value. However it omits pagination behavior for pageSize, rate limits, error modes, and does not explicitly confirm the operation is read-only.
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 compact sentences, front-loaded with the core action and followed by routing and filter detail; no filler. Slightly dense with endpoint paths, but every sentence contributes 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 read-only REST search with no annotations and no output schema, the description covers the essentials (auth, endpoint routing, two of four params) but leaves the agent guessing about the 'type' parameter and about what the response contains or how pagination terminates.
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 0%, so the description must compensate for all four parameters. It explains teamId (routing switch), fileKey and pageSize (filters), but the 'type' parameter is never mentioned in either the schema or the description, leaving it fully opaque; pageSize's valid range and fileKey's expected format are also unstated.
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 ('Search for components/component-sets') and scopes it to the Figma REST API, so an agent knows this is a remote/API-backed search rather than a local document read. It does not explicitly contrast itself with close siblings such as get_local_components or find_nodes, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives actionable conditional guidance: supply teamId to hit /v1/team/{teamId}/components, omit it to fall back to /v1/me/components. That tells the agent which input shape selects which behavior, but it never states when to prefer this tool over sibling search/import tools or what the prerequisite token setup entails.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_to_backA
Send a layer to the back of its parent (z-order). In Figma, children[0] is back-most.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The layer to send to the back. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses the z-order model (children[0] is back-most), which tells the agent what the effect actually is, but omits prerequisites (node must have a parent) and what happens if the node is already back-most.
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, zero waste, with the core operation front-loaded and the clarifying z-order convention immediately after.
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, no-output-schema mutation tool, the description covers the operation, its target position, and the underlying ordering convention. Only prerequisite/edge-case behavior is left unstated.
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 a single parameter with 100% schema description coverage ('The layer to send to the back.'), so the schema already documents it fully. The description adds no format or identifier details beyond that.
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 (send) and resource (layer) with the target position (back of its parent). The parenthetical '(z-order)' and the note about children[0] make the operation unambiguous. It does not name the obvious sibling bring_to_front, so it stops short of full sibling 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?
Use is implied by the statement of effect (reordering z-order within a parent), but there is no explicit when-to-use guidance and no mention of the complementary tool bring_to_front or arrange_children, which an agent would want for the inverse operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_annotationC
Create or update an annotation with markdown support.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| categoryId | No | ||
| properties | No | ||
| labelMarkdown | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. "Create or update" usefully signals upsert semantics, but it says nothing about what happens to the annotation's other fields on update, whether nodeId must already exist, or whether the operation is destructive to prior annotations. For a mutation tool with zero annotation coverage this is thin.
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 front-loaded sentence with zero filler. It is efficiently stated, though its brevity leaves room the definition should have filled elsewhere.
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 4 parameters, no annotations, no output schema, and 0% schema coverage, the definition should explain far more than it does. An agent lacks what it needs to supply a valid categoryId or properties payload or to know what the call returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters. The description only adds meaning for one of them (labelMarkdown supports markdown); nodeId, categoryId, and properties are entirely undocumented in both the schema and the description, leaving the agent to guess their formats and roles.
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 (create/update) and resource (annotation), and "markdown support" hints at the label format. It reasonably distinguishes itself from the read-only get_annotations and the plural set_multiple_annotations, though it never names either sibling explicitly.
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 at all. The agent must infer from the name alone whether to use this versus set_multiple_annotations for a batch, or get_annotations for reading. No prerequisites or conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_auto_layoutB
Set multiple auto-layout properties in one call. sizing may include primaryAxisSizingMode/counterAxisSizingMode and/or layoutSizingHorizontal|width + layoutSizingVertical|height (FIXED|HUG|FILL). Empty frames keep Figma's default white fill stripped unless you pass clearFill:false.
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | Alias for layoutSizingHorizontal: FIXED | HUG | FILL | |
| height | No | Alias for layoutSizingVertical: FIXED | HUG | FILL | |
| sizing | No | ||
| frameId | Yes | ||
| padding | No | ||
| clearFill | No | Default true for empty wrappers: strip leftover default white. False keeps an existing white card fill. | |
| layoutMode | No | ||
| layoutWrap | No | ||
| itemSpacing | No | ||
| layoutSizingVertical | No | ||
| counterAxisAlignItems | No | ||
| primaryAxisAlignItems | No | ||
| layoutSizingHorizontal | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden, and it does disclose one genuine side effect: empty frames have the default white fill stripped unless clearFill:false. That is valuable behavioral context. It omits other traits such as idempotency, permission needs, and what happens to unmentioned properties.
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 dense sentences, front-loaded with the action, then the sizing composition, then the fill caveat. No filler, though the second sentence is packed enough that it reads as one long clause.
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 13-parameter mutation tool with no annotations, no output schema, and 23% schema coverage, the description covers the trickiest area (sizing aliases) and the fill side effect but leaves roughly half the parameters undocumented. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (23%) across 13 params, and the description does add meaning: how sizing composes (primaryAxisSizingMode/counterAxisSizingMode vs layoutSizingHorizontal|width + layoutSizingVertical|height, FIXED|HUG|FILL) and the clearFill default. But padding, itemSpacing, layoutMode, layoutWrap, and the axis-alignment params get no explanation anywhere.
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+resource: 'Set multiple auto-layout properties in one call.' The agent knows this mutates auto-layout settings on a frame. However, it does not distinguish itself from overlapping siblings like set_layout_sizing, set_layout_mode, set_padding, or set_item_spacing, so routing between them stays ambiguous.
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?
'In one call' implies this is the batched alternative to the single-property setters, which is a mild usage hint. But there is no explicit when-to-use/when-not guidance and no named alternative, so the agent must infer the tradeoff against set_layout_sizing and friends.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_axis_alignA
Set primary and counter axis alignment for auto-layout frames. primaryAxisAlignItems: MIN, CENTER, MAX, SPACE_BETWEEN, SPACE_AROUND, or SPACE_EVENLY (SPACE_AROUND and SPACE_EVENLY distribute children with equal space around or between them, padding included). counterAxisAlignItems: MIN, CENTER, MAX, or BASELINE.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| counterAxisAlignItems | No | ||
| primaryAxisAlignItems | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It partially meets this by explaining the effect of SPACE_AROUND and SPACE_EVENLY (equal spacing around/between children, padding included), but says nothing about mutation semantics, required node state, or error behavior on non-auto-layout nodes.
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 tightly packed sentences; the core purpose is front-loaded and the parenthetical about SPACE_AROUND/SPACE_EVENLY earns its place. Slightly dense but no wasted text.
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 3-parameter mutation tool with no annotations and no output schema, the description covers the two enum parameters well but leaves gaps: the required nodeId, the precondition that the node is an auto-layout frame, and error/mutation behavior are all unaddressed.
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 0% and the schema declares no enums, so the description does the heavy lifting by enumerating all valid values for primaryAxisAlignItems and counterAxisAlignItems. It omits any explanation of the required nodeId parameter, which prevents a 5.
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 precise verb (Set) plus the exact resource (primary and counter axis alignment) and scopes it to auto-layout frames. This cleanly distinguishes it from neighboring tools like set_padding, set_item_spacing, and set_layout_mode without needing to name them.
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 'for auto-layout frames' implies the applicable context (node must be an auto-layout frame), but there is no explicit when-to-use, no exclusion, and no mention of alternatives such as set_auto_layout or arrange_children. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_corner_radiusC
Set the corner radius of a node with optional per-corner control.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| radius | Yes | ||
| corners | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Set' implies a mutation, but the description says nothing about required permissions, reversibility (undo), what happens to existing radius values, units, or whether the radius field still applies when per-corner values are given.
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?
One sentence, front-loaded with the primary action and no filler. It is efficient, though arguably it is efficient at the cost of being under-specified rather than genuinely tight.
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 3-parameter mutation tool with a nested object, zero schema descriptions, no annotations, and no output schema, a single sentence is not enough. The description should clarify the radius/corners interaction, units, and node-type constraints.
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 0%, so the description must compensate. It conceptually points at all three parameters (node, radius, per-corner), but the critical ambiguity is unresolved: does the 'radius' value act as a fallback when only some 'corners' are supplied, do per-corner values override it, and what units are used? The schema offers no help either.
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: 'Set the corner radius of a node.' An agent can immediately tell what the tool mutates. It does not name or distinguish itself from any sibling (none of the siblings cover corner radius directly, but no routing guidance is offered).
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, when-not-to-use, or alternative tooling is mentioned. There is no indication of prerequisites such as the node needing to be a rectangle/frame/component with a corner-radius property, nor what to do if the node lacks one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_current_pageC
Set the current/active page by pageId.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing beyond the mutation itself. It does not say whether the page must already exist, what happens with an invalid pageId, whether this is a persistent document change or transient view state, or whether it affects selection.
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 short sentence with the verb and the identifying parameter front-loaded and no filler. It is efficient, though its brevity reflects under-specification rather than economy.
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 operation is conceptually simple and needs no output schema, but with zero annotations and zero parameter coverage an agent still lacks the identifier format and the side-effect profile. Minimally adequate for a one-parameter tool, with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single parameter. The description repeats the name pageId but never states the expected format (node ID, key, or page name) or any constraint, so it adds no meaning beyond the schema's type declaration.
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 (set) and resource (current/active page) qualified by an identifier, so the operation is unambiguous in isolation. It does not differentiate itself from siblings such as set_focus, set_selections, or move_node_to_page, which also touch view/selection state.
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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives. An agent cannot tell from this description whether it should call this versus create_page, duplicate_page, or set_focus when the goal is simply to change the viewed page.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_effectsA
Set effects on a node. Pass effectStyleId to apply an existing style, or effects as a raw array. Supported types: DROP_SHADOW and INNER_SHADOW ({color, offset:{x,y}, radius, spread}; DROP_SHADOW also takes showShadowBehindNode), LAYER_BLUR and BACKGROUND_BLUR ({radius, blurType:'NORMAL'} or blurType:'PROGRESSIVE' with startRadius/startOffset/endOffset), NOISE ({color, noiseSize, density, noiseType:'MONOTONE'|'DUOTONE'|'MULTITONE'}), TEXTURE ({noiseSize, radius, clipToShape}), GLASS ({lightIntensity, lightAngle, refraction, depth, dispersion, radius}), and SHADER ({id, properties}) after the shader has been imported. Prefer apply_shader for shaders. Figma requires visible and blendMode on shadows and visible plus blurType on blurs; the bridge fills those in and strips any key the effect variant does not declare, so pass only the fields you care about and never echo back an effect read off another node. boundVariables.color can bind a variable to the shadow color.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does a good job: it discloses the bridge's hidden normalization ("fills those in and strips any key the effect variant does not declare"), the shader-import prerequisite, and variable binding. It never states whether existing effects are replaced or appended, which is the key behavioral fact for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then dense reference material; virtually every clause carries actionable detail. It is a wall of semicolon-separated fields in a single paragraph, which is harder to scan than a small bulleted structure would be, but little text is 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 complex, unannotated mutation tool with no output schema, the description covers payload shapes, engine requirements, key-stripping behavior, and a shader alternative. The main omissions are replace-vs-append semantics and how the target node is identified, given the empty input schema.
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 is an empty object that documents nothing, so the description is the sole source of parameter meaning, and it delivers: effectStyleId vs effects, per-type field shapes, enum values, required fields, and boundVariables.color. This more than compensates for the vacuous 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?
"Set effects on a node" is a specific verb+resource and the description goes further by enumerating every supported effect type and payload shape. It distinguishes itself from apply_shader with an explicit routing note, but never mentions the very close sibling apply_effect_style, which overlaps its effectStyleId path.
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 selection logic ("Pass effectStyleId to apply an existing style, or effects as a raw array"), an explicit alternative ("Prefer apply_shader for shaders"), and a strong exclusion ("never echo back an effect read off another node"). It omits any guidance relative to apply_effect_style, which appears to do the same thing as the effectStyleId path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_fill_colorB
Set or clear a node's solid fill. Prefer applying styles/variables when available. Pass clear:true (or fills:[]) to remove fills from layout containers that should be transparent. Also accepts fillHex.
| Name | Required | Description | Default |
|---|---|---|---|
| b | No | ||
| g | No | ||
| r | No | ||
| clear | No | Remove all fills (transparent). | |
| nodeId | Yes | ||
| fillHex | No | ||
| opacity | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that clear:true or fills:[] removes fills (a destructive-ish behavior) and mentions design-system preference, but omits whether this overwrites existing fills, requires any permissions, or how the change interacts with bound variables. Some behavioral context, but incomplete for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the primary action, then usage preference, then the clear scenario. Efficient with little waste, though a fragment ('Also accepts fillHex') is slightly loose.
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 7-parameter mutation tool with no annotations, no output schema, and 14% schema coverage, the description is under-specified: r/g/b/opacity have no explanation and the sibling overlap with figma_set_solid_fill is unaddressed. It covers the headline behavior but leaves meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 14%, so the description must compensate. It explains 'clear' semantics and mentions 'fillHex' and 'fills:[]', covering two of the ambiguous params, but leaves the unlabeled r/g/b/opacity trio essentially undocumented and never explains their relationship to fillHex or precedence.
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?
Clear verb+resource: 'Set or clear a node's solid fill'. Distinguishes itself from set_gradient_fill and set_image_fill implicitly by the word 'solid', but does not name the sibling 'figma_set_solid_fill' which appears functionally identical. Good but not fully sibling-differentiating.
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?
Provides one useful preference ('Prefer applying styles/variables when available') and one specific scenario for clearing ('layout containers that should be transparent'). However, it does not explain when to use this tool versus the nearly identical sibling figma_set_solid_fill, which is the highest-value disambiguation here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_fixed_childrenC
Mark direct children of a frame as fixed in a scrolling prototype (fix position when scrolling).
| Name | Required | Description | Default |
|---|---|---|---|
| frameId | Yes | ||
| fixedChildIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the effect ('fix position when scrolling') and the non-recursive scope ('direct children'), which is useful. However, it says nothing about whether the call replaces or extends the existing fixed set, whether it requires the frame to already scroll, or whether it is reversible — critical for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the core action comes first. The trailing parenthetical restates the same idea in different words, which is mild redundancy rather than waste.
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?
This is a mutation tool with no annotations, no output schema, and no parameter documentation; the description should therefore do more. It omits idempotency/replacement semantics, prerequisites on the parent frame, and any indication of the result of the call.
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 0% and the description never mentions either parameter. It is unclear whether fixedChildIds is a full replacement list or additive, and whether frameId must reference a scrolling frame. Parameter names are self-suggestive, which keeps this above a 1, but the description adds no 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: 'Mark direct children of a frame as fixed in a scrolling prototype,' and the parenthetical clarifies the effect. It does not differentiate from adjacent prototype/scroll siblings such as set_overflow_direction or set_keyframe_track, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (e.g. the frame must have scrolling overflow set), and no reference to alternative or complementary tools. The agent must infer the entire workflow context from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_flow_starting_pointsB
Replace the current page's Flows list (named prototype entry points), each pointing at a top-level FRAME.
| Name | Required | Description | Default |
|---|---|---|---|
| flowStartingPoints | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and 'Replace the current page's Flows list' usefully discloses that the existing list is overwritten rather than appended, plus the constraint that entries must point at a top-level FRAME. However, it omits permission requirements, what happens to flows that don't match, and any error/return behavior.
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 front-loaded sentence with zero filler; the replacement scope leads and the definition of Flows and the FRAME constraint follow economically.
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 annotations, no output schema, and a nested-object parameter, the description covers the core replacement semantics and the FRAME constraint but leaves permissions, edge cases, and result behavior unstated.
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 0%, so the description must compensate. It adds real meaning by explaining the array represents flow entry points whose nodeId must reference a top-level FRAME, and implies the name field labels the flow. It still doesn't clarify the array-of-objects shape or that name is optional.
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 ('Replace') and resource ('current page's Flows list') and clarifies the domain term by defining Flows as 'named prototype entry points' pointing at a top-level FRAME. It is clear on its own, though it never names the closely related sibling set_prototype_start_node to disambiguate.
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 implies usage (defining a page's prototype entry points) but gives no explicit when-to-use, when-not, or alternatives versus siblings like set_prototype_start_node or set_prototype_settings. The agent must infer the context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_focusA
Select a single node and scroll the viewport to it. Switches to the node's page first, so this works with ids returned by a cross-page find_nodes. Use this to show the user what you just built or found.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It does disclose a real side effect beyond the name — it 'switches to the node's page first' — which is valuable navigation behavior an agent would otherwise not expect. However, it says nothing about failure modes (invalid/stale id), return values, or permission requirements, leaving notable gaps for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the action front-loaded and no filler. Every clause earns its place: the selection action, the page-switch side effect, and the usage context.
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 one-param navigation tool with no output schema, the description covers what it does, its side effect, and when to reach for it. Only error/edge-case behavior is missing, which is minor here.
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 0% for the single nodeId parameter, so the description must compensate. It adds meaning by indicating the id may come from a cross-page find_nodes call, implying cross-page ids are acceptable. That is useful but incomplete — it doesn't state format, or whether the id must exist in the current document.
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+resource ('Select a single node and scroll the viewport to it'), clearly distinguishable from multi-select siblings like set_selections and from set_current_page. It doesn't explicitly name a sibling alternative, but the scope ('single node') does the differentiating work.
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?
'Use this to show the user what you just built or found' gives a concrete use case, and the note that it works with ids from a cross-page find_nodes establishes a prerequisite context. No explicit when-not or named alternative (e.g. vs set_selections), 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.
set_gradient_fillB
Set a gradient fill (LINEAR, RADIAL, ANGULAR, DIAMOND) on a node. stops: [{position 0..1, color {r,g,b[,a]}}]. Optional from/to transform points (normalized), opacity, paintIndex.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No | ||
| stops | Yes | ||
| nodeId | Yes | ||
| opacity | No | ||
| paintIndex | No | ||
| gradientType | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and no output schema, the description carries the full burden. It does disclose the shape of the fill payload (stops with position/color, normalized from/to points) and that some parameters are optional, but it never states whether the gradient replaces or is appended to existing paints, what paintIndex refers to, or any permission/mutation semantics.
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?
Compact, front-loaded, and free of filler; the gradient types and payload shape come first. Slightly telegraphic in the trailing 'opacity, paintIndex' list, which names parameters without explaining them.
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 7-parameter mutation tool with nested objects, zero schema coverage, no annotations and no output schema, the description covers the core data shapes but omits mutation semantics (replace vs add), paintIndex behavior, and value ranges. Adequate but leaves real gaps an agent would hit at call time.
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 0%, so the description must compensate. It usefully documents the stops structure (position 0..1, color {r,g,b[,a]}), the normalized from/to coordinates, and the gradient type values that are absent from the schema enum. However, opacity range, paintIndex meaning, and nodeId semantics remain unexplained, so compensation is 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?
States a specific verb (Set) plus resource (gradient fill) on a node, and enumerates the supported gradient types. It is clearly separable from siblings like figma_set_solid_fill and set_image_fill by the resource itself.
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?
There is no guidance on when to choose this over figma_set_solid_fill or set_image_fill, nor any prerequisite or exclusion. Usage is only implied by the name and the presence of gradient types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_grid_child_positionA
Place a child in its GRID parent: row/column are 0-based anchor indices, rowSpan/columnSpan are how many tracks it covers, and the aligns control it inside its cell ('AUTO' stretches). Spans must fit inside the grid — anchor + span cannot exceed the track count, and the tool reports the actual bound if it does. A span also cannot cross a cell another child already occupies (Figma reports it as a span blocked by existing children in adjacent columns), so place and widen a spanning child BEFORE adding the children beside it. Children keep their own size by default; use align 'AUTO' on an axis to stretch into the cell.
| Name | Required | Description | Default |
|---|---|---|---|
| row | No | ||
| column | No | ||
| nodeId | Yes | ||
| rowSpan | No | ||
| columnSpan | No | ||
| verticalAlign | No | ||
| horizontalAlign | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses the span/track-count constraint, that the tool reports the actual bound on overflow, that spans cannot cross occupied cells (Figma blocks them), the ordering dependency, and the default sizing behavior. These are non-obvious failure and sequencing behaviors an agent needs.
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?
Dense and front-loaded with the positional meaning first, then constraints. It is a single long block with em-dash clauses, slightly run-on, but every sentence carries actionable information with little waste.
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 7-parameter mutation tool with no annotations and no output schema, the description covers constraints, ordering, defaults, and overflow reporting, which is everything an agent needs to call it correctly and interpret failures.
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 0%, so the description must compensate and largely does: row/column are explained as 0-based anchor indices, rowSpan/columnSpan as track counts, and the aligns as intra-cell controls with 'AUTO' stretching. Six of seven parameters gain meaning beyond the raw schema; only nodeId is left implicit as the child being placed.
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+resource ('Place a child in its GRID parent') and immediately scopes it to grid children, distinguishing it from siblings like set_grid_layout, generate_grid, and reorder_grid_tracks. An agent knows exactly what operation this performs.
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 clear conditional guidance: place and widen a spanning child BEFORE adding children beside it, and use align 'AUTO' to stretch. It does not name alternative sibling tools directly, but the ordering constraints effectively tell the agent when this call must happen relative to others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_grid_layoutA
Turn a frame into a GRID auto-layout container and configure it. GRID is a third layoutMode alongside HORIZONTAL/VERTICAL: children occupy cells rather than a single flow. Set rowCount/columnCount and the gaps, and optionally size individual tracks via rowSizes/columnSizes — each entry is a number (a FIXED px size) or {type:'FLEX'|'FIXED'|'HUG', value}. FLEX tracks share leftover space by their value as a weight. Position children afterwards with set_grid_child_position.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| rowGap | No | ||
| rowCount | No | ||
| rowSizes | No | ||
| columnGap | No | ||
| columnCount | No | ||
| columnSizes | No | ||
| gridAutoTracks | No | ||
| gridItemsPositioning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does add real behavioral semantics (GRID cells vs single flow, FLEX tracks sharing leftover space by weight). However, it never discloses mutation consequences for an existing frame — whether current children/layout are reset, what happens to children matching no cell, or any permission 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?
Front-loads the core action, then flows into GRID semantics, parameters, and the follow-up sibling. Dense but every sentence is technical and earns its place; the only minor cost is a long single paragraph that could separate the enum parameters more clearly.
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 9-parameter mutation tool with no annotations and no output schema, the description covers the core grid configuration well but omits the two enum parameters and any state-change or failure behavior. An agent could call the main path but would be under-informed on gridAutoTracks and gridItemsPositioning.
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 0%, so the description must compensate. It richly explains rowCount/columnCount, the gaps, and the tricky anyOf format of rowSizes/columnSizes (number = FIXED px, or object with FLEX/FIXED/HUG and value). But it leaves gridAutoTracks (NONE/ROWS) and gridItemsPositioning (MANUAL/ROW_AUTO_FLOW) completely unexplained, which are behaviorally significant enums.
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 ('Turn a frame into a GRID auto-layout container and configure it') and immediately distinguishes GRID from HORIZONTAL/VERTICAL layoutMode, which is exactly the boundary against siblings like set_auto_layout and set_layout_mode. An agent can tell what this does and how it differs from the other layout 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?
Gives clear usage context: configure tracks here, then 'Position children afterwards with set_grid_child_position,' which routes the agent to the correct follow-up sibling. It does not, however, state when to prefer this over set_auto_layout/set_layout_mode or any prerequisites, so it stops short of explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_image_fillA
Set an IMAGE fill on a node from a URL (createImageAsync), raw base64 imageBytes, or a local image file via localPath (read as base64 server-side). scaleMode: FILL, FIT, CROP, TILE.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose useful behavior: URLs go through createImageAsync and localPath files are read as base64 server-side. However, it does not say which node is targeted, whether an existing fill is replaced, what permissions are needed, or what happens on failure.
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 operation, with no filler. Every clause carries information the schema does not.
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 annotations, an empty input schema, and no output schema, the description covers the image-source and scaleMode dimensions but leaves the target node, replacement semantics, and error behavior unstated. Adequate but with a notable 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 input schema declares no properties, so the description is the only source of parameter information, and it compensates well by naming the three mutually distinct image sources and the four scaleMode enum values (FILL, FIT, CROP, TILE). It still omits whether the sources are mutually exclusive, which is required, and how the target node is identified.
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 ('Set an IMAGE fill on a node'), and the word 'IMAGE' plus the enumeration of scaleMode values implicitly separates it from the sibling fill tools figma_set_solid_fill and set_gradient_fill. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The three input-source variants (URL, base64 imageBytes, localPath) are listed, which implies when each applies, but there is no explicit guidance on when to choose this tool over figma_set_solid_fill or set_gradient_fill, and no prerequisites or exclusions are stated. Usage is inferable rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_instance_propertiesC
Set component properties/variants on an instance.
| Name | Required | Description | Default |
|---|---|---|---|
| instanceId | Yes | ||
| properties | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It implies a mutation via 'Set' but does not disclose whether values are merged or replaced, permission needs, reversibility, or what happens to existing properties. Only the basic target of the mutation is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. However, it is under-specified for a mutation tool with a nested object parameter, so its brevity reflects omission rather than efficiency.
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 that mutates instance properties with a nested free-form object, no annotations, no output schema, and no schema descriptions, the definition is not complete enough. An agent lacks enough context to invoke it confidently beyond the simplest 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?
Schema description coverage is 0%, so the description must compensate for both parameters. It briefly refers to 'component properties/variants', which vaguely maps to the properties object, but it does not explain instanceId, property key format, or accepted value types.
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 clear verb ('Set') and resource ('component properties/variants on an instance'), so an agent can identify the operation. It does not distinguish itself from siblings like set_variant_properties or bind_variable_to_property, but the core action is unambiguous.
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 given on when to use this tool versus alternatives such as get_instance_properties or set_variant_properties. The description provides no prerequisites, context, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_item_spacingC
Set distance between children in an auto-layout frame.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| itemSpacing | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It states what it does but omits whether the target frame must already have auto-layout, whether spacing is in pixels, whether negative values are accepted, and what happens to existing spacing. For a mutation tool with zero annotation coverage, these gaps are significant.
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, front-loaded sentence with no filler; every word contributes. It is appropriately sized for a simple two-parameter setter, though it is terse enough that a little more detail could have been added without bloating it.
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 annotations, no output schema, and two parameters at 0% schema description coverage, the description is too thin to fully specify correct invocation. It omits units, prerequisites, and any interaction with sibling layout properties, leaving real gaps for a 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 description coverage is 0%, so the description must compensate for the undocumented parameters. It implies itemSpacing via 'distance between children' and nodeId via 'auto-layout frame', but adds no units, format, or constraint details for either parameter, leaving the bulk of parameter meaning unexplained.
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 ('Set') and a specific resource ('distance between children in an auto-layout frame'), so the agent knows exactly what operation this performs. However, it does not differentiate itself from closely related siblings such as set_padding, set_auto_layout, set_layout_mode, arrange_children, or distribute_nodes, all of which operate on frame layout 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?
There is no explicit when-to-use guidance, no prerequisites (e.g., the frame must already have auto-layout enabled), and no mention of alternatives. The phrase 'in an auto-layout frame' implies context but does not tell the agent when this tool is the right choice versus set_padding or set_auto_layout.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_keyframe_trackA
Add or replace one manual keyframe track on a node. field is a property name (TRANSLATION_X/Y/XY, ROTATION, SCALE_X/Y/XY, OPACITY, CORNER_RADIUS, STROKE_WEIGHT, WIDTH, HEIGHT, STACK_* / GRID_* spacing, PATH_TRIM_START/END) or FILLS/STROKES/EFFECTS with a paintIndex. Transform fields COMPOSE with the node's resting transform (neutral 0, or 1 for scale); the others replace the value. timelinePosition is in seconds; the first keyframe's value holds back to t=0 and the last holds to the end, so no padding keyframes are needed. Easing on a keyframe describes the move INTO it, and adds 'HOLD' for step interpolation. The containing timeline is extended when the animation runs past it unless extendTimeline is false. Animate descendants: a top-level frame owns the timeline rather than animating on it, so keyframes there do nothing and are refused unless allowTopLevelFrame is true. Color and effect animation uses field FILLS, STROKES, or EFFECTS together with paintIndex.
| Name | Required | Description | Default |
|---|---|---|---|
| field | Yes | ||
| track | No | ||
| nodeId | Yes | ||
| keyframes | No | ||
| paintIndex | No | ||
| extendTimeline | No | ||
| allowTopLevelFrame | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses compose-vs-replace semantics per field type, keyframe hold behavior (first holds to t=0, last to end), easing direction ('move INTO it', HOLD for step), timeline auto-extension, and the top-level-frame refusal rule. This is unusually rich 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?
Purpose is front-loaded and every sentence carries operational meaning, but the description is a dense single block that could be split for scanability. No filler or repetition, so it stays efficient despite its length.
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 7-parameter tool with nested objects, no output schema and 0% schema coverage, the description covers the risky semantics (composition, easing, timeline extension, top-level refusal). It does not clarify the relationship between the track object and the top-level keyframes array, which is the main remaining ambiguity.
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 0%, so the description must compensate and largely does: it enumerates valid field values, explains paintIndex pairing for FILLS/STROKES/EFFECTS, and states timelinePosition is in seconds. It leaves the track vs top-level keyframes distinction and baseValue/id semantics unexplained, so a small gap remains.
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 pair ('add or replace') and resource ('one manual keyframe track on a node'), which cleanly separates it from siblings like remove_keyframe_track and get_motion. An agent knows immediately what mutation this performs.
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 clear conditional context: top-level frames are refused unless allowTopLevelFrame is true, and the timeline is extended unless extendTimeline is false. It does not explicitly name an alternative tool or state when to prefer it over remove_keyframe_track, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_layout_gridsA
Set layout grids (layout guides) on a frame. Each grid is either {pattern:'ROWS'|'COLUMNS', alignment:'MIN'|'MAX'|'CENTER'|'STRETCH', gutterSize, count, sectionSize?, offset?} or {pattern:'GRID', sectionSize}, plus optional visible and color. Figma rejects sectionSize when alignment is STRETCH and offset when alignment is CENTER; the bridge drops those rather than failing, and strips any key the pattern does not declare.
| Name | Required | Description | Default |
|---|---|---|---|
| frameId | Yes | ||
| layoutGrids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and handles it well: it discloses that Figma rejects sectionSize under STRETCH and offset under CENTER, and that the bridge silently drops those keys and strips undeclared keys rather than failing. That silent-failure behavior is exactly the kind of trait an agent needs. It does not describe return values, but none are needed without an output 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?
Front-loaded with the core action, then the input shape, then the edge-case behavior. Despite the dense grid spec, each sentence earns its place given the empty schema. Slightly dense but well ordered.
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 annotations and no output schema, the input contract and error handling are well covered. The notable gap is replace-vs-append semantics: 'Set' could mean overwrite existing layout grids or add to them, and nothing states the effect on prior grids or the response.
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 0% and layoutGrids is an untyped array, so the description compensates heavily by enumerating grid shapes, the pattern and alignment enums, and optional keys (gutterSize, count, sectionSize, visible, color). It adds substantial meaning beyond the bare schema, though frameId semantics remain implicit.
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: 'Set layout grids (layout guides) on a frame.' The parenthetical clarifies the Figma concept. However, it does not distinguish itself from siblings like set_grid_layout, generate_grid, or set_grid_child_position, which an agent must disambiguate from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use, when-not-to-use, or alternative-tool guidance. The description explains input validation behavior but never addresses tool selection against the many grid-related siblings, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_layout_modeA
Set the layout mode and wrap behavior of a frame: NONE, HORIZONTAL, VERTICAL, or GRID. GRID is a full cell-based layout — configure its tracks with set_grid_layout and place children with set_grid_child_position. layoutWrap (NO_WRAP | WRAP) applies to HORIZONTAL only. Empty wrappers strip leftover default white fill unless clearFill is false.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| clearFill | No | Default true for empty wrappers: strip leftover default white. | |
| layoutMode | Yes | ||
| layoutWrap | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full behavioral burden. It discloses one non-obvious side effect — empty wrappers strip leftover default white fill unless clearFill is false — which is valuable, but says nothing about permissions, reversibility, or what happens to existing children when the mode changes.
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?
Front-loaded with the primary purpose and mode values, followed by targeted detail on GRID and wrap. The final sentence is telegraphic but still earns its place by explaining the fill-stripping side effect.
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 setter with no output schema, the description covers mode values, the wrap constraint, the clearFill side effect, and the related grid tools an agent needs next. The main gap is the absence of any statement about permissions or the effect of switching modes on existing children.
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 25%, so the description must compensate, and it largely does: it lists the layoutMode enum values, the layoutWrap values plus their HORIZONTAL-only constraint, and the clearFill default semantics. Only nodeId is left to 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?
States a specific verb (set) and resource (layout mode and wrap behavior of a frame), then enumerates the exact mode values NONE/HORIZONTAL/VERTICAL/GRID. It also distinguishes itself from siblings by naming set_grid_layout for tracks and set_grid_child_position for children.
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 routes the agent to the right sibling tools for GRID configuration and child placement, which is genuinely useful context. It does not, however, clarify when to use this versus adjacent layout tools like set_auto_layout or set_layout_sizing, so a when-not clause is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_layout_sizingB
Set hug/fill/fixed sizing. Prefer layoutSizingHorizontal/Vertical or width/height aliases with FIXED | HUG | FILL. For TEXT nodes you can also pass textAutoResize (WIDTH_AND_HEIGHT | HEIGHT | NONE | TRUNCATE) so wrap mode stays aligned with sizing.
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | Alias for layoutSizingHorizontal: FIXED | HUG | FILL | |
| height | No | Alias for layoutSizingVertical: FIXED | HUG | FILL | |
| nodeId | Yes | ||
| textAutoResize | No | TEXT only: WIDTH_AND_HEIGHT | HEIGHT | NONE | TRUNCATE | |
| layoutSizingVertical | No | ||
| counterAxisSizingMode | No | ||
| primaryAxisSizingMode | No | ||
| layoutSizingHorizontal | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does add real behavioral context by explaining that textAutoResize keeps wrap mode aligned with sizing, but it omits prerequisites (e.g., does this require an auto-layout parent?), permission needs, or what happens to conflicting axis modes.
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 the core action front-loaded and the TEXT-specific nuance second. No wasted words, though the alias/preference clause is slightly dense.
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 an 8-parameter mutation tool with no annotations, no output schema, and only 38% schema coverage, the description covers the headline behavior and the TEXT case but leaves axis-mode parameters and preconditions unexplained, so it is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 38%, so the description must compensate. It explains the width/height aliases and the textAutoResize enum values, which maps to three of the eight parameters, but counterAxisSizingMode and primaryAxisSizingMode are left entirely undocumented in both the schema and the 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?
States a specific verb (Set) and resource (hug/fill/fixed sizing), so an agent knows it controls layout sizing modes. It is distinguishable from siblings like set_layout_mode and set_padding, though it never explicitly names a sibling to contrast with.
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 offers a parameter preference (use layoutSizingHorizontal/Vertical or the width/height aliases), which is useful routing, but gives no guidance on when to choose this tool over resize_node, resize_to_fit, or set_auto_layout. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_multiple_annotationsC
Batch create/update multiple annotations efficiently.
| Name | Required | Description | Default |
|---|---|---|---|
| annotations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Create/update' implies an upsert mutation, but it says nothing about whether existing annotations are overwritten, what happens for an unknown nodeId, permission requirements, or failure/partial-success behavior for a batch operation.
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 short sentence with no wasted words, but it is under-specified rather than genuinely concise; the brevity comes at the cost of missing the information an agent needs.
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 batch mutation tool with zero annotations, no output schema, and 0% parameter description coverage, the description is far too thin. It omits the required nodeId/labelMarkdown structure, upsert semantics, and result/error behavior for partial batches.
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 0% and the single array parameter's nested fields (nodeId, categoryId, properties, labelMarkdown) are entirely undocumented. The description adds no syntax, format, or meaning beyond the bare parameter name, leaving the agent to infer semantics from the schema shape alone.
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 (create/update) and resource (annotations) and the batch nature ('multiple'), which does distinguish it somewhat from the sibling set_annotation. However, it never names set_annotation or get_annotations explicitly, so the differentiation relies on the reader inferring it from the plural.
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?
There is no when-to-use guidance, no mention of the singular set_annotation alternative, and no conditions or prerequisites. 'Efficiently' implies a batch use case but gives no concrete trigger for choosing this over per-annotation calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_multiple_text_contentsC
Batch update multiple text nodes efficiently.
| Name | Required | Description | Default |
|---|---|---|---|
| updates | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden for a write operation. It says nothing about permissions, reversibility/undo, ordering of updates, or atomicity. 'Efficiently' is a marketing adverb rather than disclosed behavior.
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?
One front-loaded sentence with no preamble, which is the right size for a one-parameter tool. The trailing adverb 'efficiently' is the only filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must explain return/failure behavior for a batch mutation (e.g., partial failures, count of updated nodes). It covers none of this, nor any parameter detail, so it is incomplete for the tool's complexity.
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 0%, so the description must compensate for the single `updates` parameter and its nested nodeId/characters shape. It adds no meaning at all about what nodeId refers to or how characters replaces existing text, leaving the schema's bare types to do all the work.
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?
Names a specific verb (update) and resource (text nodes) with a batch scope, so an agent can tell it apart from the single-node set_text_content / figma_set_text siblings. It does not name those siblings explicitly, but 'multiple' carries the distinction.
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 word 'Batch' implies the use case (many nodes in one call), and the proximity of single-node siblings makes the alternative inferable. However, there is no explicit when-to-use or when-not-to-use guidance, and no mention of whether inputs must be selected/loaded first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_node_explicit_variable_modeC
Set an explicit variable mode for a node for a given collection.
| Name | Required | Description | Default |
|---|---|---|---|
| modeId | Yes | ||
| nodeId | Yes | ||
| collectionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It implies a mutation but doesn't say whether it requires the node/collection to already exist, what happens to any existing mode assignment, whether it's reversible, or what it returns. Significant gaps for a write operation.
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 with no waste, but it is under-specified rather than appropriately concise. Front-loading is fine; the problem is that there is essentially nothing after the verb.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No annotations, no output schema, 0% schema coverage, and three required parameters. The description does not fill any of those gaps, leaving the caller without enough to invoke it correctly or safely.
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 0% for all three required parameters (nodeId, collectionId, modeId), and the description adds no format, ID-form, or constraint information. With 0% coverage the description must compensate, and it 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?
States a verb (set) and resource (explicit variable mode for a node in a collection), but the phrase 'explicit variable mode' is jargon that isn't explained. It's distinguishable from siblings like set_variable_mode or bind_variable_to_property only by name, not by the description. Adequate but vague on what an explicit mode actually means.
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, no prerequisites, and no mention of alternatives despite many siblings in the variable/collection family (set_variable_mode, create_variable_mode, list_variable_collections). The agent must infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_overflow_directionC
Set frame overflow direction for scrolling in prototype (NONE, HORIZONTAL, VERTICAL, BOTH).
| Name | Required | Description | Default |
|---|---|---|---|
| frameId | Yes | ||
| overflowDirection | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, but only discloses that this affects prototype scrolling. It omits permission requirements, whether changes are reversible/undoable, and any interaction with existing scroll settings.
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 front-loaded sentence with the enumeration parenthetically appended; efficient and free of filler, though the parenthetical is slightly awkward phrasing.
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 setter with no annotations and no output schema, the enum values are the key addition, but the absence of any frameId or behavioral context leaves the definition only marginally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It helpfully enumerates the accepted values for overflowDirection (NONE, HORIZONTAL, VERTICAL, BOTH), which the schema lacks, but says nothing about frameId (format, source, required-ness 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?
States a specific verb (Set) and resource (frame overflow direction) and clarifies it governs scrolling in a prototype, enumerating the four valid modes. An agent can grasp the operation, though it doesn't explicitly differentiate itself from adjacent prototype/scroll 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?
No guidance on when to use this versus alternatives, no prerequisites (e.g. the frame must be a prototype frame), and no mention of what happens if the frame already has a direction set. Usage is only implied by 'prototype'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_overlay_settingsB
Configure how a frame/component behaves when it is shown as an OVERLAY: where it's anchored, its scrim background, and whether clicking outside closes it.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| overlayBackground | No | ||
| overlayPositionType | No | ||
| overlayBackgroundInteraction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It names the configurable aspects but omits permissions, side effects, whether settings replace or merge existing values, and what happens on success or failure. For a mutation tool with four parameters, this is a significant 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?
A single, front-loaded sentence with no wasted words. It uses a colon and parallel list to convey the three configurable aspects efficiently.
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 annotations, 0% schema description coverage, and no output schema, the description should do more. It omits the required nodeId, the meaning of enum values, and whether the operation is a partial or full update, leaving key invocation details unspecified.
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 0%, so the description must compensate. It maps three of the four parameters to concepts (anchored position, scrim background, click-outside behavior), but the required nodeId is never mentioned and the enum values and color format are not explained.
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 ('Configure'), the resource (overlay behavior), and enumerates the three settings it controls (anchor, scrim, outside-click). It also implicitly distinguishes itself from the sibling get_overlay_settings by being the setter.
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 'when it is shown as an OVERLAY' gives an implied context for use, but there is no explicit when-to-use guidance, no exclusions, and no mention of alternatives like set_prototype_settings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_paddingC
Set padding values for an auto-layout frame (top, right, bottom, left).
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| left | No | ||
| right | No | ||
| bottom | No | ||
| nodeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It implies a mutation but does not disclose units (px?), whether unset sides default or are required, what happens if the node isn't an auto-layout frame, or whether the operation is reversible. Only the target and the four fields are conveyed.
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 well-formed sentence with no filler, front-loading the verb and the constraint. Appropriately sized for the operation.
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 annotations, no output schema, 5 undocumented params and no preconditions stated, the definition is too thin. Missing the auto-layout precondition, units, and default behavior leaves real gaps an agent would need.
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 0%, so the description must compensate, but it only restates the four side names already present in the schema and says nothing about nodeId or the numeric format/units for top/right/bottom/left. It adds almost no meaning beyond the property 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?
States a specific verb (set) and resource (padding values) and constrains the target to an auto-layout frame, listing the four sides involved. It does not explicitly differentiate itself from close siblings like set_auto_layout or set_item_spacing, but an agent can identify the operation.
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, no prerequisites (e.g. that the node must already be an auto-layout frame), and no mention of alternatives such as set_auto_layout/set_item_spacing for other spacing concerns. Usage must be inferred entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_prototype_start_nodeA
Set (or clear, by omitting nodeId) the current page's default prototype start frame — the entry point used by Present.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the dual set/clear behavior and that the scope is the current page, which is real added value. It says nothing about permissions, whether existing flows are affected, or error behavior, which are gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single em-dash-structured sentence, front-loaded with the action and immediately qualifying the clear case. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter setter with no output schema and no annotations, the description covers purpose, scope, and the clear-via-omission behavior. It is largely complete, missing only sibling differentiation and any failure/selection preconditions.
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 0% and the schema only types nodeId as string|null with no description. The description compensates meaningfully by explaining that omitting nodeId clears the start frame, which is the key semantic an agent needs. It does not describe what a valid nodeId must reference.
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 ('Set... the current page's default prototype start frame') and clarifies the resource is the Present entry point. It does not, however, distinguish itself from sibling tools like set_flow_starting_points or set_target_frame, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'or clear, by omitting nodeId' gives a clear usage condition for the clearing case. There is no guidance on when to use this versus set_flow_starting_points or how it relates to get_prototype_settings, so alternative selection is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_reactionsA
Set prototype reactions on a node (replaces existing reactions). Supports every action type including NODE navigation (NAVIGATE/SWAP/OVERLAY/SCROLL_TO/CHANGE_TO), BACK, CLOSE, URL, SET_VARIABLE, SET_VARIABLE_MODE, CONDITIONAL, and UPDATE_MEDIA_RUNTIME. Reactions are validated against a strict schema: transitions of type DISSOLVE/SMART_ANIMATE/SCROLL_ANIMATE must NOT carry direction or matchLayers (only MOVE_IN/MOVE_OUT/PUSH/SLIDE_IN/SLIDE_OUT may), and a NODE destination must be a valid target for its navigation type — NAVIGATE/SWAP need a top-level frame, OVERLAY an overlay-configured frame, SCROLL_TO a node inside a scrollable ancestor, CHANGE_TO a sibling variant in the same component set.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| reactions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it does substantial work here: it discloses that existing reactions are destroyed ('replaces existing reactions'), that input is validated against a strict schema, and gives concrete validation rules (transition/direction constraints, destination compatibility per navigation type). It stops short of error behavior or required permissions, but the destruction and validation semantics are strong disclosure for an unannotated mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and destructive semantics are front-loaded in the first clause, followed by two dense sentences of hard constraints. It is long, but nearly every clause encodes a real validation rule an agent needs, so the length is largely earned rather than 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 2-param mutation tool with no annotations and no output schema, the description covers the critical complexity: what it overwrites and the cross-field validation rules that will otherwise cause failures. Remaining gaps (nodeId conventions, response/error shape) are minor given there is no output schema to explain.
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 0% for the two parameters, so the description must compensate. It richly specifies the semantic content of the reactions payload (action types, transition constraints, destination rules) but says nothing about the nodeId format or the concrete field layout of the reactions array, so it partially closes the gap rather than fully covering it.
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 ('Set prototype reactions on a node') and immediately qualifies scope with 'replaces existing reactions.' It enumerates the supported action types, which cleanly separates it from read-only siblings like get_reactions and from narrower writers like upsert_reaction, set_transition_reaction, and set_smart_animate_reaction.
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 replacement semantics imply when to reach for this versus an additive tool, and the enumeration of supported action types hints at its breadth. However, it never explicitly names an alternative (e.g., 'use upsert_reaction to add without clearing') or states when-not to use it, leaving sibling routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_section_propertiesC
Edit properties of an existing SECTION node, e.g. sectionType (SECTION | VIEWPORT) or the raw sectionProperties object.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| sectionType | No | Section type: SECTION or VIEWPORT. | |
| sectionProperties | No | Raw sectionProperties object to merge onto the section. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a mutation but says nothing about required permissions, whether edits are reversible, or what happens to unmentioned properties; only the schema hints at merge behavior.
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 front-loaded sentence that names the resource, the mutation, and the two editable aspects with no filler. Size is appropriate for the tool's modest surface.
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 annotations and no output schema, the description is thin: it omits merge semantics, error behavior, and permission requirements. The agent would need to open the schema to call it safely.
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 67%, and the description echoes the sectionType values (SECTION | VIEWPORT) plus the raw sectionProperties concept, adding some value. However nodeId is undocumented in both schema and description, and no format/syntax detail is added 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?
States a specific verb+resource ('Edit properties of an existing SECTION node') with the scope qualifier 'existing' that separates it from create_section. An agent can tell this mutates an existing section, though no sibling is named directly.
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 on when to use this versus alternatives like create_section, set_instance_properties, or bulk_update, and no prerequisites or exclusions stated. Usage must be inferred entirely from the purpose sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_selectionsA
Set selection to multiple nodes and scroll viewport to show them. Switches to the first node's page; Figma scopes selection to one page, so nodes on other pages are reported in skippedOnOtherPages.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does materially more than most siblings: it discloses a state change ('Switches to the first node's page'), a viewport side effect, and a failure/partial-success channel ('nodes on other pages are reported in skippedOnOtherPages'). It stops short of stating what happens if a node ID is invalid or whether selection can be cleared.
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 front-loaded sentences with no filler: the primary action comes first and the page-scoping caveat second. The second sentence is dense and slightly run-on, but every clause carries information that affects correct invocation.
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 tool with no annotations and no output schema, the description covers the main behavioral risks (page switch, skipped nodes, viewport scroll). Remaining gaps are minor edge cases such as invalid IDs or empty arrays, which the mention of skippedOnOtherPages partly covers.
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 0% for the single nodeIds parameter, so the description must fill the gap. It adds genuinely useful semantics — node IDs may span pages and the first element determines which page becomes active — but says nothing about ID format, expected array size, or behavior for empty input, so it only partially compensates.
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 ('Set selection to multiple nodes') plus a side effect ('scroll viewport to show them'), which cleanly separates it from read-only siblings like get_selection or navigation tools like set_current_page. It never explicitly names an alternative, so the differentiation is implied rather than stated.
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?
Usage is implied by 'set selection to multiple nodes' but the description offers no when-to-use framing, no prerequisites, and no comparison to related tools such as get_selection, set_focus, or set_current_page. The page-scoping note is a behavioral constraint, not guidance on when to choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_smart_animate_reactionC
Create or replace a node-to-node prototype reaction using Smart Animate, with optional easing/preset overrides. Smart Animate interpolates matching layers between source and destination automatically; there is no per-property keyframe API.
| Name | Required | Description | Default |
|---|---|---|---|
| match | No | ||
| nodeId | Yes | ||
| preset | No | ||
| navigation | No | ||
| transition | No | ||
| triggerType | No | ||
| destinationId | Yes | ||
| replaceExisting | No | ||
| resetVideoPosition | No | ||
| resetScrollPosition | No | ||
| preserveScrollPosition | No | ||
| overlayRelativePosition | No | ||
| resetInteractiveComponents | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions 'Create or replace' implying mutation, and 'there is no per-property keyframe API' is a useful constraint. However, it omits critical behavioral details: whether this requires specific permissions, how it interacts with existing reactions (e.g., does it overwrite?), and what happens on success/failure. For a 13-parameter mutation tool with no annotations, this is a significant 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?
Two sentences, front-loaded with the core action, and the second sentence adds a useful constraint about Smart Animate's interpolation model. No wasted words, though it could be slightly more structured with bullet points for clarity given 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?
Given 13 parameters, nested objects, 0% schema coverage, no annotations, and no output schema, the description is far too sparse. It does not explain required parameters, how the 'match' object works, what navigation types do, or how replaceExisting behaves. An agent would struggle to invoke this correctly without external documentation.
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 0% with 13 parameters, many with nested objects and enums. The description only vaguely mentions 'easing/preset overrides' and does not explain any parameter semantics, required fields, defaults, or the meaning of options like navigation, triggerType, or the match object. The schema itself is complex but lacks descriptions. The description fails to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: 'Create or replace a node-to-node prototype reaction using Smart Animate, with optional easing/preset overrides.' This clearly distinguishes the tool from siblings like set_transition_reaction or set_reactions by focusing on Smart Animate and node-to-node reactions. However, it does not explicitly differentiate from set_reactions or upsert_reaction, which might also create reactions. Still, the Smart Animate specificity is strong.
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 on when to use this tool versus alternatives like set_reactions, upsert_reaction, or set_transition_reaction. The description only explains what Smart Animate is, not when to choose this tool over others. No explicit when/when-not or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_stroke_colorB
Set or clear a node's stroke. Color via hex/strokeHex or r/g/b (0..1 or 0..255), optional strokeWeight, strokeAlign (CENTER|INSIDE|OUTSIDE), dashPattern (e.g. [4,4]), strokeCap (NONE|ROUND|SQUARE), strokeJoin (MITER|BEVEL|ROUND), or styleId to apply a paint style. Pass clear:true to remove strokes.
| Name | Required | Description | Default |
|---|---|---|---|
| b | No | ||
| g | No | ||
| r | No | ||
| hex | No | ||
| clear | No | Remove all strokes | |
| nodeId | Yes | ||
| opacity | No | ||
| styleId | No | Apply a local paint style to strokes | |
| strokeCap | No | NONE | ROUND | SQUARE | |
| strokeHex | No | ||
| strokeJoin | No | MITER | BEVEL | ROUND | |
| dashPattern | No | e.g. [4, 4] for dashed; [] for solid | |
| strokeAlign | No | CENTER | INSIDE | OUTSIDE | |
| strokeWeight | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that clear:true removes strokes, that color accepts hex/strokeHex or r/g/b with two numeric ranges, and enumerates the enum-like string values. It does not state permissions, whether existing strokes are overwritten, or any return behavior, leaving meaningful gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in the first clause, then a compact enumeration of options. It is dense but every clause maps to a real parameter, so little is wasted; the long single sentence is slightly hard to parse but efficient overall.
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 14-parameter mutation tool with no annotations and no output schema, the description covers most parameters and the clear/apply-style modes, which is reasonably complete. However, it omits the opacity parameter and any note on side effects or required permissions, leaving gaps that structured fields do not fill.
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 low (43%), so the description must compensate, and it largely does: it explains hex/strokeHex, r/g/b with the 0..1 or 0..255 range, strokeWeight, strokeAlign, dashPattern (with example), strokeCap, strokeJoin, styleId, and clear. Only opacity goes unmentioned, so the description adds substantial meaning beyond the bare 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 opens with a specific verb+resource: 'Set or clear a node's stroke.' This clearly distinguishes it from the fill-oriented siblings (set_fill_color, figma_set_solid_fill). It stops short of explicitly naming an alternative, so it is clear but not fully differentiated.
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?
There is no when-to-use or when-not-to-use guidance and no named alternatives. The mention of 'clear:true to remove strokes' and 'styleId to apply a paint style' hints at two modes, but the agent must infer when to pick this over apply_stroke_style or bind_color_variable_to_stroke.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_target_frameB
Sets the target frame(s) that the agent is allowed to modify.
| Name | Required | Description | Default |
|---|---|---|---|
| frameId | No | ||
| frameIds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the important behavioral trait that this call gates which frames subsequent operations may modify. However, it omits whether it replaces or appends to the existing target set, whether prior targets are cleared, and what happens if a frame id is invalid or nonexistent.
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 front-loaded sentence with zero filler; the verb, resource, and scope qualifier all appear immediately. Nothing in it is redundant with the 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?
This is a state-mutating tool with no annotations, no output schema, and two entirely undocumented parameters. The one-line description leaves out replacement-vs-merge semantics, error behavior, and how the set interacts with the sibling target-frame tools, which an agent needs to call it 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?
Schema coverage is 0% and neither frameId nor frameIds has a description in the schema. The description's 'frame(s)' hints at the singular/plural pair, but it never explains whether the two parameters are alternatives, whether supplying frameIds overrides frameId, or whether they merge with the existing target set.
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 pairs a specific verb ('Sets') with a specific resource ('target frame(s)') and adds the distinguishing semantics that these frames are the ones 'the agent is allowed to modify'. That scope detail separates it from generic selection tools, though it never names the obvious siblings get_target_frames or clear_target_frames.
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, no prerequisites, and no mention of alternatives such as get_target_frames (to read the current set), clear_target_frames (to reset it), or set_selections/set_focus (to change what is selected). The 'allowed to modify' phrasing only weakly implies the tool must be called before mutating frames.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_text_contentC
Set the text content of a single text node.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| characters | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not disclose whether the operation requires the node to already exist, whether it overwrites existing content, error behavior, or permissions 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?
A single, short sentence that is front-loaded with the action. It is appropriately sized, though its brevity contributes to the gaps in other dimensions rather than being wasteful.
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 annotations, no output schema, and 0% schema description coverage, the description is inadequate. It omits parameter meaning, behavioral details, and usage context that an agent would need to invoke it 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?
Schema description coverage is 0%, so the description must compensate for the two undocumented parameters. It does not explain that 'nodeId' is the target node identifier or that 'characters' is the replacement text, leaving the parameters under-specified.
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 (Set) and resource (text content of a single text node), which is clear enough for an agent to understand the operation. It is distinguishable from siblings like set_multiple_text_contents, though the description does not explicitly call that distinction out.
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?
There is no guidance on when to use this tool versus alternatives such as set_multiple_text_contents, find_and_replace_text, or figma_set_text. The agent is left to infer the single-node scope only from the word 'single'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_text_styleB
Apply a text style and/or fine-grained typography to a TEXT node. Pass textStyleId to apply an existing style; also supports fontFamily/fontStyle, variationSettings (variable-font axes, e.g. {wght:550}), fontSize, lineHeight (number|'AUTO'|{unit,value}), letterSpacing (number|{unit,value}), textCase, textDecoration, textAlignHorizontal (LEFT|CENTER|RIGHT|JUSTIFIED), textAlignVertical (TOP|CENTER|BOTTOM), textAutoResize (WIDTH_AND_HEIGHT|HEIGHT|NONE|TRUNCATE), layoutSizingHorizontal/Vertical or width/height (FIXED|HUG|FILL), paragraphIndent/Spacing, fillsHex/fills/fillStyleId, boundVariables, textWrapStyle (AUTO|BALANCE|PRETTY), textTruncation (DISABLED|ENDING) and maxLines.
| Name | Required | Description | Default |
|---|---|---|---|
| fills | No | ||
| width | No | Alias for layoutSizingHorizontal | |
| height | No | Alias for layoutSizingVertical | |
| nodeId | Yes | ||
| fillsHex | No | ||
| fontSize | No | ||
| maxLines | No | ||
| textCase | No | ||
| fontStyle | No | ||
| fontFamily | No | ||
| lineHeight | No | ||
| fillStyleId | No | ||
| textStyleId | No | ||
| letterSpacing | No | ||
| textWrapStyle | No | ||
| boundVariables | No | ||
| textAutoResize | No | WIDTH_AND_HEIGHT | HEIGHT | NONE | TRUNCATE | |
| textDecoration | No | ||
| textTruncation | No | ||
| paragraphIndent | No | ||
| paragraphSpacing | No | ||
| textAlignVertical | No | TOP | CENTER | BOTTOM | |
| variationSettings | No | Variable-font axis values keyed by OpenType tag, e.g. { wght: 550, slnt: -10 }. | |
| textAlignHorizontal | No | LEFT | CENTER | RIGHT | JUSTIFIED | |
| layoutSizingVertical | No | ||
| layoutSizingHorizontal | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet it does not say what existing styling gets overwritten, whether the node must already be a TEXT node, what permissions are needed, or what errors occur. It only adds minor behavioral context (that textStyleId applies a pre-existing style), leaving the mutation profile largely 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 purpose is front-loaded in the first clause, which is good, but the remainder is a single run-on sentence that strings all 26 parameters together without grouping or structure, making it hard to scan despite being information-dense.
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 26-parameter mutation tool with no output schema, the description does cover most parameter values, but it omits the when-to-use framing and the mutation/override behavior an agent needs. It is adequate on the parameter front but incomplete on operational context.
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 23%, so the description must compensate and largely does: it enumerates allowed values for textAlignHorizontal, textAlignVertical, textAutoResize, textWrapStyle, textTruncation, layoutSizing, gives lineHeight/letterSpacing format options (number|'AUTO'|{unit,value}), and a variationSettings example. A few params (boundVariables, fills, fillStyleId) are named but not explained, so it falls short of a perfect 5.
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 (apply) and resource (text style / fine-grained typography) scoped to a TEXT node, which is concrete and unambiguous. However, it does not differentiate itself from the sibling apply_text_style, even though both appear to apply existing styles, leaving the agent to infer which to pick.
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?
There is no explicit when-to-use or when-not-to-use guidance, no prerequisites, and no mention of the sibling alternatives (apply_text_style, figma_set_text, set_text_content). The only hint is 'Pass textStyleId to apply an existing style', which is parameter usage rather than tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_timeline_durationA
Set the duration, in seconds, of the timeline owned by the node's containing top-level frame. Omit timelineId to use the node's first timeline. Lengthen to make room for an animation; do not shorten unless the user asked, since it truncates existing motion.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| duration | Yes | ||
| timelineId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the destructive side effect (shortening truncates existing motion) and the timelineId default, but says nothing about reversibility, permissions, or response, leaving meaningful behavioral gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action and scope, followed by the parameter default and the safety caveat. No filler or repetition.
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 3-param mutation tool with no annotations and no output schema, the description covers unit, default behavior, and the key destructive consequence. Only the meaning of nodeId and reversibility are left implicit, so it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It adds real meaning for two of three params — duration is 'in seconds' and timelineId omitted falls back to the node's first timeline — but nodeId is never explained, leaving one parameter undocumented in both schema and 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?
States a specific verb (Set) and resource (duration of a timeline), and pins the scope to 'the timeline owned by the node's containing top-level frame,' which tells the agent exactly what is being mutated. It does not explicitly contrast with nearby siblings like set_keyframe_track or apply_animation_style, but the purpose itself is unambiguous.
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 explicit when/when-not guidance: lengthen to make room for animation, do not shorten unless the user asked because it truncates motion. This is strong operational direction, though it names no alternative tool to route to.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_transition_reactionA
Create or replace a node-to-node prototype reaction with a typed transition/easing payload. Pass preset for a curated motion preset or transition for an explicit one; direction/matchLayers apply only to MOVE_IN/MOVE_OUT/PUSH/SLIDE_IN/SLIDE_OUT. Set replaceExisting:false to append instead of replacing the node's existing reactions.
| Name | Required | Description | Default |
|---|---|---|---|
| match | No | ||
| nodeId | Yes | ||
| preset | No | ||
| navigation | No | ||
| transition | No | ||
| triggerType | No | ||
| destinationId | Yes | ||
| replaceExisting | No | ||
| resetVideoPosition | No | ||
| resetScrollPosition | No | ||
| preserveScrollPosition | No | ||
| overlayRelativePosition | No | ||
| resetInteractiveComponents | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral disclosure. It states the tool can replace or append reactions but does not mention permissions, mutability, side effects, or error conditions. Critical behavioral context is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core action, then details key parameters. Every sentence adds value, though the final clause about replaceExisting could be slightly more integrated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 13 parameters, 0% schema description coverage, and no annotations or output schema, the description is insufficiently complete. It omits many parameters and lacks behavioral details like side effects or return values.
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 0%, so the description must compensate. It explains the roles of 'preset', 'transition', direction/matchLayers, and 'replaceExisting', but does not cover the other 9 parameters (e.g., navigation, triggerType, resetScrollPosition). Partial compensation yields a baseline 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 clearly states a specific verb+resource: 'Create or replace a node-to-node prototype reaction with a typed transition/easing payload.' It distinguishes itself from siblings like 'set_smart_animate_reaction' and 'set_reactions' by emphasizing node-to-node and typed payload.
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 provides clear context for when to use certain parameters (e.g., 'direction/matchLayers apply only to MOVE_IN/MOVE_OUT/PUSH/SLIDE_IN/SLIDE_OUT') and how to append vs replace. However, it does not explicitly compare to alternatives like 'set_smart_animate_reaction' or 'set_reactions', leaving room for ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_variable_modeA
Theme switch: set the variable mode for one or many nodes. modeId can be a mode id or exact mode name. Scope via nodeIds, rootNodeId (recurse defaults true, pass recurse:false for the root only), or the whole current page.
| Name | Required | Description | Default |
|---|---|---|---|
| modeId | Yes | ||
| nodeIds | No | ||
| recurse | No | ||
| rootNodeId | No | ||
| collectionId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses recurse's default of true and the root-only override, plus the implicit whole-page fallback, but says nothing about whether the change is stateful/destructive, whether it requires a loaded file or collection, or how it interacts with already-applied modes.
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 dense sentences with a front-loaded 'Theme switch:' label and zero filler; the scoping options are enumerated compactly. Nothing could be cut without losing 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 5-parameter mutation tool with no annotations, no output schema, and 0% schema documentation, the description covers most of what an agent needs but leaves collectionId unexplained and omits any note on effect or return. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does well for modeId (id or exact mode name), nodeIds, rootNodeId and recurse, but it never mentions the collectionId parameter, which matters for disambiguating a mode name that may exist in multiple collections.
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 up front ('Theme switch: set the variable mode for one or many nodes'), so the operation is unambiguous. However, it never distinguishes itself from the near-identical sibling set_node_explicit_variable_mode, nor from create/rename/delete_variable_mode, leaving an agent to guess which one applies.
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 how to choose a scope (nodeIds, rootNodeId, or the whole current page), which implies when each targeting option is appropriate. It gives no explicit guidance on when to use this tool versus the sibling set_node_explicit_variable_mode, and states no preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_variable_valuesC
Update a variable's values by mode.
| Name | Required | Description | Default |
|---|---|---|---|
| variableId | Yes | ||
| valuesByMode | Yes | ||
| valuesByModeEntries | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, but it provides only a generic 'Update' statement. It does not say what the operation mutates, whether changes are destructive or reversible, what permissions are required, or how mode values are handled.
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 single sentence is front-loaded and free of fluff, which is structurally efficient. But it is under-specified rather than truly concise: the brevity comes at the cost of meaningful detail for a nested mutation tool.
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 three parameters, nested objects, no annotations, and no output schema, the description is far too thin. It omits parameter formats, mode behavior, mutation effects, and any operational caveats an agent would need before calling it safely.
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 0%, so the description must compensate for all three parameters. It vaguely implies mode-based values but does not explain variableId, the valuesByMode object shape, or the optional valuesByModeEntries array beyond what the bare schema names suggest.
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 ('Update'), resource ('variable's values'), and scoping method ('by mode'), so the core action is clear. However, it does not distinguish this operation from nearby siblings such as set_variable_mode or set_node_explicit_variable_mode, leaving some selection 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?
There is no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The definition leaves the agent to infer usage context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_variant_propertiesC
Rename a component using Figma's variant naming format (Property=Value, ...).
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No | ||
| properties | Yes | ||
| componentId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a mutation ('Rename') but says nothing about required permissions, what happens to existing variant properties, whether values are validated against defined component properties, or whether the operation is reversible. The naming-format detail is the only extra context offered.
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 front-loaded sentence with no filler; the core action and the format requirement come first. It is efficient, though it is also short enough that the missing guidance wasn't trimmed so much as never written.
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 annotations, no output schema, an undocumented nested object parameter, and 0% parameter descriptions, the definition is far too thin. An agent still cannot tell which identifier to pass or what a successful call changes about the component set.
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 0% for three parameters, and the description only loosely gestures at the 'properties' map via 'Property=Value'. The critical distinction between nodeId and componentId — which one to supply, whether one is required, and how they interact with 'properties' — is never explained, so the description does not compensate for the coverage gap.
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 concrete verb and resource ('Rename a component') and adds the mechanism ('Figma's variant naming format (Property=Value, ...)'), so an agent can infer what will actually change. It does not, however, distinguish itself from adjacent siblings like rename_node, bulk_rename, or set_instance_properties, which is why this falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives such as rename_node, bulk_rename, or combine_as_variants, and no prerequisites (e.g., that the target must be a variant component). The only usage-adjacent content is the naming-format hint, which is syntactic rather than situational.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_vector_pathsC
Replace the SVG path data on an existing VECTOR node.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| vectorPaths | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Replace' hints at a destructive overwrite of prior path data, but it does not state whether the change is reversible, what permissions/auth are needed, or how existing paths are discarded. For a mutation tool with zero annotation coverage this is a meaningful 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?
A single front-loaded sentence with zero filler, correctly emphasizing the replacement action and target resource. Its brevity doubles as under-specification, but that is not a structural fault.
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 no annotations and no output schema, the description is too thin. It omits the semantics of windingRule, the expected path-data format, and any indication of what happens to previously existing paths.
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 0% and neither parameter is documented in the schema. The description loosely implies the nodeId (existing VECTOR node) and vectorPaths (SVG path data), but adds no format or syntax detail for the path 'data' string or the undocumented 'windingRule' field, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Replace') and resource ('SVG path data on an existing VECTOR node'), making the mutation target unambiguous. It distinguishes itself from fill-oriented siblings like set_solid_fill and set_image_fill, though it doesn't explicitly contrast with create_vector, which produces a VECTOR node rather than mutating one.
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, prerequisites, or alternatives are given. The agent must infer that this applies only to already-existing VECTOR nodes and there is no routing guidance versus create_vector or other path-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subscribe_eventsSubscribe to eventsA
Start pushing Figma events (selectionchange, documentchange) to the bridge. They land in the event log read via get_events.
| Name | Required | Description | Default |
|---|---|---|---|
| events | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden; it usefully discloses that this is an asynchronous push that lands in an event log read by get_events. It omits whether the subscription is persistent, whether an active bridge/channel connection is required, and whether a prior subscription is replaced.
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, front-loaded with the action and immediately followed by the destination and read path. No redundant 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 single-parameter tool with no annotations and no output schema, the description covers the core action and result location adequately. It leaves gaps around connection prerequisites, subscription lifetime, and the unsubscribe counterpart that an agent would want before invoking.
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 0% and the array items have no enum, but the description supplies two concrete event-name values, partially documenting the required 'events' parameter. It does not clarify accepted values exhaustively or whether multiple subscriptions merge, so it adds only moderate value over the bare 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?
Specific verb ('Start pushing') plus resource ('Figjam events') with concrete examples (selectionchange, documentchange) and the destination ('the bridge'). It routes the agent to the sibling get_events for reading results, so it is distinguishable without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: call this to begin receiving events, and read them via get_events. However, it never names the counterpart unsubscribe_events or states when subscribing is unnecessary or how the subscription persists, so the when/when-not guidance is only partially present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
swap_instance_componentC
Swap an instance to a different library component key.
| Name | Required | Description | Default |
|---|---|---|---|
| instanceId | Yes | ||
| newComponentKey | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says it swaps, but never discloses what happens to instance overrides, whether the operation is reversible, whether it requires auth or a library key lookup, or how errors surface for an invalid key.
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 front-loaded sentence with no filler. It is efficient, though the economy comes at the cost of the missing detail noted elsewhere.
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 annotations, no output schema, and zero parameter documentation, the description is too thin. An agent lacks enough to invoke it confidently or interpret what changed after the call.
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 0%, so both parameters (instanceId, newComponentKey) are undocumented in the structured fields. The description gestures at 'instance' and 'component key' but adds no format, ID convention, or key-resolution detail to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Swap') and resource ('an instance to a different library component key'), so an agent can tell what the tool does. It does not, however, distinguish itself from near siblings like replace_all_instances or create_instance_from_component_key.
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?
There is no when-to-use guidance, no prerequisites (e.g. component must exist in the library), and no mention of the sibling replace_all_instances that handles the bulk case. The agent must infer context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undoUndo last actionA
Reverses the most recent auto-captured mutating action (snapshot-based, best-effort). Cannot restore deleted nodes or structural changes. Only works within the current plugin session while target-frame mutating actions were executed through this bridge.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the snapshot mechanism, that the operation is best-effort (may not fully succeed), and its session/target-frame scope. It does not describe the return signal (success vs. partial failure), which matters for a best-effort operation.
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 dense sentences with zero filler. The core action leads, and the constraints follow in priority order (limits, then session 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?
No annotations and no output schema, so the description must carry behavior, limits, and scope — and it largely does. The remaining gap is the response shape for a best-effort operation, which an agent would want before relying on it.
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 takes zero parameters, so the baseline is 4. The description correctly adds no parameter noise and instead spends its words on behavior and scope.
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 (reverses) and a precisely scoped resource (the most recent auto-captured mutating action), plus implementation hints (snapshot-based, best-effort). It never names the obvious siblings redo or restore_checkpoint, so an agent gets no explicit differentiation from those.
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 real conditions for use and non-use: only within the current plugin session, only for actions executed through this bridge, and explicitly cannot restore deleted nodes or structural changes. It stops short of naming redo or restore_checkpoint as the alternatives for those cases, so routing still requires inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ungroup_nodeB
Ungroup a GROUP node, moving its children up to the group's parent.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the behavioral effect on children (moved up to the group's parent), but omits whether the group node itself is deleted, what authorization is needed, and what the call returns.
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 tight sentence with the action front-loaded and the consequence trailing. Every clause earns its place with no 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 one-parameter mutation with no output schema and no annotations, the description covers the core effect but leaves gaps: fate of the removed group node, error behavior on non-group input, and any permission needs are all unstated.
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 0%, so the description must compensate. It does constrain the single parameter semantically by requiring the target to be a GROUP node, which adds meaning beyond the bare 'string' schema type, but adds no id format or discovery guidance.
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 ('ungroup') and resource ('GROUP node') and describes the resulting structural effect. It is clearly the inverse of the sibling 'group_nodes', though it does not name that sibling explicitly.
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 on when to use this versus alternatives like 'reparent_node', 'arrange_children', or 'group_nodes'. There is also no precondition stated (e.g., that the node must be a group, or what happens on a non-group node).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsubscribe_eventsUnsubscribe from eventsC
Stop pushing selected Figma events to the bridge.
| Name | Required | Description | Default |
|---|---|---|---|
| events | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It implies a mutation (removing a subscription) but says nothing about reversibility, whether unsubscribing from a non-subscribed event errors, or whether it affects only the current session/machine.
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 efficient sentence with the action front-loaded. It is appropriately sized, though the brevity is partly a symptom of under-specification rather than disciplined 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 mutation tool with no annotations, no output schema, and an entirely undocumented parameter, the description is too thin. An agent cannot know what happens on success/failure or what values the events argument accepts.
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 0% for the single 'events' array. The word 'selected' hints the array chooses which events, but no format, valid event names, or requirement that they match currently subscribed events is given, so the description fails to compensate for the documentation gap.
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 ('stop pushing') and resource ('Figma events to the bridge'), clearly the inverse of the sibling subscribe_events. It is understandable without opening the schema, though it never explicitly names subscribe_events as its counterpart.
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?
There is no guidance on when to use this versus subscribe_events, get_events, or the other bridge/channel siblings. No prerequisites, exclusions, or alternative routing are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_reactionC
Replace the first matching reaction (by trigger/action/destination) or append if none match. Supports all action types including NODE navigation. Existing reactions on the node are re-normalized before being written back, so round-tripping does not trip the strict setter schema.
| Name | Required | Description | Default |
|---|---|---|---|
| match | No | ||
| nodeId | Yes | ||
| reaction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It does add genuine behavioral context: matching criteria, append fallback, NODE navigation support, and the re-normalization/round-trip behavior. But it omits error behavior, permission/auth needs, and what a failed match or invalid reaction produces.
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, front-loaded with the core upsert behavior, then supporting details. Dense and largely waste-free, though the final clause about the strict setter schema is somewhat implementation-flavored jargon.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No annotations, no output schema, 0% parameter coverage, and a nested match object demand more from the description. It explains mutation behavior well but leaves the reaction payload, required nodeId, and return/error outcomes undefined.
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 0%, so the description is the only source of parameter meaning. Its '(by trigger/action/destination)' phrase maps usefully to the match subfields (triggerType, actionType, destinationId), but the required nodeId and the untyped 'reaction' object are never explained, leaving the most important payload parameter undocumented.
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+resource with clear semantics: 'Replace the first matching reaction ... or append if none match.' An agent immediately understands this is an upsert. However, it does not name which siblings (set_reactions, clear_reactions, get_reactions) it competes with, leaving that differentiation implicit.
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 replace-or-append framing hints at when the tool is appropriate, but there is no explicit when-to-use guidance versus set_reactions or get_reactions, and no conditions or exclusions are stated. Usage must be inferred entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
188 tool updates
v0.1.0- First observed
add_component_property - First observed
append_to_slot - First observed
apply_animation_style - First observed
apply_effect_style - First observed
apply_fill_style - First observed
apply_grid_style - First observed
apply_shader - First observed
apply_stroke_style - First observed
apply_text_style - First observed
arrange_children - First observed
bind_color_variable_to_fill - First observed
bind_color_variable_to_stroke - First observed
bind_component_property - First observed
bind_variable_to_property - First observed
boolean_group - First observed
bring_to_front - First observed
bulk_rename - First observed
bulk_update - First observed
clear_reactions - First observed
clear_target_frames - First observed
clone_node - First observed
clone_node_into_parent - First observed
combine_as_variants - First observed
create_checkpoint - First observed
create_component - First observed
create_component_from_node - First observed
create_component_instance - First observed
create_component_slot - First observed
create_effect_style - First observed
create_frame - First observed
create_grid_style - First observed
create_instance_from_component_key - First observed
create_instance_from_instance - First observed
create_instance_from_set_key - First observed
create_page - First observed
create_paint_style - First observed
create_rectangle - First observed
create_section - First observed
create_text - First observed
create_text_style - First observed
create_typography_scale - First observed
create_variable - First observed
create_variable_collection - First observed
create_variable_mode - First observed
create_vector - First observed
delete_comment - First observed
delete_component_property - First observed
delete_component_slot - First observed
delete_multiple_nodes - First observed
delete_node - First observed
delete_page - First observed
delete_variable - First observed
delete_variable_collection - First observed
delete_variable_mode - First observed
distribute_nodes - First observed
download_figma_images - First observed
duplicate_page - First observed
edit_component_property - First observed
edit_component_slot - First observed
export_frames_to_disk - First observed
export_node_as_image - First observed
export_tokens - First observed
extract_component_set - First observed
figma_bridge_status - First observed
figma_set_solid_fill - First observed
figma_set_text - First observed
find_and_replace_text - First observed
find_nodes - First observed
generate_grid - First observed
generate_palette - First observed
get_all_pages - First observed
get_animation_presets - First observed
get_annotations - First observed
get_changes_since - First observed
get_component_property_definitions - First observed
get_document_info - First observed
get_document_tree - First observed
get_events - First observed
get_figma_data - First observed
get_font_list - First observed
get_font_variation_axes - First observed
get_grid_layout - First observed
get_instance_properties - First observed
get_instance_slots - First observed
get_instance_source - First observed
get_local_components - First observed
get_motion - First observed
get_node_info - First observed
get_nodes_info - First observed
get_overlay_settings - First observed
get_parent_chain - First observed
get_prototype_settings - First observed
get_reactions - First observed
get_selection - First observed
get_selection_context - First observed
get_style_guide - First observed
get_styles - First observed
get_target_frames - First observed
get_variable - First observed
group_nodes - First observed
import_component_by_key - First observed
import_component_set_by_key - First observed
import_shader_by_id - First observed
import_style_by_key - First observed
import_tokens - First observed
import_variable_by_key - First observed
insert_child - First observed
join_channel - First observed
list_animation_styles - First observed
list_channels - First observed
list_checkpoints - First observed
list_comments - First observed
list_shaders - First observed
list_variable_collections - First observed
list_variables - First observed
move_component_to_file - First observed
move_node - First observed
move_node_to_page - First observed
post_comment - First observed
read_my_design - First observed
redo - First observed
remove_animation_style - First observed
remove_keyframe_track - First observed
rename_node - First observed
rename_page - First observed
rename_variable - First observed
rename_variable_collection - First observed
rename_variable_mode - First observed
reorder_grid_tracks - First observed
reorder_page - First observed
reparent_node - First observed
replace_all_instances - First observed
resize_node - First observed
resize_to_fit - First observed
restore_checkpoint - First observed
run_batch - First observed
scan_instances_with_sources - First observed
scan_nodes_by_types - First observed
scan_text_nodes - First observed
search_components - First observed
send_to_back - First observed
set_annotation - First observed
set_auto_layout - First observed
set_axis_align - First observed
set_corner_radius - First observed
set_current_page - First observed
set_effects - First observed
set_fill_color - First observed
set_fixed_children - First observed
set_flow_starting_points - First observed
set_focus - First observed
set_gradient_fill - First observed
set_grid_child_position - First observed
set_grid_layout - First observed
set_image_fill - First observed
set_instance_properties - First observed
set_item_spacing - First observed
set_keyframe_track - First observed
set_layout_grids - First observed
set_layout_mode - First observed
set_layout_sizing - First observed
set_multiple_annotations - First observed
set_multiple_text_contents - First observed
set_node_explicit_variable_mode - First observed
set_overflow_direction - First observed
set_overlay_settings - First observed
set_padding - First observed
set_prototype_start_node - First observed
set_reactions - First observed
set_section_properties - First observed
set_selections - First observed
set_smart_animate_reaction - First observed
set_stroke_color - First observed
set_target_frame - First observed
set_text_content - First observed
set_text_style - First observed
set_timeline_duration - First observed
set_transition_reaction - First observed
set_variable_mode - First observed
set_variable_values - First observed
set_variant_properties - First observed
set_vector_paths - First observed
subscribe_events - First observed
swap_instance_component - First observed
undo - First observed
ungroup_node - First observed
unsubscribe_events - First observed
upsert_reaction
TDQS
Scored across 188 tools
With 188 tools there are many overlapping purposes: figma_set_solid_fill vs set_fill_color both set solid fills, and text-setting is split across figma_set_text, set_text_content, set_multiple_text_contents, and create_text. Reaction tools (set_reactions, upsert_reaction, set_transition_reaction, set_smart_animate_reaction) and instance-creation tools (create_instance_from_component_key, create_instance_from_set_key, create_instance_from_instance, create_component_instance) also have fuzzy boundaries. Descriptions help, but an agent will frequently misselect.
The vast majority follow a predictable snake_case verb_noun pattern (create_frame, set_padding, get_node_info, delete_variable). Minor deviations exist: a handful of tools carry a figma_ prefix (figma_set_solid_fill, figma_bridge_status) and a few are not strictly verb_noun (boolean_group, combine_as_variants), but overall it is readable and consistent.
188 tools is an extreme mismatch for any single server surface, far beyond the 50+ threshold that indicates an unwieldy set. Even for a rich domain like Figma, this volume forces the agent to navigate a huge catalog and increases the chance of picking the wrong tool.
The surface covers an enormous breadth: node CRUD, fills/strokes/effects, text, auto-layout and grid, variables/tokens, components and slots, prototyping reactions and motion, styles, comments, exports, and events. Nearly every design workflow has a corresponding operation, with no obvious dead ends.
Maintenance
Related MCP Connectors
The Figma MCP server brings Figma design context directly into your AI workflow.
Access and maintain design system docs, tokens, components, skills, and contexts across any project.
Build and manage your design system with AI: tokens, themes, components, icons, Figma and code.
Live React design-system APIs, patterns, and code validation so AI agents build real UI, not slop.
Related MCP Servers
- FlicenseCqualityDmaintenanceLocal bridge enabling AI agents to inspect and edit the currently open Figma Desktop file through the Figma Plugin API.292-
- AlicenseNot gradedqualityDmaintenanceEmpowers AI assistants to control Figma via natural language, enabling creation and modification of designs, components, variables, and exports through a WebSocket bridge.2,010 npm2MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to inspect Figma selections, navigate pages, render previews, generate starter code, and submit user-approved canvas edits through a local bridge.3 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables a locally run agent or script to read and write a real Figma layer tree through a local bridge — inspecting node structure and variables, exporting screenshots into the model's context, and performing batched create/update/move/rename/delete operations that collapse into a single undo step. All traffic stays on localhost between the bridge and the Figma plugin, with design-token auditing, binding, and creation included.1 npmMIT