uxlint
Officialuxlint
디자인에 정통한 리뷰어가 하듯이 어떤 웹사이트의 UX를 감사하세요: 대비, 터치 대상, 타이포그래피 스케일, 색상 규율, 스캔 패턴, 랜드마크. 모든 발견 사항에는 에이전트(또는 사람)가 바로 적용할 수 있는 처방적 수정 사항이 함께 제공됩니다. 코딩 에이전트의 루프(MCP)에 들어가서 통과할 때까지 반복하도록 설계되었습니다.

실제 실행, 처음부터 끝까지: audit_url → B등급, 2.39:1 대비 오류와 세 가지 서로 다른
강조 색상의 CTA 세 개 → 수정 → verify_fix → A등급. 그 안의 모든 숫자는 도구에서
돌아온 것이며, 대기 시간만 편집되었습니다.
이것은 CLI입니다: 작고 단일 정적 Rust 바이너리입니다. 이미 설치된 Chrome/Chromium을 DevTools 프로토콜로 구동하며(Node, Playwright, 헤드리스 브라우저 다운로드 불필요), 페이지가 어떻게 보이고 읽히는지 캡처하여 실제 등급을 매기는 uxlint의 호스팅 서버로 보냅니다. 규칙 엔진, 보정된 임계값, LLM 판정은 모두 서버 측에 있으므로 규칙이 변경되어도 클라이언트를 업데이트할 필요가 없습니다.
┌──────────────────────────┐ POST /v1/audit {snapshots} ┌──────────────────────────┐
│ uxlint (this binary) │ ───────────────────────────────────────▶ │ uxlint-server (hosted) │
│ drives YOUR Chrome (CDP) │ ◀─────────────────────────────────────── │ rules engine + LLM judge │
└──────────────────────────┘ report {findings + fixes} └──────────────────────────┘설치
curl -fsSL https://uxlint.net/install.sh | sh # detects OS/arch, verifies checksum또는 mise 사용 시 — 해당 github 백엔드가 GitHub Releases에서
일치하는 빌드를 가져와 검증하고 mise up 시 업데이트합니다:
mise use -g "github:uxlint-net/uxlint-cli[rename_exe=uxlint]@latest"또는 프로젝트의 mise.toml에 고정:
[tools]
"github:uxlint-net/uxlint-cli" = { version = "latest", rename_exe = "uxlint" }또는 소스에서 빌드(최신 안정 Rust 툴체인과 PATH에 Chrome/Chromium 필요):
git clone https://github.com/uxlint-net/uxlint-cli && cd uxlint-cli
cargo build --release
./target/release/uxlint --versionRelated MCP server: mcp-a11y-service
빠른 시작
uxlint auth login # opens your browser, saves a token
uxlint audit --base https://your-site.com --routes /,/pricing자체 프로젝트를 처음 감사하시나요? uxlint init은 보고서를 첨부할 사이트를 선택(또는 생성)하고
uxlint.toml을 작성하여 이 디렉토리의 모든 향후 감사가 바로 작동하도록 합니다:
uxlint init
uxlint audit --base http://localhost:5173 --routes /,/pricing구성된 심각도 이상의 발견 사항이 있으면 종료 코드 1 → CI에 바로 넣으세요(템플릿은
.github/workflows/ 또는 uxlint-net/uxlint-action GitHub Action 참조).
감사에서 요소 숨기기 (uxlint-hide)
일부 페이지 내 크롬은 제품 UI가 아니며 판단 대상이 아니어야 합니다: 개발/스테이징 환경 배너,
"DEV" 마커, 디버그 도구 모음, Storybook/미리보기 어포던스. 해당 요소에 uxlint-hide 클래스를
추가하면 감사가 이를 제거합니다 — 첫 페인트부터 display:none이므로 스크린샷에 나타나지 않고
수집기에 보이지 않습니다(발견 사항을 생성하지 않음):
<div class="env-banner uxlint-hide">STAGING</div>이 클래스는 실제 사이트에서는 비활성입니다 — 감사가 실행 중일 때만 아무것도 하지 않습니다.
왜냐하면 이를 숨기는 스타일시트(.uxlint-hide { display: none !important; })는 uxlint의
브라우저가 페이지 자체 스크립트가 실행되기 전에만 주입하기 때문입니다. 나머지 시간에는 요소를
원하는 대로 스타일링하세요. 크롤, 목표 워크 테스트, 수정 미리보기 등 모든 캡처 경로에 적용됩니다.
MCP (코딩 에이전트에서 사용)
Claude Code, 한 줄 명령:
/plugin marketplace add uxlint-net/uxlint-cli
/plugin install uxlint@uxlint이렇게 하면 uxlint MCP 서버가 설치되고, CLI가 이미 PATH에 없다면 위와 동일한 체크섬 검증
설치 프로그램으로 일치하는 버전을 한 번 가져옵니다 — 따라서 /plugin update는 그 아래의 CLI도
함께 업데이트합니다. Node 불필요: 하나의 정적 바이너리(게시된 체크섬으로 검증됨)를 다운로드하고
이미 있는 Chrome을 구동합니다.
다른 에이전트 — 한 줄( npm 패키지가 플랫폼용 바이너리를 가져와 옆에 게시된 체크섬을 검증하고
전달합니다). npx 자체를 위해 **Node 18+**가 필요한 유일한 경로입니다. 원하지 않으면 맨 위의
줄로 바이너리를 설치하고 등록하세요:
claude mcp add uxlint -- npx -y @uxlint-net/uxlint mcp또는 JSON 구성을 읽는 클라이언트의 경우:
{ "mcpServers": { "uxlint": { "command": "npx", "args": ["-y", "@uxlint-net/uxlint", "mcp"] } } }uxlint는 MCP 레지스트리에도
io.github.uxlint-net/uxlint로 등록되어 있어, 이를 탐색하는 클라이언트에서 사용할 수 있습니다.
이미 CLI가 있으신가요? uxlint mcp install이 npx 래퍼 없이 직접 등록합니다.
먼저 설정할 토큰은 없습니다: 로그아웃 상태에서 에이전트에게 무언가를 감사하라고 요청하면
토큰을 생성하고 저장하는 로그인 링크를 건네줍니다(UXLINT_API_KEY는 브라우저가 없는 CI용입니다).
다섯 가지 도구: audit_url(전체 감사, 등급 판정 + 실행 계획), verify_fix(편집 후 한 페이지에서
한 규칙 재확인, 약 2초), get_shot(발견 사항의 주석이 달린 스크린샷 가져오기),
ux_guidance(UI를 빌드하기 전에 읽을 모범 사례 지침), 그리고 lint_feedback — 옵트인이며
기본적으로 꺼져 있음(§ 개인정보 보호) — 세 가지 종류의 신호를 위한 하나의 도구: 발견 사항이
유용했는지, uxlint가 놓친 린트, 또는 인식하지 못한 컴포넌트 라이브러리. 에이전트는 감사하고,
수정 사항을 읽고, 편집하고, 통과할 때까지 다시 감사합니다.
개인정보 보호 및 신뢰
이 CLI는 사용자 머신에서 실행되고 실제 페이지에 대해 실제 브라우저를 구동하므로 정확히 무엇을 캡처하고 어디로 가는지 묻는 것이 타당합니다. 이 저장소의 코드가 실제로 하는 일이기 때문에 말씀드릴 수 있는 것은 다음과 같습니다:
수집기는 내장되어 있고 읽을 수 있습니다. 이 바이너리에 컴파일되어 있습니다 (
assets/collector.js의include_str!), 따라서uxlint --version은 정확한 캡처 코드를 고정하고 서버는 실행 시 아무것도 주입할 수 없습니다. 캡처하는 모든 것은 페이지 지오메트리, 보이는 텍스트, 계산된 스타일, 스크린샷입니다. 포함된<iframe>의 경우 src의 호스트만 기록합니다 — 세션 ID와 토큰을 쿼리 문자열에 담을 수 있는 전체 임베드 URL은 절대 아닙니다. 소스 코드나uxlint.toml외의 파일 시스템은 절대 읽지 않습니다. 약간의 프로젝트 출처를 읽고 보고서와 함께 보냅니다: 현재 git 커밋 sha와 브랜치 이름(git rev-parse), 머신의 호스트 이름, 그리고 GitHub Actions에서는 저장소/PR/커밋 링크.UXLINT_RUNNER를 설정하여 호스트 이름을 재정의할 수 있습니다.비밀 및 PII 편집은 최선의 노력이며 보장이 아닙니다. 업로드 전에 수집기는 캡처된 페이지 텍스트에서 토큰, API 키, 비밀번호, 이메일 주소처럼 보이는 텍스트를 마스킹하고, 콘솔 로그와 네이티브 대화 상자 메시지에서 동일한 패턴을 편집합니다. 모든 채널은 하나의 패턴 목록 (
assets/redact.js)을 공유하므로 어긋날 수 없습니다. 스크린샷은 캡처 직전에 추가 패스를 받습니다: 모든 양식 필드 값이 마스킹되고(비밀번호는 공백, 다른 입력은 점으로 대체) 페이지 텍스트의 패턴 일치 비밀은 스크럽되어 입력된 데이터와 표시된 키가 이미지에 들어가지 않습니다. 이 패스는 섀도 DOM(attachShadow인터셉터를 통해 닫힌 루트 포함)과 동일 출처 iframe에 도달하며, 픽셀을 편집할 수 없으므로 불투명 상자로 교차 출처 iframe을 덮습니다. 그러나 편집은 패턴 기반이며 스크린샷은 여전히 픽셀입니다: 어떤 패턴도 잡지 못하는 임의의 표시 콘텐츠(페이지의 고객 이름, 주문 데이터), 분할된 값, 이미지나<canvas>에 그려진 것은 여전히 누출될 수 있습니다.--header/--storage/--login-*로 전달하는 자격 증명은 사용자의 브라우저만 구동하며 uxlint 서버로 절대 전송되지 않습니다.보고서는 페이지 HTML, 텍스트, 스크린샷을 캡처하므로 민감한 콘텐츠가 보고서에 누출되는 것을 완전히 막는 것은 불가능합니다. 실제 또는 프로덕션 계정이 아닌 TEST 계정을 사용하세요. 로컬 개발의 경우 데이터가 로컬 개발 데이터뿐이라면 위험이 낮습니다. 실제 비밀 또는 개인 데이터를 보유한 인증된 사이트를 감사할 때는 보내기 전에 전송되는 내용을 검토하세요:
--dry-run을 사용하여 정확한 페이로드(페이지 텍스트, 출처, 스크린샷)를 로컬 폴더에 쓰고 업로드하지 않고 검사하세요. 편집은 우발적 노출을 줄입니다. 보안 경계가 아니며, uxlint을 가리키는 대상에 대한 책임은 사용자에게 있습니다.탐색 텍스트는 의도적으로 비밀만 스크럽합니다. 컨트롤 레이블, 메뉴 및
<select>옵션, 작업 공간/조직 스위처 이름은 동일한 비밀 패턴을 거치지만 이름이나 기타 임의 콘텐츠에 대해서는 편집되지 않습니다. 이유는 목표 워크입니다: 감사는 정확히 이 텍스트를 읽고 올바른 컨트롤을 찾고 조작하며 선택을 DOM에 다시 일치시키는 LLM으로 페이지를 구동합니다. 이를 마스킹하면 판단자가 두 옵션을 구분하거나 선택한 것을 클릭할 수 없게 되어 워크가 무너집니다. 따라서 감사가 탐색하는 데 필요한 레이블은 읽을 수 있는 상태로 유지되며, 그 중 하나에 포함된 실제 이름은 편집이 아닌 테스트 계정 규칙으로 보호됩니다. 이는 의도적인 트레이드오프입니다: 목표 워크를 계속 작동시키는 것이 테스트 계정 규칙이 이미 보호하는 텍스트를 공백으로 만드는 것보다 더 가치 있습니다.텔레메트리 없음. 이 바이너리는 정확히 사용자가 지정한 호스트에만 아웃바운드 호출을 합니다: uxlint API 서버(
--server/UXLINT_SERVER, 또는 기본 호스팅 오리진), 감사하도록 요청한 사이트, 그리고 명시적으로 옵트인한 경우에만 익명 규칙 피드백 신호. 별도의 분석/크래시 보고/전화 홈 대상이 어디에도 내장되어 있지 않습니다.피드백은 옵트인이며 기본적으로 꺼져 있습니다.
uxlint init은 한 번 묻습니다. 사용자가 동의한 경우에만uxlint.toml에feedback = true를 쓰며, 언제든지 다시 끌 수 있습니다.감사 브라우저는 임시 프로필을 사용합니다. 각 감사는 새롭고 일회용인 사용자 데이터 디렉토리로 Chrome을 시작하므로 일상적인 브라우징의 쿠키, 기록, 확장 프로그램이 감사 세션에 로드되지 않으며 프로세스가 종료된 후에도 아무것도 유지되지 않습니다.
로그인은 로컬에 유지됩니다.
uxlint auth login은 토큰을~/.config/uxlint/credentials에 저장하며 chmod0600입니다. 로그에 기록되지 않고, 인쇄되지 않으며(의도적인 한 가지 경우 제외:uxlint signup은 내보낼 수 있도록 새로 생성된 키를 인쇄합니다), 보고서에 번들되지 않습니다.
이것은 소스를 읽는 것을 대체하지 않습니다. 짧으며, 그것이 게시하는 요점입니다. 이 설명과 일치하지 않는 것을 발견하면 이슈를 열어주세요.
이 CLI가 아닌 것
의도적으로 단순합니다: 탐색하고, 내장된 수집기를 실행하고, 스냅샷을 업로드하고, 보고서를
인쇄합니다. 규칙, 임계값, 판단 모델은 이 저장소에 없으며 앞으로도 없을 것입니다. 그것이 실제
제품이며 서버 측에만 있습니다. 이 CLI의 빌드는 uxlint 서버(기본적으로 https://uxlint.net의
호스팅된 것 또는 자체 서버)와 통신하지 않으면 쓸모가 없습니다.
라이선스
Apache License 2.0(LICENSE 참조). 읽고, 감사하고, 포크하고, 소스에서 빌드하고, 자체 도구
내부에 배송하세요 — 일반적인 귀속 및 특허 조건 외에는 조건이 없습니다.
이것은 원래 Business Source License였으며, 2030년의 변경 날짜에 Apache-2.0으로 전환되었습니다. 우리는 단순히 일찍 도착했습니다. 그것이 지니고 있던 제한 — 이 코드를 기반으로 한 경쟁적인 호스팅 "사이트 감사" 서비스 금지 — 잘못된 것을 보호하고 있었습니다: 가치 있는 것은 규칙, 보정된 임계값, 판단이며, 그것들은 서버 측에 있고 이 저장소에 없습니다. 여기 있는 것은 uxlint 서버가 있어야 가치가 있는 클라이언트이며, 클라이언트는 정확히 설치, 읽기, 벤더링이 쉬워야 하는 부분입니다.
v0.1.30까지의 릴리스는 BUSL-1.1로 게시되었습니다; v0.1.31부터는 Apache-2.0입니다.
Available Tools
4 toolsaudit_urlA
Audit a website's UX/design: contrast, tap targets, type scale, colour discipline, copy clarity, scan patterns. Each finding returns its RULE name (pass it to verify_fix), a SOURCE file:line hint (for local audits, grepped from the project you're in), the SELECTOR, the concrete FIX, and — for copy issues — the exact text EDIT (replace X with Y).
WORKFLOW: (1) Before you change anything, call ux_guidance for the area(s) the findings touch (forms, lists, layout, copy, …) so you fix toward the idiomatic, DRY pattern — not a one-off patch. If the result names a STYLEGUIDE, open it first and build to the components/tokens it shows. (2) Open the source line and apply the SMALLEST fix that reuses the project's existing components/tokens and voice (don't add a new one-off to silence the finding) without regressing the quality floor — responsive, visible keyboard focus, reduced motion, no new layout shift — then verify_fix. (3) Iterate until green. If a lint_feedback tool is in your tool list, also send a verdict for each finding you act on — it's how rules get kept, tuned or retired. It is absent unless the project set feedback = true (via uxlint init), so don't go looking for it: this result tells you when it's there.
SAFETY: with no test plan declared, audit_url only NAVIGATES and READS. If the project's uxlint.toml declares tests that sign in as a persona, running them may SUBMIT forms and DELETE items on the target — that's what a test does (it exercises create/delete flows on your own app). Point it only at an app you own / a throwaway env, never a site you don't control.
SETUP: in a project with no uxlint.toml, this returns the exact config to write first (org/site/base/routes) — write that file, check it in, then call again. Without it a local target can't be audited at all and a public one files its report under a site nobody chose.
AUTH: for a logged-in site, DON'T pass secrets here — credentials come from the project's uxlint.toml [personas] (the local client replays them; nothing touches this tool call or the transcript). If the audit hits a login wall, this tool returns the exact setup instructions.
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | Base URL to audit — an ORIGIN like http://localhost:5173, NOT a path (a path gets appended to every route and mis-crawls). Optional: omit to use the `base` in the project's uxlint.toml. | |
| crawl | No | Max routes to discover and audit from the seeds (default 12). Set 0 to audit only the given routes. | |
| judge | No | Run the AI copy/design judge (prose quality, test-run navigation). ON by default; set false for a fast, deterministic-only pass while iterating. | |
| tests | No | Run the site's declared tests (whole-site reachability). ON by default; auto-scoped to crawling audits. Set false to skip for speed. Tests are a paid-plan feature — on a free plan, tests declared but not run print a one-line skip warning instead. | |
| routes | No | Comma-separated routes (default /) | |
| states | No | Drive hover/focus/keyboard interaction states — catches dead hover styles, hover-only content unreachable by touch/keyboard, illogical focus order, keyboard traps, form-validation gaps. ON by default; set false to skip it (faster) on large public crawls. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and fully satisfies it: it states default read-only behavior, warns about potential form submission and deletion when tests run, explains setup/config requirements, and clarifies auth handling (no secrets passed). It also discloses the return of setup instructions when uxlint.toml is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with clear sections (WORKFLOW, SAFETY, SETUP, AUTH) and front-loaded with the core purpose. Some redundancy exists (e.g., verify_fix mentioned multiple times), but the detail is justified given the tool's complexity and absence of annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, lack of annotations, and no output schema, the description is exceptionally complete. It covers what it does, what findings return, sequenced workflow, safety and auth behaviors, setup requirements, and integration with other tools, leaving no critical gaps for an agent to understand and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides comprehensive descriptions for all 6 parameters (100% coverage), so the baseline is 3. The tool description adds only indirect context (e.g., workflow references base and crawl) without significantly expanding parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Audit a website's UX/design') and enumerates concrete audit dimensions (contrast, tap targets, type scale, etc.). It clearly distinguishes itself from sibling tools like get_shot, ux_guidance, and verify_fix by focusing on the full audit and its findings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The WORKFLOW section explicitly prescribes when to use this tool and how to sequence it with ux_guidance and verify_fix. It also includes safety guidance (only point at owned apps) and notes when lint_feedback exists, covering both when and when not to use certain behaviors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_shotA
View a report's annotated screenshot — the flagged element boxed on its page. Reports are PRIVATE, so a finding's screenshot_url can't be fetched with a plain GET; this tool fetches it with your uxlint login. Pass the finding's screenshot_url (from audit_url / verify_fix). Returns the image inline (if your client renders MCP images) and always writes it to a local file whose path you can open/Read.
| Name | Required | Description | Default |
|---|---|---|---|
| screenshot_url | Yes | The `screenshot_url` from an audit_url / verify_fix finding — the annotated shot with the flagged element boxed. A full URL or a `/r/…` path on your uxlint server. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that reports are PRIVATE, reads requires the user's uxlint login, returns image inline (if client supports MCP images), and always writes to a local file. This adds significant behavioral context beyond what an annotation might provide, such as side effects (writing a file) and authentication requirements. The only minor gap is not detailing the exact file path or cleanup behavior, but the description is quite transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (about 3 sentences) and front-loads the core action. Every sentence provides essential information: purpose, why it's needed, what to pass, and what happens. No fluff or redundancy. The structure is logical: what, why, how, outcome.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is only one parameter, no output schema, and no annotations, the description is complete. It covers the tool's purpose, usage, parameter source, return behavior (inline and local file), and the limitation about private reports. This is sufficient for an agent to select and correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and it already explains the screenshot_url parameter clearly. The description adds contextual meaning by tying the parameter to the finding's screenshot_url and specifying the source (audit_url/verify_fix). It also clarifies that the URL can be a full URL or a /r/… path. This adds value beyond the schema, so a slightly above baseline score is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to view a report's annotated screenshot, with the flagged element boxed. It also distinguishes it from siblings by explaining why a plain GET won't work and that it requires the finding's screenshot_url. The verb 'View' and specific resource 'report's annotated screenshot' are precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use this tool (to fetch a screenshot_url from audit_url/verify_fix findings) and why it's necessary (reports are private, plain GET won't work). It also provides context that the screenshot URL comes from specific sources, serving as an alternative to direct fetching. This is exactly the kind of usage guidance expected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ux_guidanceA
Best-practice UI guidance to read BEFORE building or changing UI — usability, consistency, and performance patterns distilled from uxlint's audit corpus, so you build idiomatic, DRY, testable components the first time instead of getting audited after. Covers whole-row click targets, single-column labelled forms, tabs/radiogroup vs plain buttons, one shared width scale + aligned panels, pagination by scroll length, CLS-safe layout, and copy that reads as UI (active voice, honest labels, useful empty/error states). Each item names the uxlint rule that catches a miss, so the loop is: read the topic, build to it, then audit_url to confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | Which area to get guidance for: layout, forms, lists, navigation, components, performance, accessibility, content. Omit for the index of topics; "all" for everything. Accepts aliases (copy, nav, a11y, perf, dry, …) and falls back to the index for anything unrecognized. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure. It fully explains the tool is a read-only reference, details its fallback behavior for unrecognized topics, and notes it returns guidance content without side effects. No hidden behavioral traits remain undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured; it opens with the main use case, specifies the covered patterns, and clarifies the auditing feedback loop. While it includes additional detail than strictly necessary, that extra context is valuable for guiding topic selection and instrumental in avoiding misunderstandings.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description is complete. It explains the purpose, usage flow, content scope, behavior with invalid input, and connection to sibling tool. No significant information is missing for an agent to invoke and interpret the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description already fully explains the topic parameter (available values, aliases, fallback). The description adds illustrative examples (layout, forms, etc.) and mentions specific patterns but does not contribute new semantic meaning beyond what the schema already provides. Given the high schema description coverage (100%), a baseline score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides best-practice UI guidance to read before building or changing UI, specifying the resource ('guidance') and the action ('read'). It distinguishes itself from sibling tools like audit_url and get_shot by focusing on pre-empting audit findings rather than auditing screenshots.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly couples the guidance with a workflow: read the topic before building, then confirm with audit_url. This clearly contrasts with the sibling options for when to use this tool, providing practical 'when to use' and 'when not to use' context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_fixA
After editing to fix a finding, re-check ONE rule on ONE page — the 'did my fix land?' loop, far quicker than a full re-audit (one route, no crawl, no judge). Returns whether the rule still fires, AND names any OTHER deterministic findings now on that page (the regression guard — so a fix that clears your rule but breaks something else here doesn't read as all-clear). It's a fast deterministic pass: for the whole-page picture incl. judge/state checks, re-run audit_url. SCOPE: a clear verdict covers the ONE page it loads. A rule whose input is the whole site — a component inventory, the link graph, cross-page consistency — can pass here and still fire in a full audit, so confirm those with audit_url before calling them done.
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | Base URL — an ORIGIN like http://localhost:5173, NOT a path. Optional: omit to use the `base` in the project's uxlint.toml. | |
| rule | Yes | The rule to verify is gone, e.g. contrast, tap-target, unlabelled-field | |
| route | No | The route to check, e.g. /pricing (default /) | |
| states | No | Drive interaction states (needed for state/form/interaction rules) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers: it discloses that this is fast, deterministic, has no crawl and no judge, returns whether the rule still fires plus other deterministic findings, and warns that whole-site rules can pass here but still fail a full audit. The scope limitation ('clear verdict covers the ONE page it loads') is clearly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence earns its place: purpose, return behavior, regression-guard semantics, alternative tool routing, and scope caveats. The most decision-relevant info is front-loaded, and the caveats are deliberately packaged at the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema and no annotations, the description is complete for an agent to select and invoke the tool correctly: it states what triggers usage, what is returned, what the tool does not do, and when to fall back to audit_url. No critical decision or invocation detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents base, rule, route, and states. The description reinforces the conceptual 'one rule on one page' model but adds no parameter-level meaning beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (re-check/verify), resource (ONE rule on ONE page), and the exact workflow context ('After editing to fix a finding'). It explicitly distinguishes itself from a full re-audit and from the sibling audit_url, making the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says exactly when to use it (the 'did my fix land?' loop after an edit) and when not to use it (for whole-page pictures, judge/state checks, or whole-site rules, re-run audit_url). This is explicit, actionable routing guidance that names the alternative tool and the condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
4 tool updates
- First observed
audit_url - First observed
get_shot - First observed
ux_guidance - First observed
verify_fix
TDQS
Each tool occupies a distinct step in the workflow: audit_url runs the audit, ux_guidance provides upfront guidance, get_shot shows a report's screenshot, and verify_fix re-checks a single rule. The descriptions clearly separate the full audit from the single-rule verification loop, so there is no realistic confusion between them.
Three tools are verb-first snake_case names (audit_url, get_shot, verify_fix), but ux_guidance is a noun phrase and does not start with a verb. The naming is still consistent in style and readable, despite this one deviation.
Four tools is a well-scoped set for the server's purpose: every tool maps directly to one stage of the UX audit workflow. There are no redundant or too many tools, and none feel trivial.
The set covers the core workflow: guidance, audit, screenshot inspection, and fix verification. The only minor gap is the absence of a tool to list previously generated private reports without re-running an audit, but the documented workflow can still be completed.
Maintenance
Related MCP Connectors
Score any URL against a real design contract — 42 checks, A-F grade, token + motion validation.
Scan a web page for accessibility, security, privacy, quality and SEO issues, with fixes.
AI website audit: security, SEO, performance, UX and accessibility checks with actionable fixes.
Validate HTML/CSS, audit SEO and JSON-LD, check links, and capture responsive screenshots.
Related MCP Servers
- AlicenseAqualityDmaintenanceAudit any website for privacy, security, accessibility, and performance issues — with scores, grades, and actionable fix instructions. No account required.313MIT
- FlicenseNot gradedqualityDmaintenanceEnables automated WCAG 2.2 AA accessibility audits of Figma designs and webpages. Generates detailed markdown reports with severity-grouped violations, specific criterion references, and concrete fix recommendations.-
- AlicenseAqualityAmaintenancePoint your coding agent at a URL and get a real-browser QA audit: broken signup/login/checkout flows, JS console errors, missing analytics, consent + security headers, mobile tap targets, and accessibility — returned as machine-verified findings graded A-F.442Apache 2.0
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to score live URLs against a 40-check design contract, validate DTCG tokens and Lottie animations, audit accessibility, and retrieve design-system contracts, catalogs, and review rubrics.35MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/uxlint-net/uxlint-cli'
If you have feedback or need assistance with the MCP directory API, please join our Discord server