MCP server for accessing Figma plugin console logs, screenshots, design system data, comments, and code generation via Cloudflare Workers or local mode
Server has 10 tools with mostly complete schemas and descriptions. Naming follows verb_noun convention (figma_get_*, figma_post_*, figma_delete_*, figma_update_*, figma_create_*, figma_audit_*). Descriptions are detailed (100-300+ chars) and include context about when to use tools and limitations. However, several tools lack output schema documentation, parameter descriptions are sometimes verbose without formal constraints (enums), and error handling guidance is minimal. figma_execute is particularly risky, it accepts arbitrary JavaScript with only a timeout parameter and minimal validation guidance. Tools like figma_update_variable and figma_create_variable lack enum constraints for resolvedType despite accepting only 4 values. No tool annotations (readOnlyHint/destructiveHint) present despite clear risk levels.
Refresh dashboard data (called from MCP App UI)
Analyze the health and AI-readiness of a Figma file's design system. Produces a scored dashboard evaluating naming conventions, token architecture, component metadata, accessibility, consistency, and coverage. Results are displayed in the dashboard UI.
Create a single Figma variable. For multiple variables, use figma_batch_create_variables instead (10-50x faster). Use figma_get_variables first to get collection IDs. Supports COLOR, FLOAT, STRING, BOOLEAN. Requires Figma Claude Connect plugin.
Create an empty variable collection. To create a collection WITH variables and modes in one step, use figma_setup_design_tokens instead. Requires Figma Claude Connect plugin.
Delete a comment from a Figma file by its comment ID. Use figma_get_comments to find comment IDs first.
figma_execute accepts arbitrary JavaScript with minimal validation. No input constraints, no output schema documented, no guidance on safe patterns vs dangerous operations. Timeout is the only safety parameter.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. figma_delete_comment, figma_delete_variable, figma_post_comment are marked DESTRUCTIVE/WRITE but lack machine-readable hints for agent safety.
resolvedType parameter in figma_create_variable and figma_update_variable accepts only 4 values (COLOR, FLOAT, STRING, BOOLEAN) but is defined as free-form string, not enum. LLMs will hallucinate invalid types.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | <=2025-11-25 | v2 |
Delete a Figma variable. WARNING: This is a destructive operation that cannot be undone (except with Figma's undo). Use figma_get_variables first to get variable IDs. Requires the Figma Claude Connect plugin to be running.
Execute arbitrary JavaScript in Figma's plugin context with full access to the figma API. Use for complex operations not covered by other tools. Requires Figma Claude Connect plugin. CAUTION: Can modify your document. **COMPONENT INSTANCES:** For instances (node.type === 'INSTANCE'), use figma_set_instance_properties — direct text editing FAILS SILENTLY. Check instance.componentProperties for available props (may have #nodeId suffixes). **RESULT ANALYSIS:** Check resultAnalysis.warning for silent failures (empty arrays, null returns). **VALIDATION:** After creating/modifying visuals: screenshot with figma_capture_screenshot, check alignment/spacing/proportions, iterate up to 3x. **PLACEMENT:** Always create components inside a Section or Frame, never on blank canvas. Use parent.insertChild(0, bg) for z-ordering backgrounds behind content.
Get comments on a Figma file. Returns comment threads with author, message, timestamps, and pinned node locations. Use include_resolved to also see resolved comments.
Post a comment on a Figma file, optionally pinned to a specific design node. Use after figma_check_design_parity to notify designers of drift when code is the canonical source. Supports replies to existing comment threads. Limitation: @mentions are a Figma UI-only feature — including '@name' in the message renders as plain text, not a clickable mention tag, and does not trigger Figma notifications.
Update a single variable's value. For multiple updates, use figma_batch_update_variables instead (10-50x faster). Use figma_get_variables first for IDs. COLOR: hex '#FF0000', FLOAT: number, STRING: text, BOOLEAN: true/false. Requires Figma Claude Connect plugin.
Output schemas not documented for most tools. figma_get_comments returns JSON with 'comments' array and 'summary' object, but structure is inferred from code, not declared in tool schema. figma_audit_design_system returns 'dashboard UI' but no field list provided.
Error handling lacks recovery guidance. Errors return JSON with 'error' and 'message' fields but do not suggest next steps (e.g., 'Try figma_get_variables() first to get collection IDs'). No error classification (retryable vs fatal).