Figma Slides MCP — create and edit presentations with built-in D3, Rough.js, and Satori renderers for charts, diagrams, and custom graphics.
Figma Slides MCP has 20 well-named tools with consistent verb_noun patterns (start_session, get_slide_grid, create_slide, etc.). All tools have descriptions (avg ~120 chars, within baseline 34-392 range). Input schemas use Zod with type definitions and parameter descriptions. However, output schemas are NOT documented, responses are JSON-stringified without formal schema declarations. Error handling is minimal; most tools return raw bridge results without recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Parameter descriptions are adequate but lack format constraints (e.g., no regex for IDs, no min/max for numeric params). The server is STDIO-only, which caps protocol readiness at 50 regardless of definition quality.
Remove all content from a slide, keeping the slide itself.
Duplicate a node, optionally reparenting the clone.
Check if the Figma plugin is connected. Does NOT start the server — use start_session first.
Create a node (FRAME, RECTANGLE, ELLIPSE, POLYGON, STAR, LINE, VECTOR, TEXT) with optional properties. For tables, shapes-with-text, etc., use dedicated tools.
Create a new empty slide (fixed 1920x1080).
Remove a node from the canvas
Get editor type, document name, and page count from the connected Figma file
Output schemas not documented. Tools return JSON-stringified results without formal schema declarations. LLMs cannot predict response structure for planning downstream calls.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. Tools marked WRITE/DESTRUCTIVE in metadata but not exposed to LLM via MCP annotations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Get a rich semantic dump of everything on a slide: text content, shapes, images, positions, styles. Best for understanding what is on a slide before editing.
Get the full slide deck structure: rows and slides with their IDs and names
Read text content and style segments from a text node
Group multiple nodes together
Search available fonts. Use query to filter by family name. Without query, returns first 50 families.
Move a node to a different parent container
Capture thumbnails of all slides. Returns array of base64 PNG images.
Capture a visual screenshot of a slide as PNG. Returns base64-encoded image.
Modify properties of any node. Supports x, y, width, height, rotation, fills, strokes, strokeWeight, effects, opacity, blendMode, cornerRadius, visible, locked, layoutMode, itemSpacing, padding.
Set text content of a text node. Font loading is automatic.
Apply styles to a character range: fontSize, fontName, fills, letterSpacing, lineHeight, textDecoration, textCase
Start the WebSocket server and wait for the Figma plugin to connect. Call this when the user says "start figma session", "connect to figma", or "open slides". Returns connection status and instructions if not yet connected.
Ungroup a group node, returning children to parent
Minimal error handling. Tools return raw bridge results without recovery guidance. No categorization of errors as retryable, user-fixable, or fatal.
Parameter constraints missing. Numeric params (scale, maxSlides, rowIndex) lack min/max bounds. String params (nodeId, slideId) lack format/pattern descriptions. LLMs may pass invalid values.
STDIO transport only. Server is not remotely accessible and cannot be used by hosted MCP clients. Limits deployment scenarios.