Figma MCP: list frames in a file and fetch one frame's JSON and image safely. 2 tools.
Two tools with clear verb-noun naming (list_frames, fetch_frame) and documented input schemas using Zod validation. Descriptions are present but brief (18-26 chars for tools, 10-15 chars for params). Input parameters have type constraints and regex patterns enforced server-side, but descriptions lack actionable guidance on format, dependencies, and error recovery. Output schemas are not documented, LLMs cannot predict response structure. No error handling guidance in descriptions. Security is strong (token injection, path containment), but composition is minimal (only 2 tools, no chaining support).
Fetch a frame's JSON node data and render it as a PNG image, writing both to a local bundle directory.
List all frames in a Figma file.
Tool descriptions are too brief (18-26 chars). Rubric baseline is 194 chars. Descriptions lack WHEN to use, WHAT it returns, and error recovery guidance. LLMs cannot determine tool selection confidence.
Output schemas are not documented. LLMs cannot predict response structure (e.g., does list_frames return frame IDs, names, dimensions, or all three?). Rubric requires 100% of A+ tools to document return types.
Parameter descriptions are minimal (10-15 chars). 'The Figma file key' lacks format guidance. Rubric baseline is 72 chars per param. Descriptions should state: expected format, character restrictions, length bounds, and examples of valid/invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
No error handling guidance in tool descriptions. Errors like 'FIGMA_NOT_CONFIGURED', 'FigmaRequestError', and 'ResponseSizeError' are defined in code but not surfaced to LLM. Descriptions should state: what errors can occur, which are retryable, and what the LLM should do next.
fetch_frame accepts 'out_dir' parameter requiring absolute path under FIGMA_OUTPUT_ROOT. Description does not explain this constraint or what happens if the path is invalid. LLMs may pass arbitrary paths, causing silent failures or security issues.