Figma MCP Server for Design → JSX. Exposes semantic, JSX-ready Figma tools.
Server has 4 tools with basic schemas and descriptions, but significant quality gaps. All tools have descriptions (10-30 chars, below 50-char baseline for LLM optimization). Input schemas present but minimal, only file_key and node_id parameters with basic string types. No output schemas documented. No error handling guidance, no parameter constraints (enums, ranges), no idempotency hints. Tools lack context about when to use each vs. alternatives (e.g., get_hero_section vs. get_text_blocks). No mention of API rate limits, authentication failures, or invalid node_id handling. Descriptions are too terse to guide LLM tool selection effectively.
Returns all colors used
Returns JSX-ready hero section data
Returns pages and top-level frames
Returns all text nodes
Descriptions are 10 - 30 characters, well below the 50 - 200 char baseline for LLM-optimized descriptions. Terse descriptions like 'Returns JSX-ready hero section data' do not explain WHEN to use this tool vs. get_text_blocks, what prerequisites exist (valid node_id?), or what the output structure contains.
No output schemas documented. LLMs cannot plan downstream calls or extract required fields. E.g., get_page_structure returns a list of pages with frames, but the exact structure (field names, types, nesting) is invisible to the agent.
No error handling guidance. Code calls res.raise_for_status() but does not catch or document what happens on invalid file_key, missing node_id, or API rate limits. LLM receives raw HTTP errors with no recovery hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | 2026-07-28+ | v2 |
Parameter descriptions missing. file_key and node_id parameters have minimal descriptions ('Figma file key identifier', 'Figma node ID...'). No guidance on format, length, or how to obtain them. LLM cannot infer whether to pass a URL, UUID, or opaque string.
No tool composition guidance. Four similar tools (get_hero_section, get_text_blocks, get_colors) all accept file_key + node_id. Descriptions do not explain the semantic difference or when to call each. LLM may call all four redundantly or pick the wrong one.