design-review
This MCP server renders UI design artifacts headlessly, runs deterministic linters, and manages stateful design review loops with an independent vision critic.
README
design-artifact-loop
Render-grounded, non-slop UI design artifacts for coding agents.
"Design slop" is what you get when a model has no committed design system — it falls back to the statistical average of web UIs: generic gradient hero, three equal cards, default indigo, Inter everywhere. This plugin fixes that with author-then-conform:
- Commit a concrete design system before any markup — pick one of ~18 vendored
token systems (or author a fresh one) and reference every colour/size via
var(--…). - Write a single self-contained static HTML artifact — no JS, no external network beyond a declared font CDN.
- Iterate against real evidence, not self-assessment — the
design_reviewMCP tool re-renders the artifact headlessly (1440×900 + 390×844), runs a deterministic linter (token-trace, no-JS, network lockdown, font denylist, blank/overflow detection), and folds in findings from an independent vision critic that reads the rendered PNG. A disk-backed state machine carries findings forward across rounds and hard-caps the loop at 6 rounds — a clean lint alone never ships; the critic must have reviewed the exact artifact version (enforced via a content-hash review token).
Components
skills/design-artifact-loop/— the skill: the loop protocol (SKILL.md), ~18 vendored design systems (DESIGN.md+tokens.csseach; Apache-2.0, seedesign-systems/ATTRIBUTION.md), and good/slop fixture pairs.server/— thedesign-reviewMCP server (stdio): linter, renderer, and the round/cap state machine. 100+ tests.
Requirements
- Node.js ≥ 18 — runs the MCP server (a committed self-contained bundle,
server/dist/index.mjs; no install step). Bun is only needed for development (tests + rebuilding the bundle). - Chromium on
PATH(or setCHROMIUM_BIN) — used for headless rendering. Egress during render is blocked at the browser layer via--host-resolver-rules(only the declared font CDN resolves), so the artifact under review cannot phone home even if the linter misses a construct.
Snap chromium note (Ubuntu): snap confinement denies chromium access to top-level dot-directories under
$HOME(e.g.~/.cache/...), which surfaces asrender-blankfindings with 0-byte screenshots. Project-nested paths like~/myproject/.design-artifact-loop/work fine; if your loop root must live under a top-level dot-dir, pointCHROMIUM_BINat a non-snap chromium.
Install (Claude Code)
claude plugin marketplace add davekim917/design-artifact-loop
claude plugin install design-artifact-loop@design-artifact-loop
The skill triggers on "design a …", "mock up a …", "make me a UI". Artifacts and
review state live under .design-artifact-loop/<id>/ in your working directory
(override with DESIGN_ARTIFACT_LOOP_ROOT).
Install (Codex CLI)
The repo is also a native Codex plugin (.codex-plugin/plugin.json declares the
skill + MCP server; .agents/plugins/marketplace.json makes the repo its own
marketplace):
codex plugin marketplace add davekim917/design-artifact-loop
codex plugin add design-artifact-loop@design-artifact-loop
On Codex versions without the plugin system, ./install-codex.sh wires the same
two pieces by hand (skill mirror into ~/.agents/skills/ + codex mcp add).
The loop root resolves against the MCP server's working directory (Codex's launch
dir) — same DESIGN_ARTIFACT_LOOP_ROOT override applies.
Development
bun install
bun test server/ # linter, state machine, render classification, corpus integrity
bunx tsc --noEmit # typecheck
bun run build # rebuild server/dist/index.mjs after editing server/*.ts (commit it)
Design notes
- The linter is advisory; the render sandbox is the boundary. Regex checks give fast feedback and keep the delivered artifact clean, but egress enforcement lives in the chromium invocation's DNS allowlist — so the linter doesn't have to chase every fetch-bearing HTML construct.
- Critic findings can't be faked away. Findings are tied to a content hash of the artifact version the critic actually reviewed; stale findings are dropped, absent critic findings stay open until a fresh critic pass clears them, and a clean artifact cannot ship until the critic has reviewed that exact version.
- State is disk-atomic (write-temp-then-rename under an advisory lock), so overlapping calls on the same run id cannot corrupt the trace.
Extracted from NanoClaw, where it ships as a container skill for Claude/Codex/OpenCode agents.
License
MIT (see LICENSE). The vendored design-system corpus is Apache-2.0 — see
skills/design-artifact-loop/design-systems/LICENSE and ATTRIBUTION.md.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。