OpenCode Figma MCP
Reads Figma designs (frames, components, Figma URLs) as compact, code-oriented specs including layout, auto-layout, typography, colors, effects, variables, and component props, exports assets (SVG/PNG/JPG/PDF), and creates/edits Figma content such as frames, shapes, text, auto-layout, components, instances, variables, annotations, and prototype connections. Works live through a Figma plugin over a local WebSocket relay or via the Figma REST API with an access token.
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., "@OpenCode Figma MCPread this Figma frame and generate the React code for it"
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.
OpenCode Figma MCP
OpenCode Figma MCP is a Model Context Protocol (MCP) server that connects AI coding agents — OpenCode and Claude Code — to Figma. It works in both directions:
Design → Code: read a frame, component, or a Figma URL and get a compact, code-oriented spec (layout, auto-layout, typography, colors, effects, variables, component props) plus downloadable SVG/PNG assets, so the agent can generate UI code that matches the design.
Code → Design: create and edit Figma content from the agent — frames, shapes, text, auto-layout, components, instances, variables, annotations, prototypes, and more (79 tools).
OpenCode / Claude Code ←(stdio)→ MCP Server ←(WebSocket)→ Relay (localhost:3055) ←(WebSocket)→ Figma PluginHighlights
Two ways to read designs: live from the open Figma file via the plugin (
get_design_context), or straight from a Figma link via the REST API (get_figma_design_from_url, needsFIGMA_ACCESS_TOKEN) — no plugin required.Asset export:
download_design_assetssaves icons and images (SVG/PNG/JPG/PDF) directly into your project.Full editing toolkit: batch text replacement, instance override propagation, auto-layout sizing, components & variants, variables, image fills, sections, and prototype connections.
Local & private: the WebSocket relay binds to localhost and the plugin talks only to your machine.
One-command setup:
bun setupbuilds the server and writes MCP config for OpenCode (opencode.json) and Claude Code (.mcp.json).
Project Structure
src/opencode_figma_mcp/- TypeScript MCP server for Figma integrationsrc/opencode_mcp_plugin/- Figma plugin for communicating with OpenCodesrc/socket.ts- WebSocket server that facilitates communication between the MCP server and Figma plugin
Related MCP server: Agent to Figma MCP
Quick start with npm
No clone needed for the MCP server and relay — only Node.js 18+.
Start the WebSocket relay (keep it running):
npx -y -p opencode-figma-mcp opencode-figma-relayAdd the MCP server to OpenCode (
opencode.json):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"opencode-figma": {
"type": "local",
"command": ["npx", "-y", "opencode-figma-mcp@latest"],
"enabled": true,
"environment": {
"FIGMA_ACCESS_TOKEN": "{env:FIGMA_ACCESS_TOKEN}"
}
}
}
}Or for Claude Code:
claude mcp add opencode-figma -e FIGMA_ACCESS_TOKEN=<token> -- npx -y opencode-figma-mcp@latestTo install straight from GitHub instead of npm, replace opencode-figma-mcp@latest with github:yhoyoex/opencode-figma-mcp (the package is built on install). The relay works the same way: npx -y -p github:yhoyoex/opencode-figma-mcp opencode-figma-relay.
Install the Figma plugin: download or clone this repository and import
src/opencode_mcp_plugin/manifest.jsonin Figma (see Figma Plugin).
How to use (from source)
Install Bun if you haven't already:
curl -fsSL https://bun.sh/install | bashRun setup, this will build the server and write MCP config for OpenCode (
opencode.json) and Claude Code (.mcp.json)
bun setupStart the Websocket server
bun socketInstall the Figma plugin locally
Design Automation Example
Bulk text content replacement
Thanks to @dusskapark for contributing the bulk text replacement feature. Here is the demo video.
Instance Override Propagation Another contribution from @dusskapark Propagate component instance overrides from a source instance to multiple target instances with a single command. This feature dramatically reduces repetitive design work when working with component instances that need similar customizations. Check out our demo video.
Manual Setup and Installation
MCP Server: Integration with OpenCode
Build the server (bun run build), then add it to your OpenCode config (opencode.json in the project or ~/.config/opencode/opencode.json):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"opencode-figma": {
"type": "local",
"command": ["bun", "/path/to/figma-mcp/dist/server.js"],
"enabled": true,
"environment": {
"FIGMA_ACCESS_TOKEN": "{env:FIGMA_ACCESS_TOKEN}"
}
}
}
}WebSocket Server
Start the WebSocket server:
bun socketFigma Plugin
In Figma, go to Plugins > Development > New Plugin
Choose "Link existing plugin"
Select the
src/opencode_mcp_plugin/manifest.jsonfileThe plugin should now be available in your Figma development plugins
Windows + WSL Guide
Install bun via powershell
powershell -c "irm bun.sh/install.ps1|iex"Start the websocket, listening on all interfaces so WSL can reach it
HOST=0.0.0.0 bun socketUsage
Start the WebSocket server
Install the MCP server in OpenCode
Open Figma and run the OpenCode Figma MCP plugin
Connect the plugin to the WebSocket server by joining a channel using
join_channelUse OpenCode to communicate with Figma using the MCP tools
Local Development Setup
To develop, update your mcp config to direct to your local directory.
{
"mcpServers": {
"opencode-figma": {
"command": "bun",
"args": ["/path-to-repo/src/opencode_figma_mcp/server.ts"]
}
}
}MCP Tools
The MCP server provides the following tools for interacting with Figma:
Design to Code
Read a design as a compact, code-oriented spec (CSS-like layout, shared style references, text, components, design tokens, assets) so OpenCode can generate UI code from it.
get_design_context- Read the current selection (or given node IDs) through the plugin. No token needed; Figma and the plugin must be open.get_figma_design_from_url- Read a design from a Figma link through the REST API, without the plugin. Withoutnode-idit returns the page/frame outline. RequiresFIGMA_ACCESS_TOKEN.download_design_assets- Save icons (SVG), illustrations and image fills to a local folder, via the plugin or the REST API.export_node_as_image- Get a PNG of a node as a visual reference.
To use the REST API tools, create a personal access token in Figma (Settings → Security → Personal access tokens, scope file_content:read) and export it before starting OpenCode:
export FIGMA_ACCESS_TOKEN=figd_...The opencode.json written by bun setup passes it to the server with "environment": { "FIGMA_ACCESS_TOKEN": "{env:FIGMA_ACCESS_TOKEN}" }. FIGMA_API_KEY and FIGMA_TOKEN are also accepted.
Example prompt in OpenCode: "Buat komponen React untuk https://www.figma.com/design/AbC123/App?node-id=12-345, simpan ikon ke src/assets/icons."
Document & Selection
get_document_info- Get information about the current Figma documentget_selection- Get information about the current selectionread_my_design- Get detailed node information about the current selection without parametersget_node_info- Get detailed information about a specific nodeget_nodes_info- Get detailed information about multiple nodes by providing an array of node IDsset_focus- Set focus on a specific node by selecting it and scrolling viewport to itset_selections- Set selection to multiple nodes and scroll viewport to show them
Annotations
get_annotations- Get all annotations in the current document or specific nodeset_annotation- Create or update an annotation with markdown supportset_multiple_annotations- Batch create/update multiple annotations efficientlyscan_nodes_by_types- Scan for nodes with specific types (useful for finding annotation targets)
Prototyping & Connections
get_reactions- Get all prototype reactions from nodes with visual highlight animationset_default_connector- Set a copied FigJam connector as the default connector style for creating connections (must be set before creating connections)create_connections- Create FigJam connector lines between nodes, based on prototype flows or custom mappingadd_interaction- Add a prototype interaction (trigger, action such as NAVIGATE/OVERLAY/SWAP/SCROLL_TO/CHANGE_TO/BACK/CLOSE/URL, transition) to a nodeset_reactions- Replace all reactions of a node with raw Plugin APIReactionobjects (advanced: variables, conditionals, key triggers)remove_interactions- Remove all interactions of a node, or only those with a given trigger typeget_flow_starting_points- List prototype flow starting points of the current pageset_flow_starting_point- Add or rename a flow starting point on a top-level frameremove_flow_starting_point- Remove a frame's flow starting pointset_overlay_settings- Read overlay settings of a frame (read-only in the Plugin API; change requests return an error with the current values)set_scroll_behavior- Set a frame's overflow (scroll) direction and make a child FIXED or SCROLLS (STICKY_SCROLLS unsupported by the Plugin API)set_frame_properties- Set absolute positioning inside auto-layout (layoutPositioning), auto-layout stacking order (itemReverseZIndex), clip content, and x/y
Creating Elements
create_rectangle- Create a new rectangle with position, size, and optional namecreate_frame- Create a new frame with position, size, and optional namecreate_section- Create a section to group related content on the canvascreate_text- Create a new text node with customizable font propertiescreate_node_from_svg- Create editable vector nodes from SVG markup (e.g. replace PNG icons with vectors), optionally inside a parent at a given position
Modifying text content
scan_text_nodes- Scan text nodes with intelligent chunking for large designsset_text_content- Set the text content of a single text nodeset_multiple_text_contents- Batch update multiple text nodes efficiently
Auto Layout & Spacing
set_layout_mode- Set the layout mode and wrap behavior of a frame (NONE, HORIZONTAL, VERTICAL)set_padding- Set padding values for an auto-layout frame (top, right, bottom, left)set_axis_align- Set primary and counter axis alignment for auto-layout framesset_layout_sizing- Set horizontal and vertical sizing modes (FIXED, HUG, FILL) for frames, components, instances and text; HUG needs auto-layout or text, FILL needs an auto-layout parentset_item_spacing- Set distance between children in an auto-layout frame
Styling
set_fill_color- Set the fill color of a node (RGBA)set_stroke_color- Set the stroke color and weight of a nodeset_corner_radius- Set the corner radius of a node with optional per-corner controlset_image_fill- Fill a node with an image from a local file path, URL, or base64 data (FILL, FIT, CROP, or TILE)
Layout & Organization
move_node- Move a node to a new positionresize_node- Resize a node with new dimensionsdelete_node- Delete a nodedelete_multiple_nodes- Delete multiple nodes at once efficientlyclone_node- Create a copy of an existing node with optional position offsetrename_node- Rename a nodeset_parent- Move a node into a new parent (section, frame or group), preserving its absolute position by default
Components & Styles
get_styles- Get information about local stylescreate_text_style- Create a local text style (font, size, line height, letter spacing, case, decoration)update_text_style- Update an existing local text styleapply_text_style- Apply a text style to one or more text nodes (including text inside instances)set_text_decoration- Set underline, strikethrough or none on text nodes, optionally for a character rangeset_visible- Show or hide nodes, including children inside instances (visibility override)get_main_component- Read the main component / variant of instances directly in the plugin (no REST API)delete_style- Delete a local text, paint, effect or grid styleset_effects- Set drop/inner shadows and layer/background blur on a node (empty array clears)create_effect_style- Create a local effect style (shadow/blur token)update_effect_style- Update the name, description or effects of an effect styleapply_effect_style- Apply an effect style to one or more nodes (''detaches)get_local_components- Get information about local componentscreate_component_instance- Create an instance of a componentget_instance_overrides- Extract override properties from a selected component instanceset_instance_overrides- Apply extracted overrides to target instancescreate_component_from_node- Convert an existing node (e.g. a frame) into a main Componentcombine_as_variants- Combine components namedProp=Value, Prop2=Valueinto a Component Set (variants)add_component_property- Add a TEXT, BOOLEAN or INSTANCE_SWAP property to a component/component set, optionally linked to a child nodeswap_instance- Swap the main component of an instance
Variables
get_local_variables- List local variable collections (with modes) and variables; colors returned as hexcreate_variable_collection- Create a variable collection with named modes (extra modes may require a paid plan)create_variable- Create a COLOR, FLOAT, STRING or BOOLEAN variable, with optional value and scopesset_variable_value- Set a variable value for a mode (literal or alias via{ aliasOf: variableId })delete_variable- Permanently delete a variable (destructive; bound nodes lose the binding)delete_variable_collection- Permanently delete a collection with all its variables and modes (destructive)bind_variable- Bind (or unbind withvariableId: null) a variable to fills/strokes, size, spacing, padding, corner radius, stroke weight, opacity, characters or visibility
Export & Advanced
export_node_as_image- Export a node as an image (PNG, JPG, SVG, or PDF) - limited support on image currently returning base64 as text
Connection Management
join_channel- Join a specific channel to communicate with Figma
MCP Prompts
The MCP server includes several helper prompts to guide you through complex design tasks:
design_to_code- Workflow for turning a Figma design into code (read spec, map tokens, export assets, verify)design_strategy- Best practices for working with Figma designsread_design_strategy- Best practices for reading Figma designstext_replacement_strategy- Systematic approach for replacing text in Figma designsannotation_conversion_strategy- Strategy for converting manual annotations to Figma's native annotationsswap_overrides_instances- Strategy for transferring overrides between component instances in Figmareaction_to_connector_strategy- Strategy for converting Figma prototype reactions to connector lines using the output of 'get_reactions', and guiding the use 'create_connections' in sequence
Development
Building the Figma Plugin
Navigate to the Figma plugin directory:
cd src/opencode_mcp_pluginEdit code.js and ui.html
Best Practices
When working with the Figma MCP:
Always join a channel before sending commands
Get document overview using
get_document_infofirstCheck current selection with
get_selectionbefore modificationsUse appropriate creation tools based on needs:
create_framefor containerscreate_rectanglefor basic shapescreate_textfor text elements
Verify changes using
get_node_infoUse component instances when possible for consistency
Handle errors appropriately as all commands can throw exceptions
For large designs:
Use chunking parameters in
scan_text_nodesMonitor progress through WebSocket updates
Implement appropriate error handling
For text operations:
Use batch operations when possible
Consider structural relationships
Verify changes with targeted exports
For converting legacy annotations:
Scan text nodes to identify numbered markers and descriptions
Use
scan_nodes_by_typesto find UI elements that annotations refer toMatch markers with their target elements using path, name, or proximity
Categorize annotations appropriately with
get_annotationsCreate native annotations with
set_multiple_annotationsin batchesVerify all annotations are properly linked to their targets
Delete legacy annotation nodes after successful conversion
Visualize prototype noodles as FigJam connectors:
Use
get_reactionsto extract prototype flows,set a default connector with
set_default_connector,and generate connector lines with
create_connectionsfor clear visual flow mapping.
Support
If this project helps you, consider buying me a coffee ☕
Credits
This project is based on cursor-talk-to-figma-mcp by Sonny Lazuardi and its contributors. Many thanks to the original authors for the MCP server, WebSocket relay, and Figma plugin that this project builds upon.
License
MIT — see LICENSE. The original copyright notice from the upstream project is retained.
Available Tools
79 toolsadd_component_propertyA
Add a component property (TEXT, BOOLEAN or INSTANCE_SWAP) to a COMPONENT or COMPONENT_SET. Optionally link it to a child node: TEXT controls the node's characters, BOOLEAN its visibility, INSTANCE_SWAP the main component of a nested instance.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Property name | |
| type | Yes | Property type | |
| componentId | Yes | ID of the COMPONENT or COMPONENT_SET | |
| defaultValue | Yes | Default value: string for TEXT, boolean for BOOLEAN, component ID for INSTANCE_SWAP | |
| targetNodeId | No | Optional child node ID to bind (TEXT node for TEXT, any node for BOOLEAN, INSTANCE node for INSTANCE_SWAP) |
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 type-to-node binding semantics (TEXT controls characters, BOOLEAN visibility, INSTANCE_SWAP the main component of a nested instance), which is real behavioral context, but says nothing about side effects, whether adding a duplicate property name errors, permission requirements, or what the response looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with zero filler; the core operation is front-loaded and the type-specific binding rules follow immediately. Every clause carries 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?
There is no output schema and no annotations, so the description is the only source of behavioral context. It explains the operation and the meaning of the optional binding well, but omits error conditions, return shape, and prerequisites for a five-parameter 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 100%, so all five parameters are already documented in the schema, and the enum on 'type' is captured there. The description reinforces the type/target pairing semantics but adds no syntax or format detail beyond what the schema already states, so 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 ('Add a component property') and immediately constrains the domain: only TEXT, BOOLEAN or INSTANCE_SWAP on a COMPONENT or COMPONENT_SET. No sibling tool performs this operation, so the agent can identify it unambiguously from the name plus first 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?
The optional child-node linkage is described ('Optionally link it to a child node'), which implies the main use case, but there is no explicit when-to-use vs alternatives, no prerequisite such as the target must be a component rather than an instance, and no note on when to omit targetNodeId.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_interactionA
Add a prototype interaction (trigger + action) to a node. NAVIGATE/SWAP/OVERLAY need a top-level frame on the same page as destination, SCROLL_TO a node inside the same top-level frame, CHANGE_TO a variant of the same component set (source must be an instance or inside a variant). Directional transitions (MOVE_IN, MOVE_OUT, PUSH, SLIDE_IN, SLIDE_OUT) require a direction. Appends to existing reactions unless replace is true.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to open, required for the URL action | |
| action | No | Action type (default: NAVIGATE) | |
| nodeId | Yes | ID of the node that receives the interaction | |
| replace | No | Replace all existing reactions instead of appending (default: false) | |
| timeout | No | Delay in SECONDS (e.g. 2 = 2s), required for AFTER_TIMEOUT; converted to milliseconds for Figma | |
| trigger | No | Trigger type (default: ON_CLICK) | |
| transition | No | Transition for node actions (default: INSTANT) | |
| openInNewTab | No | Open URL in a new tab (URL action only, default true) | |
| destinationId | No | Destination node ID, required for NAVIGATE, OVERLAY, SWAP, SCROLL_TO and CHANGE_TO | |
| preserveScrollPosition | No | Keep the destination's scroll position (node actions only) |
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 append-vs-replace behavior ("Appends to existing reactions unless replace is true") and structural preconditions for destinations. It omits error behavior, permission needs, and what the tool returns, so it is 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?
Purpose is front-loaded in the first clause, followed by tightly packed conditional rules, each earning its place. No filler sentences, no redundancy despite the density.
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 10-parameter tool with a nested transition object and no output schema or annotations, the description covers the key calling constraints (action preconditions, directional transitions, append behavior). Remaining gaps are error/return behavior, which is a minor omission for an interaction-adder.
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 genuine cross-parameter semantics the schema cannot: which actions require destinationId, that directional transitions require a direction, and the timeout-for-AFTER_TIMEOUT relationship. It adds relational meaning beyond per-field docs.
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 ("Add a prototype interaction (trigger + action) to a node"), which precisely identifies the operation. This distinguishes it from siblings like set_reactions, get_reactions, and remove_interactions without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear conditional context per action type: which actions need a top-level frame, SCROLL_TO's frame constraint, CHANGE_TO's component-set requirement, and direction requirements for directional transitions. It doesn't explicitly name alternative siblings (set_reactions) or when-not-to-use, 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.
apply_effect_styleA
Apply an effect style to one or more nodes (frames, components, instances, shapes). Pass styleId '' to detach. Reports per-node success.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No | ID of a single node | |
| nodeIds | No | IDs of multiple nodes | |
| styleId | Yes | ID of the effect style to apply, or '' to detach |
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 usefully discloses that results are reported per node (partial-failure semantics) and that an empty styleId detaches, but it says nothing about permissions, whether detaching loses prior effect data, or what happens to nodes that fail.
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 core action, then the detach special case, then the result semantics. 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 mutation tool with no annotations and no output schema, the description covers scope (multiple node types), the detach escape hatch, and per-node result reporting. It leaves permission requirements and failure causes unstated, 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 description coverage is 100%, so nodeId/nodeIds/styleId are already documented. The description adds the node-type scope and reiterates the detach convention, but adds no new syntax or format detail beyond 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?
Specific verb (apply) plus resource (effect style) with an explicit enumeration of supported node types, and it clearly separates itself from sibling mutators like set_effects (direct effect values) and apply_text_style (different style domain). 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?
Usage is implied by the description (attach via styleId, detach via empty string), but it never states when to prefer this over sibling set_effects or how it relates to create_effect_style/update_effect_style. No explicit when/when-not guidance or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_text_styleB
Apply a text style to one or more TEXT nodes (also works on text inside instances, e.g. 'I;'). Reports per-node success.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No | ID of a single text node | |
| nodeIds | No | IDs of multiple text nodes | |
| styleId | Yes | ID of the text style to apply |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It usefully discloses that the tool covers text inside instances (with the 'I<instanceId>;<textId>' ID form) and that it reports per-node success, but says nothing about permissions, behavior on non-text nodes, reversibility, or error handling.
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 plus a tight parenthetical example; every clause carries information (target node type, instance edge case, per-node result reporting). 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 tool with no annotations and no output schema, the description covers the salient behavioral bits (instance support, per-node success) but omits safety affordances such as required permissions and what happens on partial failure. 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 100%, so the baseline is 3, and the description goes beyond it by clarifying the single-vs-multiple node intent and the instance-scoped ID syntax that the schema does not explain. It stops short of describing styleId resolution or required-parameter 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?
Names a specific verb and resource (apply a text style) and scopes it to TEXT nodes, including the instance-nested case. The purpose is unambiguous, though it never contrasts itself with siblings like create_text_style, update_text_style, or set_text_content.
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 guidance is given, and no alternative is named. The reader is left to infer that styleId must reference an existing style (get_styles/create_text_style) and cannot tell how this differs from other text-mutating siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bind_variableB
Bind a variable to a node property. Fields: fills/strokes (COLOR, bound to the first paint), width, height, itemSpacing, counterAxisSpacing, paddingLeft/Right/Top/Bottom, topLeftRadius/topRightRadius/bottomLeftRadius/bottomRightRadius, strokeWeight, opacity, characters, visible. Shortcuts: "padding" (4 sides), "cornerRadius" (4 corners). Pass variableId null to unbind.
| Name | Required | Description | Default |
|---|---|---|---|
| field | Yes | Node property to bind | |
| nodeId | Yes | ID of the node | |
| variableId | Yes | ID of the variable to bind, or null to remove the binding |
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 useful behavior: fills/strokes bind to the first paint as COLOR, shortcut field semantics, and null variableId unbinds. But it omits whether rebinding overwrites, permission/type prerequisites, error behavior, and idempotency.
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 action, followed by relevant field, shortcut, and unbind details in a single efficient paragraph. The field enumeration duplicates the schema enum, but the shortcut definitions and unbind instruction earn their 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 annotations and no output schema, the description must carry more responsibility. It covers purpose, field targets, shortcuts, and unbind, but misses usage context and prerequisites like matching variable types or node eligibility. Adequate but with clear 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 coverage is 100%, so the schema already documents all three parameters. The description still adds meaning beyond the schema by expanding the shortcut fields ('padding' = 4 sides, 'cornerRadius' = 4 corners) and clarifying that fills/strokes bind to the first paint as COLOR. It repeats the null-to-unbind behavior already in the schema, keeping it from 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 ('Bind') and resources ('variable', 'node property'), and the field list clarifies the scope of binding targets. However, it does not explicitly distinguish this operation from sibling variable tools like set_variable_value or create_variable, 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 only parameter-level guidance (pass variableId null to unbind). It never says when to use this tool versus alternatives, nor does it mention prerequisites such as node type or variable type compatibility.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clone_nodeC
Clone an existing node in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | New X position for the clone | |
| y | No | New Y position for the clone | |
| nodeId | Yes | The ID of the node to clone |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. 'Clone an existing node' implies a mutating operation, but it does not clarify whether the original node is preserved, where the clone is inserted, how x and y affect positioning, or what side effects occur. This is a significant gap 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?
The description is a single concise sentence with no wasted words, and the key action is front-loaded. However, it is so brief that it sacrifices behavioral and contextual detail, making it concise but underinformative.
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 no annotations, no output schema, and a description that only states the basic action. It does not explain the resulting node's placement, relationship to the original, return value, or whether x and y are optional/required together. This is incomplete for an agent expected to invoke the tool correctly in a broader design workflow.
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 has 100% description coverage, so the schema already explains nodeId, x, and y. The description adds no extra parameter semantics beyond confirming the nodeId refers to an existing node. Baseline 3 is appropriate because the schema handles the burden.
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 ('Clone') and a clear resource ('an existing node in Figma'), which makes the core purpose understandable. It does not explicitly differentiate from siblings like create_rectangle or move_node, but the verb 'clone' semantically implies duplication of an existing node, distinguishing it from creation or transformation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention when not to use it. An agent must infer from the name and description that this is for duplicating an existing node, and there is no comparison with sibling operations such as create_frame or create_component_instance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
combine_as_variantsA
Combine multiple main Components into a Component Set (variants). Each component name must use the variant format "Prop=Value, Prop2=Value" (e.g. "Type=Primary, Size=Large") so Figma can derive the variant properties. Variants are then laid out in a grid (max 4 columns, 24px gap, 24px padding) and the component set is resized to fit them (skipped if the set uses auto layout).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional name for the component set | |
| parentId | No | Optional parent node ID for the component set (default: parent of the first component, or current page) | |
| componentIds | Yes | IDs of the COMPONENT nodes to combine |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden and does well: it discloses the post-operation layout behavior (grid, max 4 columns, 24px gap, 24px padding) and the resize behavior including the auto-layout exception. It does not state permission/auth needs or error behavior, but the transformation it performs is well 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?
Three sentences, front-loaded with the core action, then the naming requirement, then the layout side effects. Every sentence adds information an agent needs, with no 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?
No output schema exists, and the description covers purpose, prerequisites, and the layout/transform behavior — enough for an agent to call it correctly. Minor gaps (return value shape, error cases) are acceptable for a mutation tool without declared annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3), and the description adds a meaningful constraint by explaining the required variant-naming convention that governs valid componentIds. The name and parentId parameters are left to schema descriptions but are minor and adequately 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 precise verb and resource: 'Combine multiple main Components into a Component Set (variants).' This clearly distinguishes it from siblings like create_component_from_node, create_component_instance, and add_component_property, which do related but different operations.
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 strong precondition — each component name must use the 'Prop=Value' variant format so Figma can derive properties — which is essential context for success. However, it does not explicitly route the agent away from related siblings (e.g., when to use create_component_from_node instead), 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.
create_component_from_nodeB
Convert an existing node (e.g. a frame) into a Figma main Component. The node is replaced in place by the new component.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional name for the new component | |
| nodeId | Yes | The ID of the node to convert into a component |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden, and it does disclose the key trait: the node is replaced in place by the new component, so an agent knows the original node no longer exists. It omits other useful traits such as permission requirements, effect on children, or error behavior, so it adds real value but is not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, and the core action ('convert an existing node into a main Component') is front-loaded ahead of the in-place replacement note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no annotations and no output schema, the description covers the essential action and its main side effect. It leaves the return value unaddressed (no output schema to fall back on), which is a minor gap rather than a serious omission.
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% for both parameters, so the schema already documents nodeId and the optional name. The description adds no syntax, default-naming, or format detail beyond that, which is the correct baseline-3 case when the schema does the heavy lifting.
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 (convert) and target resource (an existing node into a Figma main Component), and the term 'main Component' conceptually separates it from sibling instance tools like create_component_instance. It stops short of explicitly naming or contrasting any sibling, so it lands at a clear-but-undifferentiated 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?
There is no explicit when-to-use guidance, no prerequisites, and no alternative named (e.g. versus create_component_instance or clone_node). The example 'e.g. a frame' only faintly implies the input scenario, leaving routing to inference.
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 component in Figma. For LOCAL components (from get_local_components), use componentId with the id field. For published LIBRARY components, use componentKey with the publishedKey field.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X position | |
| y | Yes | Y position | |
| parentId | No | Optional parent node ID to place the instance into | |
| componentId | No | ID of a local component (use the id field from get_local_components result). Use this for unpublished/local components. | |
| componentKey | No | Key of a published library component to instantiate (use the publishedKey field from get_local_components result). Only works for published components. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of disclosing side effects. It only says 'Create an instance' and does not mention whether a new node is returned, what happens if neither componentId nor componentKey is supplied, where the instance is placed when parentId is omitted, or whether the operation modifies the current file permanently.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states the action and resource, the second gives the critical parameter disambiguation. It is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The parameter semantics are well-covered by the schema and the local/library distinction is useful. However, with no annotations and no output schema, the description omits what the tool returns and what happens in edge cases (missing both IDs, both IDs provided, no parentId), so an agent may lack enough context to handle non-happy 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 100%, so the schema already documents each parameter. The description reinforces the componentId vs componentKey distinction, but that information is also present in the schema, so it adds no truly new semantic value.
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 an instance of a component in Figma') and immediately differentiates the two component sources (local vs published library). This clearly separates it from sibling creation tools like create_frame or create_rectangle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete selection guidance: use componentId with id for local components and componentKey with publishedKey for published library components. It does not explicitly name alternative tools or describe when not to use this tool, but the local-vs-library context is clear enough for an agent to proceed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_connectionsB
Create connections between nodes using the default connector style
| Name | Required | Description | Default |
|---|---|---|---|
| connections | Yes | Array of node connections to create |
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 only says connections are created with the default connector style; it does not state whether creation is additive, whether duplicates are allowed, how invalid node IDs are handled, or whether the default style can be overridden per connection. The optional text field in the schema hints at per-connection text, but runtime behavior is not 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?
The description is a single tightly worded sentence that front-loads the core action and adds the relevant style qualifier. It contains no filler, restates nothing from the schema, 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?
Given the tool's simplicity and complete input schema, the description is serviceable for basic invocation. However, with no output schema and no annotations, it omits useful behavioral context such as the dependency on set_default_connector for style, behavior on invalid node references, and what the call returns. It is minimally adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents startNodeId, endNodeId, and text clearly. The description adds little beyond confirming the semantic relation of 'nodes' to the IDs. This meets the baseline for schema-covered parameters but does not enhance parameter understanding further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Create'), a specific resource ('connections between nodes'), and a qualifier ('using the default connector style') that distinguishes it from related style-configuration tools like set_default_connector. It is unambiguous about what the tool does without restating the tool 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?
No explicit guidance is given about when to use this tool versus alternatives or when not to use it. The phrase 'default connector style' implies a relationship with set_default_connector, but that relationship is never named or explained. The agent gets no help choosing between this and related connection/style tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_effect_styleA
Create a local effect style (shadow/blur token), e.g. 'Shadow/lg'. Returns the style id for apply_effect_style.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Style name, e.g. 'Shadow/md' | |
| effects | Yes | Effects of the style, in order | |
| description | No | Style description |
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 add genuine value by noting the style is 'local' (not a published library style) and by describing the return value, but it says nothing about required permissions, duplicate-name behavior, or what happens on invalid effect input.
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, zero filler, with the resource type and example front-loaded and the follow-on action named last. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter creation tool with a fully documented schema and no output schema, the description covers what it makes and what it returns. The only gap is failure-mode behavior (duplicate names, invalid effect combos), which an agent would need but which is not essential to calling 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?
Schema description coverage is 100%, with each parameter and nested effect field already documented in the schema, so the baseline is 3. The description's only added signal is the 'Shadow/lg' naming example, which duplicates the schema's own 'Shadow/md' example rather than adding new 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?
Specific verb+resource ('Create a local effect style') with a concrete example value and a stated effect ('Returns the style id for apply_effect_style'). It is clearly distinguishable from sibling tools update_effect_style, apply_effect_style, and create_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?
The closing clause implicitly tells the agent this is the creation step that must precede apply_effect_style, which gives real workflow context. It stops short of explicit when/when-not guidance, e.g. how to handle an already-existing style of the same name vs. update_effect_style.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_frameC
Create a new frame in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X position | |
| y | Yes | Y position | |
| name | No | Optional name for the frame | |
| width | Yes | Width of the frame | |
| height | Yes | Height of the frame | |
| parentId | No | Optional parent node ID to append the frame to | |
| fillColor | No | Fill color in RGBA format | |
| layoutMode | No | Auto-layout mode for the frame | |
| layoutWrap | No | Whether the auto-layout frame wraps its children | |
| paddingTop | No | Top padding for auto-layout frame | |
| itemSpacing | No | Distance between children in auto-layout frame. Note: This value will be ignored if primaryAxisAlignItems is set to SPACE_BETWEEN. | |
| paddingLeft | No | Left padding for auto-layout frame | |
| strokeColor | No | Stroke color in RGBA format | |
| paddingRight | No | Right padding for auto-layout frame | |
| strokeWeight | No | Stroke weight | |
| paddingBottom | No | Bottom padding for auto-layout frame | |
| layoutSizingVertical | No | Vertical sizing mode for auto-layout frame | |
| counterAxisAlignItems | No | Counter axis alignment for auto-layout frame | |
| primaryAxisAlignItems | No | Primary axis alignment for auto-layout frame. Note: When set to SPACE_BETWEEN, itemSpacing will be ignored as children will be evenly spaced. | |
| layoutSizingHorizontal | No | Horizontal sizing mode for auto-layout frame |
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 only restates the core creation action. It does not mention where the frame is created (e.g., current page vs. parentId), whether it becomes selected, what defaults apply, or any side effects on the document tree, which are important for a mutation tool with no safety hints.
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 redundancy. It is appropriately concise, though it could include a bit more context without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite a detailed 20-parameter schema, the one-sentence description lacks high-level context such as where the frame is inserted, how it interacts with the current selection, and what the tool returns. With no output schema and no annotations, an agent needs more behavioral context to invoke this tool correctly, especially given the complex auto-layout parameters.
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 all 20 parameters are fully documented in the schema. The tool description itself adds no parameter-specific information, but the high schema coverage means the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Create') and a specific resource ('a new frame in Figma'), which distinguishes it by resource from sibling creation tools like create_rectangle and create_text. It is not a tautology and conveys the object and environment, though it does not explicitly contrast with the conceptually similar create_section.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool over alternatives like create_section or create_rectangle. No context about scenarios, prerequisites, or exclusions is given, leaving the agent to infer usage solely 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.
create_node_from_svgA
Create vector nodes from SVG markup (e.g. to replace raster PNG icons with editable vectors). Figma wraps the result in a FRAME containing the vector paths.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Optional X position (relative to the parent) | |
| y | No | Optional Y position (relative to the parent) | |
| svg | Yes | Full SVG markup, starting with an <svg> element (include viewBox/width/height for correct sizing) | |
| name | No | Optional name for the created node | |
| parentId | No | Optional parent node ID (must support children, e.g. a frame, group or section; default: current page) |
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 a genuinely non-obvious behavioral trait: Figma wraps the result in a FRAME containing the vector paths. But it omits failure behavior (invalid SVG), permission needs, and how position/parenting resolves beyond what the schema states.
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 core action front-loaded and the FRAME-wrapping behavior following as supporting 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?
No output schema exists, and the description partially compensates by explaining what gets produced (a FRAME containing vector paths). Remaining gaps – coordinate behavior and error handling – are minor given the fully documented 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?
Schema description coverage is 100%, so all five parameters are already documented in structured data. The description adds no format or syntax detail beyond the schema (the SVG sizing hint is already in the param description), 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?
Specific verb+resource: 'Create vector nodes from SVG markup'. The parenthetical use case and the note about FRAME wrapping make it immediately distinguishable from sibling creation tools like create_rectangle, create_frame, and create_text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical '(e.g. to replace raster PNG icons with editable vectors)' gives a concrete triggering scenario, which is clear context. However, it offers no explicit when-not-to-use guidance or named alternatives among the many creation siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_rectangleC
Create a new rectangle in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X position | |
| y | Yes | Y position | |
| name | No | Optional name for the rectangle | |
| width | Yes | Width of the rectangle | |
| height | Yes | Height of the rectangle | |
| parentId | No | Optional parent node ID to append the rectangle to |
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 only repeats the basic action. It does not mention default parenting behavior, coordinate system, units, selection handling, or side effects beyond the creation itself.
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 sentence with no wasted words. It is front-loaded and immediately communicates the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, no output schema, and no annotations, this description is too minimal. It omits important context such as what happens when parentId is omitted, what coordinate space x/y refer to, and what the tool returns after creation.
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 provides descriptions for all 6 parameters, so the schema fully documents semantics. The description adds no additional parameter-level meaning, making the baseline score of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a new rectangle in Figma' states a specific verb and resource, clearly identifying the operation. It does not explicitly contrast with sibling creation tools like create_frame or create_text, but the resource type 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 usage guidance is provided. The description does not explain when to choose create_rectangle over alternatives such as create_frame or create_section, nor does it mention any preconditions or context in which this tool should be used.
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 in Figma to group related content on the canvas
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X position | |
| y | Yes | Y position | |
| name | No | Optional name for the section | |
| width | Yes | Width of the section | |
| height | Yes | Height of 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 burden of behavioral disclosure. 'Create a section' implies a mutating operation, but the description does not state what the tool returns (no output schema exists), whether the section is auto-populated with selected content or created empty, or whether it becomes the active selection. Core behavioral details an agent needs post-invocation are absent.
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 zero filler. The content is appropriately front-loaded: the action ('Create a section') comes first, followed by its purpose. It could arguably be slightly richer given the missing usage context, but as pure conciseness it is tight and 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 creation tool with five parameters, no annotations, and no output schema, this description is underspecified. It does not cover return value, interaction with the current selection, relationship to frames/sections in Figma's hierarchy, or how it fits with sibling tools like set_parent or move_node. An agent cannot confidently predict the outcome of calling this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (all five parameters are described in the schema), so the baseline is 3. The description adds nothing about parameter semantics beyond the schema's own field descriptions — no mention of coordinate units, origin reference, or how name is used. Since the schema already documents each field adequately, the description's silence is acceptable but not 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?
The description states a specific verb and resource ('Create a section in Figma') and adds a purpose ('to group related content on the canvas'). This broadly distinguishes it from siblings like create_rectangle or create_text. However, it does not differentiate from create_frame, which also groups content in Figma, so the intent is clear but the boundary with the nearest sibling is fuzzy.
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 a section versus a frame or another container tool, despite create_frame being an obvious alternative for grouping content. There is no mention of prerequisites (e.g., whether it needs a selected node or a parent), nor any exclusion criteria. The usage context is entirely left to the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_textC
Create a new text element in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X position | |
| y | Yes | Y position | |
| name | No | Semantic layer name for the text node | |
| text | Yes | Text content | |
| fontSize | No | Font size (default: 14) | |
| parentId | No | Optional parent node ID to append the text to | |
| fontColor | No | Font color in RGBA format | |
| fontWeight | No | Font weight (e.g., 400 for Regular, 700 for Bold) |
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 that a new element is created but does not mention side effects, whether the node is placed on the current page or requires a parentId, how naming works, 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?
The description is a single, front-loaded sentence with no redundant words. It is concise and easy to parse, though slightly underspecified for the number of optional parameters and the lack of added behavioral 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?
Given 8 parameters, a nested fontColor object, no output schema, and no annotations, the one-sentence description is not complete enough. It does not explain how parentId affects placement, what the default behavior is, what the tool returns, or how the new text node relates to the current selection or page.
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 every parameter already has a description in the schema. The tool description itself adds no parameter-level meaning, which is acceptable given the schema's coverage, but it does not go beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create') and the resource ('a new text element in Figma'). It is specific enough to distinguish from create_rectangle and create_frame, though it does not explicitly call out 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?
There is no guidance about when to use this tool versus alternatives such as set_text_content, create_rectangle, or create_frame. The description provides no context about preconditions, suitable scenarios, or when another sibling tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_text_styleA
Create a local text style (typography token). Use slashes in the name to group styles, e.g. 'Heading/H1'. Returns the style id for apply_text_style.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Style name, e.g. 'Body/Medium 14' | |
| fontSize | No | Font size in pixels | |
| textCase | No | Text case | |
| fontStyle | No | Font style name as shown in Figma, e.g. "Regular", "Medium", "Semi Bold", "Bold". Takes precedence over fontWeight | |
| fontFamily | No | Font family (default: Inter, or the style's current family) | |
| fontWeight | No | Font weight (100-900), mapped to a font style name when fontStyle is not given | |
| lineHeight | No | Line height: number (pixels), "AUTO", or { unit: "PIXELS" | "PERCENT", value } | |
| description | No | Optional style description | |
| letterSpacing | No | Letter spacing: number (pixels) or { unit: "PIXELS" | "PERCENT", value } | |
| textDecoration | No | Text decoration | |
| paragraphSpacing | No | Paragraph spacing in pixels |
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 the style is 'local' (file-scoped) and that it returns a style id for apply_text_style, which is genuinely beyond the schema. It omits edit-permission requirements, whether creation mutates current document state, duplicate-name behavior, and 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?
Three short sentences with zero padding; the core action is front-loaded, followed by the naming convention and the return value. 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 an 11-parameter create tool with no annotations and no output schema, the description does well to state the return value ('style id') and the naming convention. It still leaves behavioral gaps around permissions, mutation scope, and failure modes that an agent creating document assets would benefit from knowing.
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 a real naming convention ('use slashes to group styles, e.g. Heading/H1') that the schema does not codify as a grouping rule. Other parameters are left entirely to the schema, which is acceptable given full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a local text style (typography token)'), which is unambiguous and distinct from update_text_style or create_effect_style. It does not explicitly name a sibling to contrast against, so it falls short of the top mark.
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 mention of 'apply_text_style' implies this is the precursor to applying that style, giving implied usage context. However, there is no explicit when-to-use/when-not-to-use guidance, no mention of update_text_style for modifying existing styles, 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_variableB
Create a variable in a collection and optionally set its value. Use slashes in the name for grouping (e.g. "color/primary"). Colors use RGBA 0-1.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Variable name | |
| value | No | Optional initial value: {r,g,b,a?} for COLOR, number for FLOAT, string for STRING, boolean for BOOLEAN, or {aliasOf: variableId} | |
| modeId | No | Optional mode ID for the value (default: collection's default mode) | |
| scopes | No | Optional variable scopes, e.g. ["ALL_FILLS"], ["GAP"], ["CORNER_RADIUS"] | |
| collectionId | Yes | ID of the variable collection | |
| resolvedType | Yes | Variable type |
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 that creation happens and a value is optionally set, but says nothing about conflict behavior, whether the created variable is returned, required permissions, or how name collisions 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?
Three tight sentences, front-loaded with the core action followed by two genuinely useful conventions (grouping slashes, RGBA range). 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?
Parameters are fully documented by the schema, but with no annotations and no output schema the description should say more about the mutation's effects and result. Behavior on name conflicts and the return value of the newly created variable 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 description coverage is 100%, so the schema already documents all six parameters, including RGBA 0-1 ranges and the aliasOf variant. The description reinforces the slash-grouping convention and RGBA range, but adds little beyond what the schema already states, landing at the baseline of 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 gives a specific verb (create) and resource (variable in a collection) plus the optional value-setting behavior. It is clear what the tool does, though it does not explicitly contrast itself with close siblings like set_variable_value or create_variable_collection.
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 practical naming convention (slashes for grouping) and a color format note, which is genuine guidance. However there is no explicit when-to-use / when-not-to-use statement and no routing to alternatives such as set_variable_value for updating an existing variable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_variable_collectionA
Create a local variable collection. The default mode is renamed to modes[0]; remaining modes are added (multiple modes may require a paid Figma plan).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Collection name | |
| modes | No | Optional mode names, e.g. ["Light", "Dark"] |
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 two genuinely useful behaviors: the default mode is renamed to modes[0] and the rest are appended, plus a paid-plan caveat for multiple modes. It omits permissions, reversibility, and return value (e.g., the new collection's id), which an agent would want before chaining calls.
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 primary action front-loaded and the mode-index behavior following immediately. Every clause carries information; nothing is 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 small two-parameter creation tool with a fully covered schema and no output schema, the description conveys the key behavioral nuance (mode handling and the plan constraint). It stops short of stating where the collection is created or what identifier is returned, but otherwise it is sufficient to call 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 100%, so the baseline is 3, and the description goes beyond it by explaining the semantics of the modes array: index 0 overwrites the default mode while later entries are added. That is real meaning the schema's one-line description does not convey.
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 collection') that is immediately distinguishable from sibling create_variable or delete_variable_collection. It does not explicitly position itself relative to those siblings, but the resource noun 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 when-to-use guidance, no prerequisites (e.g., needing an existing file/page context), and no mention of alternatives such as create_variable for populating the collection afterward. The only conditional note concerns paid plans, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_multiple_nodesB
Delete multiple nodes from Figma at once
| Name | Required | Description | Default |
|---|---|---|---|
| nodeIds | Yes | Array of node IDs to delete |
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 operation is a deletion, which implies destructiveness, but it does not mention irreversibility, permission requirements, cascade effects on child nodes, or failure behavior when one node ID is 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?
The description is a single, front-loaded sentence with no redundant words. It efficiently communicates the tool's core purpose without unnecessary elaboration.
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 batch operation with no annotations and no output schema, the description is too thin. An agent still lacks essential operational context such as whether the deletion is permanent, what happens if one node ID is invalid, and whether all deleted nodes must belong to the same document or page.
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 parameter nodeIds is already documented as an array of node IDs to delete. The description adds only the notion of batch processing ('multiple nodes...at once'), which adds minimal semantic value 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 clearly states the verb 'Delete' and the resource 'multiple nodes from Figma', and distinguishes this tool from its sibling delete_node by emphasizing batch deletion. This gives an agent a precise understanding of the tool's scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'at once' implies this tool is for batch deletion rather than single-node deletion, but it does not explicitly state when to prefer it over delete_node or when not to use it. The usage context is implied, not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_nodeC
Delete a node from Figma
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the node to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full burden of behavioral disclosure. It only states the basic delete action and omits critical traits such as irreversibility, whether child nodes are deleted, or any side effects. For a destructive operation, this is a significant transparency 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, direct sentence with no filler words. It is front-loaded with the action and resource, but it is so minimal that it omits useful behavioral context; still, as far as structure and brevity, it 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 destructive tool with no annotations and no output schema, the description is incomplete. It fails to mention the irreversible nature of the operation, whether children are affected, or how this tool differs from 'delete_multiple_nodes'. An agent is left without key information for safe 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 100% and the 'nodeId' parameter is clearly described as 'The ID of the node to delete'. The tool description does not add extra parameter semantics beyond the schema but does not need to, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Delete'), a resource ('node'), and a context ('from Figma'), making the core action clear. It does not explicitly differentiate from the sibling tool 'delete_multiple_nodes', so the specificity is slightly incomplete, but the singular phrasing and tool name carry that 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 guidance is provided about when to use this tool versus alternatives such as 'delete_multiple_nodes'. The description gives no context for choosing between single and batch deletion, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_styleA
Delete a local style (text, paint, effect or grid) by ID. Nodes using it keep their current values but are detached.
| Name | Required | Description | Default |
|---|---|---|---|
| styleId | Yes | ID of the style to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden, and it delivers the key non-obvious trait: dependent nodes 'keep their current values but are detached' rather than being modified or deleted. It omits irreversibility/permission details, but the disclosure of the detachment side effect is the most important behavior for this 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 short sentences, zero waste, with the core action front-loaded and the consequential side effect second. 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 single-parameter mutation tool with no output schema and no annotations, the description covers purpose and the important side effect on dependent nodes. Remaining gaps (whether deletion is recoverable, behavior on an unknown ID) are minor for a tool of this simplicity.
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% for the single required styleId parameter, so the schema already documents it fully. The description's 'by ID' adds no syntax or format detail beyond the schema 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 (Delete), a precise resource (local style), and enumerates the style subtypes it covers (text, paint, effect, grid) plus the lookup key (ID). An agent can distinguish this from siblings like delete_node, delete_variable, and create_text_style 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 description implies usage ('delete ... by ID') but offers no explicit when-to-use/when-not guidance and no prerequisites, and it doesn't reference any alternative sibling such as get_styles for discovery. Adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_variableA
DESTRUCTIVE: permanently delete a local variable. Nodes bound to it lose the binding. Cannot be undone through this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| variableId | Yes | ID of the variable to delete |
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 flags permanence, irreversible-through-this-tool, and the side effect that bound nodes lose their binding. It stops short of permissions, error behavior (e.g., failure on bound variables), or return value, so 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?
Three short clauses, front-loaded with the DESTRUCTIVE warning, then the side effect, then irreversibility. 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 single-parameter delete tool with no annotations and no output schema, the description covers purpose, destruction scope, and reversibility adequately. It omits permission requirements and error scenarios, a minor gap against such a simple surface.
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, variableId, and schema description coverage is 100%, so the schema already documents it fully. The description adds no format, ID-source, or lookup guidance beyond 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 (delete) and resource (local variable), and the word 'local' plus the singular resource distinguishes it from the sibling delete_variable_collection. An agent can route correctly 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 destructive framing implies when it should be used (removing a variable), but there is no explicit when-to-use guidance or named alternative such as delete_variable_collection for collection-level removal. 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.
delete_variable_collectionA
DESTRUCTIVE: permanently delete a local variable collection together with ALL variables and modes inside it. Nodes bound to those variables lose their bindings. Cannot be undone through this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| collectionId | Yes | ID of the variable collection to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden and does well: it discloses destruction, cascading removal of all contained variables and modes, loss of node bindings, and irreversibility through this tool. It omits permission requirements and failure/idempotency behavior, so it falls 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?
Two sentences, zero waste, and the most important signal ('DESTRUCTIVE') is front-loaded before the consequences. Every clause adds decision-relevant 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 single-parameter, no-annotation, no-output-schema mutation tool, the description covers the critical facts an agent needs: severity, cascade scope, binding side effects, and irreversibility. It could still note how to obtain the collectionId (e.g., from get_local_variables), which is the only 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?
Schema description coverage is 100%, so the schema already documents collectionId fully. The description adds cascade context but no parameter-specific syntax, sourcing guidance, or format details beyond 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?
The description states a specific verb and resource ('permanently delete a local variable collection') and explicitly scopes the cascade to 'ALL variables and modes inside it', which cleanly distinguishes it from sibling delete_variable (single variable) and delete_style/delete_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?
It gives clear context for when caution is required (destructive, cascading, irreversible) but does not name alternatives or state when a lighter-weight tool like delete_variable should be used instead. Clear context with no explicit exclusions maps to a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_design_assetsA
Download icons, illustrations and image fills from a Figma design into a local folder so generated code can reference them. Use source 'plugin' for designs read with get_design_context, or 'rest' (with url/fileKey) for designs read with get_figma_design_from_url.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Figma URL (rest source) | |
| items | Yes | ||
| source | Yes | Where to read the assets from | |
| fileKey | No | Figma file key (rest source) | |
| localPath | Yes | Directory to write files to (absolute, or relative to the MCP server working directory). Created if missing. |
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 write-to-local-folder behavior and the source-mode routing, but says nothing about overwriting existing files, error/partial-failure behavior, or the shape of the result for a 5-parameter 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, zero waste, with the core action and destination front-loaded and the source-routing rule following. 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 tool with no output schema and a nested items array, the description covers purpose, destination, and source-mode selection adequately. It stops short of describing return values or failure handling, but that gap is minor against the schema's field-level detail.
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 high (~80%), so the baseline would be 3, but the description adds real meaning: it explains the semantic distinction between the 'plugin' and 'rest' source modes and ties url/fileKey specifically to the rest path. This goes beyond the schema's terse per-field 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 and resource (download icons, illustrations, image fills from Figma) plus destination (local folder) and rationale (so generated code can reference them). This clearly distinguishes it from siblings like export_node_as_image, which renders a single node rather than batch-downloading referenced assets.
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: use source 'plugin' for designs read with get_design_context, or 'rest' (with url/fileKey) for designs read with get_figma_design_from_url. The condition and the relevant alternatives are named directly, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_node_as_imageC
Export a node as an image from Figma
| Name | Required | Description | Default |
|---|---|---|---|
| scale | No | Export scale | |
| format | No | Export format | |
| nodeId | Yes | The ID of the node to export |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, but it only restates the tool name without adding behavioral context. It does not state whether the operation is read-only, what response format to expect, what limits exist, or how unsupported nodes 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 description is one short, front-loaded sentence with no wasted words. It is easy to parse, though the brevity sacrifices useful behavioral 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?
The tool has no annotations and no output schema, so the description is the only place to communicate return behavior, side effects, and constraints. It provides none of that, leaving an agent uncertain about what happens after invocation beyond the parameter contract.
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 all three parameters adequately. The description adds no additional meaning to nodeId, scale, or format beyond what the schema provides, which aligns with the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Export'), resource ('a node'), and result ('as an image'), making the core purpose clear. It is distinct from sibling tools, though it does not explicitly differentiate itself from alternatives 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?
There is no guidance about when to use this tool versus siblings, no prerequisites, and no mention of exclusions or alternatives. Usage is only implied by the tool's purpose, not explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_annotationsB
Get all annotations in the current document or specific node
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | node ID to get annotations for specific node | |
| includeCategories | No | Whether to include category information |
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 communicates a read operation but does not clarify how 'current document' works when nodeId is required, what happens when there are no annotations, whether permissions are needed, or what the response shape looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler or redundant phrasing. It loses a point because 'current document or specific node' is compact but ambiguous, especially in light of the required nodeId 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 a tool with no output schema and no annotations, the description is not complete enough for confident invocation. The unresolved 'current document' mode versus the required nodeId is a significant gap, and the description does not state the return behavior or any special values needed for document-level retrieval.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents nodeId and includeCategories. The description adds only the high-level notion of 'current document or specific node' and does not explain behave includeCategories affects the result beyond the schema's own wording.
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 ('Get') and names the resource ('annotations'), with a clear read-vs-write contrast against siblings like set_annotation and set_multiple_annotations. However, the phrase 'current document or specific node' is ambiguous because nodeId is required in the schema, making the document-level mode unclear.
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 tool's read-only name and by the presence of set_annotation/set_multiple_annotations as siblings, so an agent can infer it is for reading annotations. But there is no explicit when-to-use guidance, no exclusions, and no mention of when to choose this over get_node_info or get_selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_design_contextA
Read a Figma design from the open file through the plugin and return a compact, code-oriented spec (layout, styles, text, components, variables, assets) for generating UI code. Uses the given nodeIds or the current selection. Spec format: each node references shared values in styles by id (layout*, fill*, stroke*, effect*, text*). Layout values are CSS-like (flex, gap, padding, sizing fill/hug/fixed). exportAs: svg marks icons/vectors to export as assets instead of rebuilding them; assets lists icons and image fills to download with download_design_assets. designStyles and variables give design-token names to map onto the project's theme.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeIds | No | Node IDs to read. Defaults to the current selection in Figma. | |
| maxDepth | No | Maximum depth of children to include (default: unlimited) | |
| 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 does well: it discloses the returned spec's structure, the shared-value indirection (styles referenced by id via layout*/fill*/stroke*/effect*/text*), CSS-like layout semantics, the exportAs:svg convention, and the designStyles/variables token exposure. It omits read-only/auth permissions and any rate/scope limits, but the read nature 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?
Front-loaded with purpose, then dense but purposeful detail on spec format and token mapping. Every clause is substantive, though the single long paragraph could be slightly tightened without loss.
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 the return value, and it does so thoroughly: the spec's node/style indirection, layout conventions, asset markers, and token names. An agent has enough to call and interpret the result 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 100%, so nodeIds, maxDepth, and includeHidden are already documented. The description confirms that nodeIds defaults to the current selection but adds no depth/hidden-layer guidance, and it mentions an 'exportAs' option that isn't an actual input parameter. Baseline 3 is appropriate when the schema does the heavy lifting.
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'), resource (a Figma design from the open file), and a precise deliverable: a 'compact, code-oriented spec (layout, styles, text, components, variables, assets) for generating UI code.' This differentiates it from generic readers like read_my_design, get_node_info, and get_nodes_info by its code-generation orientation.
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 input routing ('Uses the given nodeIds or the current selection') and hands off a related task ('assets lists icons and image fills to download with download_design_assets'). It does not, however, explicitly state when to prefer this over siblings like read_my_design or get_node_info, so routing is implied 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.
get_document_infoA
Get detailed 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?
No annotations are present, so the description must carry the burden of disclosing behavior. It only states 'get detailed information', which implies a read, but does not explain what details are returned, permissions needed, or any limitations. This is under-informative for an agent.
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 concise, front-loaded sentence with no unnecessary words. Every word contributes to the purpose.
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, but with no output schema or annotations, the description should clarify what 'detailed information' includes. The current text is vague and leaves the agent guessing about the response structure. It is minimally acceptable 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 has zero parameters, so schema coverage is trivially 100%. The description does not need to add parameter semantics, and the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ('get') and resource ('document') with scope ('current Figma document'). Clearly distinguishes from siblings like get_node_info and get_selection.
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?
Implies usage for document-level information through the description, but does not explicitly mention when to use it versus alternatives such as get_node_info or read_my_design. No exclusions or contextual guidance provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_figma_design_from_urlA
Read a Figma design through the Figma REST API (no plugin needed, requires FIGMA_ACCESS_TOKEN). Pass a Figma URL (figma.com/design//...?node-id=1-2) or fileKey + nodeId. With a node it returns the code-oriented spec; without a node it returns the file outline (pages and top-level frames) so you can pick one. Spec format: each node references shared values in styles by id (layout*, fill*, stroke*, effect*, text*). Layout values are CSS-like (flex, gap, padding, sizing fill/hug/fixed). exportAs: svg marks icons/vectors to export as assets instead of rebuilding them; assets lists icons and image fills to download with download_design_assets. designStyles and variables give design-token names to map onto the project's theme.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Figma file/design URL, optionally with ?node-id= | |
| nodeId | No | Node ID such as 1:2 or 1-2 (overrides node-id in url) | |
| fileKey | No | Figma file key (alternative to url) | |
| maxDepth | No | Maximum depth of children to include (default: unlimited) | |
| includeHidden | No | Include hidden layers (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 and does well: it discloses the auth requirement, the two distinct return modes (spec vs file outline), the shared-styles indirection, the exportAs:svg marker, and the assets list. It stops short of pagination/rate-limit notes, keeping it at 4.
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 prerequisite, then the mode distinction. Dense but every sentence covers a distinct concept (mode, spec format, assets, tokens); the return-format detail is legitimately needed given no output 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 complex, no-output-schema read tool the description covers return shapes, token/auth needs, and asset handling well. Minor residual gaps are pagination limits and how maxDepth/includeHidden affect the spec, but nothing essential to correct invocation 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 value by showing the URL format example, the fileKey+nodeId alternative, and the behavioral consequence of supplying a node. maxDepth and includeHidden are left to the schema, which is acceptable.
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 ('Read a Figma design') plus the method ('Figma REST API, no plugin needed'). It is clearly distinguishable from siblings like read_my_design (plugin-based) and get_node_info by naming its URL-driven read 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?
Explains the token prerequisite (FIGMA_ACCESS_TOKEN) and the node-vs-no-node selection rule with the purpose of each mode ('pick one'). It routes to download_design_assets for assets, though it doesn't explicitly contrast with read_my_design or get_design_context siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flow_starting_pointsA
Get the prototype flow starting points of the current page
| 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. 'Get ... of the current page' implies a safe, read-only, page-scoped operation with no parameters, which sets reasonable expectations, but it says nothing about the shape of the returned list or whether inherited/remote flows are included.
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 scope qualifier appears exactly where it is needed.
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 query tool with no annotations and no output schema, the description is minimally complete but does not clarify what a 'flow starting point' record contains or how results relate to the page's prototype settings.
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?
Zero parameters, so the baseline is 4. The description usefully documents the implicit scope — 'the current page' — which is the only contextual input an agent could otherwise get wrong.
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 'Get' plus resource 'prototype flow starting points' scoped to 'the current page'. The verb alone distinguishes it from the write-side siblings set_flow_starting_point and remove_flow_starting_point, though the description 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?
Usage is implied by the read-only 'Get' framing, but there is no statement of when to reach for this versus set_flow_starting_point/remove_flow_starting_point or any prerequisites. Adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_instance_overridesA
Get all override properties from a selected component instance. These overrides can be applied to other instances, which will swap them to match the source component.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No | Optional ID of the component instance to get overrides from. If not provided, currently selected instance will be used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It communicates that this is a retrieval operation and that the overrides are reusable, but it does not explicitly state read-only behavior, side effects, or what happens when no instance is selected—though the schema covers the selection fallback.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no filler. The primary action is front-loaded, and the second sentence provides valuable purpose context without unnecessary 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 tool with one optional parameter and no output schema, the description plus schema provides enough information to call it correctly: what it returns, where it gets data from, and how the result can be used. It does not detail the override data structure, but the stated purpose is sufficient for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, nodeId, has 100% schema description coverage, including its optionality and fallback to the current selection. The description adds contextual meaning about how the overrides can be used, but does not need to repeat parameter-level 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?
The description uses a specific action, 'Get all override properties', and identifies the exact resource, 'a selected component instance'. This clearly separates it from the sibling set_instance_overrides, which performs the inverse write 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?
The description explains that the retrieved overrides can be applied to other instances, giving a clear use case for the tool. It does not explicitly name alternatives or exclusion conditions, but the intent is clear enough for an agent to choose this over set_instance_overrides.
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 all local components from the 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 provided, the description bears full responsibility for disclosing behavior. It states the scope ('local components' and 'from the Figma document') but does not describe return format, pagination, or what constitutes 'local' versus imported components.
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 concise sentence with no irrelevant details, making it highly 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 zero-parameter getter with no output schema, the description is largely adequate, specifying the resource and scope. However, it omits any detail about the return value or whether components from all pages are included, though 'from the Figma document' implies full document 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?
The tool has zero parameters, so the input schema is empty. The description appropriately avoids parameter explanation; per the baseline for zero-parameter tools, a score of 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?
The description clearly states the tool retrieves all local components from the Figma document. The verb 'get' and specific resource 'local components' distinguish it from sibling tools like get_styles or get_document_info.
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 like get_styles or create_component_instance. There is no mention of prerequisites, intended use cases, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_local_variablesA
Get all local variable collections (with modes) and variables in the current document. Color values are returned as hex, aliases as { aliasOf }.
| 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 behavioral burden. It does add useful return-shape context ('Color values are returned as hex, aliases as { aliasOf }'), which is valuable since there is no output schema. But it omits other behavioral traits such as what happens when the document has no variables or whether remote/library variables are included.
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 purpose and followed by the most decision-relevant detail (return format). 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 zero-parameter, read-only getter with no output schema, the description covers the essential scope ('local', 'current document') and the notable return encodings (hex colors, aliasOf aliases). It is close to complete, though scope questions like local-only vs remote variables could be clearer.
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. Schema coverage is 100% and there is nothing for the description to compensate for regarding parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get all local variable collections (with modes) and variables in the current document.' This clearly distinguishes it from get_styles and get_local_components, which retrieve different design artifacts. However, it does not name those siblings explicitly, 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?
Usage is implied by the resource: an agent can infer this is the read tool for local variables. There is no explicit when-to-use/when-not-to-use guidance, no mention of alternatives (e.g. get_styles for styles), and no preconditions stated. Adequate but with clear gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_main_componentB
Return the main component (id, name, variant name and component set) of one or more INSTANCE nodes, read directly in the plugin (no REST API).
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No | ID of a single instance | |
| nodeIds | No | IDs of multiple instances |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. 'Return' implies a read-only operation and 'read directly in the plugin (no REST API)' adds a genuine behavioral note about how the data is fetched. However, it says nothing about what happens for non-instance inputs or failure behavior, so it only partially covers the 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 parenthetical cleanly lists return fields and the delivery mechanism. Slightly dense but nothing 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?
With no output schema, the description usefully enumerates return values, which is the main thing an agent needs. But both parameters are optional with no stated relationship or default behavior, and no error/edge-case handling is described, leaving a meaningful gap for a 2-param lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so nodeId and nodeIds are already documented in the schema. The description corroborates by noting 'one or more INSTANCE nodes', but adds no new semantics such as mutual exclusivity between the two optional params. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Return) and resource (main component of INSTANCE nodes) and enumerates the returned fields (id, name, variant name, component set). It does not explicitly contrast with near siblings like get_local_components or get_instance_overrides, so it lands at a clear-but-undifferentiated 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?
The scope ('INSTANCE nodes') implies when the tool applies, and the one-or-more framing hints at batch use, but there is no explicit when-to-use guidance and no named alternative. 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_node_infoB
Get detailed information about a specific node in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the node to get information about |
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 says 'get detailed information'; it does not disclose what fields or depth of data are returned, whether authentication/access is required, or how invalid node IDs are handled. The verb 'get' implies read-only, but no additional behavioral detail is 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?
A single, front-loaded sentence with no filler. Every word contributes to stating the action and the target resource.
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, the description is minimally sufficient to make a call, but it does not specify what 'detailed information' contains and does not route the agent away from get_nodes_info. With no output schema and no annotations, that leaves a real gap in selecting and interpreting 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?
The input schema already documents nodeId with 100% coverage, so the baseline is 3. The description adds 'specific node' but no extra meaning about the ID format, nesting, or addressability of nodes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action and resource: get detailed information about a specific node in Figma. It is not as strong as it could be because it does not explicitly contrast itself with the plural sibling get_nodes_info or with get_document_info, leaving the distinction 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?
There is no guidance about when to choose this tool over get_nodes_info, get_selection, or get_document_info, and no mention of prerequisites or cases where it should not be used. The intended usage is only implicit in the verb 'get'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nodes_infoC
Get detailed information about multiple nodes in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| nodeIds | Yes | Array of node IDs to get information about |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read-only operation but does not reveal what 'detailed information' contains, whether there are limits on the number of node IDs, how errors are handled, or what the response format looks like. This is a minimal, somewhat tautological statement.
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, short sentence with no redundant filler. It is front-loaded with the core action and resource. While it could include more useful detail, it does not waste words, so conciseness is good.
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 there is no output schema, the description should clarify what information is returned for the requested nodes, but it does not. It also omits any mention of limits, error behavior, or relationship to sibling tools. For a tool with one parameter, the definition is underspecified and leaves important operational context unknown.
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 has complete coverage (100%) for the single parameter, and the description adds no additional semantic detail beyond what the schema already says. The baseline of 3 applies because the schema documents the parameter adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Get') and resource ('detailed information about multiple nodes in Figma'), which distinguishes it from singular sibling get_node_info by indicating multiplicity. However, 'detailed information' is vague about what exactly is returned, and it does not explicitly reference or contrast with similar 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?
No guidance is given about when to use this tool versus siblings like get_node_info, get_selection, or get_document_info. The description does not mention any conditions, exclusions, or alternatives, leaving the agent to infer usage solely from the tool name and parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reactionsA
Get Figma Prototyping Reactions from multiple nodes. CRITICAL: The output MUST be processed using the 'reaction_to_connector_strategy' prompt IMMEDIATELY to generate parameters for connector lines via the 'create_connections' tool.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeIds | Yes | Array of node IDs to get reactions from |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It conveys a read-only getter and adds a valuable behavioral constraint (output must be transformed before use), but it does not disclose return format, error behavior, or permissions. Some behavior is disclosed, but gaps remain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action and followed by a necessary cross-tool pipeline warning. No repeated schema content; the critical instruction earns its place despite its emphasis.
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, the definition is usable: it states what to do and what to do with the result. However, with no output schema and no annotations, the absence of any description of the returned reaction data leaves an agent dependent on the named strategy prompt for interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single nodeIds parameter is already documented as an array of node IDs. The description's 'from multiple nodes' reinforces the parameter but adds no new format or constraint details, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('Figma Prototyping Reactions') and the scope ('from multiple nodes'), which clearly distinguishes it from sibling getters like get_node_info or get_selection. The verb 'Get' plus the unique resource makes the tool's function immediately identifiable.
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 CRITICAL instruction explicitly states that the output must be processed by the reaction_to_connector_strategy prompt and passed to create_connections, giving an unambiguous downstream workflow. It does not name alternative tools or exclusion criteria, but none are needed for this niche getter, so the usage context is clear.
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 in Figma
| 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 must carry the full burden of behavioral disclosure. 'Get information' implies read-only, but it doesn't specify the return format, behavior with an empty selection, or any other edge cases. This is minimal for a tool with no 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?
The description is a single well-structured sentence, front-loaded with the verb and subject, and contains no extraneous words. It is as concise as possible while conveying the core purpose.
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, but the lack of output schema and the vagueness of 'information' leaves significant gaps. The description does not explain what the returned data looks like, how to handle an empty selection, or any prerequisites, making it incomplete for an agent to fully rely on.
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 has zero parameters, so schema coverage is effectively 100%. The description adds no parameter semantics, but with no parameters the baseline of 4 is appropriate; there is nothing to explain.
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 the specific verb 'Get' and the resource 'current selection' in Figma, clearly distinguishing it from sibling tools like set_selections (which sets selection) and get_node_info (which targets specific nodes). It is concise and 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 description provides no guidance on when to use this tool versus alternatives. It doesn't mention exclusions or alternatives, leaving the agent to infer usage context from sibling names rather than explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stylesA
Get all styles from the current Figma document
| 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 itself must convey behavior. It implies a read-only operation via 'Get', but it does not disclose what constitutes a 'style' (e.g., paint vs text styles) or any error conditions. This is minimal but not misleading.
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 sentence with no filler, front-loading the action and resource. Every word earns its place, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool is simple and the description captures the core action, it omits details about the output format or whether library styles are included. Given no output schema, a bit more context would improve completeness, but the low complexity prevents a lower score.
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 empty, so there are no parameters to explain. The description correctly focuses on the tool's action, and with zero parameters, no further semantic detail is necessary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'all styles' scoped to 'the current Figma document', which distinguishes it from sibling tools that create, apply, or rename styles. There is 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 provides no explicit guidance on when to choose this tool over alternatives like create_paint_style or apply_paint_style. The usage is implied by the name and semantics, but there is no mention of prerequisites or exclusions, so the agent must infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
join_channelC
Join a specific channel to communicate with Figma
| Name | Required | Description | Default |
|---|---|---|---|
| channel | No | The name of the channel to join |
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 explaining side effects, permissions, idempotency, or state changes. The description only says 'Join a specific channel' and gives no indication of what happens when joining, whether it is reversible, whether authentication is required, or what observable effects occur.
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 sentence with no redundant clauses, making it concise and easy to parse. The phrase 'specific' is slightly filler-like, but overall the structure is clean and front-loaded with the action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one optional parameter, no output schema, no annotations, and a tool that is disjoint from the many sibling node/manipulation tools, the description is too thin for an agent to understand when or how to call it. It does not explain what channels exist, where the channel name comes from, what a successful join looks like, or what conditions cause failure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a parameter description ('The name of the channel to join'), so the schema already handles the basic meaning. The tool description adds no extra information about channel format, naming rules, valid values, or how to discover available channels. Baseline 3 is appropriate since the schema does the heavy lifting.
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 action ('Join a specific channel') and identifies the resource (a channel), but the purpose is vague: 'to communicate with Figma' does not explain what joining the channel accomplishes, what a channel is in this context, or how this relates to the other Figma tools. It is not a tautology, but it lacks enough specificity to be fully clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool, what problem it solves, or which situations warrant joining a channel. It does not mention any prerequisites, exclusions, or alternatives. An agent has no context to decide when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_nodeC
Move a node to a new position in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | New X position | |
| y | Yes | New Y position | |
| nodeId | Yes | The ID of the node to move |
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 only restates the move action and does not explain whether the move is absolute or relative, what coordinate system is used, whether the node must already exist, how the move interacts with parent/child relationships, 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?
The description is a single, direct sentence with no filler or redundant detail, and the core action is front-loaded. It loses one point because the text is so minimal that it fails to include contextual guidance that would make the conciseness genuinely useful.
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 and all three required parameters are fully documented in the schema, so the one-line description is minimally viable. However, with no annotations, no output schema, and sibling tools that overlap semantically, the description is not complete enough: it leaves the meaning of 'position' ambiguous and gives no usage or side-effect information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already defines nodeId, x, and y with clear descriptions. The tool description adds no additional parameter meaning, but it does not need to compensate because the schema already provides the essential semantics. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource — 'Move a node to a new position in Figma' — and the x/y parameters make it clear this is a coordinate move. It is not fully a 5 because 'new position' could be confused with moving a node in the hierarchy, especially given the sibling tool set_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?
There is no guidance on when to use this tool versus alternatives such as set_parent, resize_node, or clone_node. The description does not mention exclusions, prerequisites, or any decision context, so the agent gets no help selecting between overlapping siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_my_designA
Get detailed information about the current selection in Figma, including all node details
| 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 burden. The name and verb 'Get' imply a read-only operation, but the description does not disclose what happens when there is no selection, whether multiple nodes are returned, or the exact structure of the returned 'node details'. It remains somewhat vague about the tool's behavior beyond the basic read action.
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 that immediately states the action and subject. It is concise with no wasted words or redundant 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?
The tool has no parameters and no output schema, so the description is the only source for return expectations. It says 'detailed information' and 'all node details' but does not enumerate the details or mention edge cases like empty selection. While the tool is simple, the description could be more precise about the returned content and error behavior.
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 empty with zero parameters, so there are no parameter semantics to explain. The description does not need to compensate for undocumented parameters, and the baseline for 0 parameters is 4, which is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'detailed information about the current selection in Figma', and adds 'including all node details' which specifies the scope. This distinguishes it from sibling tools like 'get_selection' which likely returns only the selection IDs, and 'get_node_info' which targets specific nodes rather than the current selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when the current selection's details are needed, but it does not explicitly state when to use it versus alternatives like 'get_selection' or 'get_node_info'. There is no exclusionary guidance or mention of alternatives, so the 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.
remove_flow_starting_pointB
Remove the prototype flow starting point of a frame
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ID of the frame whose flow starting point should be removed |
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 the mutation but omits side effects, reversibility, permission requirements, or what happens if no flow starting point exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero waste. It communicates the action and target 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?
For a simple one-parameter mutation with full schema coverage, the description covers the core purpose. However, with no annotations and no output schema, it should disclose more about behavior (e.g., errors if no starting point) to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single nodeId parameter is fully documented in the schema. The description adds no format or constraint details beyond what the schema already provides, so 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 (Remove) and resource (prototype flow starting point of a frame), clearly distinguishing it from sibling set/get flow starting point tools by verb. No explicit sibling naming, but the verb makes the operation 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, prerequisites, or alternatives are mentioned. Usage is only implied by the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_interactionsB
Remove prototype interactions from a node: all of them, or only those with a given trigger type
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ID of the node | |
| triggerType | No | Optional trigger type to remove; omit to remove all |
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 nothing about reversibility, permissions, or side effects of a destructive removal, and the 'all vs. trigger type' scoping it does mention is already stated in the triggerType schema field.
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; the two operating modes are stated economically in one 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 simple two-parameter, schema-complete removal tool with no output schema, the description is sufficient to invoke it correctly. The remaining gap is the absence of any behavioral/safety context for a destructive operation with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: nodeId is documented as 'ID of the node' and triggerType explicitly notes 'omit to remove all' with a full enum. The description adds no format or constraint detail beyond 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 (remove) and resource (prototype interactions) scoped to a node, which clearly positions it as the deletion counterpart to add_interaction/set_reactions. It does not name any sibling explicitly, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by explaining the two removal modes (all vs. filtered by trigger type), but it never states when to prefer this tool over siblings like set_reactions or set_reactions-based overwrites, nor any prerequisites (e.g., the node must be a prototype/frame).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_nodeA
Rename a node in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The new name for the node | |
| nodeId | Yes | The ID of the node to rename |
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 only states that a node is renamed and does not mention side effects, return behavior, reversibility, or failure cases. For a mutating operation, this is a meaningful transparency 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 filler. Every word contributes to identifying 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?
Given the tool's low complexity and the complete parameter schema, the description is sufficient for an agent to invoke the tool correctly. It lacks some behavioral context, such as return/error behavior, but that is a minor gap for such a simple 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?
Both parameters are fully described in the input schema, so schema coverage is 100%. The tool description adds no extra parameter-level detail, but it does not need to; the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'rename' with the resource 'node in Figma,' making the tool's purpose immediately clear. It also naturally distinguishes this tool from siblings like move_node, clone_node, and delete_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?
The intended use is implied: use this tool when you need to change a node's name. However, there is no explicit guidance about when not to use it or comparison with alternatives, so the usage guidance is minimal but not misleading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resize_nodeC
Resize a node in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| width | Yes | New width | |
| height | Yes | New height | |
| nodeId | Yes | The ID of the node to resize |
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. 'Resize a node in Figma' only implies mutation; it does not disclose whether the operation is reversible, how it interacts with auto-layout, constraints, or child nodes, or any side effects. For a mutating 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?
The description is a single front-loaded sentence with zero filler: 'Resize a node in Figma' conveys the purpose immediately. It earns its place, though the terseness borders on under-specification rather than deliberate brevity backed by richer content 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 no annotations and no output schema, the one-sentence description must carry all context, but it omits what the tool returns, whether changes are undoable, and how resizing affects constraints or auto-layout parents. An agent calling this tool would have to guess at side effects and expected confirmation behavior, which is inadequate even for a simple 3-parameter 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 100%, so the schema already documents all three parameters with clear descriptions ('New width', 'New height', 'The ID of the node to resize'). The description adds no additional parameter meaning beyond what the schema provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (resize) and resource (a node in Figma), making the core action unambiguous. It distinguishes from sibling tools because move_node, rename_node, delete_node, and clone_node each carry different verbs, so there is no overlap in what this tool does. It stops short of a 5 because it adds no scope detail (e.g., which node types are resizable) or explicit differentiation language.
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 this tool versus alternatives such as move_node, set_layout_sizing, or set_layout_mode. There are no conditions, exclusions, or references to siblings, leaving the agent to infer appropriateness entirely 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.
scan_nodes_by_typesC
Scan for child nodes with specific types in the selected Figma node
| Name | Required | Description | Default |
|---|---|---|---|
| types | Yes | Array of node types to find in the child nodes (e.g. ['COMPONENT', 'FRAME']) | |
| nodeId | Yes | ID of the node to scan |
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 scan is recursive or direct-child-only, what happens when no matches are found, whether node types are case-sensitive, or what the response contains. 'Scan' suggests searching, but the exact behavior is left ambiguous.
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 concise sentence that communicates the core function without filler. The word 'selected' is slightly ambiguous because the actual parameter is nodeId, but the overall structure is 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?
With no annotations and no output schema, the description leaves out important operational details such as traversal depth, return format, matching behavior, and whether 'selected' refers to the current selection or the provided nodeId. An agent could call it, but may misinterpret scope or 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 100%; both nodeId and types already have descriptions in the schema. The tool description adds only the context of scanning child nodes and does not expand on allowed type values, format, or edge cases, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Scan for child nodes'), a specific resource ('selected Figma node'), and a specific filter ('specific types'). It is clear enough to distinguish from general node-read tools like get_node_info, though it does not explicitly differentiate itself from scan_text_nodes.
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 versus alternatives. It does not mention scan_text_nodes or any other sibling, nor does it state conditions, trade-offs, or exclusions. The usage context is only implicit.
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 all text nodes in the selected Figma node
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ID of the node to scan |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It implies a read-only scan but does not explain whether the scan recurses through all descendants, what data is returned, or how results are formatted. 'Scan' alone is too vague for an agent to predict behavior reliably.
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. It conveys the essential action and object efficiently, though it could include more behavioral detail without becoming bloated.
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 there is no output schema and no annotations, the description should explain what the tool returns or how the scan behaves. It does not mention return values, traversal depth, or any side effects, leaving significant ambiguity for a tool that an agent needs to invoke 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 100%, with nodeId described as 'ID of the node to scan.' The description adds only the phrase 'selected Figma node,' which maps loosely to the parameter but provides no extra semantic value. Baseline 3 is appropriate since the schema already documents the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('scan') and a clear resource ('all text nodes in the selected Figma node'), so an agent can understand the core function. It does not explicitly differentiate from the sibling scan_nodes_by_types, but the focus on text nodes makes the purpose reasonably distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool instead of alternatives like scan_nodes_by_types or get_node_info. The context of when this tool is appropriate is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_annotationB
Create or update an annotation
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the node to annotate | |
| categoryId | No | The ID of the annotation category | |
| properties | No | Additional properties for the annotation | |
| annotationId | No | The ID of the annotation to update (if updating existing annotation) | |
| labelMarkdown | Yes | The annotation text in markdown format |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden. It discloses that the tool mutates state (create/update) but does not reveal idempotency behavior, whether annotationId is required for updates, what happens if the nodeId does not exist, or whether categoryId is mandatory. The double-action nature also leaves ambiguity about whether an update without annotationId silently creates a duplicate.
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, short sentence with no filler. It front-loads the essential verb and resource. Given the schema carries the parameter details, this level of conciseness is appropriate.
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, no annotations, and a mutation tool with create/update dual semantics. The description does not explain update rules (e.g., what happens when annotationId is omitted for an existing node), merge behavior, or required preconditions like node existence. For a tool with 5 params and two possible operations, this level of context is insufficient.
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 parameters are already documented. The description does not add semantics beyond the schema, but the schema descriptions are clear enough. The phrase 'create or update' does imply annotationId is relevant for update, slightly reinforcing the schema, but no extra semantics are added. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create or update an annotation' clearly states the verb and resource: it both creates and updates an annotation, which is a specific, common Figma-like operation. It distinguishes itself from siblings like get_annotations (read) and set_multiple_annotations (bulk variant) by explicit create/update semantics, though it does not name 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 description implies usage: use when you need to create a new annotation or update an existing one, as indicated by 'Create or update'. There are no explicit exclusions, alternatives, or when-to-use versus set_multiple_annotations guidance, but the context is fairly clear given the sibling list.
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 an auto-layout frame in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the frame to modify | |
| counterAxisAlignItems | No | Counter axis alignment (MIN/MAX = top/bottom in horizontal, left/right in vertical) | |
| primaryAxisAlignItems | No | Primary axis alignment (MIN/MAX = left/right in horizontal, top/bottom in vertical). Note: When set to SPACE_BETWEEN, itemSpacing will be ignored as children will be evenly spaced. |
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 clearly indicates a mutation ('Set'), but it does not mention whether the frame must already be an auto-layout frame, what happens if it is not, whether existing alignment values are overwritten, or whether there are side effects. This is a minimal description 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?
The description is a single, front-loaded sentence with no redundant words. It names the action, the object, and the target frame type in an efficient, scannable way.
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 plus a fully self-documenting schema is enough to identify the core operation and parameters. However, there are no annotations, no output schema, and no guidance about preconditions, failure behavior, or what alignment defaults will be used when optional parameters are omitted. It is minimally viable 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 100%, and the parameter descriptions are already detailed, including enums and the SPACE_BETWEEN behavior note. The tool description itself adds no extra parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Set'), a clear resource ('primary and counter axis alignment'), and specifies the target ('auto-layout frame'). It is immediately distinguishable from siblings like set_item_spacing or set_layout_mode, which address different 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?
The phrase 'for an auto-layout frame' implies the tool is meant for use on frames that have auto-layout enabled, but it does not explicitly state when to choose this tool over related siblings such as set_layout_mode or set_item_spacing. No alternatives or exclusions are mentioned, so usage is inferred rather than explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_corner_radiusA
Set the corner radius of a node in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the node to modify | |
| radius | Yes | Corner radius value | |
| corners | No | Optional array of 4 booleans to specify which corners to round [topLeft, topRight, bottomRight, bottomLeft] |
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 disclosing behavioral expectations. 'Set the corner radius' conveys a basic mutation, but it does not mention that the change is persistent, whether unsupported node types will error, how the optional corners parameter interacts with the radius, or whether existing radius values are overwritten. For a mutation tool with no 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?
The description is a single, front-loaded sentence with no filler or redundancy. Every word contributes to identifying the tool's action and target. The under-specification of behavioral details is a completeness issue, not a conciseness issue.
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 three-parameter tool with complete schema coverage, the core invocation details are present. However, with no annotations and no output schema, the description leaves important context unstated: how to obtain a valid nodeId, whether all nodes support corner radius, and what happens when corners is omitted. This is adequate but not robust.
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 fully documents nodeId, radius, and the optional corners array. The description adds no parameter-specific meaning beyond echoing the general concept of corner radius. This is the expected baseline when the schema already handles parameter documentation.
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 ('Set') and resource ('corner radius of a node in Figma'). This meaningfully distinguishes it from sibling tools like set_fill_color, resize_node, or set_padding. Even without a title, the purpose is immediately 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 intended use case is implied by the tool name and description: use it when you need to change a node's corner radius. However, there is no explicit guidance about when not to use it, what node types support corner radius, or how it relates to alternative tools such as resize_node or set_padding. It meets the threshold for implied usage but provides no explicit routing or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_default_connectorB
Set a copied connector node as the default connector
| Name | Required | Description | Default |
|---|---|---|---|
| connectorId | No | The ID of the connector node to set as default |
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 operation but does not mention that this is a mutation, whether it affects the underlying design, any required permissions, side effects, or failure conditions. The word 'set' implies state change but provides no transparency beyond 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?
The description is a single, front-loaded sentence with no filler or redundant details. Every word earns its place, and the key constraint ('copied') is included without bloating the 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 one-parameter setter with no output schema and no annotations, this is minimally adequate: the agent knows what to do and which parameter to provide. However, it lacks behavioral context such as side effects, when the node is considered 'copied', and what being 'default' entails, leaving meaningful gaps for correct invocation and expectation-setting.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides a clear description for connectorId, and coverage is 100%, so the baseline is 3. The tool description adds the important constraint that the connectorId must refer to a copied connector node, which goes beyond the schema's generic 'connector node' 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 clearly states the action ('set'), the resource ('connector node'), and the desired outcome ('as the default connector'). It is specific enough to distinguish this tool from most siblings, though it does not explicitly contrast it with any alternative or define what 'default connector' means in this context.
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 'copied connector node' implies that the tool should be used after copying a connector node, giving some usage context. However, there is no explicit guidance about when to prefer this tool over alternatives, nor any exclusions or workflow prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_effectsA
Replace the effects (drop/inner shadows, layer/background blur) of a node. Pass an empty array to clear all effects.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ID of the node | |
| effects | Yes | Effects to set on the node, in order |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It does communicate the destructive replace semantics and the empty-array clearing behavior, which is meaningful, but says nothing about return values, error behavior for invalid nodes, or Figma quirks (e.g. only one drop shadow/inner shadow allowed per 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?
Two short sentences, zero filler, with the core action front-loaded and the edge case (clearing) immediately following. Nothing should be removed.
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 setter with no output schema and no annotations, the description covers what is set and the clearing case, but leaves the mutation's side effects and failure modes unaddressed. Adequate minimum, with clear gaps for an agent reasoning about a write 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 100%, so the schema already documents nodeId and the effect object fields (baseline 3). The description adds semantics beyond the schema by explaining that an empty effects array clears all effects, a behavior not derivable from the schema 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 and resource ('Replace the effects ... of a node') and enumerates exactly which effect kinds are covered (drop/inner shadows, layer/background blur). "Of a node" implicitly separates it from the effect-style siblings (create_effect_style, apply_effect_style), and the second sentence pins down the clear-all case.
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 empty-array instruction is a useful concrete usage rule, but there is no guidance on when to use this direct node setter versus apply_effect_style or create_effect_style, nor any prerequisites (e.g. which node types accept which effect kinds). 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_fill_colorC
Set the fill color of a node in Figma can be TextNode or FrameNode
| Name | Required | Description | Default |
|---|---|---|---|
| a | No | Alpha component (0-1) | |
| b | Yes | Blue component (0-1) | |
| g | Yes | Green component (0-1) | |
| r | Yes | Red component (0-1) | |
| nodeId | Yes | The ID of the node to modify |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full behavioral burden. It adds the supported node types, but does not disclose whether existing fills are replaced, what happens for unsupported node types, or how the optional alpha parameter behaves. 'Set' implies mutation, but deeper 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 short and front-loaded with the action and target, avoiding unnecessary detail. However, the grammar is slightly awkward in the trailing clause, which prevents a higher score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple setter with fully documented parameters and no output schema, the description is mostly adequate. It is missing edge-case behavior details, especially around the optional alpha parameter and unsupported node types, but remains functional for basic 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 100%, with clear parameter descriptions, ranges, and required flags. The tool description adds no additional parameter-level meaning, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete action ('Set') and target ('fill color of a node'), and adds supported node types (TextNode or FrameNode). This is clear enough to distinguish it from stroke-related or image-fill siblings, though it does not explicitly name 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 or when-not-to-use guidance is provided. It does not mention alternatives such as set_stroke_color or set_image_fill, leaving an agent to infer appropriate usage from the tool name and schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_flow_starting_pointA
Add (or rename) a prototype flow starting point on a top-level frame
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Flow name | |
| nodeId | Yes | ID of the top-level frame where the flow starts |
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 reveals an upsert-like behavior via 'Add (or rename)', implying an existing flow with the same name is renamed rather than duplicated, and it flags the top-level-frame precondition. It does not say what happens on invalid nodes, whether it overwrites or errors on name collisions, 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 eleven-word sentence with zero filler, and the operation plus its key constraint are front-loaded. 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 mutation tool with no annotations and no output schema, the description covers what the tool does and where it applies, but leaves error/return behavior and the interaction with the sibling flow-starting-point tools unspecified. Adequate but with clear gaps an agent would want closed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented in the schema (name = flow name, nodeId = top-level frame ID). The description merely restates the same semantics at a high level and adds no syntax, ID format, or constraint detail beyond 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 precise verb ('Add (or rename)') and resource ('prototype flow starting point') with an explicit scope constraint ('on a top-level frame'). It does not name the closely related siblings get_flow_starting_points or remove_flow_starting_point, so differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use/when-not-to-use statement or reference to alternatives. Usage is only implied by the parenthetical 'or rename' and the constraint that the target must be a top-level frame, which tells the agent the precondition but not how this differs from rename_node or the remove/get flow siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_focusA
Set focus on a specific node in Figma by selecting it and scrolling viewport to it
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the node to focus on |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly mentions both side effects—selecting the node and scrolling the viewport—which is strong transparency for this type of tool. It does not discuss error cases or whether document state changes, but the main observable behavior 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?
The description is a single front-loaded sentence with no filler. It states the operation, the target, and the mechanism in an efficient and scannable way.
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 provides sufficient context: what action is performed and what visible effects occur. It does not mention return behavior or failure handling, but for a focus/selection action this is a minor gap rather than a critical omission.
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 nodeId parameter is already described as 'The ID of the node to focus on.' The tool description does not add additional parameter meaning, format details, or constraints, so it stays at the baseline for fully schema-documented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action—set focus on a node—and adds concrete behavioral detail: selecting the node and scrolling the viewport to it. This distinguishes it from related selection tools, though it does not explicitly reference any sibling tool 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?
There is no guidance about when to use this tool instead of alternatives such as set_selections or move_node. The description implies a use case, but it does not state prerequisites, exclusions, or conditions that would route an agent to a different tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_frame_propertiesA
Set frame layout properties not covered by other tools: layoutPositioning (ABSOLUTE takes a child out of its auto-layout parent's flow, AUTO puts it back), itemReverseZIndex (auto-layout stacking: true = first child on top), clipsContent (clip overflowing children). x/y are applied last, so an ABSOLUTE child can be positioned in the same call.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | X position relative to the parent | |
| y | No | Y position relative to the parent | |
| nodeId | Yes | ID of the frame, component, instance or child node | |
| clipsContent | No | Whether the frame clips content outside its bounds | |
| itemReverseZIndex | No | Auto-layout frames only: true = first child drawn on top | |
| layoutPositioning | No | Position of the node inside its auto-layout parent |
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 well: it discloses operation ordering (x/y applied last), the flow effect of ABSOLUTE/AUTO on the parent, and the stacking meaning of itemReverseZIndex. It does not mention permissions, error behavior, or side effects on sibling nodes, which keeps it below 5 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 dense, front-loaded sentence that leads with the tool's scope and then unpacks each property; no filler. The stacked parentheticals make it slightly heavy to parse, which keeps it just below top marks.
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 and no output schema, the description covers the non-obvious parameters and their interactions well. It omits return/error behavior, but the absence of an output schema and the low stakes of a Figma property setter make that a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it explains that ABSOLUTE removes a child from its auto-layout parent's flow, that itemReverseZIndex puts the first child on top, and that x/y are applied after positioning. This is value-add over the terse 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 ('Set') and resource ('frame layout properties') and immediately carves out its niche with 'not covered by other tools,' then enumerates the exact properties (layoutPositioning, itemReverseZIndex, clipsContent, x/y). An agent can distinguish it from siblings like set_layout_mode, set_padding, and set_item_spacing 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 'not covered by other tools' framing plus the explanation of ABSOLUTE/AUTO semantics gives clear context for when each property applies, and the note that 'x/y are applied last, so an ABSOLUTE child can be positioned in the same call' is genuine usage guidance. It stops short of naming specific alternative tools or explicit when-not-to-use conditions, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_image_fillA
Fill a node in Figma with an image from a local file path, a URL, or base64 data (replaces the node's existing fills)
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the node to fill | |
| imageUrl | No | Image URL, fetched by the MCP server (the Figma plugin cannot fetch arbitrary domains itself) | |
| imagePath | No | Absolute path to a local image file, read by the MCP server (preferred: keeps image bytes out of the model context) | |
| scaleMode | No | How the image fills the node (default: FILL) | |
| imageBase64 | No | Base64-encoded image data, with or without a data: URI prefix (only when the image exists nowhere else) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a key behavioral trait: it 'replaces the node's existing fills', which is important for a mutating tool. However, with no annotations to carry the safety burden, it does not explain whether the change is reversible, how errors are surfaced, or the destructive nature beyond that phrase.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the main action and then lists the supported input forms and the key side effect. There is no redundant or filler 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?
The core operation is clear, and the schema covers parameter details, but the description omits important invocation context such as 'provide exactly one image source' and what happens on success or failure. With no output schema or annotations, this leaves some ambiguity for an agent selecting arguments.
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 all five parameters and the enum. The description adds a high-level mapping to the three image-source parameters but does not clarify mutual exclusivity or precedence among imagePath, imageUrl, and imageBase64.
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 action and resource: 'Fill a node in Figma with an image', and it lists the three supported image source kinds. It is easy to distinguish from color-fill tools like set_fill_color, though it does not explicitly name any sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for image fills, but it gives no explicit guidance about when to prefer it over set_fill_color or other fill/modification tools. It also does not state exclusions or prerequisites, such as the need to provide only one image source.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_instance_overridesA
Apply previously copied overrides to selected component instances. Target instances will be swapped to the source component and all copied override properties will be applied.
| Name | Required | Description | Default |
|---|---|---|---|
| targetNodeIds | Yes | Array of target instance IDs. Currently selected instances will be used. | |
| sourceInstanceId | Yes | ID of the source component instance |
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. It explicitly reveals the main mutating effect: target instances will be swapped to the source component and all copied override properties will be applied. It does not discuss reversibility, errors, or permissions, but the core behavioral transformation is clearly stated, which is strong for a tool with no 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?
The description is two concise sentences with no filler. The main action is front-loaded in the first sentence, and the second sentence adds the essential behavioral detail. Every word contributes to the agent's understanding.
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 two required parameters, no annotations, and no output schema, the description covers the action, the target selection context, and the resulting transformation. It could mention prerequisites more explicitly or describe failure behavior, but the essential information needed to invoke the tool correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The tool description adds minimal parameter-level meaning beyond restating that target instances are involved; it does not clarify the relationship between sourceInstanceId and targetNodeIds beyond what the schema already provides. Thus the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Apply previously copied overrides to selected component instances') and then states the concrete outcome: target instances are swapped to the source component and all copied overrides are applied. This clearly distinguishes it from the sibling get_instance_overrides, which reads rather than 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 phrase 'previously copied overrides' and 'selected component instances' conveys the intended workflow context, making it clear the tool is used after copying overrides and on a current selection. It does not explicitly state when not to use it or name alternatives like get_instance_overrides, but the context is sufficient for an agent to infer the correct situation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_item_spacingA
Set distance between children in an auto-layout frame
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the frame to modify | |
| itemSpacing | No | Distance between children. Note: This value will be ignored if primaryAxisAlignItems is set to SPACE_BETWEEN. | |
| counterAxisSpacing | No | Distance between wrapped rows/columns. Only works when layoutWrap is set to WRAP. |
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 only states the basic mutation ('Set distance') and does not describe failure modes for non-auto-layout frames, side effects, or behavioral caveats like itemSpacing being ignored under certain alignment 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?
The description is a single front-loaded sentence with no filler. Every word contributes to identifying the operation's target and 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?
The schema covers parameter semantics well, and the description names the target context, but with no annotations and no output schema, an agent still lacks guidance on alternatives and behavior beyond the basic mutation. It is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter already has meaningful descriptions, including caveats for itemSpacing and counterAxisSpacing. The tool description adds no parameter-level meaning beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Set') and identifies the exact resource ('distance between children in an auto-layout frame'). This clearly differentiates it from related siblings like set_padding and set_axis_align, even though 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?
The description gives a clear applicable context: it only applies to auto-layout frames, which tells an agent when the tool is relevant. However, it does not explicitly mention alternatives or exclude cases such as fixed-layout frames.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_layout_modeB
Set the layout mode and wrap behavior of a frame in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the frame to modify | |
| layoutMode | Yes | Layout mode for the frame | |
| layoutWrap | No | Whether the auto-layout frame wraps its children |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose side effects and constraints on its own. It only says 'set', with no mention that this mutates design state, that layoutWrap may only apply when layoutMode is not NONE, or any other behavioral consequences. For a mutation tool, this is a significant transparency 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 sentence with no filler or repetition. It front-loads the action and resource, making it easy to scan and understand quickly.
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 plus the fully covered schema give an agent enough basics to invoke the tool, but there are no behavioral notes, no usage context, and no output expectations. Since it is a simple three-parameter mutation, this is minimally viable but still leaves selection ambiguity among similar sibling 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 description coverage is 100%, so each parameter is already documented. The description adds no meaning beyond restating that layout mode and wrap behavior are affected. Baseline 3 is appropriate because the schema carries the burden, and the description neither adds nor conflicts with parameter 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?
The description names a specific verb ('Set'), a resource ('a frame in Figma'), and the affected properties ('layout mode and wrap behavior'). It is clear enough to identify the tool's core function, but it does not distinguish itself from sibling layout-related tools like set_axis_align or set_layout_sizing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no prerequisites such as the frame needing to be an auto-layout frame, and no exclusions. The only usage signal is implied by the verb and resource, which is not enough for an agent to reliably choose between this and similar layout tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_layout_sizingC
Set horizontal and vertical sizing modes for a frame, component, component set, instance or text node in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the frame, component, component set, instance or text node to modify | |
| layoutSizingVertical | No | Vertical sizing mode (HUG for auto-layout frames/components/instances and text, FILL for auto-layout children only) | |
| layoutSizingHorizontal | No | Horizontal sizing mode (HUG for auto-layout frames/components/instances and text, FILL for auto-layout children only) |
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 scope. It omits whether auto-layout must already be enabled, that HUG applies only to auto-layout/text and FILL only to auto-layout children, or any error/permission behavior for this 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 front-loaded sentence with no filler, efficiently conveying verb, resource, and target node types. Slightly long and list-heavy, 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 no-annotation mutation tool with full schema coverage but no output schema, the description identifies the operation adequately but leaves out prerequisites and mode-applicability constraints an agent needs to call it correctly. Minimum-viable rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents nodeId and both sizing enums (including the HUG/FILL applicability notes). The description adds no parameter meaning beyond what the schema provides, which lands at the 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?
States a specific verb ('Set') plus the resource ('horizontal and vertical sizing modes') and enumerates the applicable node types (frame, component, component set, instance, text node). An agent can distinguish this from resize_node or set_frame_properties, though it never names or contrasts 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?
The description names no conditions for choosing this tool over the nearby set_layout_mode, resize_node, or set_frame_properties tools, and gives no when-not guidance. It implies context only by listing eligible node types; there is no routing information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_multiple_annotationsC
Set multiple annotations parallelly in a node
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the node containing the elements to annotate | |
| annotations | Yes | Array of annotations to apply |
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. 'Set' implies mutation, but the description does not state whether existing annotations are replaced, whether updates require annotationId, how partial failures are handled, or any other 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 short sentence with no filler words, making it easy to parse. It is concise rather than bloated, though it sacrifices useful detail for brevity.
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 involves a nested annotations array with optional categorization and update IDs, yet the description only says to set multiple annotations. There is no guidance on how updating existing annotations works, what 'in a node' means relative to the nested nodeId, or what happens after the operation. With no output schema and no annotations, this is insufficient 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?
The input schema provides thorough descriptions for the top-level parameters and most nested fields, so the description adds little beyond schema. A baseline of 3 is appropriate since the schema does the heavy lifting; the description does not clarify ambiguous points like how categoryId/annotationId relate to creating versus updating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Set multiple annotations' in a node, which conveys a batch mutation operation. It is implicitly distinct from the singular sibling tool set_annotation, though it does not explicitly name the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is provided about when to use this tool versus set_annotation, get_annotations, or other annotation-related tools. The word 'multiple' implies batch usage, but there is no stated condition, exclusion, or alternative recommendation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_multiple_text_contentsB
Set multiple text contents parallelly in a node
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Array of text node IDs and their replacement texts | |
| nodeId | Yes | The ID of the node containing the text nodes to replace |
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 only reveals that the operation sets multiple text contents 'parallelly', but does not state whether existing text is replaced, whether the node must contain text nodes, or whether the operation is atomic.
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 sentence with no filler and the action verb is front-loaded. However, 'parallelly' is an awkward modifier and 'text contents' is imprecise, so it is concise but not maximally polished.
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 how this tool relates to set_text_content, what 'parallelly' means in terms of execution, and any side effects or prerequisites, though the schema covers the parameter 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%, so the baseline is 3. The description adds little beyond the schema: 'parallelly' and 'in a node' hint at the relationship between the parent node and the array, but the schema already documents both parameters and their 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?
The description uses a specific verb ('Set') and resource ('multiple text contents') and scopes the operation to 'a node'. The word 'multiple' differentiates it from the sibling set_text_content, though 'parallelly' is vague and 'text contents' is slightly 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?
No explicit when-to-use guidance or alternatives are stated. The term 'multiple' implies this is the batch counterpart to set_text_content, but the description never clarifies when to choose this over the singular tool or what types of nodes are valid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_overlay_settingsA
Read the overlay settings (position, background, close on click outside) of a frame used as an overlay. These properties are READ-ONLY in the Figma Plugin API: calling with any setting returns an error together with the current values; set them manually in Figma's Prototype panel.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ID of the frame used as overlay destination | |
| position | No | Desired overlay position | |
| background | No | Desired overlay background: "NONE" or { color: {r,g,b,a} } (0-1) | |
| closeOnClickOutside | No | Desired close-on-click-outside behavior |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discharges it well: it discloses that the properties are READ-ONLY in the Figma Plugin API, that calling with any setting returns an error alongside the current values, and that values must be changed manually. This is exactly the behavioral context an agent needs to avoid a failed call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the purpose then the crucial read-only caveat. No filler, though the parenthetical property list partially duplicates schema 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?
No output schema exists, and the description compensates by explaining that calls return the current values alongside an error. Combined with the read-only disclosure, an agent has enough to invoke and interpret correctly; minor absence of an explicit return-shape description keeps it from 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?
Schema description coverage is 100%, and each parameter already carries a description (nodeId, position enum, background shape, closeOnClickOutside). The description names the three settings but adds no syntax or format meaning beyond 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?
The description states a specific verb (Read) and resource (overlay settings of a frame used as an overlay), listing the covered properties. It is distinct from siblings like set_frame_properties or set_reactions. However the name 'set_overlay_settings' conflicts with the described read behavior, which could momentarily mislead an agent despite the description's honesty.
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 (to inspect overlay settings) and offers a workaround – set them manually in Figma's Prototype panel – but does not explicitly frame when to call this versus alternatives in a task flow. Context 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_paddingB
Set padding values for an auto-layout frame in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the frame to modify | |
| paddingTop | No | Top padding value | |
| paddingLeft | No | Left padding value | |
| paddingRight | No | Right padding value | |
| paddingBottom | No | Bottom padding value |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full behavioral burden. It only states that padding values are set, but does not disclose whether unspecified padding values are preserved or reset, whether the frame must already have auto-layout enabled, or what happens if the node is not a valid auto-layout frame.
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 concise sentence that is front-loaded with the action and resource. It has no wasted words, though it is somewhat minimal and leaves out behavioral 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?
Given there are no annotations or output schema, the description should provide more behavioral context for this mutating tool. It does not explain partial-update behavior, constraints on the target frame, or error conditions, so an agent lacks important information for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all parameters with descriptions, giving a baseline of 3. The description adds no extra meaning beyond the schema, but it does not need to since the schema already defines nodeId and each padding side clearly.
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 ('Set'), a clear resource ('padding values'), and a precise scope ('auto-layout frame in Figma'). It is easy to distinguish from sibling tools like set_item_spacing or set_layout_mode because padding is uniquely identified.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for auto-layout frames, giving some context, but it does not explicitly say when to choose this tool over alternatives or when not to use it. There is no mention of related tools for spacing or layout adjustments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_parentA
Move a node into a new parent node (e.g. a section, frame or group). Preserves the node's absolute position unless x/y are provided
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Optional X position relative to the new parent | |
| y | No | Optional Y position relative to the new parent | |
| index | No | Optional child index to insert at (default: appended as last child) | |
| nodeId | Yes | The ID of the node to move | |
| parentId | Yes | The ID of the new parent node (must support children, e.g. a section, frame or group) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It adds the key behavioral detail that the node's absolute position is preserved unless x/y are provided, which is not fully obvious from the schema. It does not discuss reversibility or side effects on children, but the disclosed positioning behavior is valuable and not contradictory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one useful sentence plus a short behavioral clause, with the core action front-loaded. There is no filler or repetition of the input 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 mutating tool with no annotations and no output schema, the description covers the essential operation and the most important behavioral caveat (absolute position preservation). It could mention failure cases or return behavior, but the parameters are fully documented and the core call is clear.
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 all five parameters adequately. The description adds minor semantic nuance by linking x/y to absolute-position preservation, but it does not meaningfully expand beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('move'), a resource ('a node'), and the target ('into a new parent node'), and the example parent types make the operation concrete. However, it does not explicitly distinguish itself from the sibling tool 'move_node', so clarity is strong but 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 description provides no explicit guidance on when to use set_parent versus alternatives like move_node or clone_node. It implies a reparenting use case but never states when this tool is preferred or what the alternatives are for positioning-only changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_reactionsA
Replace all prototype reactions of a node with raw Figma Plugin API Reaction objects ({ trigger, actions: [...] }). Use for advanced cases (e.g. SET_VARIABLE, CONDITIONAL, ON_KEY_DOWN). Trigger timeout/delay are in milliseconds, transition duration in seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ID of the node | |
| reactions | Yes | Array of raw Reaction objects; an empty array removes all reactions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral load and does disclose the key trait: this REPLACES all existing reactions (destructive of prior state), and it documents non-obvious unit conventions (trigger timeout/delay in ms, transition duration in seconds). It omits anything about permissions, error behavior, or node-state requirements, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action and free of filler. The opening sentence is dense but the payload shape is parenthetically scoped, and the unit caveats are correctly placed as supporting detail rather than preamble.
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 mutation tool with full schema coverage and no output schema or annotations, the description covers the essentials: replacement semantics, the raw-object format, when to prefer it, and unit conventions. Remaining gaps (permissions, failure modes, node-state prerequisites) are minor rather than blocking.
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 two parameters are already documented (including that an empty array clears reactions). The description adds value beyond the schema by specifying the internal shape of each Reaction object and, importantly, the unit semantics of timeout/delay versus transition duration — genuine interpretation aid for freeform nested fields the schema leaves open.
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 ('Replace all prototype reactions of a node') with the payload type named (raw Figma Plugin API Reaction objects with trigger/actions shape). It implicitly distinguishes itself from the simpler siblings by flagging 'advanced cases (e.g. SET_VARIABLE, CONDITIONAL, ON_KEY_DOWN)', so an agent can tell when this is the right tool versus add_interaction/remove_interactions.
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 selecting this tool: it is the escape hatch for advanced reaction features not covered by simpler helpers, with three concrete example triggers. It does not explicitly name the alternative sibling (add_interaction) or state a when-not condition, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_scroll_behaviorA
Set prototype scrolling: overflowDirection on a frame, and/or make a child FIXED (fix position when scrolling) or SCROLLS. FIXED moves the node to the top of its parent's layer order (last child); in an auto-layout parent this also changes the node's position in the flow. SCROLLS moves a fixed node back to the top of the scrolling children. STICKY_SCROLLS is not supported by the Figma Plugin API and returns an error.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ID of the node (a frame for overflowDirection, a child of a frame for scrollBehavior) | |
| scrollBehavior | No | Scroll behavior of the node inside its parent frame | |
| overflowDirection | No | Scroll direction of the frame's overflowing content |
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 key side effects the schema omits: FIXED reorders the node to last child (with flow implications in auto-layout) and SCROLLS moves a fixed node back. It stops short of covering permissions, reversibility, or what a failed call returns beyond the STICKY_SCROLLS error.
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 dense side-effect detail in following sentences. Every sentence carries information, though the FIXED/SCROLLS mechanics make it somewhat dense relative to a 3-parameter 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?
Complete enough for a mutation tool with no annotations and no output schema: it covers both parameter roles, the main enum behaviors, and the unsupported-value error. It leaves minor edge cases (e.g. node outside a frame, prototype-mode requirements) 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 100%, so the baseline is 3, but the description adds real meaning beyond the schema by explaining the side effects of the FIXED, SCROLLS, and STICKY_SCROLLS enum values that the terse schema descriptions do not convey.
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 (prototype scrolling) and separates the two distinct operations: overflowDirection on a frame and scrollBehavior on a child. An agent can immediately tell what the tool manipulates and how the two parameters differ.
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 using each parameter (overflowDirection on a frame, scrollBehavior on a child) and flags that STICKY_SCROLLS is unsupported and errors. It does not name any sibling tool as an alternative or state when not to use this tool, but the context of use is unambiguous.
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 in Figma and scroll viewport to show them
| Name | Required | Description | Default |
|---|---|---|---|
| nodeIds | Yes | Array of node IDs to select |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses the core side effect (selecting nodes) and the viewport scrolling behavior, which is exactly the kind of non-obvious effect an agent needs to know. It does not mention whether the prior selection is replaced, but that is strongly implied.
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 front-loads the primary action and immediately adds the important viewport behavior. Every word earns its place 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?
For a tool with one fully documented parameter and no output schema, the description is complete. An agent knows what it does, what side effects occur, and what input is required. Nothing needed for correct invocation 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 description coverage is 100%: nodeIds is fully described as 'Array of node IDs to select'. The description does not add extra parameter-level detail, but it does not need to because the schema already documents the only parameter sufficiently.
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 action ('Set selection') on a specific resource ('multiple nodes in Figma') and adds the scroll-viewport effect. This clearly distinguishes it from the sibling get_selection and other node-scoped tools without needing to open 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 description makes it clear the tool is used when the agent wants to select multiple nodes and bring them into view. It does not explicitly name alternatives or conditions when not to use it, but the use case is unambiguous among the sibling tools.
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 the stroke color of a node in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| a | No | Alpha component (0-1) | |
| b | Yes | Blue component (0-1) | |
| g | Yes | Green component (0-1) | |
| r | Yes | Red component (0-1) | |
| nodeId | Yes | The ID of the node to modify | |
| weight | No | Stroke weight |
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 of behavioral disclosure. It only states that the stroke color is set, without explaining whether the stroke already must exist, whether multiple strokes are affected, whether the change replaces or adds to the existing style, or what happens on invalid input. Basic mutation is conveyed, but no meaningful behavioral depth is added.
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, tightly written sentence with no filler or repetition. It is front-loaded with the core action and resource, making it easy for an agent to scan and understand quickly.
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 six parameters, no annotations, and no output schema, the description is too thin. It does not mention what the tool returns, whether it requires a selected node, how the optional weight parameter interacts with the stroke, or any failure modes. The schema covers the parameters, but the surrounding context needed for safe invocation is largely 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 every parameter is already documented in the input schema. The description adds no extra parameter-level meaning beyond 'stroke color', which is sufficient given the schema's thorough per-property descriptions. The baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Set the stroke color of a node in Figma'. This clearly distinguishes it from sibling tools like set_fill_color and set_corner_radius. The intent is immediately understandable and 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 about when to use this tool versus alternatives such as set_fill_color, nor any mention of prerequisites like having a selected node or an existing stroke. The purpose implies usage in a basic way, but the description provides no explicit 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_text_contentA
Set the text content of an existing text node in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | New text content | |
| nodeId | Yes | The ID of the text node to modify |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden of behavioral disclosure. It states the action ('set text content') but does not disclose that existing text will be overwritten, possible error cases for invalid node IDs, permissions, or any side effects. The description mostly restates what the tool name already conveys.
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. It states the action, target, and context efficiently.Purpose and scope are clear without any wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (2 simple parameters, full schema coverage, no output schema), the description is mostly sufficient for an agent to invoke the tool correctly. It clearly targets existing text nodes. However, a brief note about overwriting the existing text or batch alternatives would round out the 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 coverage is 100%, so the schema already documents both parameters and their meanings. The description adds minimal semantic value beyond reinforcing that the node must already exist and be a text node. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Set'), a precise resource ('text content of an existing text node'), and the domain ('in Figma'). The word 'existing' distinguishes this from create_text, and the singular 'a text node' contrasts with set_multiple_text_contents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for modifying one existing text node, but it does not explicitly explain when to prefer this over siblings like set_multiple_text_contents or create_text. There is no when/when-not guidance, only a contextual cue via 'existing'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_text_decorationA
Set underline / strikethrough / none on one or more TEXT nodes (also text inside instances, e.g. 'I;'), optionally only for a character range [start, end). Reports per-node success.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Optional end character index (exclusive) | |
| start | No | Optional start character index (inclusive) | |
| nodeId | No | ID of a single text node | |
| nodeIds | No | IDs of multiple text nodes | |
| decoration | Yes | Text decoration to apply |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the load. It usefully discloses that it reports per-node success, supports instance-nested text via 'I<instanceId>;<textId>' syntax, and allows an optional char range, but says nothing about permissions, reversibility, or behavior on non-text nodes — significant for a mutation 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?
A single compact sentence that front-loads the operation and packs scope, instance handling, range, and return behavior without 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 no-output-schema mutation tool it covers node types, instance addressing, character-range scoping, and per-node result reporting. Gaps around permissions and error/reversibility behavior keep it from 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?
Schema coverage is 100% (baseline 3), and the description adds value beyond the schema by explaining the instance text-node ID format and the [start, end) half-open range semantics that the schema properties only hint at.
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 underline/strikethrough/none on TEXT nodes) and clarifies it works on text inside instances. Clear purpose, though it doesn't explicitly distinguish itself from siblings like set_text_content or update_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?
Usage is implied by the description (optionally apply to a character range) but there is no explicit when-to-use guidance, no prerequisites, and no indication of when to prefer this over set_text_content or apply_text_style.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_variable_valueC
Set the value of a variable for a mode. Value may be a literal or an alias to another variable ({aliasOf: variableId}).
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | Value: {r,g,b,a?} (0-1), number, string, boolean, or {aliasOf: variableId} | |
| modeId | No | Optional mode ID (default: collection's default mode) | |
| variableId | Yes | ID of the variable |
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 is a mutation tool, yet nothing is said about permissions, whether existing values are overwritten, whether the variable must already exist, or what happens when modeId is omitted (that default only appears in the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with the core action. No padding, though the second sentence largely duplicates the schema's value description rather than adding 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 3-parameter mutation with no annotations and no output schema, the description is minimally viable: the parameters are fully documented in the schema, but the tool's side effects and mode semantics are left 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 description coverage is 100%, so the baseline is 3. The description's only parameter-level addition is restating the alias shape ({aliasOf: variableId}), which the schema already documents; it adds no new meaning for variableId, modeId, or the literal value forms.
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+scope: 'Set the value of a variable for a mode.' An agent can distinguish it from create_variable/delete_variable, though it does not explicitly separate itself from the semantically adjacent bind_variable, which also touches variable values.
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 alternatives named, no prerequisites. The description never tells an agent why it would pick this over bind_variable or create_variable, or when a modeId should be supplied versus omitted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_visibleA
Show or hide one or more nodes (also nodes inside instances, e.g. 'I;', which creates a visibility override). Reports per-node success.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No | ID of a single node | |
| nodeIds | No | IDs of multiple nodes | |
| visible | Yes | true to show, false to hide |
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 targeting a child inside an instance creates a visibility override, and that the result reports per-node success (helpful since there is no output schema). It does not state permission requirements, whether the change is reversible, or how the override interacts with existing overrides.
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?
Effectively a single front-loaded sentence: the core action comes first, the instance edge case is a parenthetical, and the return behavior closes it out. 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 tool with no annotations and no output schema, the description covers the action, the multi-node scope, the instance-override edge case, and the per-node result. It omits what happens when neither nodeId nor nodeIds is supplied despite only 'visible' being required, but is otherwise 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 coverage is 100%, so the baseline is 3, but the description adds meaningful value by giving the ID syntax for targeting a child inside an instance ('I<instanceId>;<childId>'), which is not documented in the schema. It does not clarify the nodeId-vs-nodeIds selection rule beyond the plural phrasing.
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: 'Show or hide one or more nodes', with the scope (single vs multiple) made clear. It adds the non-obvious case of nodes inside instances, so an agent understands the operation. It does not reference any sibling tool, though none of the listed siblings overlaps with visibility toggling.
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 purpose: call it to set visibility on one or more nodes. The instance-child example provides context for a tricky case, but there is no explicit when-to-use/when-not guidance or comparison to alternatives such as set_selections or set_focus.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
swap_instanceB
Swap the main component of an instance, preserving overrides where possible
| Name | Required | Description | Default |
|---|---|---|---|
| instanceId | Yes | ID of the INSTANCE node | |
| componentId | Yes | ID of the new main COMPONENT |
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 meaningful behavioral trait — overrides are preserved "where possible" — which hints at partial data loss. However, it says nothing about reversibility, permission requirements, or what happens when overrides cannot be preserved.
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 key constraint (override preservation) is included without bloating the 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 an unannotated mutation tool with no output schema, the description is minimally adequate: it names the operation and one behavioral nuance but omits failure modes, reversibility, and what "where possible" concretely means. More disclosure is needed given the lack of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (instanceId, componentId) are documented in the schema. The description adds no syntax, format, or constraint details beyond what the schema already provides, so 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 ("Swap") and resource ("the main component of an instance"), making it clearly distinct from siblings like create_component_instance or set_instance_overrides. No explicit naming of alternatives, so not 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, prerequisites, or alternatives are given. The agent must infer from the name and schema that this is the tool for changing an instance's main component. "Preserving overrides where possible" is context about behavior, not usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_effect_styleB
Update the name, description or effects of a local effect style. Nodes using the style update automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New style name | |
| effects | No | New effects, replacing the old ones | |
| styleId | Yes | ID of the effect style (from get_styles or create_effect_style) | |
| description | No | New description |
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 propagation side effect ('Nodes using the style update automatically'), which the schema does not state. However it omits permission/auth requirements, reversibility, and confirmation that unmentioned fields are preserved versus 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 short sentences, both front-loaded and earn their place: the first states the operation and fields, the second states the propagation behavior. 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 four-parameter mutation tool with no output schema and no annotations, the description covers the essentials but is thin. It does not clarify partial-update semantics (all update fields are optional) or what the call returns, leaving gaps a careful caller would want.
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. The description echoes the three optional fields (name, description, effects) but adds no syntax, format, or default detail beyond the schema, which already documents the effects structure, colors, and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'Update the name, description or effects of a local effect style.' The 'local effect style' scope and the enumerated updatable fields make it distinguishable from create_effect_style, apply_effect_style, and delete_style. It stops short of explicitly naming those siblings, so it earns a 4 rather than 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 routing to alternatives. The agent is not told, for example, that existing styles should be discovered via get_styles or created via create_effect_style, nor when to prefer apply_effect_style over editing a style definition. Only the schema's styleId hint gestures at this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_text_styleA
Update properties of an existing local text style. Text nodes using the style update automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New style name | |
| styleId | Yes | ID of the text style (from get_styles or create_text_style) | |
| fontSize | No | Font size in pixels | |
| textCase | No | Text case | |
| fontStyle | No | Font style name as shown in Figma, e.g. "Regular", "Medium", "Semi Bold", "Bold". Takes precedence over fontWeight | |
| fontFamily | No | Font family (default: Inter, or the style's current family) | |
| fontWeight | No | Font weight (100-900), mapped to a font style name when fontStyle is not given | |
| lineHeight | No | Line height: number (pixels), "AUTO", or { unit: "PIXELS" | "PERCENT", value } | |
| description | No | Optional style description | |
| letterSpacing | No | Letter spacing: number (pixels) or { unit: "PIXELS" | "PERCENT", value } | |
| textDecoration | No | Text decoration | |
| paragraphSpacing | No | Paragraph spacing in pixels |
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 text nodes using the style update automatically, which is a meaningful side effect, but it does not state whether updates are partial, what happens to omitted properties, or whether the change is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action, and the second sentence earns its place by explaining the automatic propagation effect. There is 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?
The schema is rich and covers all 12 parameters, and no output schema means return values need not be explained. However, for an unannotated mutation tool, the description is sparse on behavioral details such as partial-update semantics and reversibility, leaving real 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 100%, so every parameter is already documented in the schema with types, enums, and constraints. The description adds no additional parameter meaning beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: updating an existing local text style. This clearly distinguishes it from create_text_style, apply_text_style, and delete_style, so an agent can identify the tool 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?
Usage is implied by 'existing local text style' and by the required styleId parameter, but the description never explicitly says when to use this tool versus apply_text_style or create_text_style. It gives no exclusions or prerequisite guidance beyond what the schema already suggests.
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.
79 tool updates
v1.1.1- First observed
add_component_property - First observed
add_interaction - First observed
apply_effect_style - First observed
apply_text_style - First observed
bind_variable - First observed
clone_node - First observed
combine_as_variants - First observed
create_component_from_node - First observed
create_component_instance - First observed
create_connections - First observed
create_effect_style - First observed
create_frame - First observed
create_node_from_svg - First observed
create_rectangle - First observed
create_section - First observed
create_text - First observed
create_text_style - First observed
create_variable - First observed
create_variable_collection - First observed
delete_multiple_nodes - First observed
delete_node - First observed
delete_style - First observed
delete_variable - First observed
delete_variable_collection - First observed
download_design_assets - First observed
export_node_as_image - First observed
get_annotations - First observed
get_design_context - First observed
get_document_info - First observed
get_figma_design_from_url - First observed
get_flow_starting_points - First observed
get_instance_overrides - First observed
get_local_components - First observed
get_local_variables - First observed
get_main_component - First observed
get_node_info - First observed
get_nodes_info - First observed
get_reactions - First observed
get_selection - First observed
get_styles - First observed
join_channel - First observed
move_node - First observed
read_my_design - First observed
remove_flow_starting_point - First observed
remove_interactions - First observed
rename_node - First observed
resize_node - First observed
scan_nodes_by_types - First observed
scan_text_nodes - First observed
set_annotation - First observed
set_axis_align - First observed
set_corner_radius - First observed
set_default_connector - First observed
set_effects - First observed
set_fill_color - First observed
set_flow_starting_point - First observed
set_focus - First observed
set_frame_properties - First observed
set_image_fill - First observed
set_instance_overrides - First observed
set_item_spacing - First observed
set_layout_mode - First observed
set_layout_sizing - First observed
set_multiple_annotations - First observed
set_multiple_text_contents - First observed
set_overlay_settings - First observed
set_padding - First observed
set_parent - First observed
set_reactions - First observed
set_scroll_behavior - First observed
set_selections - First observed
set_stroke_color - First observed
set_text_content - First observed
set_text_decoration - First observed
set_variable_value - First observed
set_visible - First observed
swap_instance - First observed
update_effect_style - First observed
update_text_style
TDQS
Scored across 79 tools
The set contains many overlapping read/selection tools, such as get_selection vs. read_my_design and get_node_info vs. get_nodes_info, making it hard to know which to call. Similar pairs exist for annotations (set_annotation vs. set_multiple_annotations) and selection (set_focus vs. set_selections), so boundaries are often unclear despite descriptive labels.
Most tools follow a clear snake_case verb_noun pattern: get_*, set_*, create_*, delete_*, apply_*, bind_*, etc. A few names like read_my_design and join_channel break the pattern, but overall naming is predictable and consistent.
79 tools is far beyond what is appropriate for a Figma plugin, exceeding the 50+ threshold for extreme mismatch. While the domain is broad, the surface is massively over-scoped and likely overwhelms tool selection.
Coverage is broad across node creation/editing, components, variables, text/effect styles, prototyping, and asset export. Minor gaps remain, such as creating or applying paint styles and editing/removing component properties, but core design workflows are covered.
Maintenance
Related MCP Connectors
Connect AI coding agents to Anima Playground, Figma, and your design system.
Serves your design system and coding standards to coding agents, so they stop guessing.
Discover, inspect and run 63,000+ agent tools from one balance. Pay per call, no subscriptions.
Verified, pay-per-use API tools for AI agents through one authenticated connection.
Related MCP Servers
- -licenseCqualityNot gradedmaintenanceEnables AI agents to interact with Figma in real-time through a WebSocket connection. Supports comprehensive design operations including text manipulation, layouts, components, variables, and export functionality.72207 npm-
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI agents like Claude to interact with Figma designs through 50+ tools for creating, styling, and manipulating design elements, components, and variables via a WebSocket relay and Figma plugin.-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants like Claude and Cursor to interact directly with Figma to create, modify, and analyze design elements in real-time. It provides a comprehensive suite of tools for document inspection, styling, component management, and automated layout via a bidirectional WebSocket connection.234 npmMIT
- AlicenseBqualityCmaintenanceEnables local AI agents to generate and edit Figma designs via the Plugin API through a WebSocket relay, with no rate limits and all communication remaining local.50636 npmMIT