AAgentic Design School
Tool experiment
2026-06-02

Pushing the design system into Figma over MCP

The same payload that rebuilds the OpenPencil canvas also targets Figma: a generated canvas payload, a local plugin that writes native frames and page snapshots, and a remote MCP path that is partly blocked. This note documents what worked, what is blocked, and the workaround that ships today.

Signal

Figma now exposes an official MCP server, which raises a practical question for a design-as-code site: can an agent push a generated design system into a real Figma file, so the team that reviews in Figma sees the same truth as the repository — without anyone redrawing frames?

Note 1

What we tried

The Figma target reuses the design-system inventory described in the OpenPencil note. A builder script converts that inventory into a Figma-shaped canvas payload: a README and table of contents, the token and variable hierarchy, shadcn component variants and states, the custom site and article components, and full-length snapshots of eleven pages captured from the running Next.js app. The snapshots are pre-sliced into segments so each image stays within Figma's fill size limits.

Three write paths were tested. First, the standalone remote path: npx mcp-remote pointed at https://mcp.figma.com/mcp, driven by the sync script's push flag. Second, the Figma MCP tools already registered inside Codex. Third, a local development plugin in designs/figma-canvas-plugin that reads the generated payload and writes native Figma pages, frames, and snapshot fills directly inside the file.

The Figma leg of the sync pipeline
# rebuild the Figma payload alongside the OpenPencil canvas
npm run agentic:figma:build

# attempt the remote MCP push (currently blocked at OAuth)
npm run agentic:sync:once:push

# inspect the dated result
npm run agentic:sync:status

Note 2

What changed, and what is still blocked

The blocker first, because it is the most useful finding. The standalone mcp-remote client is rejected before tool listing: the remote endpoint returns HTTP 403 during OAuth client registration in this environment, and the connection closes with MCP error -32000. The status file records this honestly as external-mcp-remote-blocked. Nothing in the payload or the script is at fault — the failure is at the authentication boundary, which is exactly where most 'agent writes to vendor SaaS' workflows currently break.

The two workarounds both shipped. The Figma MCP tools registered through Codex authenticate fine: the latest check confirms whoami, read access to the target file, and an 'Agentic canvas sync' page containing twenty top-level nodes including the Figma library frame and the article-artifacts frame. And the local plugin is the reliable writer: import it once as a development plugin, point it at the generated payload, and it creates the native frames and places the sliced page snapshots without any remote endpoint involved.

  • Generated payload: 133 visual artifacts, 151 code blocks, 11 page snapshots, rebuilt by the same watch loop as OpenPencil.
  • Remote mcp-remote path: blocked at OAuth registration (HTTP 403, connection closed before tool listing).
  • Codex-registered Figma MCP: authenticated, verified read access, used for inspection and targeted writes.
  • Local development plugin: the dependable write path for full canvas refreshes today.

Note 3

Why this matters for designers

Two lessons travel beyond this repository. First, design-to-canvas sync is mostly a payload problem, not a tool problem: once the design system exists as machine-readable JSON, retargeting it from OpenPencil to Figma was a renderer change, not a rethink. Second, plan for the authentication boundary to be the weakest link. Enterprise admin settings, OAuth client registration, and connector allowlists will block the elegant remote path more often than the API will — so keep a local writer (a plugin, a file import, a CLI) as the boring fallback that always works, and record every failure in a dated status file so the next attempt starts from evidence instead of memory.

Evidence

Artifacts to inspect

  • designs/figma-canvas-payload.json — the generated payload: 133 visual artifacts, 151 code blocks, 11 full-length page snapshots
  • designs/figma-canvas-plugin/ — the local Figma plugin that writes native frames and places sliced snapshot fills
  • designs/figma-sync-status.json — the dated status record, including the mcp-remote failure and the working Codex MCP check
  • designs/figma-snapshot-slices/ — page snapshots pre-sliced to stay under Figma's image size limits
  • The 'Agentic canvas sync' page in the Agentic Design School Figma file, with the library and article-artifact frames present

Next test

Re-run npm run agentic:sync:once:push after the next design-token change and check whether the remote MCP write path still fails OAuth registration; if it does, confirm the local plugin import remains a one-step refresh.

Sources

Sources & further reading

Newsletter

Get the next field note by email.

One to two notes per week: tool experiments, workflow notes, case studies, and signals worth testing.

Processed by Buttondown. You can unsubscribe from any email.

Further reading

For deeper reading, see The Agentic Designer and Claude Code for Designers.

The Agentic Designer cover
Curriculum
The Agentic Designer
How AI agents are transforming product design.

The operating model for product designers, design leads, and builders who need to understand what changes when agents join design work.

Claude Code for Designers cover
Curriculum
Claude Code for Designers
A designer's guide to AI-assisted workflows.

A practical guide for designers who want to work directly with coding agents without turning it into a programming manual.