MCP server for Figma that extracts design data, generates unit tests and code implementation prompts, downloads images, and performs code review against Figma designs
The Figma MCP server has 4 tools with explicit schema definitions and descriptions. However, several tools exhibit significant quality gaps: (1) Tool naming is inconsistent, 'generate_ut' and 'check_code' do not clearly convey their purpose at a glance (abbreviated acronyms and vague verbs). (2) Two of four tools ('generate_ut' and 'check_code') are prompt-generation utilities rather than data-fetching or action tools, which limits their composability and reusability. (3) Parameter descriptions are present but often verbose and assume domain knowledge (Figma IDs, node formats). (4) Output schemas are not documented in the visible code, tools return text content without explicit field definitions. (5) Error handling is basic (try-catch with generic error text) and does not guide recovery. (6) No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are visible. On the positive side: all 4 tools have input schemas with Zod validation and reasonable descriptions; parameter types are declared; and naming does start with verbs. Average per-tool score: 52.
Check and compare code implementation against Figma design. Parses Figma link, optionally reads documentation, and generates code review prompt for Cursor to compare existing code with design. Usage: CD_{figma_link} or check_code with figmaLink parameter.
Download SVG and PNG images used in a Figma file based on the IDs of image or icon nodes
Generate unit test cases for a Figma screen. Parses Figma link, optionally reads documentation for context, and generates comprehensive unit test prompt for Cursor. Usage: UT_{figma_link} or generate_ut with figmaLink parameter.
Fetch Figma file or node data and optionally simplify it. Returns design data including nodes, styles, and optionally screenshots. If simplified=true, returns screen name, components, fields, and actions for prompt building.
Tool names 'generate_ut' and 'check_code' use vague or abbreviated verbs. 'generate_ut' should be 'generate_unit_test_prompt' or similar; 'check_code' is ambiguous (check validity? check style? check coverage?). Abbreviated acronyms ('UT', 'CD') are not self-documenting.
Output schemas are not documented. Tools return unstructured text (type 'text') without declaring what fields or structure the LLM should expect. This forces the LLM to parse free-form text, increasing hallucination risk and wasting tokens on unstructured parsing.
Error handling is minimal. Tools catch errors and return a generic error text, but do not categorize errors (retryable vs. fatal) or guide recovery. E.g., 'Error fetching Figma data: ...' tells the LLM nothing about whether to retry, query the user, or give up.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | <=2025-11-25 | v2 |
No tool annotations visible. Tools do not declare readOnlyHint, destructiveHint, or idempotentHint. The rubric specifies that tools modifying state should declare this, 'download_figma_images' writes files but has no annotation.
Parameter descriptions for 'get_figma_data' and 'download_figma_images' use technical jargon and Figma-specific formats (e.g., 'format 1234:5678 or I5666:180910;1:10515;1:10336') without clearly explaining the format constraint. These should be regex patterns in the schema, not prose in descriptions.
'generate_ut' and 'check_code' are prompt-generation utilities, not data tools. They construct human-readable prompts for Cursor IDE but do not directly manipulate Figma data or code. This limits composability, the LLM receives a prompt to forward to another tool (Cursor), rather than structured data it can reason about.