Skip to main content
Glama

šŸŽØ Figma MCP Complete

By Nour Shamrok

Figma to Code MCP + Pixel Perfect Validation

Export Figma designs as ready-to-use HTML/CSS + Validate pixel-perfect accuracy ✨

License: MIT Node.js Python


šŸ“– Table of Contents


Related MCP server: Sunnyside Figma MCP

šŸŽÆ Overview

Figma MCP Complete solves the biggest problem in design-to-code workflows:

The Problem āŒ

Figma MCP (existing):
  → Returns only JSON metadata
  → Claude guesses colors, fonts, spacing
  → Needs manual fixes
  → 30 minutes per component ā±ļø

Result: Frustration, mistakes, wasted time 😫

The Solution āœ…

Figma MCP Better (this project):
  → Returns Screenshot + CSS + HTML + JSON
  → Claude knows exactly what to build
  → Ready-to-use code
  → 30 seconds per component ⚔

Result: Perfect accuracy, zero iterations šŸŽ‰

✨ Features

šŸŽØ Figma MCP Better

  • āœ… Screenshot Export - Visual reference for accuracy

  • āœ… CSS Generation - Production-ready styles

  • āœ… HTML Code - Copy-paste ready components

  • āœ… Design Tokens - Automated design system extraction

  • āœ… High DPI Support - 2x resolution for Retina displays

āœ… Pixel Perfect Validator

  • āœ… Image Comparison - Pixel-by-pixel accuracy checking

  • āœ… Visual Regression Testing - Percy.io integration

  • āœ… Heatmap Generation - See exact differences

  • āœ… Responsive Testing - Mobile, Tablet, Desktop

  • āœ… CI/CD Integration - GitHub Actions workflow

šŸ“Š Color & Typography Verification

  • āœ… RGB to Hex conversion

  • āœ… Font accuracy checking

  • āœ… Spacing validation (padding, margin, gap)

  • āœ… Shadow & effects verification

  • āœ… Border radius matching


šŸš€ Installation

Prerequisites

  • Node.js ≄ 16.0.0 (Download)

  • Python ≄ 3.8 (Download)

  • Git (Optional, for GitHub)

Step 1: Download & Extract

# Download figma-mcp-complete.zip
# Extract to your desired location
cd figma-mcp-complete

Step 2: Install Dependencies

# Install Node packages
npm install --save-dev playwright

# Install Python packages
pip install opencv-python numpy pillow

# Optional: For Percy.io validation
npm install --save-dev @percy/cli

Step 3: Setup Environment

Create .env file:

cat > .env << 'EOF'
FIGMA_TOKEN=figd_xxxxxxxxxxxxx
SIMULATOR_PORT=3000
PERCY_TOKEN=percy_xxxxxxxxxxxxx  # Optional
EOF

Get your Figma Token: https://www.figma.com/developers/api#access-tokens

Step 4: Verify Installation

# Test the setup
node figma-mcp-comparison.js

# Output should show comparison of old vs new MCP āœ…

⚔ Quick Start

Export Figma Design to HTML/CSS

# Set your Figma token
export FIGMA_TOKEN="figd_xxxxxxxxxxxxx"

# Export frame from Figma
node figma-mcp-better.js FILE_ID NODE_ID "Component Name"

# Results saved to:
# figma-export/
# ā”œā”€ā”€ index.html       ← Copy-paste this!
# ā”œā”€ā”€ style.css        ← Or this!
# ā”œā”€ā”€ data.json        ← Or everything here
# └── tokens.json      ← Design system

Get Figma IDs

  1. Open your Figma file: https://www.figma.com/file/YOUR_FILE_ID/...

  2. Copy the FILE_ID from URL

  3. Right-click on a frame → Copy link → Extract NODE_ID

Example:

URL: https://www.figma.com/file/abc123def456/MyDesign?node-id=789:123
FILE_ID: abc123def456
NODE_ID: 789:123

Validate Design Accuracy

# Start your simulator/app
npm run start:simulator &

# Capture simulator screenshots
npm run capture:simulator

# Compare with Figma
npm run pixel-perfect

# Results:
# āœ… Similarity: 99.8%
# āœ… All colors match
# āœ… Typography verified
# āœ… Pixel Perfect!

šŸ“š Usage

Basic Workflow

# 1. Export from Figma
export FIGMA_TOKEN="..."
node figma-mcp-better.js FILE NODE "Button"

# 2. Get HTML/CSS
cat figma-export/index.html
# <button style="background-color: #FF5722; ...">

# 3. Copy to your project
# Done! ✨

Advanced: Export Multiple Frames

// export-all.js
const BetterFigmaMCP = require('./figma-mcp-better');

const mcp = new BetterFigmaMCP(process.env.FIGMA_TOKEN);

const frames = [
  { id: '123:45', name: 'Login Button' },
  { id: '123:46', name: 'Signup Form' },
  { id: '123:47', name: 'Dashboard Header' }
];

(async () => {
  for (const frame of frames) {
    const result = await mcp.exportFrame(FILE_ID, frame.id, frame.name);
    await mcp.saveExport(result, `./exports/${frame.name}`);
    console.log(`āœ… Exported: ${frame.name}`);
  }
})();

Run:

node export-all.js

Integration with Claude AI

// Use with Claude API
const BetterFigmaMCP = require('./figma-mcp-better');

const figmaData = await mcp.exportFrame(fileId, nodeId);

// Claude now gets:
// - figmaData.screenshot     → Visual reference
// - figmaData.css            → Styling
// - figmaData.html           → Code
// - figmaData.designTokens   → System

// Result: Claude writes perfect code! šŸŽÆ

šŸ“‹ Examples

Example 1: Button Component

export FIGMA_TOKEN="figd_xxx"
node figma-mcp-better.js abc123 "456:789" "Primary Button"

Output: figma-export/index.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Primary Button</title>
  <style>
    .container {
      background-color: #FF5722;
      color: #FFFFFF;
      font-size: 16px;
      font-family: Inter;
      font-weight: 700;
      padding: 12px 24px;
      border-radius: 8px;
      box-shadow: 4px 4px 8px rgba(0,0,0,0.3);
    }
  </style>
</head>
<body>
  <button class="container">Click me</button>
</body>
</html>

Example 2: Design System Extraction

node figma-mcp-better.js abc123 "def:456" "Design System"

Output: figma-export/tokens.json

{
  "colors": {
    "primary": "#FF5722",
    "secondary": "#2196F3",
    "text": "#212121"
  },
  "typography": {
    "heading": {
      "fontFamily": "Montserrat",
      "fontSize": 32,
      "fontWeight": 700,
      "lineHeight": 1.2
    },
    "body": {
      "fontFamily": "Open Sans",
      "fontSize": 16,
      "fontWeight": 400,
      "lineHeight": 1.5
    }
  },
  "spacing": {
    "xs": "4px",
    "sm": "8px",
    "md": "16px",
    "lg": "24px"
  }
}

Example 3: Pixel Perfect Validation

npm run pixel-perfect

Output:

šŸŽØ Comparing 5 screens...

1. login-mobile: 99.8% āœ…
2. dashboard-mobile: 99.5% āœ…
3. profile-mobile: 99.9% āœ…
4. settings-mobile: 99.2% āœ…
5. onboarding-mobile: 99.7% āœ…

============================================================
PIXEL PERFECT VALIDATION RESULTS
============================================================

Average Similarity: 99.62%
Threshold: 99.0%
Screens Checked: 5

āœ… ALL SCREENS PASSED PIXEL PERFECT VALIDATION!

šŸ”Œ API Reference

BetterFigmaMCP Class

Constructor

const mcp = new BetterFigmaMCP(figmaToken);

Methods

exportFrame(fileId, nodeId, frameName)

Export a single frame.

const result = await mcp.exportFrame(
  'abc123def456',
  '789:123',
  'Login Button'
);

// Returns:
{
  name: 'Login Button',
  screenshot: 'https://...',
  css: { ... },
  html: '<button>...</button>',
  designTokens: { ... },
  json: { ... }
}
saveExport(data, outputDir)

Save export to files.

await mcp.saveExport(result, './exports');

// Creates:
// ./exports/index.html
// ./exports/style.css
// ./exports/data.json
// ./exports/tokens.json
extractCSS(node)

Extract CSS from Figma node.

const css = mcp.extractCSS(figmaNode);
// Returns: { backgroundColor, fontSize, ... }
extractDesignTokens(file)

Extract design system tokens.

const tokens = mcp.extractDesignTokens(figmaFile);
// Returns: { colors, typography, spacing, shadows }

āœ… Pixel Perfect Validation

How It Works

1. Export Figma screenshot → figma-baseline/
2. Capture simulator screenshot → simulator-screenshots/
3. Compare pixel-by-pixel → reports/
4. Generate heatmap of differences

Run Validation

# Capture simulator
npm run capture:simulator

# Compare with Figma
npm run pixel-check

# Or full validation
npm run pixel-perfect

Thresholds

Similarity

Status

Action

99%+

āœ… PASS

Merge!

95-99%

āš ļø REVIEW

Check heatmap

<95%

āŒ FAIL

Fix design

View Heatmap

Differences appear in reports/heatmap_*.png:

  • šŸ”“ Red = Large differences

  • 🟔 Yellow = Small differences

  • šŸ”µ Blue/Green = Identical


šŸš€ GitHub Actions CI/CD

Automatic Validation on Push

The project includes GitHub Actions workflow that:

  1. āœ… Validates on every push

  2. āœ… Checks pixel-perfect accuracy

  3. āœ… Blocks merge if validation fails

  4. āœ… Comments on PRs with results

Setup GitHub Actions

# Copy workflow file
.github/workflows/pixel-perfect.yml

# Commit to GitHub
git add .github/
git commit -m "Add pixel perfect CI/CD"
git push

# Set branch protection
GitHub → Settings → Branches
→ Require status checks to pass
→ Select "Pixel Perfect Validation"

Require Pixel Perfect

Now you cannot merge without passing validation! šŸ”’

PR created
  ↓
GitHub Actions runs
  ↓
Pixel Perfect test passes?
  ↓
āŒ No → PR blocked 🚫
  ↓
āœ… Yes → Can merge āœ…

šŸ› Troubleshooting

Installation Issues

"npm: command not found"

# Install Node.js
https://nodejs.org/

# Verify:
node --version
npm --version

"python3: command not found"

# Install Python
https://python.org/downloads

# Verify:
python3 --version

"ModuleNotFoundError: No module named 'cv2'"

# Reinstall Python packages
pip install --upgrade opencv-python numpy pillow

Runtime Issues

"FIGMA_TOKEN not set"

# Set token
export FIGMA_TOKEN="figd_xxxxxxxxxxxxx"

# Or create .env file
echo "FIGMA_TOKEN=figd_xxxxxxxxxxxxx" > .env

"Node FILE_ID NODE_ID not found"

# Get correct IDs from Figma URL
# https://www.figma.com/file/YOUR_FILE_ID/...?node-id=YOUR_NODE_ID

# Verify they're correct
echo $FIGMA_TOKEN

"Screenshots don't match"

# Check DPI consistency
# Ensure both screenshots are 2x scale (Retina)

# Manually verify
open figma-export/index.html
open reports/heatmap_*.png

Performance

Slow export?

# Reduce resolution
node figma-mcp-better.js FILE NODE --scale=1

Memory issues?

# Process one frame at a time
# Or increase Node memory
node --max-old-space-size=4096 figma-mcp-better.js

šŸ“Š Comparison: Old vs New

Feature

Old Figma MCP

Figma MCP Complete

Screenshot

āŒ

āœ…

CSS

āŒ

āœ…

HTML

āŒ

āœ…

Design Tokens

āŒ

āœ…

Color Format

RGB(0-1) 😩

#HEX 😊

Font Size

Just number

px (web standard)

Ready to Use

āŒ 30 min

āœ… 30 sec

Claude Accuracy

60%

99%+

Iterations Needed

Many

Zero


šŸ¤ Contributing

Contributions welcome!

# Fork & clone
git clone https://github.com/YOUR_FORK/figma-mcp-complete.git
cd figma-mcp-complete

# Create branch
git checkout -b feature/amazing-feature

# Make changes
# Test thoroughly
npm test

# Push & create PR
git push origin feature/amazing-feature

Development

# Run tests
npm test

# Lint code
npm run lint

# Build docs
npm run docs

šŸ“ License

MIT License - See LICENSE file


šŸ™ Acknowledgments

  • Built with ā¤ļø for designers and developers

  • Inspired by real design-to-code workflow problems

  • Thanks to Figma & Anthropic communities


šŸ“ž Support

Documentation

Issues & Questions

Community


⭐ If you find this useful, please star! ⭐

Star this repo to show support ✨
Share with your team šŸ‘„
Contribute improvements šŸš€

šŸŽÆ Roadmap

  • Web UI for exports

  • Figma plugin integration

  • Multiple design system formats

  • Real-time validation

  • Browser extension

  • Cloud storage integration


šŸ“ˆ Stats

āœ… Lines of code: 5000+
āœ… Supported Figma nodes: 15+
āœ… Export formats: 5+ (HTML, CSS, JSON, etc)
āœ… Validation accuracy: 99%+
āœ… Performance: <30s per component

Made with ā¤ļø for better design-to-code workflows

Created by Nour Shamrok šŸš€

Star | Watch | Fork

Related MCP Connectors

Related MCP Servers