uxlint
Officialuxlint
Audita la UX de cualquier sitio web como lo haría un revisor con criterio de diseño: contraste, objetivos táctiles, escala tipográfica, disciplina cromática, patrones de escaneo, hitos. Cada hallazgo viene con una corrección prescriptiva que un agente (o un humano) puede aplicar directamente. Está diseñado para integrarse en el bucle de un agente de programación (MCP) e iterarse hasta que todo quede en verde.

Una ejecución real, de principio a fin: audit_url → Grade B, un error de contraste de 2.39:1 y tres CTA en tres tonos de acento distintos → la corrección → verify_fix → Grade A. Cada número proviene de las herramientas; solo se ha recortado la espera.
Este es el CLI: un único binario estático de Rust. Controla un Chrome/Chromium que ya tengas instalado mediante el protocolo DevTools (sin Node, sin Playwright, sin descarga de navegador headless), captura cómo se ve y se lee una página y envía eso al servidor alojado de uxlint, que es quien hace la calificación real. El motor de reglas, los umbrales calibrados y el juez LLM viven en el servidor, por lo que el cliente nunca necesita actualizarse cuando cambia una regla.
┌──────────────────────────┐ POST /v1/audit {snapshots} ┌──────────────────────────┐
│ uxlint (this binary) │ ───────────────────────────────────────▶ │ uxlint-server (hosted) │
│ drives YOUR Chrome (CDP) │ ◀─────────────────────────────────────── │ rules engine + LLM judge │
└──────────────────────────┘ report {findings + fixes} └──────────────────────────┘Instalación
curl -fsSL https://uxlint.net/install.sh | sh # detects OS/arch, verifies checksumO con mise: su backend github descarga la compilación correspondiente desde GitHub Releases, la verifica y se actualiza con mise up:
mise use -g "github:uxlint-net/uxlint-cli[rename_exe=uxlint]@latest"o fíjalo en el mise.toml de un proyecto:
[tools]
"github:uxlint-net/uxlint-cli" = { version = "latest", rename_exe = "uxlint" }O compila desde el código fuente (necesita una toolchain de Rust estable reciente y un Chrome/Chromium en el PATH):
git clone https://github.com/uxlint-net/uxlint-cli && cd uxlint-cli
cargo build --release
./target/release/uxlint --versionRelated MCP server: mcp-a11y-service
Inicio rápido
uxlint auth login # opens your browser, saves a token
uxlint audit --base https://your-site.com --routes /,/pricing¿Es la primera vez que auditas tu propio proyecto? uxlint init elige (o crea) un sitio al que adjuntar los informes y escribe un uxlint.toml para que cualquier auditoría futura en este directorio funcione directamente:
uxlint init
uxlint audit --base http://localhost:5173 --routes /,/pricingCódigo de salida 1 ante hallazgos por encima de la severidad configurada → introdúcelo directamente en CI (consulta .github/workflows/ para ver una plantilla, o la GitHub Action uxlint-net/uxlint-action).
Ocultar elementos de una auditoría (uxlint-hide)
Algunos elementos de la interfaz de la página no son producto y no deberían evaluarse: un banner de entorno de desarrollo/staging, un marcador «DEV», una barra de depuración, un elemento de Storybook/vista previa. Añade la clase uxlint-hide a cualquier elemento de este tipo y la auditoría lo elimina: es display:none desde el primer renderizado, por lo que nunca aparece en una captura de pantalla y es invisible para el recopilador (no genera ningún hallazgo):
<div class="env-banner uxlint-hide">STAGING</div>La clase es inerte en tu sitio real: no hace nada a menos que la auditoría esté en ejecución, porque la hoja de estilos que la oculta (.uxlint-hide { display: none !important; }) solo la inyecta el navegador de uxlint, antes de que se ejecuten los scripts de la propia página. Puedes estilizar tu elemento como quieras el resto del tiempo. Se aplica en todas las rutas de captura: el rastreo, las pruebas de recorrido por objetivos y las vistas previas de correcciones.
MCP (úsalo desde un agente de programación)
Claude Code, un comando:
/plugin marketplace add uxlint-net/uxlint-cli
/plugin install uxlint@uxlintEso instala el servidor MCP de uxlint y, si el CLI aún no está en tu PATH, descarga la versión correspondiente una sola vez con el mismo instalador que verifica checksums descrito arriba, de modo que /plugin update actualiza también el CLI subyacente. No se necesita Node: descarga un único binario estático (verificado contra un checksum publicado) y controla el Chrome que ya tienes.
Cualquier otro agente, con una línea (el paquete npm descarga el binario para tu plataforma, verifica el checksum publicado junto a él y te lo entrega). Esta es la única ruta que necesita Node 18+, por el propio npx; si prefieres no usarlo, instala el binario con la línea de arriba y regístralo así:
claude mcp add uxlint -- npx -y @uxlint-net/uxlint mcpO, para un cliente que lea una configuración JSON:
{ "mcpServers": { "uxlint": { "command": "npx", "args": ["-y", "@uxlint-net/uxlint", "mcp"] } } }uxlint también está en el MCP Registry como io.github.uxlint-net/uxlint, para clientes que lo exploran. ¿Ya tienes el CLI? uxlint mcp install lo registra directamente, sin envoltorio de npx.
No hay ningún token que configurar primero: pídele a tu agente que audite algo sin haber iniciado sesión y te dará un enlace de inicio de sesión que emite y guarda el token por ti (UXLINT_API_KEY es para CI, que no tiene navegador).
Cinco herramientas: audit_url (auditoría completa, veredicto con calificación + plan de acción), verify_fix (vuelve a revisar una regla en una página después de una edición, ~2s), get_shot (obtiene la captura de pantalla anotada de un hallazgo), ux_guidance (orientación de mejores prácticas para leer antes de construir la UI) y lint_feedback, opcional y desactivada por defecto (§ Privacidad), una herramienta para tres tipos de señal: si un hallazgo fue útil, si falta un lint en uxlint o si hay una biblioteca de componentes que no reconoció. El agente audita, lee las correcciones, edita y vuelve a auditar hasta que todo quede en verde.
Privacidad y confianza
Este CLI se ejecuta en tu máquina y controla un navegador real contra páginas reales, por lo que es justo preguntar exactamente qué captura y a dónde va. Lo que podemos decirte, porque es lo que realmente hace el código de este repositorio:
El recopilador está integrado y es legible. Está compilado dentro de este binario (
include_str!deassets/collector.js), por lo queuxlint --versionfija el código de captura exacto y el servidor no puede inyectar nada en tiempo de ejecución. Todo lo que captura es geometría de la página, texto visible, estilos calculados y capturas de pantalla. Para un<iframe>embebido registra solo el host del src, nunca la URL de embebido completa, que puede llevar identificadores de sesión y tokens en su query string. Nunca lee tu código fuente ni tu sistema de archivos más allá deuxlint.toml. Sí lee un poco de procedencia del proyecto y lo envía con el informe: el sha de tu commit git actual y el nombre de la rama (git rev-parse), el hostname de la máquina y, en GitHub Actions, el enlace al repo/PR/commit. ConfiguraUXLINT_RUNNERpara sobrescribir el hostname.El enmascarado de secretos y PII se hace con el mejor esfuerzo, no es una garantía. Antes de subir nada, el recopilador enmascara el texto que parece un token, una clave de API, una contraseña o una dirección de correo electrónico en el texto capturado de la página, y aplica los mismos patrones de enmascarado a los registros de consola y a los mensajes de diálogo nativos. Todos los canales comparten una única lista de patrones (
assets/redact.js), de modo que no pueden desincronizarse. Las capturas de pantalla reciben una pasada adicional justo antes de la captura: el valor de cada campo de formulario se enmascara (las contraseñas se dejan en blanco, los demás campos se sustituyen por puntos) y los secretos que coinciden con patrones en el texto de la página se eliminan, para que los datos escritos y las claves mostradas no acaben en la imagen. Esa pasada llega al shadow DOM (incluidas las raíces cerradas, mediante un interceptor deattachShadow) y a los iframes del mismo origen, y cubre un iframe de origen cruzado con una caja opaca, ya que sus píxeles no se pueden enmascarar. Pero el enmascarado se basa en patrones, y una captura de pantalla sigue siendo píxeles: el contenido mostrado arbitrario que ningún patrón detecta (un nombre de cliente en la página, datos de un pedido), los valores fragmentados y cualquier cosa dibujada en imágenes o en<canvas>pueden colarse igualmente. Las credenciales que pases con--header/--storage/--login-*controlan tu navegador únicamente y nunca se envían al servidor de uxlint.Debido a que un informe captura el HTML de la página, el texto y las capturas de pantalla, es imposible protegerlo por completo contra la filtración de contenido sensible. Usa cuentas TEST, no reales ni de producción. Para el desarrollo local, el riesgo es bajo, siempre que los datos sean solo datos de desarrollo local. Cuando audites un sitio autenticado que contenga secretos reales o datos personales, revisa lo que se envía antes de enviarlo: usa
--dry-runpara escribir la carga exacta (texto de la página, procedencia y capturas de pantalla) en una carpeta local e inspecciónala sin subirla. El enmascarado reduce la exposición accidental; no es una frontera de seguridad, y tú sigues siendo responsable de a qué apuntes uxlint.**El texto de navegación se limpia solo de secret
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