MCP server that reads and edits the open Figma document through a plugin. One static binary, no API token, no REST quotas.
Rusty Figma MCP has well-structured tool definitions with consistent naming (verb_noun pattern: get*, create*, delete*, set*) and clear descriptions (avg ~80 chars). All 12 tools have input schemas with type definitions and parameter descriptions. However, output schemas are not documented, responses are returned verbatim from the Figma host without LLM-facing structure documentation. Parameter descriptions are functional but minimal (10-40 chars), lacking constraint details, ranges, or format guidance. Error handling is basic (generic error text wrapping). No tool annotations (readOnlyHint, destructiveHint) despite clear risk stratification (READ_ONLY, WRITE, DESTRUCTIVE). Missing idempotency guidance for write operations.
Duplicate a node, keeping every child, style and effect intact
Place an image on the current page as a rectangle with an image fill
Remove nodes by id
Get the entire document tree, with optional depth limit. Reports progress as pages are loaded.
Get metadata about the current Figma document and page
Get a specific node by its Figma node id
Get list of all pages in the current Figma document
Output schemas not documented. Tools return verbatim Figma API responses without LLM-facing structure documentation. LLMs cannot plan downstream calls or extract specific fields reliably.
Tool annotations missing. Despite clear risk stratification (READ_ONLY, WRITE, DESTRUCTIVE), no readOnlyHint, destructiveHint, or idempotentHint annotations present. LLMs cannot infer safety properties.
Parameter descriptions lack constraint details. E.g., 'depth' described as 'Levels of the node tree' without min/max bounds. 'scale' in getScreenshot lacks valid range (1.0 - 4.0?). Format constraints missing.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | <=2025-11-25 | v2 |
Render a node or the current page as a PNG image and return it as base64
Get the currently selected nodes on the active page
Get all styles (colors, typography, effects) defined in the document
Get all variable definitions in the document
Replace the contents of a text node
Error handling generic. Tools return error text without recovery guidance. E.g., 'node not found' does not suggest search_nodes() or list available nodes. No error classification (retryable vs fatal).
Destructive operations lack confirmation step. deleteNodes and setText are irreversible but have no dry-run or confirmation mechanism. Agents can accidentally delete or overwrite without safeguard.