Figma Context MCP

Figma Context MCP

Converts Figma designs into structured code context with token-aware styling, enabling AI agents to generate production-level frontend code.

Category
Visit Server

README

Figma Context MCP

一个 MCP 服务器,用于将 Figma 设计转换为结构化代码上下文,支持 AI 代理生成生产级前端代码。

通过提供 Figma 节点 URL,服务器会提取设计数据并生成代码所需的完整上下文信息。

功能

  • 设计结构提取 - 从 Figma 节点提取布局、尺寸、文本、颜色等设计结构
  • 视觉预览渲染 - 生成设计的图片预览,帮助 AI 代理准确理解设计意图
  • Token-aware 样式生成 - 读取 ti-d-variables-token.json,把 Figma boundVariables 解析成可用于代码生成的 Semantic / Component token
  • 样式策略控制 - 支持 preferTokens(token 优先)和 tokensOnly(token 强制)两种策略
  • 代理集成 - 与 AI 代理的技能库(如 component-skills)无缝配合
  • 多种传输模式 - 支持 stdio(Claude Desktop、Cursor)和 HTTP 服务器模式

工作流程

Figma 设计 → MCP 工具提取 → 结构化数据 + 预览图 + tokenBindings → AI 代理
                                                                    ↓
                                      Semantic / Component token + CSS variable → 生成代码

快速开始

1. 安装

全局安装(推荐):

npm install -g @sking7/figma-context-mcp

或从源代码构建:

git clone https://github.com/cola-sk/figma-context-mcp
cd figma-context-mcp
npm install
npm run build

2. 配置 MCP 环境变量

获取 Figma 个人访问令牌,然后配置你的 MCP 客户端。

最小可用配置只需要 Figma token:

{
  "env": {
    "FIGMA_ACCESS_TOKEN": "YOUR_TOKEN"
  }
}

如果要让 MCP 把 Figma boundVariables 解析成项目里的 CSS variables,推荐同时配置 token 仓库:

{
  "env": {
    "FIGMA_ACCESS_TOKEN": "YOUR_TOKEN",
    "TI_DESIGN_TOKEN_DIR": "/Users/YOUR_NAME/coding/ti-d-design-token",
    "TI_TOKEN_SET": "d"
  }
}

TI_DESIGN_TOKEN_DIR 建议始终使用绝对路径,因为不同 editor / agent 启动 MCP server 时的当前工作目录不一定相同。MCP 会根据 TI_TOKEN_SET 自动读取 token 仓库 manifest.json,推导出 token 变量文件、CSS variable metadata 和远程变量 alias 映射文件。

环境变量说明

环境变量 必填 默认值 作用
FIGMA_ACCESS_TOKEN Figma Personal Access Token。用于调用 Figma node API 和 image API。
TI_DESIGN_TOKEN_DIR ti-d-design-token 仓库的绝对路径。配置后 MCP 会从该仓库读取 token 文件,并把 Figma 变量绑定解析成 tokenBindings / tokenGaps。不配置时仍会返回设计结构,但不会生成 token-backed CSS variable 上下文。
TI_TOKEN_SET d token set id,例如 db。仅在配置了 TI_DESIGN_TOKEN_DIR,且工具调用没有传 tokenSetId 时生效。
TOKEN_SET_ID d TI_TOKEN_SET 的兼容别名。优先级低于工具参数 tokenSetIdTI_TOKEN_SET
FIGMA_STYLE_STRATEGY preferTokens 工具调用没有传 styleStrategy 时的默认样式策略。有效值只有 preferTokenstokensOnly;其他值会被当成 preferTokens
FIGMA_TOKEN_DETAIL compact token 元数据输出详细程度。compact 只保留代码生成需要的 sourcePathpropertycssVariablecodeValuefull 会额外输出 token reference、resolved value、chain 等调试信息。只有配置了 token registry 时生效。
FIGMA_INCLUDE_VARIABLES false 是否在简化 JSON 中输出 Figma 原始 boundVariables / explicitVariableModes。只有字符串 1true 会开启。日常生成代码建议关闭,排查 Figma 是否返回变量绑定时再打开。
FIGMA_INCLUDE_VECTOR_PATHS false 是否请求并输出 raw vector path 数据。只有字符串 1true 会开启。开启后 Figma node API 会追加 geometry=paths,响应体可能明显变大。
FIGMA_VARIABLES_TOKEN_FILE TI_DESIGN_TOKEN_DIR + TI_TOKEN_SET 推导 高级覆盖项,直接指定 ti-*-variables-token.json 绝对路径。优先级高于从 token 仓库推导的路径。
FIGMA_CSS_VARIABLES_FILE TI_DESIGN_TOKEN_DIR + TI_TOKEN_SET 推导 高级覆盖项,直接指定 CSS variable metadata 文件,例如 ti-d-css-variables.json。用于把 token 映射成 var(--...)
FIGMA_VARIABLE_ALIAS_FILE TI_DESIGN_TOKEN_DIR + TI_TOKEN_SET 推导 高级覆盖项,直接指定 remote-variable-aliases.json。用于把 Figma remote variable id 映射到本地 token variable id。

工具参数说明

这些参数是在 agent 调用 convert-figma-to-code 工具时传入的。工具参数优先级高于环境变量。

工具参数 必填 默认值 对应 env 作用
figmaNodeUrl Figma 节点 URL,必须包含 node-id
styleStrategy FIGMA_STYLE_STRATEGY,再回退到 preferTokens FIGMA_STYLE_STRATEGY 控制生成提示对 token 的要求。preferTokens 表示有 token 就用 token,没 token 才允许 literalFallbacktokensOnly 表示样式必须来自 token,缺失时输出 tokenGaps 并要求 agent 先报告缺口。
tokenDetail FIGMA_TOKEN_DETAIL,再回退到 compact FIGMA_TOKEN_DETAIL 控制 token 元数据体积。日常代码生成使用默认 compact;排查 token 映射链路时使用 full
designTokenDir TI_DESIGN_TOKEN_DIR TI_DESIGN_TOKEN_DIR 覆盖 token 仓库路径。
tokenSetId TI_TOKEN_SET / TOKEN_SET_ID,再回退到 d TI_TOKEN_SET / TOKEN_SET_ID 覆盖 token set id。
includeVariables FIGMA_INCLUDE_VARIABLES,再回退到 false FIGMA_INCLUDE_VARIABLES 是否输出 compact raw boundVariables。不影响 MCP 内部 token 解析;只控制最终 JSON 是否带原始变量字段。
includeVectorPaths FIGMA_INCLUDE_VECTOR_PATHS,再回退到 false FIGMA_INCLUDE_VECTOR_PATHS 是否请求并输出 raw vector path 数据。
variablesTokenFile FIGMA_VARIABLES_TOKEN_FILE,再回退到自动推导路径 FIGMA_VARIABLES_TOKEN_FILE 覆盖变量 token 文件路径。
cssVariablesFile FIGMA_CSS_VARIABLES_FILE,再回退到自动推导路径 FIGMA_CSS_VARIABLES_FILE 覆盖 CSS variable metadata 文件路径。
variableAliasFile FIGMA_VARIABLE_ALIAS_FILE,再回退到自动推导路径 FIGMA_VARIABLE_ALIAS_FILE 覆盖 remote variable alias 映射文件路径。

优先级规则

同一个配置项存在多种来源时,按下面顺序决定最终值:

工具调用参数 > 环境变量 > 默认值

token 文件路径的推导规则是:

显式文件参数 / 文件 env
  > TI_DESIGN_TOKEN_DIR + manifest.json 中的 token set 配置
  > TI_DESIGN_TOKEN_DIR/packages/{tokenSetId}/dist 或 mappings 的约定路径

常见配置场景

日常页面生成,推荐使用 token 但允许缺失项回退:

{
  "env": {
    "FIGMA_ACCESS_TOKEN": "YOUR_TOKEN",
    "TI_DESIGN_TOKEN_DIR": "/Users/YOUR_NAME/coding/ti-d-design-token",
    "TI_TOKEN_SET": "d",
    "FIGMA_STYLE_STRATEGY": "preferTokens",
    "FIGMA_INCLUDE_VARIABLES": "false",
    "FIGMA_INCLUDE_VECTOR_PATHS": "false"
  }
}

检查设计稿 token 覆盖率,缺 token 时不希望 agent 写硬编码值:

{
  "env": {
    "FIGMA_ACCESS_TOKEN": "YOUR_TOKEN",
    "TI_DESIGN_TOKEN_DIR": "/Users/YOUR_NAME/coding/ti-d-design-token",
    "TI_TOKEN_SET": "d",
    "FIGMA_STYLE_STRATEGY": "tokensOnly"
  }
}

排查 Figma 是否真的返回变量绑定:

{
  "env": {
    "FIGMA_ACCESS_TOKEN": "YOUR_TOKEN",
    "TI_DESIGN_TOKEN_DIR": "/Users/YOUR_NAME/coding/ti-d-design-token",
    "TI_TOKEN_SET": "d",
    "FIGMA_INCLUDE_VARIABLES": "true"
  }
}

只读取设计结构,不做 token 解析:

{
  "env": {
    "FIGMA_ACCESS_TOKEN": "YOUR_TOKEN",
    "FIGMA_INCLUDE_VARIABLES": "false",
    "FIGMA_INCLUDE_VECTOR_PATHS": "false"
  }
}

这种配置不要设置 TI_DESIGN_TOKEN_DIRFIGMA_VARIABLES_TOKEN_FILEFIGMA_CSS_VARIABLES_FILEFIGMA_VARIABLE_ALIAS_FILE

不配置 token registry 时,MCP 会把 token resolution 视为 disabled,不输出 tokenBindings / tokenGaps,避免把“当前没有 token 文件可解析”当成设计稿 token 覆盖缺口传给 LLM。

GitHub Copilot (VS Code)

编辑项目根目录的 .vscode/mcp.json

全局安装版本:

{
  "servers": {
    "figma-context-mcp": {
      "type": "stdio",
      "command": "figma-context-mcp",
      "env": {
        "FIGMA_ACCESS_TOKEN": "YOUR_TOKEN",
        "TI_DESIGN_TOKEN_DIR": "/Users/YOUR_NAME/coding/ti-d-design-token",
        "TI_TOKEN_SET": "d"
      }
    }
  }
}

本地开发版本(使用 git 代码构建):

{
  "servers": {
    "figma-context-mcp": {
      "type": "stdio",
      "command": "node",
      "args": ["/path/to/figma-mcp/build/index.js"],
      "env": {
        "FIGMA_ACCESS_TOKEN": "YOUR_TOKEN",
        "TI_DESIGN_TOKEN_DIR": "/Users/YOUR_NAME/coding/ti-d-design-token",
        "TI_TOKEN_SET": "d"
      }
    }
  }
}

/path/to/figma-mcp 替换为你克隆的项目路径,确保已执行 npm run build

Claude Desktop

编辑 claude_desktop_config.json

全局安装版本:

{
  "mcpServers": {
    "figma-context-mcp": {
      "type": "stdio",
      "command": "figma-context-mcp",
      "env": {
        "FIGMA_ACCESS_TOKEN": "YOUR_TOKEN",
        "TI_DESIGN_TOKEN_DIR": "/Users/YOUR_NAME/coding/ti-d-design-token",
        "TI_TOKEN_SET": "d"
      }
    }
  }
}

本地开发版本(使用 git 代码构建):

{
  "mcpServers": {
    "figma-context-mcp": {
      "type": "stdio",
      "command": "node",
      "args": ["/path/to/figma-mcp/build/index.js"],
      "env": {
        "FIGMA_ACCESS_TOKEN": "YOUR_TOKEN",
        "TI_DESIGN_TOKEN_DIR": "/Users/YOUR_NAME/coding/ti-d-design-token",
        "TI_TOKEN_SET": "d"
      }
    }
  }
}

/path/to/figma-mcp 替换为你克隆的项目路径

Cursor

编辑 mcp.json

全局安装版本:

{
  "mcpServers": {
    "figma-context-mcp": {
      "type": "stdio",
      "command": "figma-context-mcp",
      "env": {
        "FIGMA_ACCESS_TOKEN": "YOUR_TOKEN",
        "TI_DESIGN_TOKEN_DIR": "/Users/YOUR_NAME/coding/ti-d-design-token",
        "TI_TOKEN_SET": "d"
      }
    }
  }
}

本地开发版本(使用 git 代码构建):

{
  "mcpServers": {
    "figma-context-mcp": {
      "type": "stdio",
      "command": "node",
      "args": ["/path/to/figma-mcp/build/index.js"],
      "env": {
        "FIGMA_ACCESS_TOKEN": "YOUR_TOKEN",
        "TI_DESIGN_TOKEN_DIR": "/Users/YOUR_NAME/coding/ti-d-design-token",
        "TI_TOKEN_SET": "d"
      }
    }
  }
}

/path/to/figma-mcp 替换为你克隆的项目路径

3. 使用

向 AI 助手提供 Figma 节点 URL:

提取这个 Figma 设计的代码上下文:https://www.figma.com/design/FILE_KEY/MyFile?node-id=123-456

助手将获取设计数据并根据其技能库生成对应的代码。

工具支持两个样式策略:

{
  "figmaNodeUrl": "https://www.figma.com/design/FILE_KEY/MyFile?node-id=123-456",
  "styleStrategy": "preferTokens",
  "tokenDetail": "compact"
}

preferTokens 是默认策略:Figma 节点上有 Semantic 或 Component variable 绑定时,输出 tokenBindings 并要求代码使用变量;没有绑定时允许使用 literalFallbacktokenDetail 默认是 compact,会保留 CSS variable 代码生成所需的 codeValue,但省略调试字段。

{
  "figmaNodeUrl": "https://www.figma.com/design/FILE_KEY/MyFile?node-id=123-456",
  "styleStrategy": "tokensOnly"
}

tokensOnly 是强制策略:颜色、圆角、间距、描边、阴影、字体等样式值必须来自 Semantic 或 Component token。缺失绑定时,输出 tokenGaps,下游 agent 应先报告缺失 token,不生成最终页面代码,也不能写硬编码值。

返回内容中的 Token Usage Summary 会同时区分“是否可以生成代码”和“是否可以生成纯 token 代码”:

- Can generate code: yes
- Can generate token-pure code: no

preferTokens 下即使存在 tokenGaps,也可能允许生成代码,因为缺失项可按策略使用 literalFallback;但只要存在 tokenGaps,就不能视为 token-pure。tokensOnly 下存在任何 tokenGaps 时,Can generate code 会是 no,agent 应先报告缺口。

如果需要排查某个 Figma variable 到 CSS variable 的完整链路,可以临时使用:

{
  "figmaNodeUrl": "https://www.figma.com/design/FILE_KEY/MyFile?node-id=123-456",
  "tokenDetail": "full"
}

简化 JSON 字段裁剪说明

工具返回的不是 Figma 原始 API JSON,而是经过简化处理的节点数据。以下说明哪些字段会在什么情况下被删除或转换,以及原因。

始终删除:空值与默认值

字段 / 条件 删除时机 原因
任何值为 nullundefined[]{} 的字段 始终 消除深层嵌套对象中的噪声
opacity 值为 1(Figma 默认)时 默认值,无需生成 CSS
blendMode 值为 PASS_THROUGHNORMAL 均为默认混合模式
constraints vertical = TOPhorizontal = LEFT Figma 默认约束,不影响布局
isMask 值为 false 默认状态
rotation 绝对值 ≤ 0.001° 时 浮点舍入误差,实际为零
layoutPositioning(输出为 positioning 值为 AUTO 自动布局默认定位方式;非 AUTO 时才记录为 positioning
cornerSmoothing 值为 0 默认值
clipsContent 值为 false 默认状态

画板数组(fills / strokes / effects)

条件 处理方式 原因
fill.visible === false 该 fill 条目从数组中移除 隐藏的 paint 不影响渲染结果
stroke.visible === false 该 stroke 条目从数组中移除 同上
effect.visible === false 该 effect 条目从数组中移除 同上

颜色值归一化

转换 原因
r / g / b 浮点数(0.0 – 1.0)→ 整数(0 – 255) Figma API 以分数编码颜色;整数更符合代码生成惯例
a 保留 2 位小数 保持透明度可读,同时不损失精度

变量 / token 相关字段

字段 默认行为 如何覆盖 原因
boundVariables 完全删除 设置 includeVariables: true 原始变量数据体积大;tokenBindings 已包含解析后的值
explicitVariableModes 完全删除 设置 includeVariables: true 同上
boundVariables 中的每条 alias(includeVariables: true 时) 精简为 { type, id } — 其余字段删除 alias 的名称、描述等元数据不用于代码生成;tokenBindings 已承载可读信息

Token bindings / gaps(仅配置了 token 源时生效)

字段 compact(默认) full compact 模式下字段被删除的原因
tokenBindings[] sourcePathpropertycssVariablecodeValue 额外包含 referenceresolvedValueresolvedTypechain 调试元数据,代码生成不需要
tokenGaps[] sourcePathpropertyreason 额外包含 variableNamecollection 同上

Semantic / 非 Component 集合的变量绑定(如 Primitive 集合)永远不会被提升为 tokenBindings,始终以 tokenGaps 形式输出,reason"not a Semantic or Component variable"。这确保了业务代码只引用 Semantic 或 Component token。

position 字段

当父节点有自动布局(layoutMode = HORIZONTAL | VERTICAL当前节点使用自动定位(layoutPositioning = AUTO)时,position(相对父节点的 x/y 偏移)会被省略。仅在父节点无自动布局、或节点明确使用绝对定位时才输出。原因:自动布局中坐标由布局引擎控制,在 CSS 中硬编码会与布局冲突。

fills / strokes 中的 literalFallback

literalFallback(原始 hex / rgba 颜色字符串)仅在 styleStrategy = preferTokens 时输出,tokensOnly 模式下完全省略。原因:防止 agent 在要求纯 token 输出时默默使用字面量颜色值。

向量路径

vectorPaths 默认删除,除非设置 includeVectorPaths: true(或环境变量 FIGMA_INCLUDE_VECTOR_PATHS=true)。原因:路径数据体积大,组件库代码生成几乎不需要。

顶层 components / styles 映射表

节点响应中的 componentscomponentSetsstyles 映射表会被精简为只保留 { key, name, description, componentSetId, styleType },其余所有元数据(文档链接、remote 标记等)均删除。原因:组件映射只需要名称和 key。


开发

本地设置

git clone https://github.com/cola-sk/figma-context-mcp
cd figma-context-mcp
npm install
npm run build
npm start

运行模式

stdio 模式(Claude Desktop / Cursor):

npm start

HTTP 服务器模式:

npm start -- --mode http --port 3000

服务器地址:http://localhost:3000/mcp

MCP Inspector

npm run inspector

开发监控

npm run dev

项目结构

figma-context-mcp/
├── src/
│   ├── index.ts              # MCP 服务器入口和工具定义
│   ├── token-utils.ts        # Figma variable 解析、token 策略和 CSS variable 映射
│   └── server-runner.ts      # HTTP 传输层(Express)
├── data/
│   ├── overview.md           # 服务器概览资源
│   └── quickstart.md         # 快速开始指南
├── build/                    # 编译输出
├── mcp-config.json           # MCP 服务器配置
└── package.json

许可证

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured