Figma Context MCP
Give your coding agent access to your Figma data. Implement designs in any framework in one-shot.
Description from the maker (original English)
Diff a rendered UI element against its Figma source and get every drifted property with its delta.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
FIGMA_TOKEN, ASDESIGNED_BROWSERValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"asdesigned": {
"command": "npx",
"args": [
"-y",
"asdesigned",
"asdesigned-mcp"
],
"env": {
"FIGMA_TOKEN": "your-value",
"ASDESIGNED_BROWSER": "your-value"
}
}
}
}Run this in your terminal
claude mcp add asdesigned --env FIGMA_TOKEN=your-value --env ASDESIGNED_BROWSER=your-value -- npx -y asdesigned asdesigned-mcpFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"asdesigned": {
"command": "npx",
"args": [
"-y",
"asdesigned",
"asdesigned-mcp"
],
"env": {
"FIGMA_TOKEN": "your-value",
"ASDESIGNED_BROWSER": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"asdesigned": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"asdesigned",
"asdesigned-mcp"
],
"env": {
"FIGMA_TOKEN": "your-value",
"ASDESIGNED_BROWSER": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
ASDESIGNED_BROWSER envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026
The registry name was verified with the GitHub account Maher-Reven, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: FIGMA_TOKEN
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (0.1.1) reached the registry 2 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: Figma Context MCP, Claude Real Video, Figma MCP Server
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Give your coding agent access to your Figma data. Implement designs in any framework in one-shot.
Let any LLM watch a video locally — and search everything it has ever watched.
Figma’s official server gives AI your design data so it can turn designs into code or describe them accurately. Connects to Figma’s cloud.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
Is it as designed? Diff a rendered UI component against its Figma source and see exactly what drifted. Built for coding agents: give Claude Code or Cursor the tool and they can check their own work against the design.
asdesigned compare https://www.figma.com/design/<key>/<file>?node-id=12-345 \
--url http://localhost:3000 --selector .btn-primary
design figma Button / Primary 1:4 rendered dom .btn-primary
box ✗ width design 120px → rendered 112px (−8px) padding ✗ left design 16px → rendered 12px (−4px) ✗ right design 16px → rendered 12px (−4px) border ✗ color design #1d4ed8 → rendered #2563eb (Δ29.43) typography ✗ fontFamily design "Inter" → rendered "Arial" ✗ fontWeight design 600 → rendered 500 (−100)
6 drift · 20 match FAIL (tolerance ±1px, color Δ≤4)
That output is real — examples/button.html against a real Figma component. Five of those six were planted. The sixth wasn't: elements don't inherit font-family, so the page quietly fell back to Arial. Nobody sees that in a screenshot review. The diff does.
Figma gives you the intent. The browser gives you the reality. asdesigned compares the two — and your coding agent can call it to check its own work.
Status: v0.2 — early, usable. Figma → spec, DOM → spec, diff, terminal + HTML report, MCP server, interaction states. One viewport per run — see what it doesn't cover.
npx asdesigned --help # no install
npm i -g asdesigned # or install the asdesigned command globally npx playwright install chromium # one-time: the browser used to render pages
Set FIGMA_TOKEN (a Figma personal access token with *file content: read*) in your environment or a .env file.
asdesigned ships an MCP server so Claude Code, Cursor, and other MCP clients can call it directly. Tools: compare_design, inspect_element, inspect_figma. All three understand states: compare_design takes states: ["default","hover","focus"], inspect_element takes a single state, and inspect_figma takes variants: true to list what a component set designs.
Claude Code — .mcp.json in your project:
{
"mcpServers": { "asdesigned": { "command": "npx", "args": ["-y", "asdesigned", "asdesigned-mcp"], "env": { "FIGMA_TOKEN": "figd_…" } } } }
Cursor — .cursor/mcp.json, same shape.
A skill file describing when and how an agent should reach for the tool lives in skills/asdesigned/SKILL.md — drop it into your agent's skills folder.
asdesigned compare <figma-url> --url http://localhost:3000 --selector .btn-primary
asdesigned compare --url … --selector … --states hover,focus # interaction states asdesigned compare --url … --selector … --html report.html # self-contained visual report asdesigned compare --url … --selector … --json # for CI / scripts asdesigned inspect http://localhost:3000 --selector .btn-primary asdesigned inspect http://localhost:3000 --selector .btn --state hover # one rendered state asdesigned inspect --variants # what states are designed
--states hover,focus,active,disabled (or --states all) compares each state as its own section.
The rendered side forces the matching pseudo-class before reading computed styles — :focus and :focus-visible together, so modern focus rings aren't missed. The design side comes from the Figma component set's variants: State=Hover, State=Focused, and the other spellings designers use (Pressed, Rest, Inactive) all resolve. Point at the set or at any variant inside it; asdesigned follows componentSetId to find the siblings.
Button / Primary 3 variants 1:10
default 1 drift figma State=Default 1:11 border ✗ color design #1d4ed8 → rendered #2563eb (Δ29.43) 1 drift · 20 match
hover no drift figma State=Hover 1:12 0 drift · 21 match
focus skipped "Button / Primary" has no focus variant (it defines: default, hover) — nothing to compare against
1 drift · 41 match · 2 states compared · 1 skipped FAIL
A state the design doesn't define is skipped, not failed — asdesigned won't invent an expected value. That skip is itself worth reading: no Focused variant means the focus ring was never designed, which is a gap in the design file rather than a bug in the code. If *every* requested state is undesigned the run reports NOTHING COMPARED and exits non-zero, so a states check can't silently pass by checking nothing.
Exit code is 1 when drift is found, so compare works as a CI check.
Both sides are normalized into one flat StyleSpec — px numbers, RGBA colors, every field optional — and a pure diff compares them with sensible tolerances (±1px, small color distance, zero tolerance on font weight). Fields missing on one side are reported but don't fail the run; only real drift does.
Interaction states reuse all of that unchanged: one state is one spec pair, so diff never had to learn about them.
src/spec.ts — the shared formatsrc/diff.ts — the comparisonsrc/states.ts — state vocabulary and Figma variant→state matchingsrc/compare.ts — one comparison per state, and what to say when a state isn't designedsrc/readers/figma.ts — Figma REST → spec, including component-set variantssrc/readers/dom.ts — Playwright computed styles → spec, with pseudo-classes forced via CDPsrc/report.ts, src/report-html.ts — outputasdesigned compares one design node against one rendered element, at one viewport, across the UI states you ask for. That covers the drift that shows up most: padding, sizing, colors, and inherited-font mistakes like the Arial fallback above — plus hover, focus, active and disabled via --states.
Interaction states come with one requirement worth stating plainly: the design has to define them as variants. A component set with State=Hover resolves; a flat frame, or a file where hover only exists as a prototype interaction, gives asdesigned nothing to compare and the state is skipped. inspect --variants tells you which states a component actually designs before you check them.
Not covered:
--viewport WxH, 1280×800 by default. Checking a component across breakpoints means running compare once per breakpoint, each against the frame the designer drew for it. There's no single command that sweeps them.And one boundary that isn't a roadmap item: between designed breakpoints there is no design truth. If the file has a 768 frame and a 1280 frame, nothing in it specifies 900px. asdesigned can tell you a component drifted *at* a width someone designed — never *between* two of them. No tool that treats the design as the source of truth can.
npm install
npm test npm run build node dist/cli.js --help
ASDESIGNED_BROWSER=/path/to/chrome uses an existing Chrome/Chromium instead of Playwright's download.
design-drift explores similar ground with pixel + element diffing and a viewer. asdesigned is deliberately smaller — one verb, agent-first, 23 kB.MIT