Figma Context MCP
Give your coding agent access to your Figma data. Implement designs in any framework in one-shot.
作者提供的说明(英文原文)
MCP server for Storybook design systems — extract component HTML, styles and metadata.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
STORYBOOK_URL, NODE_TLS_REJECT_UNAUTHORIZED, DEBUG你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"design-system-extractor": {
"command": "npx",
"args": [
"-y",
"mcp-design-system-extractor"
],
"env": {
"STORYBOOK_URL": "your-value",
"NODE_TLS_REJECT_UNAUTHORIZED": "your-value",
"DEBUG": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add design-system-extractor --env STORYBOOK_URL=your-value --env NODE_TLS_REJECT_UNAUTHORIZED=your-value --env DEBUG=your-value -- npx -y mcp-design-system-extractor运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"design-system-extractor": {
"command": "npx",
"args": [
"-y",
"mcp-design-system-extractor"
],
"env": {
"STORYBOOK_URL": "your-value",
"NODE_TLS_REJECT_UNAUTHORIZED": "your-value",
"DEBUG": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"design-system-extractor": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"mcp-design-system-extractor"
],
"env": {
"STORYBOOK_URL": "your-value",
"NODE_TLS_REJECT_UNAUTHORIZED": "your-value",
"DEBUG": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
STORYBOOK_URL envNODE_TLS_REJECT_UNAUTHORIZED envDEBUG env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 freema 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(1.3.0)于昨天进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:Figma Context MCP, Claude Real Video, Figma MCP Server
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
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.
The Figma MCP server brings Figma design context directly into your AI workflow.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
A Model Context Protocol (MCP) server that extracts component information from Storybook design systems. Connects to Storybook instances and extracts HTML, styles, and component metadata.
claude mcp add design-system npx mcp-design-system-extractor@latest \
--env STORYBOOK_URL=http://localhost:6006
With self-signed certificate:
claude mcp add design-system npx mcp-design-system-extractor@latest \
--env STORYBOOK_URL=https://my-storybook.example.com \ --env NODE_TLS_REJECT_UNAUTHORIZED=0
npm install -g mcp-design-system-extractor
Then configure in your MCP client (see Environment Variables).
git clone https://github.com/freema/mcp-design-system-extractor.git
cd mcp-design-system-extractor npm install && npm run build npm run setup # Interactive setup for Claude Desktop
| Variable | Description | Default |
|---|---|---|
STORYBOOK_URL | URL of your Storybook instance | http://localhost:6006 |
NODE_TLS_REJECT_UNAUTHORIZED | Set to 0 to skip SSL certificate verification (for self-signed certs) | 1 |
Example with self-signed certificate:
{
"mcpServers": { "design-system": { "command": "node", "args": ["/path/to/dist/index.js"], "env": { "STORYBOOK_URL": "https://my-storybook.example.com", "NODE_TLS_REJECT_UNAUTHORIZED": "0" } } } }
See DEVELOPMENT.md for detailed setup instructions.
compact: true for minimal output (reduces response size)category parameterpage and pageSize (default: 20)job_id, use job_status to poll for resultsasync: false for synchronous mode (uses timeout parameter)variantsOnly: true to get list of available variants (sync, fast)includeStyles: true for CSS extraction (Storybook CSS filtered out)"component-name--story-name" or just "component-name" (auto-resolves to default variant)query: Search term (use "*" for all)purpose: Find by function ("form inputs", "navigation", "feedback", "buttons", etc.)searchIn: "name", "title", "category", or "all" (default)page and pageSize"component-name--story-name"includeAll: true for all CSS variablesincludeFullCSS: true only when you need full CSS contentstatus, result (when completed), error (when failed)get_component_html in async modestatus: "all" (default), "active" (queued/running), "completed"// List all components (compact mode recommended)
await list_components({ compact: true });
// Search for components await search_components({ query: "button", searchIn: "name" });
// Find components by purpose await search_components({ purpose: "form inputs" });
// Get variants for a component await get_component_html({ componentId: "button", variantsOnly: true }); // Returns: { variants: ["primary", "secondary", "disabled"] }
// Get HTML (async mode - default) await get_component_html({ componentId: "button--primary" }); // Returns: { job_id: "job_xxx", status: "queued" }
// Poll for result await job_status({ job_id: "job_xxx" }); // Returns: { status: "completed", result: { html: "...", classes: [...] } }
// Get HTML (sync mode) await get_component_html({ componentId: "button--primary", async: false, timeout: 30000 }); // Returns: { html: "...", classes: [...] }
// Get HTML with styles await get_component_html({ componentId: "button--primary", async: false, includeStyles: true });
// Check all running jobs await job_list({ status: "active" });
// Extract theme info await get_theme_info({ includeAll: false });
// Get design tokens from CSS await get_external_css({ cssUrl: "https://my-storybook.com/assets/main.css" });
list_components with compact: trueget_component_html with variantsOnly: truesearch_components with purpose parameterOnce connected, you can use natural language prompts with Claude:
Component Discovery:
Show me all available button components in the design system
Building New Features:
I need to create a user profile card. Find relevant components
from the design system and show me their HTML structure.
Design System Analysis:
Extract the color palette and typography tokens from the design system.
I want to ensure my new component matches the existing styles.
Component Migration:
Get the HTML and styles for the "alert" component. I need to
recreate it in a different framework while keeping the same look.
Multi-Tool Workflow:
First list all form-related components, then get the HTML for
the input and select components. I'm building a registration form.
Connects to Storybook via /index.json and /iframe.html endpoints. Uses Puppeteer with headless Chrome for dynamic JavaScript rendering. Long-running operations use an in-memory job queue with max 2 concurrent jobs and 1-hour TTL for completed jobs.
STORYBOOK_URL is correctlist_components first to see available componentsjob_status/index.json endpoint directly in browserNODE_TLS_REJECT_UNAUTHORIZED=0 for self-signed certificatesStorybook 7, 8, 9 and 10. The server reads the story index from /index.json, falling back to /stories.json, and renders stories through /iframe.html?id= — endpoints that have been stable across all four major versions.
Storybook 6 and earlier are not supported: they predate /index.json and use a different story-id scheme.
Both a dev server (npm run storybook) and a built static Storybook served over HTTP will work.
See DEVELOPMENT.md for detailed development instructions.
Created by Tomáš Grasl
MIT