mcpField
K
kiyas

kiyas

本地服务
github.com/saiffmirza开发工具114 周前更新

关于 kiyas

kiyas 是 MCP 服务和 CLI,可将 Figma 设计或提供的图片与渲染后的 UI 对比,并生成 AI 差异报告。它面向需要可执行设计还原反馈的开发者和设计师,也能根据自然语言描述定位组件。

主要功能

  1. 01对比 Figma 或提供的设计图片
  2. 02根据描述定位组件
  3. 03使用 Playwright 截取 UI
  4. 04生成 HTML 和 JSON 报告
  5. 05按严重程度筛选问题
  6. 06通过 MCP 获取已保存报告

适用场景

  1. 01检查 UI 组件是否符合 Figma 设计
  2. 02将实现界面与截图进行对比
  3. 03审查高严重程度的视觉差异
  4. 04截取已登录页面进行对比

MCP 相关

通过 stdio 提供三种 MCP 工具:比较设计、获取已保存报告,以及按需按严重程度列出问题。比较时可使用 Figma URL 或提供的设计图片。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"saiffmirza-kiyas": {
"command": "npx",
"args": [
"-y",
"kiyas-cli"
],
"env": {
"FIGMA_ACCESS_TOKEN": "<FIGMA_ACCESS_TOKEN>"
}
}
}
}
启动命令npx -y kiyas-cli
需要配置的环境变量
FIGMA_ACCESS_TOKEN密钥Figma personal access token (File content → Read only). Only needed when comparing against Figma URLs — screenshot comparisons via designImage need no token.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmkiyas-cli1.4.0

工具

3

收录的工具列表 · 更新于 2 周前

参数类型必填说明
namestring否比较的易读名称,用于报告标题
runsinteger否运行比较 N 次,并保留多数投票结果——N 越高,一致性越高,成本也按 N 倍增加(默认值:1)
waitinteger否页面加载后、截图前等待的时间(毫秒)
figmastring否Figma 画板/组件 URL。请提供 `figma` 或 `designImage`。
modelenum否AI 提供商(默认值:claude)claude | openai
scalenumber否应用于 Figma 导出图像和截图的渲染比例(默认值:adaptive——组件大小的截图为 2,大尺寸截图为 1)
targetstring否渲染后组件的直接 URL。请提供 `target` 或 `component`。
fullPageboolean否未提供选择器时,截取整个可滚动页面(默认值:true)
selectorstring否用于截取特定元素的 CSS 选择器
viewportstring否截图视口,格式为 WIDTHxHEIGHT(默认值:1280x720)
authStatestring否Playwright storageState JSON 文件的路径(cookies + localStorage)。这样 kiyas 就能像测试一样截取经过身份验证的视图。使用 `npx playwright codegen --save-storage=auth.json` 生成。
componentstring否要在代码库中查找的组件的自然语言描述,例如 "登录页面上的主按钮"。
devServerstring否开发服务器基础 URL(默认值:自动检测端口 3000/5173/8080/4200 上正在监听的服务器;否则使用 http://localhost:3000)
thresholdenum否渲染后的 HTML 报告的严重性阈值(默认值:all)all | medium | high
colorSchemeenum否强制指定截图使用的 prefers-color-scheme。默认值:auto——kiyas 检测设计的明暗度,并在匹配的配色方案下重试。light | dark
designImagestring否用于比较的设计图像的本地路径、http(s) URL 或 base64 data: URI(例如截图),以替代 Figma URL。适用于未配置 Figma 令牌的情况——例如,使用已连接的 Figma MCP 服务的截图工具导出画板,并在此处传入生成的文件路径或图像 URL。

详细介绍

kiyas

AI 驱动的设计保真度 — MCP 服务与 CLI
“comparison”——读作“key-AHS”


一款以开发者为先的 MCP 服务(也可作为 CLI 运行),用于比较 Figma 设计与渲染后的 UI 组件,并提供 AI 驱动的语义差异分析。可接入 Claude Code、Cursor、Codex CLI 及任何其他兼容 MCP 的客户端。

与像素差异工具不同,kiyas 使用视觉 AI 理解_差异是什么_以及_为何重要_,并输出可执行、易于理解的反馈,例如:

  • “实现中的 border-radius 为 8px,而设计中为 12px”
  • “标题与副标题之间的间距比设计紧凑 16px”

只需按名称描述组件。kiyas 会在代码库中找到它,为其截图,并与 Figma 设计进行比较。

更喜欢应用而不是终端?我们还提供桌面应用。


桌面应用

一款原生 macOS 应用,可通过点选操作运行相同的比较,专为设计师和不想使用终端的用户打造。选择项目,粘贴 Figma 链接(或拖入截图),描述组件,即可在应用中获取完整报告。它使用相同的引擎和基于订阅的身份验证:AI 调用通过你设备上的 Claude Code 或 Codex CLI 进行,绝不使用 API 密钥。

⬇ 下载最新版本(Apple Silicon)

  1. 下载 .dmg,将 Kiyas 拖到“应用程序”中。
  2. 预览版尚未经过公证——首次启动时,右键点击 →“打开”(或运行 xattr -dr com.apple.quarantine /Applications/Kiyas.app)。
  3. 在任意终端中登录一次 Claude Code 或 Codex;应用会自动获取登录状态。

主要功能:带有开发服务器检测的项目侧边栏、比较前的捕获预览与裁剪、内置终端、完整深色模式,以及 macOS 26 上的 Liquid Glass 图标。

如需从源代码构建:

git clone https://github.com/saiffmirza/kiyas && cd kiyas
npm install
npm run desktop        # dev mode
# or package a .app/.dmg:
cd apps/desktop && npx electron-builder --mac

工作原理

                          ┌─────────────────────┐
                          │  kiyas               │
                          │  (MCP server / CLI)  │
                          │                      │
                          │  figma / design img  │
                          │  + target/component  │
                          └──────────┬───────────┘
                                     │
                      ┌──────────────┼──────────────┐
                      ▼              ▼               ▼
              ┌──────────────┐ ┌───────────┐ ┌─────────────┐
              │ 1. Auth      │ │ 2. Design │ │ 3. Resolve  │
              │              │ │  Capture  │ │  Component  │
              │ Verify       │ │           │ │             │
              │ Claude Code  │ │ Figma API │ │ AI agent    │
              │ or Codex CLI │ │ PNG export│ │ searches    │
              │ is installed │ │ — or your │ │ codebase,   │
              │ & signed in  │ │ own image │ │ finds URL + │
              │              │ │ (--design)│ │ CSS selector│
              └──────┬───────┘ └─────┬─────┘ └──────┬──────┘
                     │               │               │
                     │               ▼               ▼
                     │        ┌────────────┐  ┌────────────┐
                     │        │  Figma     │  │ Playwright │
                     │        │  design    │  │ screenshot │
                     │        │  (PNG)     │  │ (PNG)      │
                     │        └─────┬──────┘  └─────┬──────┘
                     │              │               │
                     │              └───────┬───────┘
                     │                      ▼
                     │          ┌──────────────────────┐
                     └─────────►│ 4. Vision AI Compare │
                                │                      │
                                │ Both images sent to  │
                                │ Claude Code CLI with │
                                │ a structured prompt   │
                                │                      │
                                │ Returns JSON array   │
                                │ of discrepancies     │
                                └──────────┬───────────┘
                                           │
                                           ▼
                                ┌──────────────────────┐
                                │ 5. HTML Report       │
                                │                      │
                                │ Side-by-side images  │
                                │ Severity badges      │
                                │ Interactive filters  │
                                │ HIGH / MEDIUM / LOW  │
                                │                      │
                                │ file:// link in      │
                                │ terminal output      │
                                └──────────────────────┘

分步说明:

  1. 身份验证 — kiyas 将 AI 调用委托给 Claude Code 或 Codex CLI。现有订阅即可处理所有操作,无需 API 密钥。
  2. 获取设计图像 — 解析 Figma URL,调用 Figma REST API 将画板导出为 PNG(缩放比例与截图相同——自适应,参见 --scale),并获取节点元数据(颜色、字体、间距)。也可以完全跳过 Figma:传入 --design <path-or-url> 和自己的设计图像,无需 Figma 令牌。
  3. 解析组件 — AI Agent 扫描你的代码库(文件树、路由、组件),将自然语言描述映射到开发服务器上的 URL 和 CSS 选择器。
  4. 为实现截图 — Playwright 启动无头 Chromium,导航到解析出的 URL,并捕获组件。
  5. AI 比较 — 将两张 PNG 传给 Claude Code CLI,并附上结构化提示词。AI 会识别所有差异,并指出具体的 CSS 属性和值。
  6. 生成报告 — 将结果整理为 HTML 报告,其中包含并排图像比较、严重程度徽标和交互式筛选器。终端中会打印文件链接,方便访问。

用作 MCP 服务

kiyas 通过 stdio 将其比较引擎作为 MCP 服务公开。提供三个工具,输入架构均由 Zod 类型定义:

工具描述必填输入
compare执行一次全新的设计与实现比较;返回 reportId 和摘要(figma 或 designImage) + (target 或 component)
get_diff_report获取已存储报告的 HTML 或 JSON 内容reportId
list_issues列出已存储报告中的差异,可按严重程度筛选reportId

报告会保存在项目目录下的 .kiyas/reports/<reportId>/ 中,因此同一个 reportId 在后续调用以及 CLI/MCP 使用中都会保持有效。

安装
npm install -g kiyas-cli
npx playwright install chromium
配置

Claude Code

claude mcp add kiyas -- npx -y kiyas-cli@latest mcp

# with a Figma token (only needed for Figma-URL comparisons):
claude mcp add kiyas -e FIGMA_ACCESS_TOKEN=figd_xxx -- npx -y kiyas-cli@latest mcp

kiyas 也已收录在官方 MCP Registry 中,名称为 io.github.saiffmirza/kiyas,因此支持 Registry 的客户端可以直接从其 MCP 目录安装。

Cursor — 编辑 ~/.cursor/mcp.json:

{
  "mcpServers": {
    "kiyas": {
      "command": "npx",
      "args": ["kiyas-cli@latest", "mcp"]
    }
  }
}

Codex CLI — 编辑 ~/.codex/config.toml:

[mcp_servers.kiyas]
command = "npx"
args    = ["kiyas-cli@latest", "mcp"]
保持更新

上述配置使用 kiyas-cli@latest,因此 npx 会在每次启动时获取最新版本 — 代价是每次启动都要检查 Registry,且离线时可能无法启动。如果你更愿意固定版本([email protected])或使用全局安装,也完全没问题:kiyas 会在启动时检查一次 npm(非阻塞),并在有更新版本时向 stderr 输出通知。

MCP 用户的 Figma 访问权限

只有在传入 figma URL 时,compare 工具才需要 Figma 访问权限。可通过以下三种方式提供:

1. 通过服务配置传入令牌(推荐):

claude mcp add kiyas -e FIGMA_ACCESS_TOKEN=<your-token> -- npx -y kiyas-cli@latest mcp

或在 .mcp.json / mcp.json / config.toml 中添加 env 块:

{
  "mcpServers": {
    "kiyas": {
      "command": "npx",
      "args": ["kiyas-cli@latest", "mcp"],
      "env": { "FIGMA_ACCESS_TOKEN": "your-token" }
    }
  }
}

2. 在项目根目录或主目录中放置 .kiyasrc 文件:{ "figmaAccessToken": "..." }

3. 不提供令牌 — 与 Figma MCP 服务搭配使用。 如果 Agent 已连接 Figma 自己的 MCP 服务,它可以自行将画布导出为图像,并将文件路径(或图像 URL)作为 designImage 传入,而不是传入 figma URL。在此模式下,kiyas 不会调用 Figma API:

将 Figma 文件中的节点 1:234 导出为 PNG,然后使用 kiyas 将其与登录页面上的主按钮进行比较。

如果使用了 figma URL,但未配置令牌,工具会立即失败并显示相关说明,而不会一直等待。

连接后,你可以向 Agent 提出如下请求:

将 <url> 处的 Figma 画布与登录页面上的主按钮进行比较,然后只列出高严重程度的问题。

Agent 会调用 compare 生成 reportId,然后针对该 ID 调用 list_issues 并传入 severity: "high"。


快速入门(CLI)

前置条件
  • Node.js 20+
  • 已安装并登录 Claude Code(Pro、Max 或 Team 订阅),或使用 OpenAI 的 Codex
  • Figma 个人访问令牌(在此生成)— 仅 --figma 需要;使用 --design 与本地截图进行比较无需令牌
安装
npm install -g kiyas-cli
npx playwright install chromium
设置
kiyas setup

此过程会引导你完成:

  1. Figma 令牌 — 创建只读个人访问令牌并保存到 .env
  2. AI 提供商 — 检查是否已安装 Claude Code 或 Codex,并设置默认项
运行
# Describe the component by name — kiyas finds it automatically
kiyas --figma "https://www.figma.com/design/abc123/Design?node-id=1:234" \
  --component "eventHeader on the redemption screen"

# Or provide a direct URL if you already know it
kiyas --figma "https://www.figma.com/design/abc123/Design?node-id=1:234" \
  --target "http://localhost:3000/redemption" \
  --selector ".event-header"

# Save the report to a specific path
kiyas --figma "https://www.figma.com/design/abc123/Design?node-id=1:234" \
  --component "primary button" \
  --output report.html

# Output as JSON (for CI pipelines)
kiyas --figma "https://www.figma.com/design/abc123/Design?node-id=1:234" \
  --component "primary button" \
  --format json

# Compare against a design screenshot instead of Figma (no Figma token needed)
kiyas --design ./design.png \
  --component "primary button" \
  --output report.html

# Use OpenAI instead of Claude
kiyas --figma "https://www.figma.com/design/abc123/Design?node-id=1:234" \
  --component "nav bar" \
  --model openai

CLI 参考

标志描述必填
--figma <url>Figma 画板/组件 URL是**
--design <path>设计图片(本地路径或 URL),用于替代 Figma是**
--component <description>要查找的组件的自然语言描述是*
--target <url>渲染后组件的直接 URL(跳过 AI 查找)是*
--dev-server <url>开发服务基础 URL(默认:自动检测 3000/5173/8080/4200)否
--model <provider>AI 提供商:claude(默认)或 openai否
--output <path>报告保存路径(默认:kiyas-report-<timestamp>.html)否
--format <type>输出格式:html(默认)或 json否
--viewport <size>截图视口大小(默认:1280x720)否
--scale <n>Figma 导出和截图的渲染比例。默认自适应:组件大小的截图(选择器或视口 ≤ 1000px)为 2,大型整页截图为 1否
--no-full-page仅截取视口,而非整个可滚动页面否
--selector <css>用于截取特定元素的 CSS 选择器否
--wait <ms>截图前等待的时间(毫秒)(用于动画/加载)否
--auth-state <path>用于已认证截图的 Playwright storageState JSON 文件否
--config <path>批量比较所用 JSON 配置文件的路径否
--threshold <level>严重级别筛选:all、medium、high(默认:all)否

*请提供 --component 或 --target。使用 --component 时,kiyas 会使用 AI 在代码库中查找组件并解析其 URL。

**请提供 --figma 或 --design。使用 --design 时,会完全跳过 Figma 导出,且无需 Figma 令牌。


已认证截图

大多数真实设计都需要登录才能访问。kiyas 接受 Playwright storageState JSON 文件(cookies + localStorage),并在截图会话中复用该文件;它与 Playwright 测试使用的格式相同,因此测试已生成的任何认证状态文件都可以直接使用。

# 1. Record a session — log in, then close the browser. Playwright writes auth.json.
npx playwright codegen --save-storage=auth.json https://app.example.com

# 2. Use it for kiyas screenshots
kiyas \
  --figma "https://www.figma.com/design/.../?node-id=1:234" \
  --target "https://app.example.com/dashboard" \
  --auth-state ./auth.json

MCP compare 工具提供相同的选项 authState — 传入路径后,Agent 无需进一步设置即可截取已认证页面。


身份验证

kiyas 利用你现有的 AI 订阅,无需单独的 API 密钥。它会将所有 AI 调用委托给 Claude Code 或 Codex CLI,由它们自行处理身份验证。

Claude(默认): 需要安装 Claude Code,并使用 Pro、Max 或 Team 订阅登录。kiyas 会启动 claude CLI 来调用 AI,因此用量会计入你现有的订阅额度。

# Install Claude Code if you haven't already
npm install -g @anthropic-ai/claude-code

# Sign in
claude auth login

OpenAI(替代方案): 需要安装 Codex 并登录。使用 --model openai 选择它。

codex auth login

如果未找到 CLI,kiyas 会提示你安装并登录:

Claude Code is not installed or not signed in.

kiyas uses your existing Claude Code subscription — no API keys needed.

To fix this, either:

  1. Install and sign into Claude Code:
     npm install -g @anthropic-ai/claude-code
     claude auth login

  2. Or switch kiyas to use OpenAI instead:
     kiyas set model openai
     (requires signing into Codex: codex auth login)

Figma: 需要具有 File content → Read only 权限范围的个人访问令牌。运行 kiyas setup 进行配置,或手动在 .env 中设置 FIGMA_ACCESS_TOKEN。


准确性与可复现性

kiyas 是一个围绕视觉 AI 构建的测试框架,而测试框架只有在结果一致时才有用。它会控制以下内容:

  • 固定模型 — 比较模型和解析器模型均已固定(claude --model / codex -m),不会随 CLI 默认值变化。使用 kiyas set claudeModel <id> / kiyas set codexModel <id> 进行配置。
  • 隔离 AI 上下文 — 比较在空工作目录中运行,因此项目的 CLAUDE.md/AGENTS.md、钩子和 MCP 服务不会影响输出。
  • 固定截图环境 — 禁用动画和过渡效果,等待字体加载完成,使用 UTC 时区和固定区域设置,截取整页屏幕截图,并确保 Figma 导出比例始终与屏幕截图的设备缩放系数一致。组件尺寸的截图默认使用 2x;在评估集上测得,这使细微变更的召回率从 75% 提升到了 90%。
  • 验证输出 — 对模型响应进行架构验证(格式错误的发现会被丢弃并发出警告;如果无效响应占多数,则运行会失败,而不是生成看似正常但实际错误的报告)。
  • 运行清单 — 每份报告的 JSON 都会记录视口、缩放比例、阈值、固定模型、CLI 版本、提示词版本哈希,以及如何解析 --component 描述,因此可以对任意两份报告进行有效比较。
  • 多次运行投票 — --runs 3 会并发运行三次比较,并仅保留多数票通过的发现;每项发现都会标注置信度分数。以 N 倍成本换取更高的一致性;默认关闭。
  • 基于测量,而非凭感觉 — npm run eval(仅限仓库,不随包发布)会运行一组基准评估:包含已知注入 CSS 变更的测试页面,以及无变更页面对,并通过确定性方式评估召回率、精确率、严重程度一致性、误报下限和多次运行间的稳定性。提示词和流水线变更都会据此进行验证。

配置文件

对于需要重复进行比较的团队,可以创建一个 kiyas.config.json:

{
  "figmaAccessToken": "env:FIGMA_ACCESS_TOKEN",
  "model": "claude",
  "viewport": "1280x720",
  "comparisons": [
    {
      "name": "Primary Button",
      "figma": "https://www.figma.com/design/abc123/Design?node-id=1:234",
      "target": "primary button on the login page"
    },
    {
      "name": "Event Card",
      "figma": "https://www.figma.com/design/abc123/Design?node-id=5:678",
      "target": "http://localhost:6006/iframe.html?id=card--event",
      "selector": ".event-card"
    }
  ]
}

target 字段既接受组件描述(由 AI 解析),也接受直接 URL。每次比较都需要将 figma(URL)或 design(本地图片路径)作为设计来源。运行方式如下:

kiyas --config ./kiyas.config.json

项目结构

kiyas/  (npm workspaces monorepo)
├── packages/
│   ├── core/                       # @kiyas/core — the engine (private, bundled into the CLI)
│   │   └── src/
│   │       ├── index.ts            # Public API barrel (runComparison, resolveComponent, …)
│   │       ├── config.ts           # Config file loading + Figma token resolution
│   │       ├── settings.ts         # Persisted user settings
│   │       ├── auth/
│   │       │   ├── index.ts        # Auth resolver (picks best available auth)
│   │       │   ├── claude-oauth.ts # Verify Claude Code CLI is available
│   │       │   └── openai-auth.ts  # Verify Codex CLI is available
│   │       ├── resolve/
│   │       │   └── component.ts    # AI agent: finds component in codebase → URL + selector
│   │       ├── capture/
│   │       │   ├── figma.ts        # Figma REST API: export frame as PNG + metadata
│   │       │   └── playwright.ts   # Playwright: headless screenshot of rendered component
│   │       ├── compare/
│   │       │   ├── index.ts        # Orchestrator: sends images to vision AI
│   │       │   ├── pipeline.ts     # Pure runComparison() + report persistence (shared by CLI + MCP)
│   │       │   ├── claude.ts       # Claude comparison via Claude Code CLI
│   │       │   ├── openai.ts       # OpenAI comparison via Codex CLI
│   │       │   └── prompt.ts       # The comparison prompt (shared across providers)
│   │       ├── report/
│   │       │   └── html.ts         # Generate self-contained HTML report with embedded images
│   │       └── utils/
│   │           ├── parse-figma-url.ts  # Extract file key + node ID from Figma URL
│   │           └── logger.ts       # Minimal logging utility
│   └── cli/                        # kiyas-cli — the published npm package
│       ├── src/
│       │   ├── index.ts            # CLI entry point (argument parsing, orchestration)
│       │   ├── setup.ts            # Interactive first-time setup
│       │   └── mcp/
│       │       ├── server.ts       # MCP server bootstrap (stdio transport)
│       │       └── tools.ts        # Zod schemas + handlers (compare, get_diff_report, list_issues)
│       ├── package.json
│       └── tsup.config.ts
├── apps/
│   └── desktop/                    # @kiyas/desktop — Electron app (macOS)
│       ├── src/
│       │   ├── main/               # Main process: IPC, capture flow, pty terminal
│       │   ├── preload/            # Typed context bridge (window.kiyas)
│       │   └── renderer/           # React UI (cream/navy/gold theme, dark mode)
│       ├── build/kiyas.icon        # Icon Composer bundle (Liquid Glass icon source)
│       ├── scripts/gen-icon.mjs    # Renders all icon variants from the Farisi kāf
│       └── electron-builder.yml
├── eval/                           # Golden eval set + scoring harness
├── .env.example
├── .kiyasrc.example
├── package.json                    # Workspace root
└── tsconfig.json

技术栈

层级工具
运行时Node.js(TypeScript)
MCP@modelcontextprotocol/sdk、Zod(stdio 传输)
屏幕截图捕获Playwright(无头 Chromium)
Figma 导出Figma REST API
AI 比较Claude Code CLI 或 Codex CLI(视觉)
组件解析Claude Code CLI / Codex CLI(Agent)
输出HTML(默认)、JSON
桌面应用Electron、electron-vite、React、node-pty + xterm
构建tsup、electron-builder
包管理器npm

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。