About figma-generate-changelog
figma-generate-changelog is a shell-based skill for turning differences between Figma file versions into release-note-style Markdown, including version labels, authors, and timestamps. It is intended for users working in shell-enabled coding environments who need a changelog or structured diff.
Key features
- 01Markdown changelog from version diffs
- 02Version labels, authors, and timestamps
- 03Page structure change summaries
- 04Optional component-level change details
- 05Summary, standard, and detailed modes
- 06JSON output with structured diff
Use cases
- 01Draft release notes between Figma versions
- 02Review page additions, removals, and renames
- 03Document component changes for selected IDs
- 04Export rendered notes and diff data
MCP support
This is a skill rather than an MCP server; the README describes shell commands that call the Figma REST API using a personal access token.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ southleft/ figma-console-mcp-skills --skill figma-generate-changelogAfter installing, type/figma-generate-changelogin Claude Code to confirm it loaded.
Bundled filesscripts/generate-changelog.mjs
Details
From the project READMEfigma-generate-changelog — markdown changelog between two versions
Builds on the same version diff as figma-version-history, then formats it as release-notes-style
markdown and enriches each version reference with the author handle, label, and timestamp.
Setup — terminal + token required. This skill runs shell commands, so it works in Claude Code (including the "Code" tab inside Claude Desktop), Cursor, Codex, or Gemini CLI — it does not run in plain Claude Desktop or claude.ai chat (no shell). The Figma connector's OAuth login does not authorize these REST calls, so you must supply your own Figma personal access token: in Figma go to Settings → Security → Personal access tokens, generate one with scope File content: read (plus File versions: read), then set it in your shell:
export FIGMA_TOKEN="figd_…". The script reads it from the environment at runtime — never put the token in a skill file.
Setup & skill boundaries
- All requests use
X-Figma-Token: $FIGMA_TOKENagainsthttps://api.figma.com. - Related: figma-version-history for the structured diff and the endpoint reference.
Derive the file key
FILE_KEY=$(echo "$FILE_URL" | sed -E 's#.*/(design|file)/([A-Za-z0-9]+).*#\2#')
Workflow
-
Pick the two versions. List them first if you don't have the IDs:
../figma-version-history/scripts/list-versions.sh ABC123def456 -
Generate the changelog with
scripts/generate-changelog.mjs:# Page-level changelog against HEAD node scripts/generate-changelog.mjs --file ABC123def456 --from 4096761871 --to current # Include per-component changes, detailed bullets node scripts/generate-changelog.mjs --file ABC123def456 --from 4096761871 --to 4096800000 \ --components 695:313,420:88 --mode detailedBy default it prints markdown to stdout. Pass
--jsonto get{ markdown, data }(the structured diff alongside the rendered text). Redirect to a file for release notes:node scripts/generate-changelog.mjs --file ABC123def456 --from 4096761871 --to current \ > CHANGELOG-figma.md -
Modes mirror the diff:
summary(one punchy line of counts),standard(sectioned with counts, default),detailed(full per-property and per-binding bullets).
What it captures
- A header with From / To version refs — label (or
(unlabeled)), date, and author handle — plus the span in days. Author/label come from one extra cheap call to the versions list. - A Page Structure section: pages added / removed / renamed.
- A Components section (when
--componentsis passed): per-component change counts and bullets for renames, description changes, children added/removed,componentPropertyDefinitionschanges, and variable-binding changes. - A Notes section listing the diff's known blind spots (instances on the canvas, raw layout/visual props, variable VALUE changes, style content — none of which Figma REST exposes for historical versions).
Notes
- Author enrichment is best-effort: it pages the versions list up to ~200 entries back to find
each version's metadata. If a version is older than that lookback (or
Figmasystem-attributed), the ref degrades gracefully to the version id. current/HEAD references render as "Current state (last modified …)".