Start here
The setup that I would use today
Figma currently recommends its remote MCP server for most clients. It connects to Figma's hosted endpoint, works from links to frames and layers and exposes a broader tool set than the desktop server. The official plugin is the easiest route when your Claude Code installation supports it because the plugin packages the server configuration and Figma-specific skills together.
The manual path is still useful because it makes the connection explicit. Run the command below from the project where you want the server available. Claude Code uses local scope by default. That is a sensible choice for a client project or sensitive repository because the connection is not silently shared with unrelated projects.
claude mcp add --transport http figma https://mcp.figma.com/mcpIf you deliberately want the same authenticated server available across projects, Figma documents the user-scope variation: add --scope user. I would not make that the default on a shared machine. Scope is part of access control, not merely convenience.
After adding the server, start a new Claude Code instance and type /mcp. Select Figma, authenticate in the browser and approve access. Return to Claude Code and confirm that Figma shows as connected. If an old session does not display the server, restart before changing configuration; many “installation failures” are stale sessions.
The first useful test is not “build this entire app.” Copy a link to a modest frame or layer and ask Claude Code to describe its structure, components and variables without editing anything. This checks authentication, file permissions and node selection before code changes enter the picture.
Connection check
- The Figma server appears in /mcp.
- Authentication uses the intended Figma account.
- That account can open the source file.
- Claude Code can identify the linked frame.
- No code has been changed during the test.
Before code
Make Claude Code learn the repository before it interprets the design
A Figma frame can tell Claude Code a great deal about appearance and hierarchy, but it does not explain the application around that screen. The repository holds the routing conventions, component APIs, typography setup, data layer, tests and deployment constraints. If you ask for implementation before Claude Code reads that context, it may faithfully reproduce the frame in a way that is completely foreign to the product.
I ask for a written mapping first. Which existing component corresponds to the primary button? Where are form controls defined? Does the repository use CSS modules, Tailwind, a token package or a component library? Which layout component owns the page width? Is there already a loading skeleton or error banner? The mapping reveals uncertainty while it is still cheap.
This is also the moment to protect the work of another developer or agent. Tell Claude Code to inspect the worktree, identify existing changes and avoid overwriting unrelated files. Specify the route and the files it is allowed to touch when the boundary is known. A design implementation should not become permission for broad refactoring.
The audit should end with questions, not hidden assumptions. A desktop frame may not define the mobile sequence. A polished card may contain placeholder data that is much shorter than production content. A disabled state may be absent. Ask Claude Code to list those gaps and propose conservative behavior for approval.
The Figma link is design context. The repository is implementation context. Production work needs both.
Component fidelity
Use Code Connect to prevent a second design system
The most expensive design-to-code failure is not a four-pixel spacing difference. It is a page that introduces near-duplicates of components the product already owns. The new button looks correct today but lacks the existing analytics hook, loading state, accessibility behavior and future style updates. The visual review passes while the architecture quietly gets worse.
Code Connect addresses that problem by mapping a Figma component to its implementation in code. When the Figma frame contains a mapped instance, the MCP context can tell Claude Code which component and source correspond to it. The agent has a much stronger reason to import the real component rather than reconstructing one from divs and CSS.
Not every object deserves a mapping. Start with the repeated primitives that carry behavior: buttons, inputs, select controls, cards, navigation items, alerts and dialogs. Keep the mappings current as component APIs change. A stale mapping can be worse than no mapping because it looks authoritative.
Even without Code Connect, you can improve reuse by pointing Claude Code to the component directories and requiring an inventory before creation. I use a blunt rule: if the agent proposes a new primitive with a generic name, it must explain why no existing primitive can do the job.
Implementation
Build in passes that can be reviewed
I separate the work into four passes. The first pass establishes semantic structure and uses the correct components. The second handles responsive layout and content extremes. The third refines typography, spacing, borders and assets. The fourth validates interactions and tests. This order prevents hours of pixel polishing on markup that later needs to be replaced.
In the structure pass, the agent should use headings, landmarks, labels and controls that make sense without CSS. In the responsive pass, it should test the longest realistic labels and data. Stable controls should have stable dimensions so a loading message or validation icon does not shift the surrounding layout. Tables require a deliberate mobile strategy rather than accidental horizontal overflow.
Visual refinement should use the product's tokens. Hard-coded values are acceptable only when the design truly introduces a new approved value. If the Figma file says “Brand/Primary” and the repository has a matching token, using an arbitrary hex value is a context failure. The agent should also retrieve and use the actual supplied assets rather than replacing them with generic icon packages or placeholders.
Finally, validate behavior. Tab through the page. Open menus and dialogs. Submit invalid and valid data. Check loading and empty states. Resize the viewport. Inspect the browser console. Run the repository's normal type, lint and test commands. The Figma reference is one source of truth; the working application has several.
01
Structure
Semantics, route and component reuse
02
Responsive
Mobile, intermediate widths and real content
03
Visual
Tokens, assets, typography and spacing
04
Proof
Interactions, screenshots, checks and tests
Prompt sequence
Four prompts are better than one enormous instruction
A sequence gives you decision points. It also makes Claude Code's work easier to review because each prompt has a single outcome. Replace bracketed details with the route, frame URL and repository-specific rules.
Repository audit
Inspect this repository and the linked Figma frame before editing. Map the frame to existing routes, components, tokens and layout primitives. Identify missing states and responsive questions. Return a plan only.Implementation contract
Implement the approved frame at the specified route. Reuse existing components and assets. Do not add dependencies without asking. Preserve current metadata and shared navigation. Support the agreed desktop and mobile widths.Visual verification
Run the application and compare the implementation with the Figma reference at desktop and mobile sizes. Check overflow, text clipping, focus states, loading states and image rendering. Fix material differences and report intentional deviations.Handoff
Summarize changed files, reused components, tests run and remaining design questions. Do not describe the page as pixel-perfect unless the screenshots and interactions support that claim.Visual QA
How I would compare the running page with Figma
Start at the exact reference viewport when the design provides one. Confirm the page width, major grid, header height and content order before measuring small gaps. Then test the width just above and below each layout transition. A page can look excellent at 1440 pixels and 390 pixels while failing at 768 pixels, where neither desktop nor mobile assumptions hold.
Compare real states, not an empty shell. Use representative long titles, validation messages, unavailable images and slow-loading content. Check whether text fits its container without reducing the font based on viewport width. Confirm that buttons do not resize when icons or status labels appear. Look for overlays that cover headings or sticky elements that hide anchor targets.
Pixel checks are valuable for confirming that the rendered canvas is nonblank and roughly aligned, but I do not use a single difference score as a release gate. Browser font rendering, responsive content and dynamic data create legitimate differences. The meaningful questions are whether the hierarchy, spacing system, components, behavior and brand intent survived implementation.
Ask Claude Code to report intentional deviations. If it changed color contrast for accessibility, adjusted a tap target or reorganized mobile content, that should be visible to the designer. A silent “improvement” is still a broken handoff if the owner never approved it.
Back to the canvas
Send selected running states to Figma when design needs to catch up
Product reality often moves ahead of the design file. A feature gains an error state, a table receives real data or a responsive layout changes during implementation. Figma's remote MCP server can support a code-to-canvas capture in compatible clients, allowing Claude Code to start the local application and guide you through capturing selected pages or states as editable Figma layers.
Capture the state that needs discussion, not every route. A single settings screen with open, loading, error and success states is more useful than an indiscriminate import of the application. Name the destination file and page clearly, note the source commit and add an annotation explaining why the state was captured.
Once designers refine the captured state, use a new linked frame for the next implementation request. The process is a controlled loop rather than automatic synchronization. That makes ownership clearer: Figma remains the place for visual exploration, and the repository remains the executable source of truth.
Worked implementation
A dashboard route shows why sequence matters
Imagine the selected Figma frame is an authenticated billing dashboard. It contains a navigation rail, current-plan summary, invoice table, payment method and an upgrade action. A weak request says, "Build this Figma design." Claude Code may produce an attractive static page, invent sample invoice data and attach the upgrade button to nothing. The screen resembles the reference, but the product behavior is fiction.
I begin by asking for an implementation brief. Claude Code should identify the visible regions, likely reusable components, responsive changes, interaction states and open questions. It should then inspect the repository for the existing application shell, table, button, badge, billing client, authentication guard and route conventions. At this stage I want a map, not code. If the repository already has a table with sorting and empty-state behavior, the plan should name it. If the Figma frame uses a color that has no project token, the plan should flag the mismatch.
The first coding pass builds only the route shell with existing components and typed placeholder data. The goal is to prove hierarchy and responsiveness. The second pass connects the real billing data through the project's established data layer, including loading, empty, error and permission states. The third pass implements actions: changing a payment method, downloading an invoice and opening the upgrade flow. Each action needs a success path, failure feedback and keyboard behavior. The fourth pass compares the page with Figma and records approved deviations.
Real content is the stress test. An invoice identifier can be longer than the design sample. A localized currency can change column width. A past-due account may need two status badges and an explanatory alert. I ask Claude Code to test those cases before tightening pixels. If the mobile design omits the table, the agent should not simply hide financial history; it should propose a stacked invoice list or another usable representation and ask for approval.
Finally, I review the change as engineering work. I inspect the diff for duplicate primitives, hard-coded tokens, broad dependencies and accidental edits outside the route. I run the repository's checks, verify the route while authenticated and unauthenticated, and capture the principal states for design review. Figma MCP shortens the distance between reference and implementation, but this sequence is what turns that speed into maintainable product code.
Troubleshooting
The problems I would diagnose in this order
Figma is missing from /mcp
Start a new Claude Code session. Confirm the plugin or manual server was added in the intended scope. Avoid adding another server with a second name until you understand the first configuration.
Authentication succeeds but the file is unavailable
Verify which Figma account was authorized and whether it can open the source file. A valid MCP login does not grant access to a private file owned by another team.
The wrong frame is returned
Copy a link to the specific frame or layer. Large file links create ambiguity and unnecessary context. Ask Claude Code to state the node name before implementing.
Images or icons are missing
Ensure the Figma layers contain real assets and that the agent uses the asset sources provided by MCP. Do not let it substitute placeholders when the source asset is available.
The implementation creates generic components
Stop the run, point Claude Code to the existing component library and inspect Code Connect mappings. Require an inventory and explanation before any new primitive is added.
Claude Code runs out of context
Use a smaller frame and a bounded repository scope. Compact or restart the coding session when necessary. Keep the implementation plan in a tracked project note so a fresh session can resume without a long conversational history.
Team decision
When this workflow is worth adopting
Claude Code and Figma MCP are most valuable when the repository already has structure worth preserving. A product team with a component library, tokens and review checks benefits because the agent can connect design intent to existing implementation patterns. The workflow is also useful when designers and developers repeatedly lose information during handoff.
It is less valuable for a one-page disposable prototype with no design system and no future maintenance. In that case, Figma Make, Lovable or a smaller direct build may reach the result with less setup. It is also a poor fit when the design is not approved or the repository is in the middle of a large migration; the agent will automate uncertainty rather than resolve it.
Measure total delivery time. Include design preparation, prompt supervision, code review and repair. If MCP saves one hour of initial markup but creates two hours of component cleanup, the team has learned where its context is weak. Improve the Figma structure, mappings and project rules before scaling.
Adopt the workflow when it improves the reviewed result, not merely the speed of the first generation.
Sources
Official documentation used
Frequently asked questions
How do I connect Claude Code to Figma MCP?
The easiest current route is Figma's official Claude Code plugin. Figma also documents a manual remote setup: run `claude mcp add --transport http figma https://mcp.figma.com/mcp`, start a new Claude Code session, open `/mcp`, select Figma and authenticate. Add `--scope user` if you intentionally want the connection available across projects. Use project scope when access should stay tied to one repository.
Can Claude Code turn a Figma design into code?
Yes. Give Claude Code a link to a specific Figma frame or layer and ask it to use the Figma MCP design context while working inside your repository. The best results come from a repository audit, named Figma layers, Auto Layout, variables, existing components and Code Connect mappings. Claude Code can generate a useful implementation, but you still need responsive, accessibility and browser validation.
Does Claude Code need the Figma desktop app?
Not when you use the recommended remote Figma MCP server. The remote server works from an authenticated Figma account and links to frames or layers. The desktop server requires the Figma desktop app and is mainly useful for selection-based or organization-specific local workflows.
Why is Claude Code creating duplicate components from my Figma design?
Claude Code probably does not know which repository components correspond to the Figma instances. Ask it to audit the component library before editing, point it to the correct directories and use Code Connect mappings for shared Figma components. Require it to list proposed new primitives before implementation. In a mature product, a new Button or Input should be an explicit decision, not an automatic by-product of generation.
Can Claude Code send a running app back to Figma?
Figma's remote MCP server includes a code-to-canvas workflow for supported clients. Claude Code can start the app, open the capture flow and send selected pages or states to a new or existing Figma Design file as editable layers. This is a deliberate capture, not permanent automatic synchronization between the repository and Figma.
Should I use Claude Code or Figma Make?
Use Figma Make when the work is primarily visual exploration and an interactive prototype inside Figma. Use Claude Code with Figma MCP when the destination is an existing production repository and the agent must understand routing, components, tests and application behavior. Teams can use both: explore in Figma, implement with Claude Code and bring important running states back to Figma for review.