The Figma desktop app as an MCP server: the full Plugin API for AI agents, on your machine. No cloud API, no token, no quota.
The server provides 10 tools with reasonable naming (verb-prefixed: figma_status, figma_eval, figma_find, etc.) and descriptions present for all tools. However, quality is inconsistent across dimensions. Most tool descriptions are adequate (50-150 chars, well within bounds), but parameter descriptions are sparse or absent in many cases. Input schemas are present but incomplete: many lack parameter descriptions, type constraints, and ranges. No output schemas are documented anywhere in the source. Error handling exists but is minimal, the server will return errors but does not provide actionable recovery guidance for LLMs. Tool composition is reasonable (each does one thing), but several tools lack clarity on when to use them vs. alternatives (e.g., figma_find vs figma_metadata both retrieve node information). The 'figma_eval' tool is inherently risky, accepting arbitrary JavaScript code, no security constraints or validation hints are visible. Overall, this is a functional set of definitions that would work but falls short of production-grade clarity and safety.
List nodes that have been modified in the current session (changed since the plugin started).
Execute arbitrary code in the Figma plugin runtime, with access to the Plugin API and helper functions.
Export nodes as PNG, SVG, PDF, or other formats. Returns file paths and optionally inlines PNG bytes as base64 image content.
Find nodes in the current document by type and/or name pattern matching.
Get the document's edit history (undoable changes).
Import components and assets from the team library by key.
No output schemas documented. LLMs cannot predict what fields or structure each tool returns, forcing them to reason blindly about downstream tool inputs and risk type mismatches.
figma_eval accepts arbitrary JavaScript code with no validation, sanitization, or permission constraints. Description does not warn about security implications or guide safe usage. This is a critical injection vector.
Parameter descriptions are absent or minimal across all tools. For example, figma_find's 'selector' parameter says 'CSS-like selector' but does not explain syntax rules, valid operators, or error cases. figma_export's 'scale' parameter lacks guidance on behavior outside 0.01 - 4 range (clamped? rejected?). LLMs cannot safely use these parameters without trial and error.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Get metadata about nodes: id, name, type, bounds, fills, strokes, text content, etc.
Place an image from the local filesystem into a Figma node, with optional scaling.
Report plugin connection status, execution environment, and how to connect the plugin.
Get or create design tokens (variables and variable collections) in the document.
No enumerated constraints on string parameters. figma_export 'format' accepts 'PNG, SVG, PDF, JPG' but has no enum constraint, LLMs may hallucinate variants like 'png' (lowercase), 'JPEG', or 'BMP'. This causes silent failures or unexpected behavior.
Error handling and recovery guidance are absent. Tools will fail (e.g., node not found, invalid selector, export timeout), but the source code shows no explicit error responses with recovery hints (e.g., 'Try figma_find() first to locate the node').
Tool disambiguation is weak. figma_find and figma_metadata both retrieve node information; their descriptions do not clearly explain when to use each (find by pattern vs. get full metadata by ID). LLMs may waste calls choosing the wrong tool.
figma_place_image lacks guidance on node type constraints. Can it place an image into any node, or only specific types (e.g., rectangles, frames)? What happens if the node type is unsupported? No recovery path is documented.
figma_tokens description is vague. It says 'Get or create design tokens' but does not explain the difference in behavior between the two modes, what happens if a collection already exists, or how to use the output. LLMs cannot plan multi-step token workflows safely.