Talk to Figma MCP
Used as the runtime environment for the MCP server, allowing efficient execution of the WebSocket server and TypeScript code that facilitates communication between Cursor AI and Figma.
Enables reading and modifying Figma designs programmatically, with capabilities for document inspection, annotation management, prototyping, element creation, text modification, auto-layout configuration, styling adjustments, component management, and design export.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Talk to Figma MCPreplace all placeholder text in the selected frames with our new copy"
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.
Cursor Talk to Figma MCP
This project implements a Model Context Protocol (MCP) integration between Cursor AI and Figma, allowing Cursor to communicate with Figma for reading designs and modifying them programmatically.
https://github.com/user-attachments/assets/129a14d2-ed73-470f-9a4c-2240b2a4885c
Project Structure
src/talk_to_figma_mcp/- TypeScript MCP server for Figma integrationsrc/cursor_mcp_plugin/- Figma plugin for communicating with Cursorsrc/socket.ts- WebSocket server that facilitates communication between the MCP server and Figma plugin
Related MCP server: Talk to Figma MCP
Get Started
Install Bun if you haven't already:
curl -fsSL https://bun.sh/install | bashRun setup, this will also install MCP in your Cursor's active project
bun setupStart the Websocket server
bun socketMCP server
bunx cursor-talk-to-figma-mcpNEW Install Figma plugin from Figma community page or install locally
Quick Video Tutorial
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 Cursor
Add the server to your Cursor MCP configuration in ~/.cursor/mcp.json:
{
"mcpServers": {
"TalkToFigma": {
"command": "bunx",
"args": ["cursor-talk-to-figma-mcp@latest"]
}
}
}WebSocket Server
Start the WebSocket server:
bun socketFigma Plugin
In Figma, go to Plugins > Development > New Plugin
Choose "Link existing plugin"
Select the
src/cursor_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"Uncomment the hostname
0.0.0.0insrc/socket.ts
// uncomment this to allow connections in windows wsl
hostname: "0.0.0.0",Start the websocket
bun socketUsage
Start the WebSocket server
Install the MCP server in Cursor
Open Figma and run the Cursor MCP Plugin
Connect the plugin to the WebSocket server by joining a channel using
join_channelUse Cursor to communicate with Figma using the MCP tools
MCP Tools
The MCP server provides the following tools for interacting with Figma:
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 IDs
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 mapping
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_text- Create a new text node with customizable font properties
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 for auto-layout frames (FIXED, HUG, FILL)set_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 control
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 offset
Components & Styles
get_styles- Get information about local stylesget_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 instances
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_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/cursor_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.
License
MIT
Available Tools
38 toolsclone_nodeC
Clone an existing node in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the node to clone | |
| x | No | New X position for the clone | |
| y | No | New Y position for the 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 mutation operation but doesn't specify whether this requires edit permissions, what happens to the original node, or if there are rate limits. It lacks details about the cloning behavior (e.g., does it copy styles, children, or 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?
The description is a single, efficient sentence that directly states the tool's purpose without any wasted words. It's appropriately sized and front-loaded, making it easy to parse 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 no annotations and no output schema, the description is inadequate. It doesn't explain what the clone operation returns, what happens on failure, or important behavioral aspects like whether the clone inherits all properties. Given the complexity of node operations in Figma, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters (nodeId, x, y) adequately. The description doesn't add any additional meaning beyond what's in the schema, such as explaining coordinate systems or node ID formats, but it doesn't need to given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Clone') and target resource ('an existing node in Figma'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'create_frame' or 'create_rectangle' that also create new nodes, leaving some ambiguity about when cloning is preferable to creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 like 'create_frame' or 'create_rectangle', nor does it mention prerequisites such as needing an existing node ID. There's no context about appropriate use cases or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_component_instanceC
Create an instance of a component in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| componentKey | Yes | Key of the component to instantiate | |
| x | Yes | X position | |
| y | Yes | Y position |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Create' implies a write/mutation operation, the description doesn't address important behavioral aspects: whether this requires specific permissions, what happens if the componentKey doesn't exist, whether the instance inherits properties from the component, or what the tool returns upon success/failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that communicates the essential purpose without any wasted words. It's appropriately sized for a tool with three straightforward parameters and gets directly to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 insufficient. It doesn't explain what constitutes success/failure, what the tool returns, error conditions, or how this operation fits within the broader Figma context. The agent would need to guess about important behavioral aspects.
Complex tools with many parameters or behaviors need more documentation. Simple 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 parameters are documented in the schema. The description adds no additional parameter semantics beyond what's already in the schema (componentKey, x, y positions). This meets the baseline expectation when schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain 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 an instance') and resource ('component in Figma'), making the purpose immediately understandable. It doesn't explicitly differentiate from sibling tools like 'clone_node' or 'create_frame', which would require more specific context about what makes component instances unique compared to other creation 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?
The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'create_frame', 'create_rectangle', and 'clone_node' available, there's no indication of when component instantiation is preferred over other creation methods or what prerequisites might exist for using this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_connectionsC
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?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It mentions 'default connector style' but doesn't explain what this means, whether connections are bidirectional, if they can be edited/deleted later, or what happens on failure. The description doesn't contradict annotations (none exist), but provides inadequate transparency for a creation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, with every element contributing to understanding the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what 'connections' represent in this context, what happens after creation, error conditions, or return values. The mention of 'default connector style' is vague without elaboration, leaving significant gaps in understanding the tool's 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?
Schema description coverage is 100%, so the schema fully documents the 'connections' parameter and its nested properties. The description adds no additional parameter information beyond what's in the schema, maintaining the baseline score of 3 for adequate coverage through structured data 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?
The description clearly states the action ('create connections') and the resource ('between nodes'), specifying the use of 'default connector style'. It distinguishes from siblings like 'set_default_connector' by focusing on creation rather than configuration, but doesn't explicitly differentiate from all siblings like 'clone_node' or 'move_node'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description mentions 'default connector style' but doesn't explain when to use this versus other styling methods or sibling tools like 'set_default_connector'. There's no mention of prerequisites, constraints, or typical use cases.
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 | |
| width | Yes | Width of the frame | |
| height | Yes | Height of the frame | |
| name | No | Optional name for the frame | |
| parentId | No | Optional parent node ID to append the frame to | |
| fillColor | No | Fill color in RGBA format | |
| strokeColor | No | Stroke color in RGBA format | |
| strokeWeight | No | Stroke weight | |
| 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 | |
| paddingRight | No | Right padding for auto-layout frame | |
| paddingBottom | No | Bottom padding for auto-layout frame | |
| paddingLeft | No | Left padding 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. | |
| counterAxisAlignItems | No | Counter axis alignment for auto-layout frame | |
| layoutSizingHorizontal | No | Horizontal sizing mode for auto-layout frame | |
| layoutSizingVertical | No | Vertical sizing mode 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. 'Create a new frame' implies a write/mutation operation, but the description doesn't mention permissions needed, whether this modifies existing documents, rate limits, or what happens on success/failure. For a complex creation tool with 20 parameters, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with zero wasted words. It's appropriately sized for a tool where the schema handles most of the documentation burden, and it front-loads the essential 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 complex creation tool with 20 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what a frame is in Figma context, what happens after creation, or how this tool fits into design workflows. The agent would struggle to use this effectively despite the detailed 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 the schema already documents all 20 parameters thoroughly. The description adds no parameter information beyond what's in the schema, which meets the baseline expectation when schema coverage is high. However, it doesn't provide any higher-level guidance about parameter relationships or typical usage patterns.
Input schemas describe structure but not intent. Descriptions should explain 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 resource ('a new frame in Figma'), making the purpose immediately understandable. However, it doesn't differentiate this tool from other creation tools like create_rectangle or create_text, which would require mentioning what distinguishes a frame from other elements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 like create_rectangle or create_component_instance. There's no mention of prerequisites, context, or typical use cases for frames in Figma workflows.
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 | |
| width | Yes | Width of the rectangle | |
| height | Yes | Height of the rectangle | |
| name | No | Optional name for 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 provided, the description carries the full burden of behavioral disclosure. It states 'Create a new rectangle' which implies a write operation, but doesn't cover permissions, whether it's destructive to existing elements, rate limits, or what happens on success/failure. This is inadequate 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?
The description is a single, clear sentence with no wasted words, making it highly concise and front-loaded. It efficiently communicates the 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?
Given this is a mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral traits, error handling, or return values, which are crucial for an agent to use it correctly in a design context with 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 the schema fully documents all parameters (x, y, width, height, name, parentId). The description adds no additional meaning beyond what's in the schema, such as units for coordinates or default behaviors for optional fields, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create') and resource ('new rectangle in Figma'), making the purpose evident. However, it doesn't differentiate from sibling tools like 'create_frame' or 'create_component_instance', which also create visual elements in Figma, so it's not fully specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'create_frame' or 'create_component_instance', nor does it mention prerequisites such as needing an active Figma document or selection context. It's a basic statement with no usage context.
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 | |
| text | Yes | Text content | |
| fontSize | No | Font size (default: 14) | |
| fontWeight | No | Font weight (e.g., 400 for Regular, 700 for Bold) | |
| fontColor | No | Font color in RGBA format | |
| name | No | Semantic layer name for the text node | |
| parentId | No | Optional parent node ID to append the text to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. 'Create' implies a write operation, but the description doesn't mention permission requirements, whether the creation is reversible, what happens if parentId is invalid, or what the tool returns. For a mutation tool with zero annotation coverage, this leaves significant behavioral questions unanswered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that states exactly what the tool does without any wasted words. It's appropriately sized for a straightforward creation tool and gets directly to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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/mutation tool with no annotations and no output schema, the description is insufficiently complete. It doesn't address what happens after creation (does it return the new node ID?), error conditions, or integration with the broader Figma context. The agent would need to guess about the tool's behavior and 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?
The description mentions creating a 'text element' which implies parameters like text content and styling, but doesn't add specific meaning beyond what the 100% schema coverage already provides. The schema thoroughly documents all 8 parameters including their purposes, formats, and defaults, so the description's minimal contribution meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create') and resource ('new text element in Figma'), making the purpose immediately understandable. However, it doesn't differentiate this tool from other creation tools like create_frame or create_rectangle, which would require mentioning what makes text elements 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?
The description provides no guidance on when to use this tool versus alternatives. There's no mention of prerequisites (like needing an active Figma document), comparison to similar tools (create_frame, create_rectangle), or typical use cases for text elements versus other element types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_multiple_nodesC
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 tool performs deletion (a destructive operation) but doesn't mention critical details like whether deletions are permanent, require specific permissions, have rate limits, or what happens on partial failures. This leaves significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any fluff or redundancy. It is front-loaded and appropriately sized for its function, making it easy to parse 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?
Given the tool's complexity as a destructive batch operation with no annotations and no output schema, the description is insufficient. It lacks details on behavior, error handling, permissions, and output expectations, which are crucial for safe and effective use in a Figma 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?
The schema description coverage is 100%, with the parameter 'nodeIds' clearly documented in the schema as an array of node IDs to delete. The description adds no additional meaning beyond what the schema provides, such as format examples or constraints, so it meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete multiple nodes') and target resource ('from Figma'), which is specific and unambiguous. However, it doesn't distinguish this tool from its sibling 'delete_node', which appears to handle single deletions, so it misses full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'delete_node' for single deletions or other mutation tools. It lacks context about prerequisites, permissions, or scenarios where batch deletion is preferred, offering minimal usage direction.
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 provided, the description carries full burden for behavioral disclosure. 'Delete' implies a destructive mutation, but it doesn't specify whether this is permanent, reversible, requires specific permissions, or has side effects on connected nodes. This is inadequate for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core action and resource, making it immediately scannable and perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with no annotations and no output schema, the description is insufficient. It should address behavioral aspects like permanence, permissions, or error conditions, but provides only basic purpose without operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with the single parameter 'nodeId' well-documented in the schema. The description adds no additional parameter context beyond what the schema provides, so it meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Delete a node from Figma' clearly states the action (delete) and resource (node in Figma), making the purpose immediately understandable. However, it doesn't differentiate from sibling 'delete_multiple_nodes' which handles multiple deletions, so it's not a perfect 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 guidance is provided about when to use this tool versus alternatives like 'delete_multiple_nodes' for bulk operations or other deletion-related tools. The description offers no context about prerequisites, permissions needed, or typical use cases.
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 |
|---|---|---|---|
| nodeId | Yes | The ID of the node to export | |
| format | No | Export format | |
| scale | No | Export scale |
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 mentions 'Export' but doesn't disclose behavioral traits such as whether this requires write permissions, if it's a read-only operation, what happens to the exported file (e.g., saved location, format limitations), or potential side effects like rate limits. This leaves significant gaps for an agent to understand the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('Export a node as an image') and specifies the source ('from Figma'). There's no wasted verbiage, 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?
Given the complexity of an export operation (likely involving file generation or data output), no annotations, and no output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., image data, file path, success status), which is critical for an agent to use it effectively in a workflow with other 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?
The input schema has 100% description coverage, with clear documentation for 'nodeId', 'format' (including enum values), and 'scale'. The description adds no additional parameter semantics beyond what's in the schema, so it meets the baseline of 3 for adequate coverage without extra 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 clearly states the verb ('Export') and resource ('a node as an image from Figma'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from potential sibling tools like 'get_node_info' or 'scan_nodes_by_types', which might also involve node operations but for different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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. With siblings like 'get_node_info' (for retrieving node details) or 'create_rectangle' (for creating nodes), there's no indication of context, prerequisites, or exclusions for exporting images.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_annotationsC
Get all annotations in the current document or specific node
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No | Optional 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?
With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Get all annotations' implies a read operation, it doesn't specify what format the annotations are returned in, whether there are pagination limits, authentication requirements, or error conditions. The description is minimal and lacks important operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that gets straight to the point with no wasted words. It's appropriately sized for a simple retrieval tool, though it could potentially benefit from slightly more context about what 'annotations' means in this specific system.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is insufficiently complete. It doesn't explain what 'annotations' are in this context, what format they're returned in, or any behavioral characteristics. Given the complexity of working with document annotations and the lack of structured metadata, the description should provide more operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the input schema already documents both parameters thoroughly. The description mentions 'specific node' which aligns with the nodeId parameter, but adds no additional semantic context beyond what the schema provides. The baseline score of 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?
The description clearly states the action ('Get all annotations') and target resource ('in the current document or specific node'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'set_annotation' or 'set_multiple_annotations' beyond the obvious read vs write distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to prefer this over other annotation-related tools, nor does it provide context about prerequisites or typical use cases. The agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_infoB
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 provided, so the description carries the full burden. It states the tool retrieves information, implying it's read-only, but doesn't disclose behavioral traits like whether it requires authentication, rate limits, or what 'detailed information' includes (e.g., metadata, structure). This leaves gaps for a tool in a Figma context where operations might have constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core action and resource, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, no annotations, and no output schema, the description is minimal but covers the basic purpose. However, for a tool in a complex environment like Figma, it lacks details on what 'detailed information' entails (e.g., document properties, version info) and how it differs from sibling tools, making it 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?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate here. A baseline of 4 is applied as it compensates adequately for the lack of parameters by focusing on the tool's purpose.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Get') and resource ('detailed information about the current Figma document'), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_node_info' or 'get_nodes_info', which also retrieve information but about specific nodes rather than the entire document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 context (e.g., use this for overall document metadata vs. node-specific details) or prerequisites, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_instance_overridesB
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 full burden. It describes the tool's function and potential application ('applied to other instances'), but lacks critical behavioral details: whether this is a read-only operation, what permissions are needed, the format of returned overrides, or any rate limits. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, with two sentences that directly state the tool's purpose and utility. Every sentence adds value: the first defines the action, and the second explains the use case. There's no wasted text, though it could be slightly more structured with bullet points or examples for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 moderate complexity (1 parameter, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose and application but lacks details on return values, error handling, or integration with siblings like 'set_instance_overrides.' Without annotations or output schema, the description should do more to compensate, but it meets a bare minimum for understanding.
Complex tools with many parameters or behaviors need more documentation. Simple 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 the single parameter 'nodeId' well-documented in the schema. The description doesn't add any parameter-specific information beyond what's in the schema, such as format examples or constraints. With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't need to given the schema's completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get all override properties from a selected component instance.' It specifies the verb ('Get') and resource ('override properties'), and distinguishes it from siblings like 'get_node_info' or 'get_styles' by focusing on component instance overrides. However, it doesn't explicitly differentiate from 'set_instance_overrides' beyond the get/set distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating 'These overrides can be applied to other instances,' suggesting a workflow context. It doesn't provide explicit when-to-use guidance, alternatives, or exclusions compared to siblings like 'get_node_info' or 'get_styles.' The input schema hints at default behavior (using currently selected instance if no nodeId provided), but the description itself lacks clear usage directives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_local_componentsB
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?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'Get all local components', implying a read-only operation, but doesn't clarify aspects like whether it returns a list or structured data, if there are rate limits, or if it requires authentication. For a tool with zero annotation coverage, this is a significant gap in behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that front-loads the essential information: 'Get all local components from the Figma document'. It is appropriately sized with zero waste, making it highly efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 0 parameters, no annotations, and no output schema, the description is minimal but adequate for a simple retrieval operation. However, it lacks details on return format (e.g., list structure, data types) and behavioral nuances, which could be important for an AI agent. It meets the minimum viable threshold but has clear gaps in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and the input schema has 100% description coverage (though empty). The description doesn't need to add parameter details, so it naturally compensates by focusing on the tool's purpose. A baseline of 4 is appropriate as there are no parameters to document, and the description efficiently conveys the action.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'all local components from the Figma document', which is specific and unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'get_document_info' or 'get_node_info', which might also retrieve document-related data, so it falls short of a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 prerequisites, context, or exclusions, such as whether it requires a specific document state or differs from other 'get' tools like 'get_document_info'. This leaves the agent with minimal usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_infoC
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 burden of behavioral disclosure. While 'Get detailed information' implies a read-only operation, it doesn't specify what 'detailed information' includes, whether authentication is required, rate limits, error conditions, or response format. This leaves significant behavioral gaps for a tool with no 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?
The description is a single, efficient sentence that immediately conveys the core purpose without any wasted words. It's appropriately sized for a simple retrieval tool and front-loads the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is insufficiently complete. It doesn't explain what 'detailed information' includes, the response format, error handling, or how this differs from similar sibling tools. Given the context of multiple related Figma tools, more guidance is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the input schema already fully documents the single 'nodeId' parameter. The description doesn't add any additional semantic context about what constitutes a valid node ID, where to find node IDs, or examples of node types. 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?
The description clearly states the action ('Get detailed information') and resource ('about a specific node in Figma'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its sibling 'get_nodes_info' (plural) which appears to serve a similar purpose, preventing a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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. With sibling tools like 'get_nodes_info' (plural) and 'get_document_info' available, there's no indication whether this is for single nodes, what context it applies in, or any prerequisites for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nodes_infoB
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 full burden but only states what the tool does without behavioral details. It doesn't disclose whether this is a read-only operation, what format the information returns, potential rate limits, authentication requirements, or error conditions for invalid node IDs.
Agents need to know what a tool does to the 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, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded with the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 annotations and no output schema, the description is insufficient. It doesn't explain what 'detailed information' includes, the return format, or behavioral aspects like whether it's a safe read operation. Given the complexity of Figma nodes and the lack of structured metadata, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the single parameter 'nodeIds' clearly documented as 'Array of node IDs to get information about'. The description doesn't add any additional semantic context beyond what the schema provides, such as format examples or constraints on the number 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 clearly states the verb ('Get') and resource ('detailed information about multiple nodes in Figma'), making the purpose immediately understandable. It distinguishes from the sibling 'get_node_info' by specifying 'multiple nodes' rather than a single node, though it doesn't explicitly name this distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when detailed information about multiple nodes is needed, but doesn't provide explicit guidance on when to use this versus alternatives like 'get_node_info' (for single nodes) or 'get_document_info' (for broader document context). No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 provided, the description carries the full burden of behavioral disclosure. It adds valuable context by specifying that the output must be processed immediately for use with another tool ('create_connections'), which is a critical behavioral trait not covered by any structured fields. However, it doesn't mention potential limitations like rate limits or authentication needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded, consisting of just two sentences that efficiently convey the tool's purpose and critical usage instructions. Every sentence earns its place by providing essential information without any waste 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?
Given the complexity (a read operation with no annotations and no output schema), the description is reasonably complete. It explains the purpose and critical post-processing step, but it doesn't detail the output format or potential errors, which could be helpful for an AI agent. However, the strong usage guidelines partially compensate for this gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the parameter 'nodeIds' clearly documented as an array of node IDs. The description doesn't add any additional meaning beyond this, such as explaining what node IDs are or how to obtain them, so it meets the baseline for high schema coverage without extra 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 clearly states the verb ('Get') and resource ('Figma Prototyping Reactions from multiple nodes'), making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_annotations' or 'get_node_info', which also retrieve information but for different data types, so it misses full sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool by stating that the output MUST be processed using 'reaction_to_connector_strategy' prompt to generate parameters for the 'create_connections' tool. This clearly defines the intended workflow and alternative tools involved, offering strong contextual direction.
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?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool 'Get information' but does not specify what type of information is returned, whether it requires an active selection, or any error conditions. This leaves significant gaps in understanding the tool's behavior beyond a basic read 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, efficient sentence that directly states the tool's purpose without any wasted words. It is front-loaded and appropriately sized for a simple tool with no parameters, 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?
Given the lack of annotations and output schema, the description is incomplete for a tool that retrieves information. It does not explain what information is returned, the format, or any constraints (e.g., requires an active selection), leaving the agent with insufficient context to use the tool effectively beyond its basic purpose.
Complex tools with many parameters or behaviors need more documentation. 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 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately does not mention parameters, aligning with the schema, and thus meets the baseline for this dimension without requiring additional compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'information about the current selection in Figma', making the purpose specific and understandable. However, it does not explicitly distinguish this tool from siblings like 'get_node_info' or 'get_nodes_info', which might also retrieve selection-related data, leaving some ambiguity in 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 provides no guidance on when to use this tool versus alternatives. With siblings like 'get_node_info' and 'get_nodes_info' that might overlap in functionality, there is no indication of context, prerequisites, or exclusions, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stylesB
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?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states a read operation ('Get') but lacks details on permissions, rate limits, response format, or whether it returns all styles at once or paginated. This is inadequate for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. It earns its place by clearly stating what the tool does, 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?
Given the tool's simplicity (0 parameters, no output schema), the description is minimal but incomplete. It lacks behavioral context (e.g., response format, error handling) and usage guidelines, which are crucial for an agent to invoke it correctly. With no annotations or output schema, more detail is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and schema description coverage is 100%, so there are no parameters to document. The description doesn't need to compensate for any gaps, making it sufficient in this dimension. A baseline of 4 is appropriate as no parameter information is required.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Get') and resource ('all styles from the current Figma document'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_annotations' or 'get_document_info', which also retrieve document metadata but focus on different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 prerequisites (e.g., requires an open document), exclusions, or compare it to siblings like 'get_local_components' or 'get_document_info', leaving the agent to infer usage context.
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?
With no annotations, the description carries full burden but only states the basic action. It doesn't disclose behavioral traits such as required permissions, whether joining is reversible, rate limits, or what happens on success/failure. This is inadequate 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?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, earning its place with zero 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?
Given this is a mutation tool with no annotations, no output schema, and incomplete behavioral disclosure, the description is insufficient. It lacks details on outcomes, error handling, or integration with sibling tools, making it incomplete for effective agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the 'channel' parameter. The description adds no additional meaning beyond implying the channel is for Figma communication, which is minimal value. Baseline 3 is appropriate as 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 clearly states the action ('join') and resource ('a specific channel'), specifying it's for communication with Figma. However, it doesn't differentiate from sibling tools like 'create_connections' or 'set_default_connector' that might also involve channel/connection operations, keeping it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives is provided. The description implies usage for channel-based communication but doesn't specify prerequisites, exclusions, or compare to siblings like 'create_connections', leaving the agent with minimal context for selection.
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 |
|---|---|---|---|
| nodeId | Yes | The ID of the node to move | |
| x | Yes | New X position | |
| y | Yes | New Y position |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic action without behavioral details. It doesn't disclose whether this requires edit permissions, if it's destructive (likely yes, but unstated), what happens on failure, or any rate limits. The description is minimal and lacks crucial context 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, efficient sentence with zero waste. It's front-loaded with the core action and resource, making it immediately understandable 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 mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what 'move' entails behaviorally (e.g., if it affects child nodes, coordinate systems, or returns success/failure), leaving significant gaps for an AI agent to understand tool 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?
Schema description coverage is 100%, so the schema fully documents parameters (nodeId, x, y). The description adds no additional meaning beyond implying positional movement, which is already clear from parameter names. Baseline 3 is appropriate as the schema handles parameter documentation 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 clearly states the action ('move') and resource ('a node') with the specific context 'in Figma'. It distinguishes from siblings like 'resize_node' by focusing on positional changes rather than dimensional ones, though it doesn't explicitly contrast with all siblings like 'clone_node' or '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?
No guidance is provided on when to use this tool versus alternatives. The description doesn't mention prerequisites (e.g., needing node permissions), exclusions (e.g., cannot move locked nodes), or when to choose other tools like 'resize_node' for size changes or 'clone_node' for duplication with movement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_my_designB
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?
No annotations are provided, so the description carries full burden. It states it 'gets' information, implying a read-only operation, but doesn't disclose behavioral traits like permissions needed, rate limits, or what 'detailed information' entails. This is inadequate for a tool with no 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?
The description is a single, efficient sentence that front-loads the purpose without wasted words. Every part contributes to understanding what the tool does, making it appropriately sized for its function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is incomplete. It doesn't explain what 'detailed information' includes, the return format, or any constraints, leaving significant gaps for an agent to use the tool effectively in a context with many 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?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, earning a baseline score of 4 for not adding unnecessary information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'detailed information about the current selection in Figma', specifying it includes 'all node details'. It distinguishes from siblings like 'get_selection' by emphasizing detailed node information rather than just selection IDs, though not explicitly named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_selection' or 'get_node_info'. It implies usage when detailed node details are needed but lacks explicit context, prerequisites, or exclusions.
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 |
|---|---|---|---|
| nodeId | Yes | The ID of the node to resize | |
| width | Yes | New width | |
| height | Yes | New height |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. 'Resize' implies a mutation operation, but the description doesn't state whether this requires edit permissions, whether it's destructive to existing content, what happens with constraints or auto-layout, or what the response looks like. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the 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, efficient sentence with zero waste. It's appropriately sized for a simple tool and front-loads the core purpose immediately. Every word earns its place without redundancy or 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?
Given this is a mutation tool with no annotations, no output schema, and 3 required parameters, the description is incomplete. It doesn't address behavioral aspects like permissions, constraints, or response format. The 100% schema coverage helps with parameters, but overall context for safe and effective use is lacking.
Complex tools with many parameters or behaviors need more documentation. Simple 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 all parameters (nodeId, width, height) well-documented in the schema. The description adds no additional parameter semantics beyond what's already in the structured schema. Baseline 3 is appropriate when the schema does the heavy lifting for 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 'Resize a node in Figma' clearly states the action (resize) and target resource (node in Figma). It's specific but doesn't distinguish from sibling tools like 'move_node' or 'set_layout_sizing' which might also affect node dimensions. The purpose is unambiguous but lacks 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?
The description provides no guidance on when to use this tool versus alternatives. There's no mention of prerequisites (e.g., needing node permissions), when not to use it (e.g., for text nodes vs. shapes), or comparison to similar tools like 'set_layout_sizing' or 'move_node' that might affect size indirectly. Usage is implied but not articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_nodes_by_typesB
Scan for child nodes with specific types in the selected Figma node
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ID of the node to scan | |
| types | Yes | Array of node types to find in the child nodes (e.g. ['COMPONENT', 'FRAME']) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral disclosure. It states what the tool does but doesn't describe what 'scan' entails operationally (e.g., depth of search, return format, pagination, error conditions). For a tool with no annotation coverage, this leaves significant gaps in understanding how it behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose. Every word earns its place with no redundancy or unnecessary elaboration, making it highly concise while still being informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and a tool that performs a filtered search operation, the description is insufficiently complete. It doesn't explain what the tool returns (e.g., list of node IDs, full node info), search depth, or error handling. For a 2-parameter tool with no structured output documentation, this leaves too many operational questions unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents both parameters. The description adds no additional parameter semantics beyond what's in the schema (e.g., no examples beyond the schema's 'e.g. ['COMPONENT', 'FRAME']', no constraints on valid types). Baseline 3 is appropriate when the schema does all the parameter documentation work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Scan for child nodes') and resource ('selected Figma node'), with the specific filtering criteria ('with specific types'). It distinguishes from siblings like 'scan_text_nodes' by mentioning general node types rather than just text nodes. However, it doesn't explicitly contrast with other scanning/filtering tools beyond the sibling list 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 description implies usage when you need to find child nodes of certain types within a parent node, but provides no explicit guidance on when to use this versus alternatives like 'get_nodes_info' or 'scan_text_nodes'. No exclusions or prerequisites are mentioned, leaving usage context somewhat 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?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('scan') but doesn't explain what 'scan' entails—whether it returns text content, metadata, positions, or other details. It also omits information about permissions, rate limits, or side effects, leaving the agent uncertain about the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is appropriately sized and front-loaded, making it easy for an agent to parse 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?
Given the lack of annotations and output schema, the description is incomplete. It doesn't specify what the scan returns (e.g., text content, node IDs, positions), which is critical for a tool with no structured output documentation. This gap makes it inadequate for an agent to understand the full context of use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with 'nodeId' clearly documented. The description adds no additional parameter semantics beyond implying that 'selected Figma node' corresponds to 'nodeId', which is already covered by the schema. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('scan') and target ('all text nodes in the selected Figma node'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'scan_nodes_by_types' or 'get_node_info', which could have overlapping functionality for text-related 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?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a valid node ID), exclusions, or comparisons to similar tools like 'scan_nodes_by_types' or 'get_node_info' that might retrieve text information differently.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_annotationC
Create or update an annotation
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the node to annotate | |
| annotationId | No | The ID of the annotation to update (if updating existing annotation) | |
| labelMarkdown | Yes | The annotation text in markdown format | |
| categoryId | No | The ID of the annotation category | |
| properties | No | Additional properties for the annotation |
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. While 'create or update' implies mutation, it doesn't specify whether this requires specific permissions, if updates are idempotent, what happens on conflicts, or what the response looks like. For a mutation tool with zero annotation coverage, this leaves critical behavioral traits undocumented.
Agents need to know what a tool does to the 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, efficient sentence with zero wasted words. It's front-loaded with the core action ('create or update') and resource ('an annotation'), making it immediately scannable. 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 this is a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't address behavioral aspects like permissions, side effects, or response format. While the schema covers parameters well, the overall context for safe and effective use is lacking, especially compared to sibling tools with more descriptive names (e.g., 'get_annotations' clearly indicates read-only).
Complex tools with many parameters or behaviors need more documentation. Simple 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 5 parameters thoroughly. The description adds no additional meaning beyond what's in the schema (e.g., it doesn't explain the relationship between nodeId and annotationId, or what 'properties' might contain). The baseline of 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?
The description clearly states the verb ('create or update') and resource ('an annotation'), making the purpose immediately understandable. It distinguishes this from sibling tools like 'get_annotations' (read-only) and 'set_multiple_annotations' (batch operation). However, it doesn't specify what an annotation is in this context (e.g., a note attached to a design node), leaving some ambiguity about the resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when to choose 'set_annotation' over 'set_multiple_annotations' for batch operations, or clarify if it's for single annotations only. There's also no information about prerequisites (e.g., needing an existing node) or error conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_axis_alignC
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 | |
| 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. | |
| counterAxisAlignItems | No | Counter axis alignment (MIN/MAX = top/bottom in horizontal, left/right in vertical) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool modifies an auto-layout frame, implying a mutation, but does not disclose any behavioral traits such as permissions required, whether changes are reversible, error conditions (e.g., invalid nodeId), or side effects. The description is minimal and lacks critical context for safe invocation.
Agents need to know what a tool does to the 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, clear sentence that directly states the tool's purpose without unnecessary words. It is front-loaded with the core action and target, making it easy to parse. Every part of the description earns its place by specifying the exact alignment properties and context (auto-layout frame in Figma).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (a mutation tool with no annotations and no output schema), the description is incomplete. It lacks information on behavioral aspects like error handling, permissions, or what the tool returns. While the schema covers parameters well, the description does not compensate for the absence of annotations or output schema, leaving gaps in understanding the tool's full context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with detailed descriptions for each parameter, including enum values and their meanings (e.g., MIN/MAX mappings). The description does not add any additional parameter semantics beyond what the schema provides. According to the rules, with high schema coverage (>80%), the baseline score is 3, as the schema adequately documents parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Set') and target ('primary and counter axis alignment for an auto-layout frame in Figma'), making the purpose evident. It specifies the resource type (auto-layout frame) and the exact properties being modified. However, it does not explicitly differentiate from sibling tools like 'set_layout_mode' or 'set_item_spacing', which also configure auto-layout frames.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., the node must be an auto-layout frame), exclusions, or comparisons to sibling tools like 'set_layout_mode' or 'set_item_spacing'. Usage is implied only by the tool's name and description, with no explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_corner_radiusC
Set the corner radius of a node 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?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool modifies a node but doesn't cover critical aspects like whether this requires edit permissions, if changes are reversible, potential side effects, or error conditions. This is inadequate 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, efficient sentence that directly states the tool's function without any fluff. It's appropriately sized and front-loaded, making it easy to parse 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 no annotations and no output schema, the description is insufficient. It lacks behavioral context, usage prerequisites, and details on what happens upon execution. Given the complexity of modifying design elements, more completeness is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented in the schema. The description adds no additional semantic context beyond implying the tool applies to Figma nodes, which is already clear from the schema. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Set') and resource ('corner radius of a node in Figma'), making the purpose unambiguous. However, it doesn't differentiate from sibling tools like 'set_fill_color' or 'set_stroke_color' beyond the specific property being modified, which keeps it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 prerequisites (e.g., needing a valid node ID), exclusions, or related tools for similar modifications, leaving usage context entirely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_default_connectorC
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?
With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a mutation ('Set') but does not specify permissions, side effects, or response behavior. This is inadequate for a tool that likely changes system state without any safety or operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste, clearly front-loading the core action. It is appropriately sized for a simple tool, 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?
Given no annotations and no output schema, the description is incomplete. It fails to address key aspects like what 'default connector' means, potential impacts, or return values, which are crucial for a mutation tool in a design context with many siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents the 'connectorId' parameter. The description adds no additional meaning beyond what the schema provides, such as format examples or constraints, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Set' and the resource 'a copied connector node as the default connector', making the purpose specific and understandable. However, it does not explicitly differentiate from sibling tools like 'create_connections' or 'move_node', which might involve connectors, so it misses full sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It lacks context on prerequisites (e.g., needing a copied connector node), exclusions, or comparisons to sibling tools like 'create_connections', leaving usage unclear.
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 |
|---|---|---|---|
| nodeId | Yes | The ID of the node to modify | |
| r | Yes | Red component (0-1) | |
| g | Yes | Green component (0-1) | |
| b | Yes | Blue component (0-1) | |
| a | No | Alpha component (0-1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a modification operation ('Set'), implying mutation, but doesn't disclose permission requirements, whether changes are reversible, error conditions, or what happens if the node doesn't support fill colors. For a mutation tool with zero annotation coverage, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that communicates the core purpose without unnecessary words. It could be slightly improved by front-loading the most critical information more explicitly, but it's appropriately sized for its 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?
For a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what happens after setting the color, what the return value might be, error conditions, or constraints beyond node types. Given the complexity of modifying Figma nodes, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 5 parameters. The description doesn't add any parameter-specific information beyond what's in the schema, but with complete schema coverage, 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 clearly states the action ('Set the fill color') and target ('a node in Figma'), and specifies the node types ('TextNode or FrameNode'). It distinguishes from siblings like set_stroke_color by focusing on fill color, but doesn't explicitly contrast with other color-related 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 provided on when to use this tool versus alternatives like set_stroke_color or other styling tools. The description mentions node types but doesn't explain when this operation is appropriate or what prerequisites might exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_instance_overridesB
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 |
|---|---|---|---|
| sourceInstanceId | Yes | ID of the source component instance | |
| targetNodeIds | Yes | Array of target instance IDs. Currently selected instances 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 full burden of behavioral disclosure. It describes the action ('Apply', 'swapped') which implies mutation, but doesn't specify whether this is destructive (e.g., overwrites existing overrides), requires specific permissions, has side effects on other instances, or what happens on failure. For a mutation tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('Apply previously copied overrides to selected component instances') and adds necessary detail in a second clause. Every word contributes to understanding the tool's function without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a mutation operation with 2 required parameters), lack of annotations, and no output schema, the description is minimally adequate. It covers the basic purpose and parameters but lacks details on behavioral traits (e.g., side effects, error handling) and output expectations. For a tool that modifies component instances, more context on safety and results would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple 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 both parameters ('sourceInstanceId' and 'targetNodeIds') fully documented in the schema. The description adds marginal value by implying that 'targetNodeIds' corresponds to 'selected component instances' and that overrides are 'previously copied', but doesn't provide additional syntax, format, or constraints beyond what the schema already states. Baseline 3 is appropriate when 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 clearly states the action ('Apply previously copied overrides') and target ('selected component instances'), specifying that target instances will be swapped to the source component with copied override properties applied. It distinguishes from sibling tools like 'get_instance_overrides' (which retrieves overrides) and 'clone_node' (which creates copies), though it doesn't 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?
The description implies usage context by mentioning 'previously copied overrides' and 'selected component instances', suggesting it should be used after copying overrides and when instances are selected. However, it doesn't explicitly state when to use this tool versus alternatives like 'clone_node' or 'set_layout_mode', nor does it provide exclusion criteria or prerequisites beyond the implied state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_item_spacingC
Set distance between children in an auto-layout frame
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the frame to modify | |
| itemSpacing | Yes | Distance between children. Note: This value will be ignored if primaryAxisAlignItems is set to SPACE_BETWEEN. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool modifies a frame but doesn't specify whether this is a destructive mutation, permission requirements, error conditions, or what happens when applied incorrectly (e.g., to non-auto-layout frames). The description is minimal and lacks critical behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose with zero wasted words. It's appropriately sized and front-loaded, making every word earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't address what the tool returns, error handling, side effects, or how it interacts with other layout properties. Given the complexity of modifying auto-layout frames, more context is needed for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing complete parameter documentation. The description doesn't add any meaningful parameter semantics beyond what's in the schema (e.g., it doesn't explain units for 'itemSpacing' or valid ranges). Baseline 3 is appropriate when the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Set distance') and target resource ('children in an auto-layout frame'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'set_layout_mode' or 'set_layout_sizing' that also affect layout properties, missing full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., requiring an auto-layout frame), exclusions, or compare to related tools like 'set_padding' or 'set_layout_sizing', leaving usage context entirely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_layout_modeC
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 carries the full burden of behavioral disclosure. It states the tool modifies a frame, implying a mutation, but does not cover critical aspects like permissions needed, whether changes are reversible, error conditions, or what happens to existing settings. This is a significant gap 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?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and wastes no space, 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?
Given that this is a mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral traits, error handling, and output expectations, which are crucial for an agent to use the tool effectively. The high schema coverage does not compensate for these gaps in 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?
The description mentions 'layout mode and wrap behavior', which aligns with the parameters 'layoutMode' and 'layoutWrap' in the schema. However, schema description coverage is 100%, so the schema already fully documents all parameters. The description adds minimal value beyond what the schema provides, justifying the baseline score 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 clearly states the action ('Set') and the target ('layout mode and wrap behavior of a frame in Figma'), making the purpose understandable. However, it does not explicitly differentiate this tool from sibling tools like 'set_layout_sizing' or 'set_item_spacing', which also modify layout properties, so it lacks sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as other layout-related tools in the sibling list (e.g., 'set_layout_sizing' or 'set_item_spacing'). It also does not mention prerequisites, exclusions, or specific contexts for usage, leaving the agent without clear direction.
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 an auto-layout frame in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the frame to modify | |
| layoutSizingHorizontal | No | Horizontal sizing mode (HUG for frames/text only, FILL for auto-layout children only) | |
| layoutSizingVertical | No | Vertical sizing mode (HUG for frames/text only, 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 burden of behavioral disclosure. It states this is a mutation tool ('Set'), implying it modifies the design, but doesn't disclose permissions needed, whether changes are reversible, error conditions, or rate limits. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the 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, efficient sentence that front-loads the core purpose without unnecessary words. Every part earns its place by specifying the action, target, and context concisely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 this is a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't cover behavioral aspects like permissions, reversibility, or error handling, and lacks usage guidelines. For a tool that modifies design elements, more context is needed to ensure safe and correct usage by an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear descriptions and enums for parameters, so the baseline is 3. The description adds no additional parameter semantics beyond what the schema provides (e.g., it doesn't explain the implications of 'HUG' vs 'FILL' in more detail), but it doesn't need to compensate for gaps.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Set') and resource ('horizontal and vertical sizing modes for an auto-layout frame in Figma'), making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'set_layout_mode' or 'resize_node', which might have overlapping functionality in layout adjustments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 prerequisites (e.g., the node must be an auto-layout frame), exclusions, or compare to similar tools like 'set_layout_mode' or 'resize_node', leaving the agent to infer usage from context alone.
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?
With no annotations provided, the description carries full burden but only states the action without behavioral details. It doesn't disclose if this is a mutation, requires permissions, has side effects, rate limits, or error handling. 'Parallelly' hints at concurrency but is undefined, leaving critical behavioral traits unclear.
Agents need to know what a tool does to the 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, efficient sentence that's front-loaded with the core action. However, 'parallelly' is ambiguous and could be clarified, slightly reducing effectiveness. Overall, it's concise with minimal 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 mutation tool with no annotations and no output schema, the description is incomplete. It lacks behavioral context, usage guidelines, and details on what 'parallelly' entails. Given the complexity of batch operations and missing structured data, more explanation is needed for adequate agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents parameters. The description adds no meaning beyond the schema, not explaining 'parallelly' in parameter context or providing examples. Baseline 3 is appropriate as the schema handles parameter semantics 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 'Set multiple annotations parallelly in a node' states the action (set) and resource (annotations) with a scope (multiple, parallelly, in a node), but it's vague about what 'parallelly' means operationally and doesn't differentiate from sibling 'set_annotation'. It's not tautological but lacks specificity about the parallel execution aspect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus 'set_annotation' or other annotation-related tools like 'get_annotations'. The description implies batch operations but doesn't specify scenarios, prerequisites, or exclusions, leaving the agent without clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_multiple_text_contentsC
Set multiple text contents parallelly in a node
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the node containing the text nodes to replace | |
| text | Yes | Array of text node IDs and their replacement texts |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions 'parallelly' which suggests concurrent processing, but doesn't explain what this means operationally (e.g., atomicity, error handling, performance implications). For a mutation tool that modifies multiple text nodes, this is insufficient behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that gets straight to the point with zero wasted words. It's appropriately sized for a tool with good schema documentation and no complex behavioral nuances to explain.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 inadequate. It doesn't explain what happens on success/failure, whether changes are reversible, what permissions are required, or what the return value contains. The 'parallelly' hint is insufficient given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters. The description doesn't add any meaningful semantic context beyond what's in the schema (e.g., what constitutes valid node IDs, text length limits, or the relationship between the parent node and text nodes). Baseline 3 is appropriate when 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 clearly states the action ('Set multiple text contents parallelly') and target ('in a node'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from its sibling 'set_text_content' (singular vs. multiple), which is a missed opportunity for 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 provides no guidance on when to use this tool versus alternatives like 'set_text_content' (for single text nodes) or other text manipulation tools. There's no mention of prerequisites, constraints, or appropriate contexts for this parallel operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_paddingC
Set padding values for an auto-layout frame in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the frame to modify | |
| paddingTop | No | Top padding value | |
| paddingRight | No | Right padding value | |
| paddingBottom | No | Bottom padding value | |
| paddingLeft | No | Left padding value |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It implies a mutation ('Set') but doesn't disclose behavioral traits such as required permissions, whether changes are reversible, error handling (e.g., if nodeId is invalid), or side effects. This is inadequate 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?
The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. Every part earns its place by specifying the action and target clearly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity as a mutation with no annotations and no output schema, the description is incomplete. It lacks details on behavioral context (e.g., success/failure responses, constraints), making it insufficient for safe and effective use by an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear descriptions for all parameters in the schema. The description adds no additional meaning beyond what the schema provides, such as units for padding values or default behaviors. Baseline 3 is appropriate as 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 clearly states the action ('Set padding values') and target resource ('auto-layout frame in Figma'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'set_item_spacing' or 'set_layout_mode' that also modify layout properties, missing explicit 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 on when to use this tool versus alternatives. The description doesn't mention prerequisites (e.g., the frame must exist and be in auto-layout mode), exclusions, or comparisons with similar tools like 'set_item_spacing' for spacing between items versus padding within a frame.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_stroke_colorC
Set the stroke color of a node in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the node to modify | |
| r | Yes | Red component (0-1) | |
| g | Yes | Green component (0-1) | |
| b | Yes | Blue component (0-1) | |
| a | No | Alpha component (0-1) | |
| weight | No | Stroke weight |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Set' implies a mutation, it doesn't specify whether this operation is destructive, requires specific permissions, has side effects, or what happens if the node doesn't support strokes. The description lacks critical behavioral context 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, efficient sentence that communicates the core purpose without any wasted words. It's appropriately sized for a straightforward tool and gets directly to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 insufficient. It doesn't explain what happens on success/failure, whether changes are reversible, or what the tool returns. Given the complexity of modifying visual properties in a design tool, more context about behavior and outcomes is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, providing complete documentation for all 6 parameters. The description doesn't add any parameter semantics beyond what's already in the schema, so it meets the baseline of 3 where 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 clearly states the action ('Set') and target ('stroke color of a node in Figma'), making the purpose immediately understandable. It doesn't explicitly differentiate from sibling tools like 'set_fill_color' or 'set_corner_radius', but the specificity of 'stroke color' provides inherent distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'set_fill_color' or 'set_corner_radius'. It doesn't mention prerequisites (e.g., needing a valid node ID) or contextual constraints (e.g., only works on nodes that support stroke properties).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_text_contentC
Set the text content of an existing text node in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the text node to modify | |
| text | Yes | New text content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states it modifies text content without addressing key behaviors: whether it requires edit permissions, if changes are reversible, what happens to formatting, or error conditions. For a mutation tool, this leaves significant gaps in understanding its operational impact.
Agents need to know what a tool does to the 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, efficient sentence that front-loads the core action and target without any wasted words. It's appropriately sized for a straightforward tool with two parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 insufficient. It doesn't explain return values, error handling, or behavioral nuances like permissions or side effects, leaving the agent with incomplete context 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%, so parameters are fully documented in the schema. The description adds no additional meaning beyond implying 'nodeId' refers to an existing text node and 'text' is new content, which the schema already covers. Baseline 3 is appropriate when 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 clearly states the action ('Set') and target ('text content of an existing text node in Figma'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'set_multiple_text_contents' or 'create_text', which would require a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'set_multiple_text_contents' for bulk updates or 'create_text' for new nodes. It mentions 'existing text node' but doesn't clarify prerequisites or exclusions, leaving usage context implied at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
38 tool updates
v1.0.0- Changed
clone_node5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / nodeIdAdded value: +{ + "description": "The ID of the node to clone", + "type": "string" +} - added
Input schema / properties / xAdded value: +{ + "description": "New X position for the clone", + "type": "number" +} - added
Input schema / properties / yAdded value: +{ + "description": "New Y position for the clone", + "type": "number" +} - added
Input schema / requiredAdded value: +[ + "nodeId" +]
- Changed
create_component_instance5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / componentKeyAdded value: +{ + "description": "Key of the component to instantiate", + "type": "string" +} - added
Input schema / properties / xAdded value: +{ + "description": "X position", + "type": "number" +} - added
Input schema / properties / yAdded value: +{ + "description": "Y position", + "type": "number" +} - added
Input schema / requiredAdded value: +[ + "componentKey", + "x", + "y" +]
- Changed
create_connections3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / connectionsAdded value: +{ + "description": "Array of node connections to create", + "items": { + "properties": { + "endNodeId": { + "description": "ID of the ending node", + "type": "string" + }, + "startNodeId": { + "description": "ID of the starting node", + "type": "string" + }, + "text": { + "description": "Optional text to display on the connector", + "type": "string" + } + }, + "required": [ + "startNodeId", + "endNodeId" + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / requiredAdded value: +[ + "connections" +]
- Changed
create_frame22 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / counterAxisAlignItemsAdded value: +{ + "description": "Counter axis alignment for auto-layout frame", + "enum": [ + "MIN", + "MAX", + "CENTER", + "BASELINE" + ], + "type": "string" +} - added
Input schema / properties / fillColorAdded value: +{ + "description": "Fill color in RGBA format", + "properties": { + "a": { + "description": "Alpha component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "b": { + "description": "Blue component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "g": { + "description": "Green component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "r": { + "description": "Red component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" + } + }, + "required": [ + "r", + "g", + "b" + ], + "type": "object" +} - added
Input schema / properties / heightAdded value: +{ + "description": "Height of the frame", + "type": "number" +} - added
Input schema / properties / itemSpacingAdded value: +{ + "description": "Distance between children in auto-layout frame. Note: This value will be ignored if primaryAxisAlignItems is set to SPACE_BETWEEN.", + "type": "number" +} - added
Input schema / properties / layoutModeAdded value: +{ + "description": "Auto-layout mode for the frame", + "enum": [ + "NONE", + "HORIZONTAL", + "VERTICAL" + ], + "type": "string" +} - added
Input schema / properties / layoutSizingHorizontalAdded value: +{ + "description": "Horizontal sizing mode for auto-layout frame", + "enum": [ + "FIXED", + "HUG", + "FILL" + ], + "type": "string" +} - added
Input schema / properties / layoutSizingVerticalAdded value: +{ + "description": "Vertical sizing mode for auto-layout frame", + "enum": [ + "FIXED", + "HUG", + "FILL" + ], + "type": "string" +} - added
Input schema / properties / layoutWrapAdded value: +{ + "description": "Whether the auto-layout frame wraps its children", + "enum": [ + "NO_WRAP", + "WRAP" + ], + "type": "string" +} - added
Input schema / properties / nameAdded value: +{ + "description": "Optional name for the frame", + "type": "string" +} - added
Input schema / properties / paddingBottomAdded value: +{ + "description": "Bottom padding for auto-layout frame", + "type": "number" +} - added
Input schema / properties / paddingLeftAdded value: +{ + "description": "Left padding for auto-layout frame", + "type": "number" +} - added
Input schema / properties / paddingRightAdded value: +{ + "description": "Right padding for auto-layout frame", + "type": "number" +} - added
Input schema / properties / paddingTopAdded value: +{ + "description": "Top padding for auto-layout frame", + "type": "number" +} - added
Input schema / properties / parentIdAdded value: +{ + "description": "Optional parent node ID to append the frame to", + "type": "string" +} - added
Input schema / properties / primaryAxisAlignItemsAdded value: +{ + "description": "Primary axis alignment for auto-layout frame. Note: When set to SPACE_BETWEEN, itemSpacing will be ignored as children will be evenly spaced.", + "enum": [ + "MIN", + "MAX", + "CENTER", + "SPACE_BETWEEN" + ], + "type": "string" +} - added
Input schema / properties / strokeColorAdded value: +{ + "description": "Stroke color in RGBA format", + "properties": { + "a": { + "description": "Alpha component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "b": { + "description": "Blue component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "g": { + "description": "Green component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "r": { + "description": "Red component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" + } + }, + "required": [ + "r", + "g", + "b" + ], + "type": "object" +} - added
Input schema / properties / strokeWeightAdded value: +{ + "description": "Stroke weight", + "exclusiveMinimum": 0, + "type": "number" +} - added
Input schema / properties / widthAdded value: +{ + "description": "Width of the frame", + "type": "number" +} - added
Input schema / properties / xAdded value: +{ + "description": "X position", + "type": "number" +} - added
Input schema / properties / yAdded value: +{ + "description": "Y position", + "type": "number" +} - added
Input schema / requiredAdded value: +[ + "x", + "y", + "width", + "height" +]
- Changed
create_rectangle8 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / heightAdded value: +{ + "description": "Height of the rectangle", + "type": "number" +} - added
Input schema / properties / nameAdded value: +{ + "description": "Optional name for the rectangle", + "type": "string" +} - added
Input schema / properties / parentIdAdded value: +{ + "description": "Optional parent node ID to append the rectangle to", + "type": "string" +} - added
Input schema / properties / widthAdded value: +{ + "description": "Width of the rectangle", + "type": "number" +} - added
Input schema / properties / xAdded value: +{ + "description": "X position", + "type": "number" +} - added
Input schema / properties / yAdded value: +{ + "description": "Y position", + "type": "number" +} - added
Input schema / requiredAdded value: +[ + "x", + "y", + "width", + "height" +]
- Changed
create_text10 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / fontColorAdded value: +{ + "description": "Font color in RGBA format", + "properties": { + "a": { + "description": "Alpha component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "b": { + "description": "Blue component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "g": { + "description": "Green component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "r": { + "description": "Red component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" + } + }, + "required": [ + "r", + "g", + "b" + ], + "type": "object" +} - added
Input schema / properties / fontSizeAdded value: +{ + "description": "Font size (default: 14)", + "type": "number" +} - added
Input schema / properties / fontWeightAdded value: +{ + "description": "Font weight (e.g., 400 for Regular, 700 for Bold)", + "type": "number" +} - added
Input schema / properties / nameAdded value: +{ + "description": "Semantic layer name for the text node", + "type": "string" +} - added
Input schema / properties / parentIdAdded value: +{ + "description": "Optional parent node ID to append the text to", + "type": "string" +} - added
Input schema / properties / textAdded value: +{ + "description": "Text content", + "type": "string" +} - added
Input schema / properties / xAdded value: +{ + "description": "X position", + "type": "number" +} - added
Input schema / properties / yAdded value: +{ + "description": "Y position", + "type": "number" +} - added
Input schema / requiredAdded value: +[ + "x", + "y", + "text" +]
- Changed
delete_multiple_nodes3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / nodeIdsAdded value: +{ + "description": "Array of node IDs to delete", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / requiredAdded value: +[ + "nodeIds" +]
- Changed
delete_node3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / nodeIdAdded value: +{ + "description": "The ID of the node to delete", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "nodeId" +]
- Changed
export_node_as_image5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / formatAdded value: +{ + "description": "Export format", + "enum": [ + "PNG", + "JPG", + "SVG", + "PDF" + ], + "type": "string" +} - added
Input schema / properties / nodeIdAdded value: +{ + "description": "The ID of the node to export", + "type": "string" +} - added
Input schema / properties / scaleAdded value: +{ + "description": "Export scale", + "exclusiveMinimum": 0, + "type": "number" +} - added
Input schema / requiredAdded value: +[ + "nodeId" +]
- Changed
get_annotations3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / includeCategoriesAdded value: +{ + "default": true, + "description": "Whether to include category information", + "type": "boolean" +} - added
Input schema / properties / nodeIdAdded value: +{ + "description": "Optional node ID to get annotations for specific node", + "type": "string" +}
- Changed
get_document_info1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_instance_overrides2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / nodeIdAdded value: +{ + "description": "Optional ID of the component instance to get overrides from. If not provided, currently selected instance will be used.", + "type": "string" +}
- Changed
get_local_components1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_node_info3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / nodeIdAdded value: +{ + "description": "The ID of the node to get information about", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "nodeId" +]
- Changed
get_nodes_info3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / nodeIdsAdded value: +{ + "description": "Array of node IDs to get information about", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / requiredAdded value: +[ + "nodeIds" +]
- Changed
get_reactions3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / nodeIdsAdded value: +{ + "description": "Array of node IDs to get reactions from", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / requiredAdded value: +[ + "nodeIds" +]
- Changed
get_selection1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_styles1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
join_channel2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / channelAdded value: +{ + "default": "", + "description": "The name of the channel to join", + "type": "string" +}
- Changed
move_node5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / nodeIdAdded value: +{ + "description": "The ID of the node to move", + "type": "string" +} - added
Input schema / properties / xAdded value: +{ + "description": "New X position", + "type": "number" +} - added
Input schema / properties / yAdded value: +{ + "description": "New Y position", + "type": "number" +} - added
Input schema / requiredAdded value: +[ + "nodeId", + "x", + "y" +]
- Changed
read_my_design1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
resize_node5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / heightAdded value: +{ + "description": "New height", + "exclusiveMinimum": 0, + "type": "number" +} - added
Input schema / properties / nodeIdAdded value: +{ + "description": "The ID of the node to resize", + "type": "string" +} - added
Input schema / properties / widthAdded value: +{ + "description": "New width", + "exclusiveMinimum": 0, + "type": "number" +} - added
Input schema / requiredAdded value: +[ + "nodeId", + "width", + "height" +]
- Changed
scan_nodes_by_types4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / nodeIdAdded value: +{ + "description": "ID of the node to scan", + "type": "string" +} - added
Input schema / properties / typesAdded value: +{ + "description": "Array of node types to find in the child nodes (e.g. ['COMPONENT', 'FRAME'])", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / requiredAdded value: +[ + "nodeId", + "types" +]
- Changed
scan_text_nodes3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / nodeIdAdded value: +{ + "description": "ID of the node to scan", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "nodeId" +]
- Changed
set_annotation7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / annotationIdAdded value: +{ + "description": "The ID of the annotation to update (if updating existing annotation)", + "type": "string" +} - added
Input schema / properties / categoryIdAdded value: +{ + "description": "The ID of the annotation category", + "type": "string" +} - added
Input schema / properties / labelMarkdownAdded value: +{ + "description": "The annotation text in markdown format", + "type": "string" +} - added
Input schema / properties / nodeIdAdded value: +{ + "description": "The ID of the node to annotate", + "type": "string" +} - added
Input schema / properties / propertiesAdded value: +{ + "description": "Additional properties for the annotation", + "items": { + "properties": { + "type": { + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / requiredAdded value: +[ + "nodeId", + "labelMarkdown" +]
- Changed
set_axis_align5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / counterAxisAlignItemsAdded value: +{ + "description": "Counter axis alignment (MIN/MAX = top/bottom in horizontal, left/right in vertical)", + "enum": [ + "MIN", + "MAX", + "CENTER", + "BASELINE" + ], + "type": "string" +} - added
Input schema / properties / nodeIdAdded value: +{ + "description": "The ID of the frame to modify", + "type": "string" +} - added
Input schema / properties / primaryAxisAlignItemsAdded value: +{ + "description": "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.", + "enum": [ + "MIN", + "MAX", + "CENTER", + "SPACE_BETWEEN" + ], + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "nodeId" +]
- Changed
set_corner_radius5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / cornersAdded value: +{ + "description": "Optional array of 4 booleans to specify which corners to round [topLeft, topRight, bottomRight, bottomLeft]", + "items": { + "type": "boolean" + }, + "maxItems": 4, + "minItems": 4, + "type": "array" +} - added
Input schema / properties / nodeIdAdded value: +{ + "description": "The ID of the node to modify", + "type": "string" +} - added
Input schema / properties / radiusAdded value: +{ + "description": "Corner radius value", + "minimum": 0, + "type": "number" +} - added
Input schema / requiredAdded value: +[ + "nodeId", + "radius" +]
- Changed
set_default_connector2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / connectorIdAdded value: +{ + "description": "The ID of the connector node to set as default", + "type": "string" +}
- Changed
set_fill_color7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / aAdded value: +{ + "description": "Alpha component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / bAdded value: +{ + "description": "Blue component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / gAdded value: +{ + "description": "Green component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / nodeIdAdded value: +{ + "description": "The ID of the node to modify", + "type": "string" +} - added
Input schema / properties / rAdded value: +{ + "description": "Red component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Input schema / requiredAdded value: +[ + "nodeId", + "r", + "g", + "b" +]
- Changed
set_instance_overrides4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / sourceInstanceIdAdded value: +{ + "description": "ID of the source component instance", + "type": "string" +} - added
Input schema / properties / targetNodeIdsAdded value: +{ + "description": "Array of target instance IDs. Currently selected instances will be used.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / requiredAdded value: +[ + "sourceInstanceId", + "targetNodeIds" +]
- Changed
set_item_spacing4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / itemSpacingAdded value: +{ + "description": "Distance between children. Note: This value will be ignored if primaryAxisAlignItems is set to SPACE_BETWEEN.", + "type": "number" +} - added
Input schema / properties / nodeIdAdded value: +{ + "description": "The ID of the frame to modify", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "nodeId", + "itemSpacing" +]
- Changed
set_layout_mode5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / layoutModeAdded value: +{ + "description": "Layout mode for the frame", + "enum": [ + "NONE", + "HORIZONTAL", + "VERTICAL" + ], + "type": "string" +} - added
Input schema / properties / layoutWrapAdded value: +{ + "description": "Whether the auto-layout frame wraps its children", + "enum": [ + "NO_WRAP", + "WRAP" + ], + "type": "string" +} - added
Input schema / properties / nodeIdAdded value: +{ + "description": "The ID of the frame to modify", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "nodeId", + "layoutMode" +]
- Changed
set_layout_sizing5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / layoutSizingHorizontalAdded value: +{ + "description": "Horizontal sizing mode (HUG for frames/text only, FILL for auto-layout children only)", + "enum": [ + "FIXED", + "HUG", + "FILL" + ], + "type": "string" +} - added
Input schema / properties / layoutSizingVerticalAdded value: +{ + "description": "Vertical sizing mode (HUG for frames/text only, FILL for auto-layout children only)", + "enum": [ + "FIXED", + "HUG", + "FILL" + ], + "type": "string" +} - added
Input schema / properties / nodeIdAdded value: +{ + "description": "The ID of the frame to modify", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "nodeId" +]
- Changed
set_multiple_annotations4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / annotationsAdded value: +{ + "description": "Array of annotations to apply", + "items": { + "properties": { + "annotationId": { + "description": "The ID of the annotation to update (if updating existing annotation)", + "type": "string" + }, + "categoryId": { + "description": "The ID of the annotation category", + "type": "string" + }, + "labelMarkdown": { + "description": "The annotation text in markdown format", + "type": "string" + }, + "nodeId": { + "description": "The ID of the node to annotate", + "type": "string" + }, + "properties": { + "description": "Additional properties for the annotation", + "items": { + "properties": { + "type": { + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "nodeId", + "labelMarkdown" + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / nodeIdAdded value: +{ + "description": "The ID of the node containing the elements to annotate", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "nodeId", + "annotations" +]
- Changed
set_multiple_text_contents4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / nodeIdAdded value: +{ + "description": "The ID of the node containing the text nodes to replace", + "type": "string" +} - added
Input schema / properties / textAdded value: +{ + "description": "Array of text node IDs and their replacement texts", + "items": { + "properties": { + "nodeId": { + "description": "The ID of the text node", + "type": "string" + }, + "text": { + "description": "The replacement text", + "type": "string" + } + }, + "required": [ + "nodeId", + "text" + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / requiredAdded value: +[ + "nodeId", + "text" +]
- Changed
set_padding7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / nodeIdAdded value: +{ + "description": "The ID of the frame to modify", + "type": "string" +} - added
Input schema / properties / paddingBottomAdded value: +{ + "description": "Bottom padding value", + "type": "number" +} - added
Input schema / properties / paddingLeftAdded value: +{ + "description": "Left padding value", + "type": "number" +} - added
Input schema / properties / paddingRightAdded value: +{ + "description": "Right padding value", + "type": "number" +} - added
Input schema / properties / paddingTopAdded value: +{ + "description": "Top padding value", + "type": "number" +} - added
Input schema / requiredAdded value: +[ + "nodeId" +]
- Changed
set_stroke_color8 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / aAdded value: +{ + "description": "Alpha component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / bAdded value: +{ + "description": "Blue component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / gAdded value: +{ + "description": "Green component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / nodeIdAdded value: +{ + "description": "The ID of the node to modify", + "type": "string" +} - added
Input schema / properties / rAdded value: +{ + "description": "Red component (0-1)", + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / weightAdded value: +{ + "description": "Stroke weight", + "exclusiveMinimum": 0, + "type": "number" +} - added
Input schema / requiredAdded value: +[ + "nodeId", + "r", + "g", + "b" +]
- Changed
set_text_content4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / nodeIdAdded value: +{ + "description": "The ID of the text node to modify", + "type": "string" +} - added
Input schema / properties / textAdded value: +{ + "description": "New text content", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "nodeId", + "text" +]
38 tool updates
- First observed
clone_node - First observed
create_component_instance - First observed
create_connections - First observed
create_frame - First observed
create_rectangle - First observed
create_text - First observed
delete_multiple_nodes - First observed
delete_node - First observed
export_node_as_image - First observed
get_annotations - First observed
get_document_info - First observed
get_instance_overrides - First observed
get_local_components - 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
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_fill_color - 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_padding - First observed
set_stroke_color - First observed
set_text_content
TDQS
Most tools have distinct purposes, but some overlap exists, such as 'get_node_info' and 'read_my_design' (both retrieve node details), and 'delete_node' and 'delete_multiple_nodes' (similar deletion functions). The descriptions help clarify differences, but agents might occasionally misselect between closely related tools.
The tool names follow a consistent verb_noun pattern throughout, using snake_case uniformly, which aids readability. Minor deviations include 'read_my_design' (which uses 'my' instead of a direct verb_noun) and 'join_channel' (which is less descriptive of the domain), but overall the naming is predictable.
With 38 tools, the count is excessive for a Figma interaction server, making it heavy and potentially overwhelming for agents. While Figma has a broad API, many tools could be consolidated (e.g., multiple set_* tools for styling), indicating poor scoping and an unnecessarily large surface.
The tool set provides comprehensive coverage for Figma operations, including CRUD for nodes (create, get, update, delete), styling (colors, layout, annotations), export, and component management. No obvious gaps exist; agents can perform full design workflows without dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
The Figma MCP server brings Figma design context directly into your AI workflow.
Access and maintain design system docs, tokens, components, skills, and contexts across any project.
Brazilian Open Finance MCP — 30+ banks (Itaú, Nubank, etc.) to Claude/Cursor. Read-only.
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables Cursor to access Figma files through the Model Context Protocol, enhancing its ability to accurately interpret and utilize design data for code generation.81,58615,747MIT
- FlicenseBqualityDmaintenanceEnables Cursor AI to interact with Figma designs, allowing users to read design information and programmatically modify elements through natural language commands.408943-
- AlicenseBqualityDmaintenanceImplements a Model Context Protocol integration between Cursor AI and Figma, allowing Cursor to programmatically read and modify Figma designs.33894MIT
- AlicenseBqualityNot gradedmaintenanceEnables Cursor AI to communicate with Figma for reading designs and modifying them programmatically, allowing users to automate design tasks through natural language.388941-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/pipethedev/Talk-to-Figma-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server