New Endpoints
library— discover and use published team library components and styles via Figma REST API. Results grouped by source file and section, mirroring Figma's Libraries browser. Scopedlibraryandsectionfilters ongetdisambiguate overlapping names.icons— search 200,000+ icons from 100+ collections via the Iconify public API. Auto-detects fill vs stroke icons and routes color bindings accordingly. (#100)images— search Pexels stock photos withsearch, visually confirm withpreview, and place withimageUrl:"pexel:<id>". Photographer attribution applied automatically. (#101)annotations— create and manage design annotations with categories, markdown labels, and measurement properties. Inlineannotationsparam onframes.create,text.create, and shape creation. (#104)
New Features
imageUrlon all node types — acceptspexel:<id>, any public URL, or a local file path. SVGs are inserted as vector nodes; raster images become IMAGE fills.imageScaleModecontrols FILL/FIT/CROP/TILE. (#101)- Unified style resolution —
textStyleName,fillStyleName,strokeStyleName, andeffectStyleNameall resolve local styles first, falling back to library import on demand. No manual import step. explicitModeoninstances.create— pin variable modes (e.g. Light/Dark) at creation time.- Post-append overflow warning — warns when children exceed a FIXED-sized auto-layout parent.
skipInstancesandminSeverityonlint.check— consistent withauditon all node endpoints.flexStringListcoercion — bare strings auto-wrap to arrays for allstring[]params.dev_reloadtool — hot-reload the MCP server without restarting the AI client.- Claude Code skills —
figma-start-macosautomates Figma launch, plugin loading, and connection.vibma-devenforces single-source-of-truth workflow for plugin development.
Bug Fixes
instances.cloneon library instances no longer produces aCOMPONENT_SET— clone now returns a same-type copy.text.updatewith librarytextStyleNameno longer silently drops the style.text.updatewith explicitwidthnow setstextAutoResize:"HEIGHT"so the dimension takes effect.text.updatewith an unresolved style name now emits an error hint instead of silent"ok".lintempty-container no longer flags frames with image or gradient fills.lintoverflow-parent suppresses instance-internal findings whenskipInstancesis true.- Cross-axis sizing respects parent alignment — FILL no longer overrides CENTER or BASELINE. (#105)
- Width/height with HUG or FILL now warns instead of silently discarding the value. (#106)
- lineHeight < 10 warns when a bare number looks like a CSS multiplier instead of pixels. (#102)
- fontWeight on update suggests
fontStylewhen the agent passes a non-standard weight name. (#102) - REST API gradient format detected and warned —
gradientHandlePositionsis stripped before applying fills to avoid plugin API rejection. (#102) - imageUrl in children — pre-processor now recurses into nested children arrays. (#102)
- Library style imports guarded against plugin thread stalls with per-call timeouts and batch caps.
Schema & Compiler
- Atomic mixins — new
fill_params,stroke_params,corner_params,scene_params,vector_style_paramsfor cleaner param composition. (#100) $mixinat method level — compiler now supports mixin expansion inside method params, not just type discriminants.
Configuration
Three optional environment variables unlock additional tools:
| Variable | Purpose |
|---|---|
FIGMA_API_TOKEN
| Library tool — requires a Figma PAT with file_content:read and team_library_content:read scopes
|
FIGMA_TEAM_ID
| Default team for library discovery — the number in figma.com/files/team/<ID>/…
|
PEXELS_API_KEY
| Images tool — free at pexels.com/api/key |
All core design tools work without API keys. The library tool validates credentials at startup and is hidden when they are missing or invalid.