SuperAPI AI 工具集

mcp-design-system-extractor

这是一个基于模型上下文协议(MCP)的服务器,用于从 Storybook 设计系统中提取组件信息。它能够连接 Storybook 实例,提取组件的 HTML、样式、组件元数据、依赖关系以及主题令牌(颜色、间距、字体等)。AI 助手可通过它更好地理解设计系统,从而辅助设计系统的采用与重构。工具内置 9 个可用工具,包括列出组件、搜索组件、提取 HTML、分析依赖、获取主题信息等。它使用 Puppeteer 无头 Chrome 渲染动态 JavaScript 组件,支持 Storybook 7 至 10 版本,可通过环境变量配置 Storybook 地址及 SSL 证书。适合在采用设计系统、构建新功能、组件迁移等场景中使用。

访问官网

工具介绍

用途

mcp-design-system-extractor 是一个模型上下文协议(MCP)服务器,让 AI 助手能够与 Storybook 设计系统交互,从 Storybook 实例中提取组件信息,帮助设计系统的采用与重构。

它连接 Storybook 实例,提取 HTML、样式和组件元数据。采用 Puppeteer 无头 Chrome 进行动态 JavaScript 组件渲染,可用于已构建的 Storybook 发行版。

主要能力

服务器共提供 9 个工具:

组件发现

  • list_components:列出 Storybook 实例中所有可用组件。可使用 compact: true 精简输出(减小响应体积);可按 category 参数过滤;支持分页,使用 page 和 pageSize(默认 20)。
  • search_components:按名称、标题、类别或用途搜索组件。query 为搜索词(使用 "*" 表示全部);purpose 可按功能查找("form inputs"、"navigation"、"feedback"、"buttons" 等);searchIn 可取 "name"、"title"、"category" 或 "all"(默认);支持分页。

组件提取

  • get_component_html:从指定组件 story 提取 HTML。默认异步:返回 job_id,用 job_status 轮询结果;可设置 async: false 切换同步模式(使用 timeout 参数);使用 variantsOnly: true 可获取可用变体列表(同步、快速);可选 includeStyles: true 提取 CSS(会过滤掉 Storybook 自身 CSS)。Story ID 格式为 "component-name--story-name",或仅 "component-name"(自动解析为默认变体)。

组件分析

  • get_component_dependencies:分析渲染后的 HTML,找出内部使用了哪些其他组件。可检测 React 组件、Web Components 和 CSS 类模式。需要 story ID 格式 "component-name--story-name"。

设计系统

  • get_theme_info:提取设计系统主题(颜色、间距、字体、断点),获取 CSS 自定义属性/变量。使用 includeAll: true 可获取所有 CSS 变量。
  • get_external_css:默认仅返回设计令牌 + 文件统计(避免令牌限制);提取并分类令牌:颜色、间距、字体、阴影;仅在需要完整 CSS 内容时使用 includeFullCSS: true;受安全保护,只接受与 Storybook 同一域名的 URL。

任务管理

  • job_status:检查异步任务状态,返回 status、result(完成时)、error(失败时)。在异步模式调用 get_component_html 后轮询。
  • job_cancel:取消排队或运行中的任务,返回取消是否成功。
  • job_list:列出所有任务及其状态。可按 status 过滤:"all"(默认)、"active"(排队/运行中)、"completed"。返回任务列表 + 队列统计。

使用方式

可通过 Claude CLI 使用(推荐方式),支持自签名证书。随后在 MCP 客户端中配置(参见环境变量)。

关键依赖:

  • Puppeteer:使用无头 Chrome 进行动态 JavaScript 组件渲染
  • Chrome/Chromium:Puppeteer 需要(Docker 中自动处理)

连接机制:通过 /index.json 和 /iframe.html 端点连接 Storybook;使用 Puppeteer 无头 Chrome 进行动态 JavaScript 渲染;长时间运行的操作使用内存任务队列,最多 2 个并发任务,完成任务保留 1 小时 TTL。

环境变量包括 STORYBOOK_URL 等,自签名证书场景可设置 NODE_TLS_REJECT_UNAUTHORIZED=0。

适用场景

  • 组件发现
  • 构建新功能
  • 设计系统分析
  • 组件迁移
  • 多工具工作流

限制与要求

  • 需要 Chrome/Chromium(用于 Puppeteer)
  • 需要运行中的 Storybook 实例
  • 支持的 Storybook 版本:Storybook 7、8、9、10。服务器从 /index.json 读取 story 索引,回退到 /stories.json,并通过 /iframe.html?id=<storyId> 渲染 story——这些端点在四个主要版本中保持稳定。
  • 不支持 Storybook 6 及更早版本:它们早于 /index.json,且使用不同的 story-id 方案。
  • 开发服务器(npm run storybook)和通过 HTTP 提供的已构建静态 Storybook 均可工作。

使用建议

  • 从发现开始:使用 list_components 并设置 compact: true
  • 先获取变体:使用 get_component_html 并设置 variantsOnly: true
  • HTML 使用异步:默认异步模式可避免大组件超时
  • 轮询 job_status:在读取结果前检查任务完成情况
  • 按用途搜索:使用 search_components 的 purpose 参数

故障排除

  • 确保 Storybook 正在运行且 STORYBOOK_URL 正确
  • 先用 list_components 查看可用组件
  • 对于大组件,使用异步模式(默认)并轮询 job_status
  • 在浏览器中直接检查 /index.json 端点
  • SSL 证书错误:为自签名证书设置 NODE_TLS_REJECT_UNAUTHORIZED=0

更多详细开发与设置说明参见 DEVELOPMENT.md。