Ship Faster pipeline
Interactive Setup Guide · v1.0

Your AI design
pipeline, ready to ship.

Follow these 5 steps to connect Figma, Claude, and Cursor into a pipeline that connects your design system to production-ready code - automatically.

🎨
Figma Variables
Claude MCP
⌨️
Cursor
🚀
GitHub
What you're actually building

Your design system becomes the code.

Not a reference doc someone interprets. Not a handoff that gets lost in translation. The actual working code - generated directly from your Figma design system, on-brand from line one.

The old way
🎨 Designer builds in Figma
📋 Hands off specs to a developer
🤔 Developer interprets the design
❌ Builds something close, but not quite right
🔁 Back and forth for days
VS
The new way
🎨 Designer builds in Figma with Variables
⚡ Claude reads the design system directly
✅ Writes code using your exact colors, spacing, and components
🚀 Ready to commit. No redlines. No drift.
💬
What this looks like in practice: You type "build me a login screen" and get back a real React component - using your actual button radius, your brand green, your heading font - because Claude read them directly from Figma. Not an approximation. The real thing.
STEP 01

Structure Your Figma File for AI

Before variables, before tokens, before any of the tools - your Figma file needs to be organized in a way AI can actually navigate. A messy file produces messy code. A structured file produces clean, accurate components from the first prompt.

💡
Why file structure matters: When Claude reads your Figma file, it scans it layer by layer. If everything is on one giant page with no clear organization, Claude has to guess what's a component, what's a prototype, and what's a rough sketch. That guessing shows up in your code. Give it a clear map and it navigates straight to what it needs - no guesswork, no garbage output.

The three tiers everything lives in

Components
Individual, self-contained UI pieces. Button, Input, Badge, Avatar. Each maps to a single reusable code file.
Patterns
Components combined to solve a real use case. Login Form, Data Table, Nav Bar. Built exclusively from component instances.
Pages
Complete screens assembled from patterns and components. Dashboard, Settings, Onboarding. What users actually see.

How to name your pages

Page names are the only label Claude can read without opening anything. Use number prefixes so it instantly knows what tier it's in - no analysis needed.

Figma page structure
-- Skip these (human-only, AI ignores them) --
00 Cover
───

-- Foundations: one page per category --
01 Foundations - Color
01 Foundations - Typography
01 Foundations - Spacing & Grid
01 Foundations - Elevation & Radius
───

-- Components: grouped by function --
02 Components - Actions
02 Components - Inputs
02 Components - Navigation
02 Components - Feedback
───

-- Patterns: composed from components --
03 Patterns - Forms
03 Patterns - Lists & Tables
03 Patterns - Cards & Content
───

-- Pages: full screens --
04 Pages - Dashboard
04 Pages - Settings
04 Pages - Onboarding
───

-- Skip these too (human-only) --
99 Documentation
99 Changelog
99 Playground
⚠️
Split your foundations across separate pages. Don't put color, typography, spacing, and icons all on one page. When Claude needs to extract your typography tokens, it shouldn't have to load every color swatch and icon grid too. Separate pages = faster reads = better code.

How to structure each component

Every component on a page should follow the same internal structure. This consistency is what lets Claude generate clean, prop-driven code instead of hard-coded div soup.

Component page structure - repeat for every component
Section: Button
├── Frame: Button - Component Set
│   └── All variants organized by property:
│       ├── Size: sm | md | lg
│       ├── Variant: primary | secondary | ghost | destructive
│       ├── State: default | hover | active | disabled | focused
│       └── Icon: none | leading | trailing
│
├── Frame: Button - Anatomy
│   └── Labeled parts: icon slot, label, padding, border radius
│
├── Frame: Button - Specs
│   └── Exact measurements and token assignments per state
│
└── Frame: Button - Usage Examples
    └── Real examples in context: in a form, in a toolbar, as a CTA
The Anatomy and Specs frames aren't just for humans. Claude reads the annotations on these frames too - things like hover behavior, keyboard interactions, and accessibility notes get pulled into the generated code. The more you document, the less you have to correct afterward.
Use real placeholder content, not Lorem Ipsum. "Jane Cooper - Product Designer at Acme" gives Claude far more to work with than "Lorem ipsum dolor sit amet." Realistic content helps Claude model the data structure correctly when writing components.
Figma pages organized with 01/02/03/04 prefix structure
Foundation pages split by category (Color, Typography, Spacing separate)
Each component has Component Set, Anatomy, Specs, and Usage frames
Real placeholder content used throughout (no Lorem Ipsum)
Icons named semantically (IconChevronDown, not Vector 42)
STEP 02

Build a Design System AI Can Actually Use

Before AI can generate UI that looks like your product, it needs to know your rules. Not just colors and fonts - but what those colors and fonts mean. This is the foundation everything else depends on.

💡
Think of it like hiring a contractor: You could hand them a paint chip and say "use this color somewhere." Or you could say "this color goes on the walls, this one on the cabinets, never on the ceiling." The second brief gets you what you actually wanted.

Figma Variables work the same way - instead of giving AI a raw color like #22c55e, you tell it "this is your primary button color, and it happens to be green." Now AI knows where to use it, when to use it, and when not to.

Without this: AI guesses. Components look reasonable but feel off-brand - every one needs manual correction. With this: AI works from the same rulebook your team uses. Output is on-brand from line one.
Primitives - raw values
color/brand/500
#22c55e
color/neutral/900
#111827
spacing/16 16px
radius/full 9999px
Semantics - decisions
color/action/primary → brand/500
color/text/primary → neutral/900
spacing/component/md → spacing/16
radius/button → radius/full
⚠️
Common mistake: Using Figma Styles instead of Variables. Styles are not accessible via the MCP API - Claude cannot read them. You must use Variables.

Setting up Variables in Figma

  • 1
    Open your Figma file. Go to Local Variables in the top right toolbar (or press ⌘+Option+V).
  • 2
    Create two collections: Primitives and Semantics. Think of Primitives as your palette, Semantics as your decisions.
  • 3
    In Primitives, add all your raw values. Use forward-slash naming: color/brand/500, spacing/16. Never use these directly in components.
  • 4
    In Semantics, create aliases that reference primitives. Example: color/text/primary → references color/neutral/900. These are what AI uses.
  • 5
    Publish the library: Assets panel → your library name → Publish. Your library and working file must live in the same Figma workspace.
  • 6
    In your working file, go to Assets → Libraries and enable your published library. Test it by dragging a component onto the canvas to confirm the connection.
Using this kit's tokens.json: The included tokens.json follows this exact two-layer structure. You can use it as a reference for naming conventions and which semantic tokens to create - or import it directly into a tokens plugin like Tokens Studio.
Created Primitives collection in Figma Variables
Created Semantics collection with aliases referencing primitives
Published library to Figma workspace
Connected library to working file and confirmed components drag correctly
STEP 03

Give Claude Direct Access to Your Figma File

Right now Claude and Figma don't know each other exist. This step connects them using something called MCP - think of it as a live bridge that lets Claude read your design file directly, without you having to copy-paste anything between apps.

💡
Why this matters: Without this connection, you'd have to manually describe your design to Claude every time - "the button is green, the corner is rounded, use this font." With MCP, Claude just reads your Figma file and already knows. It's the difference between hiring someone who's read your brand guide vs. one who hasn't.
  • 1
    Download and install Claude Desktop from claude.ai/download
  • 2
    Get your Figma API token - this is a password that lets Claude read your Figma files. Go to Figma → Account Settings → Personal Access Tokens → Generate new token. Give it read access to files and dev resources. Copy it somewhere safe.
  • 3
    In Claude Desktop: Settings → Developer → Edit Config. This opens a config file - don't worry, you just need to paste one block of code into it. Copy the code below and replace YOUR_TOKEN_HERE with the token you just generated.
JSON · claude_desktop_config.json
{
  "mcpServers": {
    "figma": {
      "command": "npx",
      "args": [
        "-y",
        "figma-developer-mcp",
        "--figma-api-key=YOUR_TOKEN_HERE"
      ]
    }
  }
}
  • 4
    Save the config file and fully restart Claude Desktop (quit from the menu bar, reopen).
  • 5
    Test the connection by typing this into Claude: "What Figma skills do you have access to?" If it worked, Claude lists tools like search_design_system and get_variable_defs. If not, restart Claude Desktop and try again.
  • 6
    Confirm Claude can actually read your variables by asking: "List the tokens in my Figma file at [YOUR FILE URL]." Claude should return token names like color/text/primary and spacing/component/md with their values. If it can't, your library may not be published or connected to the file.
⚠️
If the connection fails: This setup requires Node.js to be installed on your computer - it's free software that runs the bridge in the background. Download it at nodejs.org (grab the LTS version), then try again. Also make sure your Figma library and working file are in the same Figma workspace - cross-workspace connections don't work.
Claude Desktop installed
Figma Personal Access Token generated
MCP config added to claude_desktop_config.json
Claude Desktop restarted and connection tested - Claude lists tools including search_design_system and get_variable_defs
STEP 04

Give Claude Its Standing Orders

Claude reads your design system and drafts component structure - but it needs to know your rules first. This step gives Claude a permanent briefing so every conversation starts from the same foundation. Cursor is where the final code gets written. Claude is where the thinking happens.

💡
Think of it like onboarding a new hire: The system prompt is Claude's briefing document. It tells Claude how your tokens work, how to read your Figma library, and what it should never do. Claude uses this to interpret designs and propose component structure. Cursor then takes that output and produces the final production code.
  • 1
    In Claude Desktop or Claude.ai, find Projects in the left sidebar and click New Project. Name it something like "UI Pipeline" or your product name. Projects keep all your AI conversations organized in one place.
  • 2
    Inside the project, click Project Instructions. Open the system-prompt.txt file from this kit, select all, and paste it in. That's it - Claude now knows your design rules.
  • 3
    Every conversation you start inside this Project automatically inherits these instructions. You never have to re-explain your design system to Claude again.
Want to customize it? The only thing you need to change is the folder structure at the bottom of system-prompt.txt - update it to match how your project is organized. Everything else works out of the box.
Created a new Claude Project
Pasted system-prompt.txt contents into Project Instructions
Started a test conversation inside the Project to confirm it's working
STEP 05

Set Up Cursor - Where Code Gets Written

Cursor is a code editor with AI built in. It's where the components Claude designs actually get written, cleaned up, and saved. Think of Claude as the architect and Cursor as the builder - they work together, but Cursor is where the final file lives.

  • 1
    Download and install Cursor from cursor.com. It looks like a normal code editor - open your project folder in it the same way you would any app.
  • 2
    Take the cursor-rules.txt file from this kit and rename it to .cursorrules - note the dot at the start and no file extension. Drop it in the root folder of your project. Cursor reads this file automatically every time it runs.
  • 3
    Create a folder called tokens at the root of your project. Place tokens.json inside it. You'll also need to generate a tokens.css file from it - see the callout below.
  • 4
    In Cursor settings, make sure the AI model is set to Claude Sonnet. The rules file is written specifically for this model.
  • 5
    Important habit: After Cursor generates something that works, click Accept on all the changes before moving on. This saves your progress - if something breaks later, you can always roll back to the last accepted state.

Generate CSS variables

tokens.css is generated from tokens.json using any design token transformer or simple script. The result is a CSS file containing custom properties that components reference directly. Place it at /tokens/tokens.css alongside tokens.json and commit both to your repo.

:root {
  --color-text-primary: #111827;
  --spacing-component-md: 12px;
  --radius-card: 16px;
}
💡
You can generate tokens.css using a tool like Style Dictionary, or ask Cursor to write the conversion script for you. The kit assumes tokens.css exists before components are generated.
⚠️
Two things to watch for: If Cursor tries to fix a bug by editing the final output instead of the source code, stop it and say: "Don't fix the output - fix the code that creates it." And if it seems completely stuck and not making progress, say: "Please stop and tell me where you are." Then give it a smaller, more specific task to restart.
Cursor installed and project folder opened
cursor-rules.txt renamed to .cursorrules and placed at project root
tokens.json placed in /tokens folder
tokens.css generated and placed in /tokens folder
Model set to Claude Sonnet in Cursor settings
STEP 06

Generate Your First Component

Everything is connected. Claude reads your Figma design system and drafts component structure. Cursor takes that draft and produces final, production-ready code referencing your tokens. Here's how to run it end to end.

💡
Claude reads, Cursor writes. Give Claude three things - a link to your Figma file, what you want built, and the name of your design library. Claude reads your library, finds real components, and drafts the structure. Then bring that into Cursor to generate the final production code against your token system.

Step 1 - Ask Claude to read your design system

Create a [what you want, e.g. mobile login screen] in file [paste your Figma file URL here] using components from my design system library [your library name exactly as it appears in Figma].

Step 2 - Ask Cursor to write the final code

Generate a [component name, e.g. Button] component referencing tokens.css for all visual values. Include [small, medium, large sizes] and [hover, focus, active, and disabled states]. Export as [ComponentName] with a TypeScript Props interface.
  • 1
    Open Claude Desktop with Figma MCP active. Copy your Figma file URL from the browser and use the prompt above. You'll see Claude working through your design system in real time - reading components, pulling variables, building the screen.
  • 2
    Check Figma. If the screen was built using real library components, you'll see them listed by name in the left panel - not generic "Frame" or "Rectangle" layers. Try switching color modes to confirm everything updates correctly.
  • 3
    Claude's output is a draft - bring it into Cursor to finalize. Ask Cursor to refine the code, replace any hardcoded values with CSS custom properties from tokens.css, add missing states, and integrate with your project structure. Accept changes after each step.
  • 4
    Save and commit to GitHub. That's your first AI-generated, on-brand component - shipped.
If Claude builds generic UI instead of your components: Double-check that the library name in your prompt is spelled exactly the way it appears in Figma's Assets panel - it's case sensitive. Also make sure the library is connected to your working file, not just published.
Generated first screen in Figma via Claude MCP
Confirmed components are real library instances (not raw frames)
Generated final component in Cursor referencing tokens.css
Committed to GitHub
🚀 Pipeline Complete

You're set up to ship faster.

Your design system is now something AI can actually use. Every component your team generates from here will be on-brand, consistent, and ready to commit - without anyone manually correcting it.