Help us improve
Share bugs, ideas, or general feedback.
Export Figma variables to design token files in DTCG, CSS custom properties, Tailwind v4/v3, SCSS, TypeScript, JSON, Style Dictionary, or Tokens Studio. Works on any Figma plan via Plugin API.
npx claudepluginhub southleft/figma-console-mcp-skills --plugin figma-console-mcp-skillsHow this skill is triggered — by the user, by Claude, or both
Slash command
/figma-console-mcp-skills:figma-export-tokensThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Read every local variable in a Figma file and emit design-token files. The canonical output is
Extracts design tokens (colors, spacing, typography) and variables from Figma files via MCP server, generating CSS Custom Properties, TypeScript/JS objects, JSON, Tailwind config, and Style Dictionary formats for design systems.
Extracts design tokens including colors, typography, and spacing from Figma files via REST API. Converts to CSS custom properties, JSON, or Tailwind config for design-to-code pipelines.
Syncs design tokens between code and Figma using Variables API or Tokens Studio plugin. Use when establishing Figma-to-code workflows, exporting Figma tokens, or setting up design-development handoff.
Share bugs, ideas, or general feedback.
Read every local variable in a Figma file and emit design-token files. The canonical output is DTCG (W3C Design Tokens Community Group JSON); CSS, Tailwind, SCSS, TS, and JSON derive from it.
Why this beats a raw REST export: Figma's Variables REST API is Enterprise-only (403 on
Starter/Pro/Org). This skill reads through the Plugin API via use_figma, so it works on every
plan and resolves aliases + multi-mode values that get_variable_defs (default mode only) drops.
use_figma rules — load the official figma-use skill first; it is the full Figma Plugin API reference. Essentials these scripts rely on: plain JS with top-level await + return (no IIFE, no figma.closePlugin(); console.log is not returned), inputs inlined as const at the top of each script, colors in 0–1 range, load fonts before any text op, await figma.getNodeByIdAsync(...), and atomic errors (a failed script applies nothing — read the error, fix, retry).figma-import-tokens skill.dtcg is the safe default), whether
to split by mode/collection, and the output path. Get the file key from the active Figma file or a
URL the user provides.scripts/read-variables.js via use_figma
(skillNames: "figma-export-tokens"). It returns the normalized collections/modes/variables tree
with hex colors, resolved alias references, scopes, and code syntax.variables.json.node scripts/convert-tokens.mjs variables.json --format dtcg --out tokens/
# --format: dtcg (default) | css-vars | tailwind-v4 | tailwind-v3 | scss | ts-module
# | json-flat | json-nested | style-dictionary-v3 | tokens-studio
# (aliases: css, tailwind, ts)
# --out <dir> write file(s) — tokens-studio writes several; omit to print to stdout
# --prefix <p> prefix CSS/SCSS var names
# --modes Light,Dark include only these modes (default: all)
# --collection <substr> include only collections whose name contains <substr>
This matches the Console figma_export_tokens formatters. It handles exactly what freehand
conversion gets wrong: per-type units (opacity/line-height unitless, spacing/radius px);
multi-mode output (CSS & Tailwind v4 emit :root + .dark/[data-theme]; TS/JSON emit
{mode: value}; SCSS suffixes modes; DTCG keeps them in $extensions); aliases → var()/{ref};
font-weight names → numbers; DTCG round-trip metadata; and it warns on slug collisions and
non-numeric weights. (style-dictionary-v3 and tailwind-v3 use the primary mode, matching the
Console — those formats have no native multi-mode encoding.)read-variables.js runs anywhere via use_figma. convert-tokens.mjs is Node,
so it needs a terminal-capable agent (Claude Code, the Code tab in Claude Desktop, Cursor, Codex,
Gemini CLI). In plain Desktop/web chat (no shell), run the converter on your own machine against the
saved variables.json, or accept a best-effort inline conversion for DTCG only.var(--…) / {ref} — export all collections together so
those references resolve.