Cursor Talk to Figma MCP
Uses Bun as the JavaScript runtime for the MCP server, allowing it to run the WebSocket server that facilitates communication between Cursor AI and the Figma plugin.
Enables communication with Figma for reading design information and modifying designs programmatically. Includes tools for document inspection, annotation management, element creation, text content modification, styling adjustments, layout organization, component handling, and exporting designs as images.
Implements the MCP server in TypeScript, providing type safety and better developer experience for interacting with Figma's API.
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., "@Cursor Talk to Figma MCPscan text nodes in the current selection and show me the first 5 results"
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: Figma MCP Server
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-mcpInstall Figma Plugin
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.
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)
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
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 component
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
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
License
MIT
Available Tools
33 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 full burden for behavioral disclosure. It states the action ('Clone') which implies a mutation operation, but doesn't mention permissions required, whether the original node is affected, rate limits, error conditions, or what the clone inherits from the original. This leaves significant gaps for agent decision-making.
Agents need to know what a tool does to the 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 the core functionality without unnecessary words. It's appropriately sized for a straightforward cloning operation 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 properties the clone inherits, whether positioning is required, what happens if x/y aren't specified, or what the return value contains. 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 thoroughly. The description adds no additional parameter semantics beyond what's in the schema (nodeId, x, y positions). This meets the baseline for high schema coverage but doesn't provide 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 action ('Clone') and resource ('an existing node in Figma'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'create_component_instance' or 'create_frame' which also create new nodes, leaving some ambiguity about when cloning is preferred over 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'. It lacks context about prerequisites (e.g., needing an existing node), exclusions, or typical scenarios where cloning is appropriate versus creating from scratch.
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 the full burden of behavioral disclosure. It states 'Create' which implies a write/mutation operation, but doesn't cover critical aspects like permissions required, whether it's destructive to existing elements, error conditions (e.g., invalid component key), or what happens on success (e.g., returns a node ID). 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, direct sentence with zero wasted words. It's front-loaded with the core action and resource, making it immediately scannable. Every word earns its place by conveying essential purpose 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 this is a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't address behavioral traits (e.g., side effects, error handling), usage context, or return values. While the schema covers parameters well, the overall context for safe and effective use is lacking, especially compared to siblings that may have overlapping functionality.
Complex tools with many parameters or behaviors need more documentation. 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, providing clear documentation for all three parameters (componentKey, x, y). The description adds no additional parameter semantics beyond what's in the schema, such as explaining coordinate systems or component key formats. With high schema coverage, the baseline score of 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 ('Create') and resource ('instance of a component in Figma'), making the purpose immediately understandable. It distinguishes itself from siblings like 'create_frame' or 'create_rectangle' by specifying it's for components, not basic shapes. However, it doesn't explicitly mention what a 'component instance' entails (e.g., linked to a master component), which prevents 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 an existing component key from 'get_local_components'), when not to use it (e.g., for non-component elements), or comparisons to siblings like 'clone_node' for duplication. This leaves the agent without context for tool selection.
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 address permissions, whether this requires an active document, what happens on failure, or any rate limits. For a mutation tool with 20 parameters and complex behavior, 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 states the core purpose without any wasted words. It's appropriately sized for a tool with a clear name and comprehensive schema documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 mutation tool with 20 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what a frame is, when to use it, what permissions are needed, or what the tool returns. The agent must rely entirely on the schema for parameter details and has no behavioral 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%, so the schema already documents all 20 parameters thoroughly. The description adds no parameter information beyond what's in the schema. According to guidelines, when schema coverage is high (>80%), the baseline is 3 even with no param info in description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create') and resource ('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 node types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when frames are appropriate versus other node types (like rectangles or components), nor any prerequisites or context for usage. 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.
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 full burden for behavioral disclosure. While 'Create' implies a write/mutation operation, the description doesn't address important behavioral aspects like required permissions, whether the rectangle becomes part of the current selection, what happens if parentId is invalid, or what the response looks like. 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, focused 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 with no 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 insufficient. It doesn't address behavioral aspects like error conditions, response format, or integration with the Figma document structure. Given the complexity of creating graphical elements in a design tool and the lack of structured metadata, more context is needed for 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?
The schema has 100% description coverage, providing clear documentation for all 6 parameters. The description adds no additional parameter information beyond what's already in the schema. This meets the baseline expectation when schema coverage is complete, but doesn't provide extra value like explaining parameter relationships or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Create') and resource ('new rectangle in Figma'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'create_frame' or 'create_component_instance' that also create visual elements, leaving some ambiguity about when to choose this specific rectangle creation tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'create_frame' or 'create_component_instance'. There's no mention of prerequisites, context requirements, or comparison with sibling tools, leaving the agent to guess about appropriate usage scenarios.
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 a new text element' implies a write/mutation operation, but there's no information about permissions required, whether this affects the Figma document permanently, error conditions, or what happens on success. The description doesn't mention if this creates a standalone element or how it integrates with the document structure beyond the parentId parameter.
Agents need to know what a tool does to the 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 front-loaded with the essential information (create text element) and doesn't include unnecessary elaboration. Every word earns its place in communicating the core purpose efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 8 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what happens after creation (does it return an ID? success status?), doesn't mention error conditions or constraints, and provides no context about how this fits into Figma's document model. The description should do more to compensate for the lack of structured metadata.
Complex tools with many parameters or behaviors need more documentation. Simple 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 8 parameters thoroughly. The description adds no parameter-specific information beyond what's in the schema - it doesn't explain relationships between parameters, provide examples of typical usage, or clarify semantics like coordinate systems or color format implications. The baseline of 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 ('Create') and resource ('new text element in Figma'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'set_text_content' or 'set_multiple_text_contents', which also manipulate text elements. The description is specific about what's being created but lacks sibling comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 are multiple sibling tools that handle text (set_text_content, set_multiple_text_contents, scan_text_nodes) but no indication of when create_text is preferred over modifying existing text or when other creation tools (create_frame, create_rectangle) might be more appropriate. No prerequisites or context for usage are mentioned.
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?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a deletion operation (implying destructive behavior) but doesn't mention permissions required, whether deletions are permanent/reversible, rate limits, or what happens on partial failures. The description adds minimal behavioral context beyond the obvious destructive nature implied by 'delete'.
Agents need to know what a tool does to the 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 - a single sentence that communicates the core functionality without any wasted words. It's front-loaded with the essential information ('Delete multiple nodes from Figma') and uses 'at once' to efficiently convey the batch nature. Every word earns its place in this minimal description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 insufficiently complete. It doesn't address critical context like error handling, permissions, whether the operation is atomic, what happens if some nodes don't exist, or what the return value might be. The combination of destructive operation + zero annotation coverage + no output schema requires more comprehensive description than provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single parameter 'nodeIds' clearly documented in the schema as 'Array of node IDs to delete'. The description doesn't add any parameter semantics beyond what the schema provides - it doesn't explain what node IDs are, where to get them, format requirements, or constraints. With high 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 ('Delete multiple nodes') and resource ('from Figma'), making the purpose immediately understandable. It distinguishes from the sibling 'delete_node' by specifying 'multiple nodes at once', though it doesn't explicitly contrast with other deletion-related tools. The description avoids tautology by providing meaningful context beyond just the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'delete_node' for single deletions or other destructive operations. It lacks any mention of prerequisites, error conditions, or typical use cases. While the 'multiple nodes at once' phrasing implies a batch operation, there's no explicit comparison to sibling tools or context for decision-making.
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 but only states the basic action without disclosing behavioral traits. It doesn't mention whether deletion is permanent/reversible, what permissions are required, if there are rate limits, or what happens to child nodes. For a destructive operation with zero annotation coverage, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with a single clear sentence that communicates the core purpose without any wasted words. It's appropriately sized for a simple tool with one parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive deletion tool with no annotations and no output schema, the description is insufficient. It doesn't explain what 'delete' means in this context (permanent? moves to trash?), what the response looks like, error conditions, or important behavioral aspects. The combination of destructive operation with minimal description creates significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with the single parameter 'nodeId' well-documented in the schema. The description doesn't add any additional parameter context beyond what the schema provides, which is acceptable given the high schema coverage but doesn't enhance understanding.
Input schemas describe structure but not intent. Descriptions should explain 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') and resource ('a node from Figma'), making the purpose immediately understandable. However, it doesn't differentiate from sibling 'delete_multiple_nodes' which handles multiple deletions, leaving room for improvement in 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?
No guidance is provided on when to use this tool versus alternatives like 'delete_multiple_nodes' for batch operations or other deletion-related tools. The description lacks context about prerequisites, permissions, or when this specific single-node deletion is appropriate.
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?
With no annotations provided, the description carries full burden but only states the basic action without behavioral details. It doesn't disclose whether this is a read-only or mutating operation (though 'export' implies read-only), what happens on failure, rate limits, authentication needs, or output format specifics (e.g., image data as base64 or file). This leaves significant gaps 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, front-loaded sentence with zero wasted words—it directly states the tool's core function. Every part earns its place by clearly conveying the essential action and target, making it highly efficient for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (export operation with 3 parameters), lack of annotations, and no output schema, the description is incomplete. It doesn't address critical context like what the export returns (e.g., image bytes, file path), error conditions, or how it fits with siblings (e.g., vs. 'get_node_info'). This leaves the agent under-informed for reliable 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 parameters are well-documented in the schema itself. The description adds no additional parameter semantics beyond implying 'node' and 'image' context, which the schema already covers with nodeId and format enum. This meets the baseline for high schema coverage but doesn't enhance understanding.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Export') and resource ('a node as an image from Figma'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_node_info' or 'scan_nodes_by_types' that might retrieve node data without exporting, leaving room for slight ambiguity in tool selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a valid node ID), exclusions (e.g., unsupported node types), or compare to siblings like 'get_node_info' for non-image data retrieval, 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.
get_annotationsB
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 full burden but offers minimal behavioral insight. It doesn't disclose whether this is a read-only operation (implied by 'Get'), what permissions are needed, how results are structured, pagination behavior, or error conditions. The description is functional but lacks operational context needed 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, efficient sentence that immediately conveys the core functionality without unnecessary words. It's front-loaded with the primary action and scope, making it easy to parse. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read operation with no annotations and no output schema, the description is insufficient. It doesn't explain what 'annotations' consist of, how they're returned, whether there are limits, or what happens when no annotations exist. Given the complexity of annotation data structures, more context is needed for 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%, so the schema fully documents both parameters. The description mentions 'specific node' which aligns with the 'nodeId' parameter, but adds no additional semantic context beyond what's already in the schema descriptions. 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 'Get' and resource 'annotations', specifying scope with 'in the current document or specific node'. It distinguishes from siblings like 'set_annotation' and 'set_multiple_annotations' which are write operations, but doesn't explicitly differentiate from other read tools like 'get_document_info' or 'get_node_info'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by mentioning 'current document or specific node', suggesting this tool retrieves annotations rather than creating them. However, it doesn't provide explicit guidance on when to use this versus other read tools like 'get_node_info' or 'scan_nodes_by_types', nor does it mention prerequisites or exclusions.
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 of behavioral disclosure. It states it 'gets' information, implying a read-only operation, but doesn't specify permissions required, rate limits, or what 'detailed information' includes (e.g., document structure, metadata). This leaves gaps in understanding the tool's behavior beyond basic purpose.
Agents need to know what a tool does to the 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 efficiently conveys the tool's purpose without unnecessary words. It's front-loaded with the core action and resource, 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 has 0 parameters and no annotations or output schema, the description is minimally adequate but lacks depth. It doesn't explain what 'detailed information' entails or how it differs from other info-retrieval tools, leaving room for confusion in a context with multiple similar 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?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, focusing on the tool's purpose instead, which aligns with 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 with a specific verb ('Get') and resource ('detailed information about the current Figma document'), making it easy to understand what it does. 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 implies usage by specifying 'current Figma document', suggesting it should be used when needing overall document metadata. However, it lacks explicit guidance on when to use this versus alternatives like 'get_node_info' for node-specific details or 'read_my_design' for broader design access, leaving some ambiguity.
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 full burden but only states what the tool does, not how it behaves. It doesn't disclose if this is a read-only operation, what permissions are needed, how results are formatted (e.g., list, paginated), or any rate limits, leaving significant behavioral gaps.
Agents need to know what a tool does to the 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, with every part contributing 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?
Given no annotations, no output schema, and a simple tool with 0 parameters, the description is minimal. It states the basic action but lacks details on return values (e.g., format, structure) or behavioral context, making it incomplete for effective agent use despite low 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?
With 0 parameters and 100% schema description coverage, the baseline is 4. The description adds no parameter information, which is acceptable since there are no parameters to document, but it doesn't compensate for any gaps (none exist).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('all local components from the Figma document'), providing specific purpose. However, it doesn't explicitly differentiate from sibling tools like 'get_document_info' or 'get_styles' that might also retrieve document metadata, leaving room for ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. With siblings like 'get_document_info' (which might include components) and 'scan_nodes_by_types' (which could filter for components), the description lacks context for selection, offering only a basic statement without exclusions or recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_infoB
Get detailed information about a specific node in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the node to get information about |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. While 'Get' implies a read operation, it doesn't specify whether this requires authentication, rate limits, what happens with invalid node IDs, or the format/scope of 'detailed information' returned. For a tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the 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 for a simple lookup 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 single-parameter read operation with no output schema, the description is minimally complete but lacks important context. It doesn't explain what constitutes 'detailed information' in the return value, doesn't address error conditions, and doesn't differentiate from similar sibling tools. The absence of annotations means the description should do more to compensate.
Complex tools with many parameters or behaviors need more documentation. Simple 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' clearly documented in the schema. The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline for adequate but unenriched parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'detailed information about a specific node in Figma', making the purpose understandable. However, it doesn't differentiate from sibling tools like 'get_nodes_info' (plural) or 'get_document_info', which could cause confusion about when to use this singular node lookup versus batch 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 siblings like 'get_nodes_info' (plural) and 'get_document_info', there's no indication whether this is for single-node queries, whether it's more efficient for individual lookups, or any prerequisites for node ID availability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nodes_infoC
Get detailed information about multiple nodes in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| nodeIds | Yes | Array of node IDs to get information about |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states it 'gets' information, implying a read-only operation, but doesn't disclose behavioral traits like rate limits, authentication needs, error handling (e.g., invalid node IDs), or what 'detailed information' includes (e.g., node properties, metadata). This leaves significant gaps for an AI agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any fluff or redundancy. It is front-loaded with the core action and resource, 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 complexity of a Figma API tool with no annotations and no output schema, the description is incomplete. It doesn't explain what 'detailed information' entails (e.g., JSON structure, fields like name, type, bounds), potential limitations, or how results are returned. This leaves the AI agent with insufficient context for 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%, with the parameter 'nodeIds' fully documented in the schema as 'Array of node IDs to get information about'. The description adds no additional meaning beyond this, such as format examples, constraints (e.g., maximum array size), or where to obtain node IDs. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and resource 'detailed information about multiple nodes in Figma', which is specific and unambiguous. It distinguishes from sibling 'get_node_info' by specifying 'multiple nodes' versus presumably a single node, though it doesn't explicitly mention this distinction in the description itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_node_info' (for single nodes) or 'get_document_info' (for broader document data). It lacks any context about prerequisites, such as needing valid node IDs or being in a specific Figma document state.
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', implying a read-only operation, but doesn't clarify aspects like whether it requires specific permissions, what format the information is returned in, or if there are any rate limits. This leaves significant gaps in understanding 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, clear sentence that directly states the tool's purpose without any unnecessary words. It's front-loaded with the core action and resource, making it efficient and easy to parse for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 output schema, and no annotations, the description is minimally adequate by stating what it does. However, it lacks details on return values, error conditions, or behavioral nuances, which could be important for a tool interacting with a design environment like Figma. It meets the basic requirement but leaves room for improvement 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, as there are none to explain. It appropriately focuses on the tool's purpose without redundant information, earning a baseline score for parameter-less tools.
Input schemas describe structure but not intent. Descriptions should explain 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 doesn't explicitly differentiate from sibling tools like 'get_node_info' or 'get_nodes_info', which might retrieve similar information but for different scopes or inputs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 'get_node_info' or 'get_nodes_info', which could be used for similar purposes but with different parameters. There's no mention of prerequisites, context, 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?
No annotations are provided, so the description carries the full burden. It states a read operation ('Get') but doesn't disclose behavioral traits such as permissions needed, rate limits, whether it returns all styles at once or paginated, or what happens in edge cases like no styles present. This leaves significant 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 front-loads the core action and resource. It wastes no words and is appropriately sized for a simple tool with no parameters, 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 tool's simplicity (0 parameters, no output schema, no annotations), the description is minimally adequate. It states what the tool does but lacks details on behavior, output format, or context. For a read operation with no structured output, more guidance on what 'styles' entails would improve completeness, but it meets the baseline for a basic tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter information is needed. The description doesn't add param details, but since there are no params, this is acceptable. Baseline is 4 as per rules for 0 parameters, as the schema fully covers the absence of inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'all styles from the current Figma document', making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_document_info' or 'get_local_components', which might also retrieve document-related data, leaving some ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get_document_info' that might include style information, there's no indication of context, prerequisites, or exclusions, leaving the agent to infer usage based on tool names alone.
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 provided, the description carries the full burden of behavioral disclosure. It states the tool joins a channel but doesn't explain what this entails—whether it requires permissions, affects user state, has side effects like notifications, or what happens on success/failure. This leaves significant gaps for a tool that likely involves user interaction.
Agents need to know what a tool does to the 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 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 cover behavioral aspects like what 'join' means operationally, expected outcomes, or error conditions. For a tool that likely interacts with user channels, more context is needed to guide proper usage.
Complex tools with many parameters or behaviors need more documentation. 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 'channel' parameter documented as 'The name of the channel to join'. The description adds no additional semantic context beyond this, 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 ('join') and resource ('a specific channel'), specifying the purpose as joining a channel to communicate with Figma. It distinguishes from siblings by focusing on channel participation rather than design manipulation, though it doesn't explicitly contrast with similar tools since none exist in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 implies usage for communication but doesn't specify prerequisites, context (e.g., after authentication), or exclusions, leaving the agent to infer based on 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.
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 for behavioral disclosure. It states the action ('move a node') but doesn't cover critical traits: whether this is a destructive mutation (likely yes, but unconfirmed), permission requirements, rate limits, error conditions (e.g., invalid coordinates), or what happens on success (e.g., no return value mentioned). 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 action ('Move a node') and specifies the context ('in Figma'). There is no wasted verbiage or redundancy, making it easy for an agent to parse quickly and accurately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 3 parameters), lack of annotations, and no output schema, the description is incomplete. It doesn't address behavioral risks (e.g., destructive effects), success/failure outcomes, or integration with sibling tools (e.g., how to obtain nodeId from 'get_node_info'). For a mutation tool in this context, more detail is needed to guide 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?
The input schema has 100% description coverage, with clear parameter definitions (nodeId, x, y). The description adds no additional semantic context beyond implying positional movement, which the schema already covers. According to rules, with high schema coverage (>80%), the baseline is 3 even without param info in the description, which applies here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('move') and resource ('a node'), specifying the action and target. It distinguishes from siblings like 'resize_node' or 'delete_node' by focusing on positional change rather than size alteration or removal. However, it doesn't explicitly differentiate from tools like 'set_axis_align' that might also affect positioning, 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?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing nodeId from other tools), exclusions (e.g., not for moving groups of nodes), or comparisons to siblings like 'resize_node' for size changes or 'set_axis_align' for alignment adjustments. This lack of context leaves 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.
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 the full burden. It mentions 'Get detailed information' which implies a read operation, but doesn't disclose behavioral traits like whether it requires specific permissions, how it handles empty selections, or if it has rate limits. For a 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 ('Get detailed information about the current selection in Figma') and adds a clarifying detail ('including all node details'). There is zero waste, 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 has no parameters, no annotations, and no output schema, the description is minimally adequate. It explains what the tool does but lacks details on behavior, output format, or error handling. For a read operation in a context with many sibling tools, it should provide more guidance to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
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 beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('detailed information about the current selection in Figma'), specifying it includes 'all node details'. However, it doesn't explicitly differentiate from siblings like 'get_node_info' or 'get_selection', which appear to serve similar purposes, so it doesn't achieve 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 such as 'get_node_info' or 'get_selection'. It lacks context about prerequisites (e.g., whether a selection must exist) or exclusions, leaving the agent to infer usage from the name and description alone.
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. While 'Resize' implies a mutation operation, the description doesn't address important behavioral aspects: whether this requires specific permissions, what happens to child elements when a parent node is resized, whether constraints or aspect ratios are preserved, or what validation occurs. 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 extremely concise at just four words, front-loading the essential information with zero wasted words. Every element earns its place, making it easy for an agent to quickly understand the core 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?
For a mutation tool with no annotations and no output schema, the description is insufficiently complete. It doesn't address behavioral implications, error conditions, success indicators, or how this operation interacts with other node properties. Given the complexity of resizing operations in design tools and the lack of structured safety information, 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%, with all three parameters clearly documented in the schema (nodeId, width, height). The description adds no additional parameter semantics beyond what's already in the structured schema, so it meets the baseline expectation but doesn't provide 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 action ('Resize') and target resource ('a node in Figma'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'move_node' or 'set_layout_sizing' which also modify node properties, leaving some ambiguity about when to choose resize over other dimension-altering 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 multiple sibling tools that modify node properties (move_node, set_layout_sizing, set_corner_radius, etc.), there's no indication of when resizing is appropriate versus other transformations or when to combine operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_nodes_by_typesC
Scan for 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 (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 insight. It doesn't disclose whether this is a read-only operation, what the output format might be (e.g., list of nodes, counts), or any performance considerations (e.g., depth of scan, recursion). The term 'scan' implies searching, but details are lacking.
Agents need to know what a tool does to the 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 with the core action ('Scan for nodes'), 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 complexity of scanning operations in Figma (with potential for nested nodes and varied types), the description is insufficient. No annotations exist to clarify behavior, and there's no output schema to describe return values. The description should explain what 'scan' entails (e.g., recursive search, flat list) and the result format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters (nodeId and types) adequately. The description adds no additional meaning beyond what the schema provides, such as examples of valid types beyond 'COMPONENT' and 'FRAME' or constraints on nodeId format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Scan for nodes') and the target ('with specific types in the selected Figma node'), distinguishing it from general node retrieval tools like get_node_info. However, it doesn't explicitly differentiate from scan_text_nodes, which is a similar scanning tool but for text nodes specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 scan_text_nodes or get_nodes_info. It lacks context about prerequisites (e.g., needing a valid node ID) or exclusions (e.g., not for scanning entire documents).
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 full burden for behavioral disclosure. It states what the tool does but lacks details on permissions, rate limits, output format, or whether it's read-only or destructive. This is insufficient for a tool that likely interacts with a design system.
Agents need to know what a tool does to the 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 unnecessary words. It's front-loaded and appropriately sized for a simple tool, earning full marks for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'scan' entails (e.g., returns text content, node IDs, or metadata) or address potential complexities like nested nodes or error handling, leaving significant gaps for 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?
The input schema has 100% description coverage, with 'nodeId' clearly documented. The description adds no additional parameter semantics beyond implying scanning occurs within a selected node, 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 resource ('all text nodes in the selected Figma node'), making the purpose immediately understandable. It doesn't explicitly differentiate from sibling tools like 'scan_nodes_by_types' or 'get_node_info', which prevents 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 for scanning text nodes, or how it differs from similar tools like 'scan_nodes_by_types' or 'get_node_info', leaving usage ambiguous.
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 operation is destructive, requires authentication, has rate limits, or what happens on conflicts. 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 gets straight to the point with zero wasted words. It's appropriately sized and front-loaded, making it easy to parse quickly 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 5 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain return values, error conditions, or behavioral nuances like whether updates are idempotent. The combination of missing annotations and sparse description leaves 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 already documents all parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema, such as explaining the relationship between 'nodeId' and 'annotationId' or clarifying when 'annotationId' is required. 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 verb ('create or update') and resource ('an annotation'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its sibling 'set_multiple_annotations' or explain how it differs from 'get_annotations', leaving room for improvement in 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 like 'set_multiple_annotations' for batch operations or 'get_annotations' for retrieval. It also lacks context about prerequisites, such as whether the node must exist or if specific permissions are required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_axis_alignB
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?
With no annotations provided, the description carries full burden but only states the action without behavioral details. It doesn't disclose permissions needed, whether changes are reversible, error conditions, or what happens to existing alignments, which 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 front-loads the core purpose without unnecessary words, making it easy to parse while conveying 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 mutation tool with no annotations and no output schema, the description is incomplete. It lacks behavioral context (e.g., side effects, error handling) and doesn't explain return values or success indicators, leaving significant gaps for agent usage.
Complex tools with many parameters or behaviors need more documentation. Simple 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 detailed explanations for all parameters, including enum values and effects (e.g., SPACE_BETWEEN ignores itemSpacing). The description adds no additional parameter semantics beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Set') and target resource ('primary and counter axis alignment for an auto-layout frame in Figma'), distinguishing it from siblings like set_layout_mode or set_item_spacing which handle different layout properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives is provided. It doesn't mention prerequisites (e.g., requires an auto-layout frame) or compare to siblings like set_layout_mode, leaving usage context implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_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?
No annotations are provided, so the description carries full burden for behavioral disclosure. While 'Set' implies a mutation, the description doesn't clarify whether this operation is reversible, what permissions are required, or how it interacts with other node properties. It also doesn't mention error conditions (e.g., invalid node IDs) or whether changes are immediate. For a mutation tool with zero annotation coverage, this represents significant gaps 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, direct sentence that efficiently communicates the core purpose without any fluff. It's front-loaded with the essential action and target, making it immediately scannable. Every word earns its place, and there's no redundant or verbose phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't address behavioral aspects like error handling, 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 that may have overlapping or complementary functionalities.
Complex tools with many parameters or behaviors need more documentation. Simple 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 thoroughly. The description adds no additional parameter information beyond what's in the schema (node ID, radius value, optional corner specification). Since the schema does the heavy lifting, the baseline score of 3 is appropriate—the description neither compensates for gaps nor adds meaningful semantic context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Set') and target ('corner radius of a node in Figma'), making the purpose immediately understandable. It distinguishes from siblings like 'set_fill_color' or 'set_stroke_color' by specifying the exact property being modified. However, it doesn't explicitly differentiate from other geometry-modifying tools like 'resize_node' or 'move_node' beyond the specific property name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. The description doesn't mention prerequisites (e.g., needing a valid node ID from another tool), nor does it specify when corner radius modification is appropriate versus other styling tools. With multiple 'set_' sibling tools available, the lack of comparative context leaves usage decisions ambiguous.
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 but only states what the tool does, not how it behaves. It doesn't mention permissions needed, whether changes are destructive, error conditions, or what happens if the node doesn't exist or isn't modifiable.
Agents need to know what a tool does to the 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 efficiently communicates the core functionality. It's appropriately sized for a straightforward tool, though it could be more front-loaded with key constraints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 after setting the color, whether the change is immediate/permanent, error handling, or visual feedback. The agent lacks crucial behavioral 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%, so the schema fully documents all 5 parameters. The description adds no additional parameter information beyond what's in the schema, 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 ('Set the fill color') and target ('a node in Figma'), specifying it can be TextNode or FrameNode. This distinguishes it from sibling tools like set_stroke_color, though it doesn't explicitly contrast with all visual property 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 fill color modification is appropriate versus other operations.
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?
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 address permissions, side effects, error conditions, or response format. The description is minimal and fails to provide essential behavioral context beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence that efficiently conveys the tool's purpose without unnecessary words. It is front-loaded with the core action and target, making it easy to understand at a glance, and there is no wasted verbiage or redundant 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?
Given the lack of annotations and output schema, the description is incomplete for a mutation tool. It does not explain what happens on success or failure, potential side effects, or how it interacts with other layout properties. For a tool that modifies visual elements, more context is needed to ensure safe and correct usage 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 both parameters in the input schema. The description does not add any additional meaning or context beyond what the schema provides, such as units for 'itemSpacing' or examples of valid 'nodeId' formats. However, with high schema coverage, a baseline score of 3 is appropriate as the schema adequately documents the 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 distance') and target ('between children in an auto-layout frame'), which is specific and unambiguous. However, it does not explicitly differentiate from sibling tools like 'set_layout_mode' or 'set_layout_sizing', which also affect layout properties, leaving some room for confusion about when to choose this tool over those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as other layout-related tools like 'set_layout_mode' or 'set_axis_align'. It lacks context about prerequisites, dependencies, or scenarios where this tool is appropriate, offering only a basic functional statement without usage instructions.
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?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states this is a mutation tool ('Set'), implying it modifies data, but doesn't specify whether changes are reversible, what permissions are required, or what happens on success/failure. 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 directly states the tool's purpose with zero 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?
Given this is a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what the tool returns, error conditions, or behavioral nuances like whether it affects child nodes. For a tool that modifies frame layout, more context is needed to use it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple 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 all three parameters (nodeId, layoutMode, layoutWrap) with descriptions and enums. The description adds no additional parameter semantics beyond what's in the schema, so it meets the baseline of 3 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 ('layout mode and wrap behavior of a frame in Figma'), making the purpose unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'set_layout_sizing' or 'set_axis_align', which also modify frame properties, so it doesn't fully distinguish from 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 provides no guidance on when to use this tool versus alternatives like 'set_layout_sizing' or 'set_axis_align', nor does it mention prerequisites such as needing a valid frame ID. It lacks explicit when/when-not instructions or named alternatives.
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?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a modification tool ('Set'), implying mutation, but doesn't address permissions needed, whether changes are reversible, error conditions, or what happens to existing sizing settings. The description provides minimal behavioral context beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that gets straight to the point with zero wasted words. It's appropriately sized for a tool with 3 parameters and good schema documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 the tool returns, error conditions, or important behavioral details like whether the operation is idempotent or requires specific permissions. The description leaves significant gaps given the tool's complexity and lack of structured metadata.
Complex tools with many parameters or behaviors need more documentation. Simple 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 well-documented in the schema itself. The description doesn't add any parameter-specific information beyond what's already in the schema descriptions, so it meets the baseline expectation when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain 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 ('horizontal and vertical sizing modes for an auto-layout frame in Figma'), providing specific verb+resource. However, it doesn't explicitly distinguish this tool from similar sibling tools like 'set_layout_mode' or 'set_axis_align', which also modify layout properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. While the description specifies it's for 'auto-layout frame', it doesn't mention prerequisites, constraints, or when other layout-related tools might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_multiple_annotationsC
Set multiple annotations parallelly in a node
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the node containing the elements to annotate | |
| annotations | Yes | Array of annotations to apply |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions 'parallelly' for concurrency but doesn't disclose critical behaviors like whether this overwrites existing annotations, requires specific permissions, or has side effects. 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 with no wasted words. It's front-loaded with the core action and target, 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 incomplete. It lacks details on behavioral traits (e.g., idempotency, error handling), return values, or how it interacts with sibling tools like 'get_annotations'. Given the complexity of bulk annotation operations, 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 the two parameters (nodeId and annotations array). The description adds no additional meaning beyond implying bulk operations, which is already suggested by the schema's array structure. 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 annotations') and target ('in a node'), with 'parallelly' suggesting simultaneous processing. It distinguishes from the sibling 'set_annotation' by indicating multiple annotations, though it doesn't explicitly contrast them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'set_annotation' or 'get_annotations' is provided. The description implies bulk operations but lacks explicit usage context or prerequisites.
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, the description carries full burden but only states the action without behavioral details. It doesn't disclose whether this is a destructive mutation, what permissions are needed, how errors are handled, or if changes are reversible. 'Parallelly' hints at concurrency but lacks specifics like rate limits or atomicity.
Agents need to know what a tool does to the 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 ('Set multiple text contents') and includes the key qualifier ('parallelly') without unnecessary words. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral traits (e.g., side effects, error handling), output expectations, and usage context relative to siblings, leaving significant gaps for 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%, so the schema fully documents parameters. The description adds no additional meaning beyond implying batch processing via 'multiple' and 'parallelly', which aligns with the array structure in the schema but doesn't provide extra semantic context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Set multiple text contents') and target ('in a node'), with 'parallelly' adding specificity about concurrency. It distinguishes from the sibling tool 'set_text_content' by handling multiple texts at once, 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?
No guidance is provided on when to use this tool versus alternatives like 'set_text_content' for single updates or other text-modifying tools. The description implies batch operations but lacks explicit usage context or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_paddingB
Set padding values for an auto-layout frame in Figma
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The ID of the frame to modify | |
| paddingTop | No | Top padding value | |
| 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?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Set' implies a mutation operation, it doesn't specify whether this requires edit permissions, what happens to existing padding values not mentioned, whether changes are reversible, or if there are rate limits. For a mutation tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the 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 straightforward tool and is perfectly front-loaded with 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?
Given this is a mutation tool with no annotations and no output schema, the description should do more to explain behavioral aspects like permissions, side effects, or response format. While the purpose is clear and parameters are well-documented in the schema, the lack of behavioral context for a write operation leaves the description incomplete for optimal agent usage.
Complex tools with many parameters or behaviors need more documentation. 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 all parameters clearly documented in the schema itself. The description doesn't add any parameter-specific information beyond what's already in the schema (e.g., units for padding values, default behaviors, or relationships between parameters). 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 ('Set padding values') and target resource ('for an auto-layout frame in Figma'), making the purpose immediately understandable. However, it doesn't explicitly differentiate this tool from similar sibling tools like 'set_item_spacing' or 'set_layout_mode', which also modify auto-layout properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., the frame must already exist and be in auto-layout mode), exclusions, or relationships to sibling tools like 'set_layout_mode' that might affect padding behavior.
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. It states this is a mutation operation ('Set'), which implies it modifies data, but provides no information about permissions required, whether changes are reversible, error conditions, or what happens if the node doesn't exist. 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 communicates the core purpose without any wasted words. It's appropriately sized for a straightforward tool and is front-loaded with the essential information. Every word earns its place in this concise formulation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 insufficiently complete. It doesn't address what the tool returns, error conditions, or behavioral constraints. While the schema covers parameters well, the overall context for using this tool safely and effectively is lacking, especially for a write operation in a design environment.
Complex tools with many parameters or behaviors need more documentation. Simple 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 itself. The description adds no additional parameter information beyond what's already in the schema fields. According to scoring rules, when schema coverage is high (>80%), the baseline score is 3 even with no param info in the description, which applies here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Set') and resource ('stroke color of a node in Figma'), making the purpose immediately understandable. It doesn't explicitly distinguish from sibling tools like 'set_fill_color' or 'set_text_content', but the specificity of 'stroke color' provides inherent differentiation. The description avoids tautology by not just repeating the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when this operation is appropriate, what prerequisites might exist (like needing a valid node ID), or when to choose other color-related tools like 'set_fill_color'. The agent must infer usage purely from the tool name and parameter schema.
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 offers limited behavioral insight. It implies a mutation ('Set') but doesn't disclose permissions needed, side effects (e.g., if it overrides existing content irreversibly), rate limits, or response format. This is inadequate for a mutation tool without annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core purpose and avoids unnecessary elaboration, 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?
For a mutation tool with no annotations and no output schema, the description is incomplete. It lacks critical context like success/error behaviors, return values, or operational constraints (e.g., node existence requirements). This leaves significant gaps for an agent to invoke the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple 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 ('nodeId' and 'text'). The description adds no additional parameter semantics beyond what's in the schema, such as format constraints or examples. Baseline 3 is appropriate when schema handles all parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Set') and target resource ('text content of an existing text node in Figma'), which is specific and unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'set_multiple_text_contents' or 'create_text', which would have earned 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 minimal guidance by specifying 'existing text node,' implying it's not for creating new nodes. However, it lacks explicit when-to-use rules, alternatives (e.g., vs. 'set_multiple_text_contents'), prerequisites, or error conditions, leaving the agent with incomplete context for optimal tool selection.
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.
33 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_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_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_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 (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_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_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" +]
33 tool updates
- First observed
clone_node - First observed
create_component_instance - 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_local_components - First observed
get_node_info - First observed
get_nodes_info - 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_fill_color - 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. For example, 'get_selection' and 'read_my_design' both retrieve selection information, and 'get_node_info' vs 'get_nodes_info' are similar but for single vs multiple nodes. Descriptions help clarify, but an agent might occasionally misselect between closely related tools.
Tool names follow a consistent snake_case verb_noun pattern throughout, such as 'create_frame', 'delete_node', and 'set_fill_color'. The naming is predictable and readable, with no deviations in style or convention across all 33 tools.
With 33 tools, the count is too high for a typical MCP server, making it feel heavy and potentially overwhelming. While Figma is a complex domain, this many tools suggests fragmentation rather than a well-scoped set, which could hinder agent usability.
The tool set covers a wide range of Figma operations, including creation, deletion, modification, and querying of nodes, with good lifecycle coverage. Minor gaps exist, such as no explicit tool for updating node properties beyond specific setters or handling component overrides, but agents can likely work around these.
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.
Serves your design system and coding standards to coding agents, so they stop guessing.
A Model Context Protocol server for Wix AI tools
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables seamless interaction with Figma via the Model Context Protocol, allowing LLM applications to access, manipulate, and track Figma files, components, and variables.21,701150MIT
- 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
- AlicenseBqualityDmaintenanceAllows Cursor AI to communicate with Figma for reading designs and modifying them programmatically through a Model Context Protocol integration.388941MIT
- FlicenseBqualityDmaintenanceEnables Cursor AI to read and modify Figma designs programmatically via the Model Context Protocol.388943-
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/paragdesai1/parag-Figma-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server