Connect Cursor AI to Figma via MCP (Model Context Protocol) — read and modify designs in real time
Figmind provides 20 well-named tools with consistently detailed descriptions (averaging 150-200 chars, within the 10-1024 baseline). Most tools include full JSON Schema input definitions with type declarations and parameter descriptions. However, there are critical gaps in output schema documentation, error handling guidance, and security considerations. The server excels at naming clarity (verb_noun pattern throughout) and parameter constraints (enums for layoutMode, alignment, format), but fails to document what callers should expect as responses. STDIO transport is a hard blocker for production use, the server cannot be accessed by hosted/remote MCP clients. No error recovery hints, no audit trail declarations, and no tool annotation hints (destructiveHint for write operations) are present despite managing state-changing Figma operations.
Apply a local style to a node by style ID. Use get_design_system_kit to find available style IDs (returned in colorStyles and textStyles).
Apply multiple set_node_property operations in a single call. Returns per-node success/error results.
Create an instance of a published component by its key. Use find_components to discover component keys. Set properties immediately via the properties param to avoid an extra set_instance_properties call.
Create a new frame in the Figma canvas. Prefer create_from_html for complex nested layouts. Use this for simple containers or when you need precise control.
Create a primitive shape on the Figma canvas (RECTANGLE, ELLIPSE, POLYGON, STAR, LINE)
Create a text node in the Figma canvas. Use get_used_fonts first to know which fonts are available in the file — prefer those over hardcoded names like Inter.
CRITICAL: No output schemas documented for any tool. Callers cannot predict what fields are returned, forcing unstructured parsing and increasing LLM hallucination risk. Response structures must be formally documented in the tool definition.
CRITICAL: No tool annotations (destructiveHint, readOnlyHint, idempotentHint) present. Write operations like create_frame, delete_node, and execute lack destructiveHint declarations. Agents cannot determine which calls are safe to retry or which require confirmation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 69 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Detach a component instance, converting it to a plain editable frame. Use when you need to customize beyond what component properties allow.
Duplicate an existing Figma node and place the copy next to the original or at a given position
Run arbitrary Figma Plugin API code directly. The code runs inside an async function with access to the `figma` global and a `console` object that captures logs. Use this as an escape hatch for operations not covered by other tools, or to batch multiple operations efficiently.
Export multiple Figma nodes as images in a single call. Returns each image inline so the AI can see them directly. Call this after creating a flow of screens to do a final visual review.
Export a Figma node as an image (PNG, SVG, or JPG). Returns the image inline so the AI can see it directly — no link needed. Call this after creating or editing nodes to visually confirm the result.
Export the entire current Figma page as a single image showing all frames together. Returns the image inline so the AI can see the full canvas layout at once. Use this to get a birds-eye view of the design.
Scan the current Figma page and return ALL component instances grouped by component set — including components from connected external libraries. Use this BEFORE creating any screen or UI element to discover what real Figma components are available.
Get the available properties and variants of a component. Use this before set_instance_properties to know which values are valid.
ALWAYS call this before creating any screen, component, or layout. Returns the complete design system context from the current Figma file in a single call — fonts, colors, text styles, variables, and effects. Also automatically exports a screenshot of the entire current page so you can understand the project's visual style and layout before creating anything new.
Get a complete visual overview of ALL pages in the current Figma file. For each page, returns its name, frame count, and a screenshot of its full canvas. Use this when you need to understand the full scope of an existing project before creating something new.
Get text styles and color variables from ALL connected external design system libraries (e.g. Boreal Foundations, FFP Design System - Mobile, Hangar Web). Call this when you need the exact style IDs for typography tokens like "Body/Body Large", "Heading/H1", etc., or color variable names.
Set an image as the fill of a Figma node by providing a public image URL
Set component property values on an instance node: swap variants (e.g. type=Primary), toggle booleans (e.g. hasIcon=true), or override text.
Swap an instance's component while preserving existing overrides
HIGH: Error handling lacks recovery guidance. Code shows permission checks (write operations blocked in Dev Mode) but no structured error responses telling the LLM what to try next. Errors are thrown as raw strings without classification (retryable vs user-fixable vs fatal).
HIGH: 'execute' tool is dangerous and under-constrained. Accepts arbitrary JavaScript with no input validation, no execution timeout, and no capability restrictions. It bypasses all MCP safety patterns and should either be removed or wrapped with extensive guardrails.
MEDIUM: Descriptions for get_design_system_kit, get_linked_library_tokens, and find_components_in_page mention 'call this BEFORE' but don't explain what happens if you don't. Dependencies between tools should be explicit in parameter descriptions and error paths.
MEDIUM: bulk_update's input schema shows 'updates' array but the element schema is not visible in the provided source. Cannot verify that each update object has proper constraints (e.g., valid nodeId, valid property names). Inferred schema.
MEDIUM: No pagination support visible on any listing or discovery tool (get_file_context, get_linked_library_tokens, find_components_in_page). Large Figma files could return thousands of components, blowing context windows. These should accept limit/offset or cursor parameters.
MEDIUM: Several tools accept string identifiers (componentKey, nodeId, styleId) without documenting their format or how to obtain them. For example, componentKey is documented as 'from find_components' but the exact string format is not specified.