Create from spec
figma_create_from_specBuild an entire Figma section from one JSON spec: frames with auto-layout, text, shapes, icons, images, and component instances. Each call is a single undo step.
Instructions
Build a whole SECTION in one call (one undo step): a header, hero, card, grid of cards or footer — frames with auto-layout, text, shapes (rectangle, ellipse, polygon, star, line, vector path), SVG icons, images by URL, components and instances. To build anything new: a wrapper frame, then one call per section into it by parentId; after each, figma_check_layout and one figma_export_node, then targeted fixes. Not a whole page in one payload: a section at a time keeps every step checkable. The full spec grammar: figma_get_guide { topic: "spec" }. Minimal shape: { "type": "frame", "name": "Card", "layout": "vertical", "gap": 16, "padding": 24, "children": [ { "type": "text", "content": "Title", "fontSize": 20 } ] }. A field a type does not take is refused, never dropped. A mid-way failure does not roll back: created[] and failedAt say what exists. Supply your own idempotencyKey for a large spec. An array of roots (a slide's content) needs parentId or pageId. Editors: Design; unverified: FigJam, Slides.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| spec | Yes | The node tree to build, as a JSON object serialised to a string (the tool description gives its grammar), or a JSON array of 1–50 such roots when parentId or pageId is given. Serialising it keeps the schema portable across providers — see docs/reference/tools.md. | |
| pageId | No | The page to build on, at its top level, when no parentId is given. Not with parentId. | |
| session | No | Optional sessionId or file name, to pick a Figma file when more than one is connected. | |
| parentId | No | Where to attach it: a frame, section, slide or page. Defaults to the current page (in Slides: the focused slide). | |
| idempotencyKey | No | Caller-owned retry key, ≤128 chars. Re-calling with the same key never executes twice: it returns the existing result, or waits for the op still in flight. Supply your own for anything large — if the MCP client times out (rather than the bridge), only a key you chose can be used to retry safely. |