A Model Context Protocol server for Figma API integration
Figma MCP has complete input schemas for all 12 tools with proper JSON Schema structure (type, properties, required). However, tool descriptions are uniformly terse (10-30 chars), falling well below the 50-200 char baseline for LLM-optimized descriptions. Parameter descriptions are minimal (3-10 words). No output schemas are documented. Error handling is basic (Axios error catch with generic message). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk stratification (READ_ONLY, WRITE, DESTRUCTIVE). Naming is verb-first and clear (get_*, post_*, delete_*, create_*), following pattern:tool conventions. No parameter validation guidance, no enum constraints, no format specifications. Missing dependency hints and recovery guidance.
Create a webhook
Delete a comment from a Figma file
Delete a webhook
Get published styles
Get information about a Figma file
Get comments from a Figma file
Get components in a file
Tool descriptions are critically short (10-30 chars). LLM cannot determine when/why to select tool. Baseline is 50-200 chars. E.g., 'Get information about a Figma file' lacks context on what 'information' includes, when to call vs get_file_comments, or what fields are returned.
No output schemas documented. LLM cannot plan downstream calls or extract required fields. E.g., does get_file return file_id, team_id, project_id? Are they needed for chaining to get_file_comments?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | 2026-07-28+ | v2 |
Get version history of a file
Get files in a project
Get projects for a team
List webhooks
Post a comment to a Figma file
No tool annotations despite clear risk stratification. delete_comment and delete_webhook are DESTRUCTIVE but lack destructiveHint. get_* tools are READ_ONLY but lack readOnlyHint. Agents cannot reason about retry safety or side effects.
Parameter descriptions are minimal (3-10 words). 'The Figma file key' does not explain format, length, or how to obtain it. Baseline is 50-100 chars with format/constraint guidance.
No enum constraints or validation guidance. create_webhook accepts free-form 'event_type' string with no list of valid values. LLM will hallucinate invalid event types.