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.
Recommended Servers
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.
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.
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.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
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.
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.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
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.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.