How much of a design system is preserved in Claude Code to Figma? I tested it out
This page has been translated by machine translation. View original
As a designer in contract development, including myself, I think we often create UIs and organize screen flows during the requirements definition phase before entering development.
As development progresses, specification changes and text modifications occur, and before we know it, "Is the latest version in Figma or in the implementation?" becomes ambiguous.
If the implementation side has the latest version, there are times when we want to bring that state back to Figma as accurately as possible to update the design data... we've all been there, right?
With "Claude Code to Figma" released by Figma, operations that update Figma based on code as the source of truth might become a reality.
This time, I conducted a verification of "Creating a Material 3 UI in Figma, implementing it with Claude Code in React + MUI, and then bringing it back to Figma with Claude Code to Figma".
The aim was to confirm "how much of the design system (structure/tokens/spacing rules) is retained in the round trip through AI" using procedures close to actual practice.
What Was Verified
Beyond just visual distortions, I focused on whether "design information returns."
- Whether component structure returns
- Whether Variables references remain
- Whether Auto Layout remains in an operable form
- Whether shadows and state expressions are maintained
- Whether naming conventions such as layer names remain
Verification Results
The conclusion is that while the general appearance (AppBar / Card / List / BottomNavigation) aligns, maintaining design information is difficult.
| Aspect | Result | Evidence |
|---|---|---|
| Component structure | Failed | Generated as implementation-derived structures like Mui*Root / Styled(div) / Container, not restored as M3 components (Design Kit instances) |
| Variables references | Failed | Fill/Stroke become fixed HEX values, not Variables references |
| Auto Layout | Partially successful | Auto Layout is applied to buttons, but the overall screen and cards are primarily Frames (fixed positioning) with mixed results |
| Shadows and states | Failed | Card selection shows empty Effects, and Elevation is not maintained as a design element |
| Naming | Failed | Names like Horizontal card_A/B are not preserved, and Container is repeated, making tracking difficult |
Test Environment
- Figma Desktop App v126.1.2
- Claude Code v1.0.44
- Model claude-sonnet-4-6
- React v19.2.4
- @mui/material v7.3.8
- @emotion/react v11.14.0
Figma Preparation
I created a UI using the Material 3 Design Kit.
Components placed more than once have different Styles and States.
Screen Composition
- App Bar
- Text
- Horizontal card
- List item
- Stacked card
- Fixed Bottom Navigation

I registered Color, Spacing/Radius included in the Material 3 Design Kit as individual Variables to verify whether margins would be referenced as fixed values or radius tokens.
Implementation Conditions
The implementation assumes using MUI's theme functionality to manage colors, rounded corners, and margins together as tokens.
To avoid brute-forcing the appearance, which would invalidate the verification, I limited theme modifications to palette / shape.borderRadius / spacing only.
components.*.styleOverrides was not used.
Additionally, since AI implementations tend to omit elements at the bottom of the screen (like BottomNavigation), I specified "no omissions + specified order" in my prompts.
What is a theme?
In MUI, it's a configuration that collects the "visual rules for the entire app (colors, spacing, rounded corners, etc.)".
It's created with createTheme and applied to the entire app with ThemeProvider.
Prompt
I instructed the following in Claude Code on VSCode:
Please implement a single "ProductListScreen" using React + MUI, referencing the following Figma (refactoring existing implementation is OK).
Figma:
https://www.figma.com/design/……………………………………
Target frame: ProductListScreen
Conditions (tokenization with theme):
- Define and apply theme using createTheme + ThemeProvider
- Only these 3 items can be set in the theme:
1) palette (primary/secondary/background/text/divider, etc.)
2) shape.borderRadius (e.g., 12)
3) spacing (base is 4px. spacing(4)=16px, spacing(3)=12px, spacing(20)=80px should be valid)
- Don't use components styleOverrides
- Implement all elements from the Figma without omitting anything down to the bottom of the screen
UI to implement (in order from top to bottom):
1) AppBar (title: "Label")
2) 3 lines of descriptive text (Overline / Label text / Supporting line text)
3) 2 Horizontal cards (A/B)
4) 2 List items (one with a Switch)
5) 2 Stacked cards (horizontal scroll)
6) Fixed BottomNavigation (3 tabs, showLabels to always display labels)
Implementation:
- Create src/theme.js
- Apply ThemeProvider + CssBaseline in src/main.jsx
- Create/modify src/ProductListScreen.jsx
- Display ProductListScreen in src/App.jsx
- Please provide a list of modified/created files and the content of each file
Claude Code to Figma
- I ran
generate_figma_designvia MCP to import the Web screen (localhost) into Figma. - Clicking "Send to Figma" inputs it into Figma.
- In this environment, the Figma MCP tool was read-only and couldn't directly edit existing frames, Variables values, or change colors/properties of existing nodes.
As a result, Claude Code to Figma relied ongenerate_figma_design(Web capture).

If a frame with the capture results is added to the open Figma file, the import was successful.
UI Output by Claude Code to Figma

Summary
- I was able to reflect implementation results in Figma via Claude Code to Figma.
- It's very useful when code is available but Figma design data is not.
- It was difficult to maintain Material 3 design information (component structure, Variables references, naming) during the round trip, and Auto Layout remained only partially.
- For maintaining a design system during round trips, reproduction with a single instruction was difficult, requiring additional instructions or prompt adjustments.
Troubleshooting Notes
I ran into some issues during this verification, so I'm noting them for future reference.
- When running
generate_figma_designfor connectivity testing, requests can get large, so instruct to prohibit any editing. mcp.jsonis located in.vscode/mcp.jsonin the project, and the Figma MCP connection is set totype: "http"/url: "http://127.0.0.1:3845/mcp"(= referencing the local Figma MCP server)- If the server status on VSCode shows as
Runningand displaysDiscovered 6 tools / 3 prompts, it's a good indicator that at least the "VSCode → Figma MCP" connection is established. - Directly opening
http://127.0.0.1:3845/mcpin a browser may returnInvalid sessionId, but this doesn't necessarily mean failure (MCP expects clients like VSCode to call with a session, not browsers)
Though there are breakdowns, I'm amazed at how easily we can go back and forth between Figma and code through AI.
This verification made me realize my lack of understanding of Claude Code to Figma and prompt skills.
I'll continue studying Claude Code and Figma.
Thank you for reading to the end.
