Agent-native UI/UX design validation: journey completeness, state coverage, and WCAG checks.
UXLoom MCP Server (io.github.uxloom-dev/uxloom)
UXLoom is an agent-native UI/UX design validation MCP server. It models user journeys as state machines, treating screens as nodes with state contracts to verify coverage. It checks for missing UX states and accessibility issues, including WCAG contrast failures, undersized touch targets, and localization label overflow risk.
π οΈ Key Features
Validates journey completeness via state-machine modeling
Ensures state coverage for each screen
Identifies missing error, empty, and loading states
Detects unreachable screens and dead ends
Checks WCAG contrast failures, touch target sizing, and label overflow under localization
π Use Cases
Pre-production validation of AI-generated βhappy-pathβ screens
Finding missing states before generating production code
Reviewing user-journey flows for gaps in reachability and transitions
β‘ Developer Benefits
Produces actionable proof of whatβs missing: unreachable screens, dead ends, and state gaps
Reduces iteration by catching UX and accessibility problems early
Supports βdesign-to-codeβ workflows by validating state contracts prior to implementation
β οΈ Limitations
The readme excerpt describes verification outcomes but does not specify tool interfaces, integration details, or supported environments beyond functioning as an MCP server.
Your generator gave you 6 screens. UXLoom proves you're missing 9 states.
AI generators (v0, Lovable, Figma Make, Claude) produce happy-path screens.
UXLoom is the critic layer: it models user journeys as state machines, treats
screens as nodes with state contracts, and mechanically proves what's missing
before a line of production code exists β unreachable screens, dead ends,
missing error/empty/loading states, WCAG contrast failures, undersized touch
targets, and labels that will overflow under localization.
Agent-native by design: the interface is an MCP server (works with Claude
Code, Codex, and any MCP client), with Agent Skills included.
Deterministic by design: same input, byte-identical report β benchmarked
(packages/bench) at 1.000 precision/recall on a seeded
defect catalog, SHA-256-stable across processes, 1000 screens in under 5ms.
That's what lets design completeness gate CI, where an LLM opinion can't.
The project file (uxloom.project.json) lives in your workspace and belongs
in git β the design is data, versioned next to the code it specifies.
Quick start (humans & CI)
bash
npx uxloom init # one-command setup: MCP config + agent skill + starter file
npx uxloom preview # live mocks (themed, commentable, EDITABLE in the browser)
npx uxloom export# shareable HTML β plus --svg (Figma/Penpot import; add# --manifest for the round-trip key) and --png (playwright)
npx uxloom check # design completeness β exit 1 on errors, CI-ready
npx uxloom audit # implementation drift β web AND native (Swift/Kotlin/# Dart/Java markers); --live verifies the real DOM;# --design <file|dir> audits a Figma/Penpot export vs the contract
npx uxloom diff # human-readable design diffs for PR review
Evidence-based design: every decision in the contract can carry its
rationale β reasoning, rejected alternatives with pros/cons, sources,
confidence β enforced by the critics once adopted, iterated through a
bounded design_review loop (max 3 rounds), and shown to stakeholders in
the preview's evidence panel (β) and exports. The design doesn't just
validate; it argues its case.
Agent-addressable comments: a reviewer drops a pinned comment in the
preview and clicks "β agent". The comment becomes a work item any Gen-AI
model can read with full context β comment_context returns the pinned
layout block, the screen contract, the journey references, and the current
findings for that screen β act on, and resolve back into the preview with
a note. One click from feedback to addressed.
CI-native: check and audit take --json, --sarif (GitHub code
scanning), and --github (inline PR annotations). Brownfield-ready:
--update-baseline freezes existing findings so only new drift blocks;
uxloom.config.json tunes thresholds to your accessibility bar. Full
documentation: uxloom.dev/docs.html.
Add it to CI and a happy-path-only design can never merge:
yaml
-run:npxuxloomcheckdesign/uxloom.project.json
Workflow (also shipped as a skill in packages/mcp-server/skills/):
project_init β brief_start/brief_answer β journey_define β
screen_register β project_validate β fix β repeat until zero errors β
coverage_report.
Does it actually catch things?
tools/dogfood.mjs drives the real MCP server through three products, twice
each: screens as a happy-path generator hands them over, then repaired using
the validation report. Artifacts in examples/.
Caught: an unreachable promo screen, dead-end verification states, five
undesigned payment/error states, a 2.4:1 contrast button, a 40px touch target
on Android, a checkout label that breaks in German, and three products' worth
of missing offline states. Zero errors and zero warnings is reachable
honestly β screens declare documented exemptions where a baseline state
genuinely cannot apply, and contradictory exemptions are flagged.
Development
bash
npm install
npm run typecheck
npm test
Status
Released and maintained: on npm and
the official MCP registry, with the benchmark scorecard published in every
GitHub release. The
JourneyGraph format (formatVersion: "0.1") may evolve until 1.0; releases
follow RELEASING.md β every surface is drift-checked in CI.
License
MIT
Install
Configuration
Environment variables
UXLOOM_PROJECT
Path to the project file (default: ./uxloom.project.json in the working directory)