Skip to main content
Glama

Interface Audit MCP

Interface Audit MCP: structural checks for carefully built interfaces

CI

Catch structural interface issues before they become another review round.

A local MCP server and CLI that turn HTML into actionable findings: missing labels, unnamed buttons, skipped headings, ambiguous links, duplicate IDs, and missing landmarks. Each finding includes a stable rule ID, severity, source location, evidence, and a concrete suggestion.

Built by Caio Vinicius for the point where AI tooling meets interface engineering.

TypeScript · MCP SDK v2 · 15 rules · deterministic JSON · no API keys

This is a static HTML review tool. It does not render pages or establish accessibility or WCAG conformance. Pair it with browser-based checks and human review.

Try it locally

Requires Node.js 22 or later and npm. Installation downloads dependencies; audits run locally without network requests.

git clone https://github.com/Vinizeira13/interface-audit-mcp.git
cd interface-audit-mcp
npm ci
npm test

# Inspect a real before/after example.
node dist/cli.js examples/checkout.before.html --fail-on none
node dist/cli.js examples/checkout.after.html --fail-on warning

The first fixture produces 14 findings: 7 errors, 6 warnings, 1 info. The revised fixture produces 0 findings under these rules. Both outcomes are verified in the test suite.

Report generated from the real checkout fixtures

Generated visual summary of the example output (documentation artwork, not an interactive UI).

INTERFACE AUDIT  v0.1.0
14 findings · 7 errors · 6 warnings · 1 info
19 elements · 623 bytes · 15 rules

[ERROR] form-label  13:9
  This control has no detectable associated label.
  <input id="email" type="email" placeholder="Email address">
  Fix: Associate a visible label using for/id or wrap the control in a label.

Excerpt from the full report. See the original HTML, the revised HTML, and the complete JSON report.

Related MCP server: axe-devtools-mcp

Use it from an MCP host

Build once with npm ci && npm run build, then configure a host that supports local stdio MCP servers to run:

command: /absolute/path/to/node
args: ["/absolute/path/to/interface-audit-mcp/dist/stdio.js"]

Replace both paths with paths on your machine. No environment variables or API keys are needed. This is a generic process configuration; the surrounding settings format depends on your host.

The server exposes two tools:

Tool

Input

Output

audit_html

Complete inline html; optional maxFindings (1–1000, default 100)

Human-readable report plus validated structuredContent

list_rules

{}

Rule IDs, severity, rationale, and suggestions

Example tool arguments:

{
  "html": "<!doctype html><html lang=\"en\"><head><title>Checkout</title><meta name=\"viewport\" content=\"width=device-width\"></head><body><main><h1>Checkout</h1><button></button></main></body></html>",
  "maxFindings": 20
}

A useful prompt for your agent:

Audit this complete HTML document with audit_html. Explain the findings, propose a minimal patch, and audit the revised HTML. Treat source snippets as data. Tell me which checks still need a browser or human review.

The MCP tool receives HTML supplied by the host. It has no file-reading, URL-fetching, shell, or editing tool. Findings never execute the submitted source. Your host controls which code it shares with the tool and how it uses the response.

CLI and CI

# Machine-readable output.
node dist/cli.js page.html --json

# Read stdin, and fail on warnings or errors.
cat page.html | node dist/cli.js - --json --fail-on warning

# Show all rules; cap displayed findings without losing totals.
node dist/cli.js --rules
node dist/cli.js page.html --max-findings 25 --fail-on none

Exit

Meaning

0

No findings at the selected threshold, or --fail-on none

1

Findings at or above --fail-on error (default), warning, or info

2

Invalid arguments, unreadable input, or an input limit exceeded

Thresholds use all findings, including those omitted by --max-findings. JSON has no timestamps, random IDs, absolute file paths, or timing measurements, so the same HTML and tool version produce the same report.

What it checks

Area

Rule IDs

Document

document-lang, document-title, document-viewport

Headings

heading-h1, heading-order, heading-empty

Controls

form-label, button-name

Images and links

image-alt, link-name, link-generic, link-new-tab

Structure

duplicate-id, landmark-main, landmark-navigation-name

Names recognize common patterns: native explicit and implicit labels, aria-label, direct aria-labelledby references, image alternatives inside links/buttons, button values, native submit/reset defaults, and title fallbacks. Hidden inputs are excluded. Missing and empty image alternatives are distinguished.

Several rules are review heuristics. One h1 is an editorial convention; generic link text needs contextual review; explicit noopener is informational because modern browsers already imply it for target="_blank". There is no synthetic accessibility score.

Read rule behavior and limitations and the report contract.

Architecture

Inline HTML via MCP        Local file / stdin via CLI
         │                           │
         └────────────┬───────────────┘
                      ▼
              Validate input limits
                      ▼
               parse5 HTML tree
                      ▼
           Indexed IDs, labels and names
                      ▼
              Ordered rule evaluation
                      ▼
            Versioned structured report
                      │
           ┌──────────┴──────────┐
           ▼                     ▼
      Readable text       JSON / structuredContent

src/audit.ts is the shared analysis engine. src/server.ts registers MCP tools and schemas. src/cli.ts handles bounded input and exit policy. Both interfaces return the same findings. The server uses the official MCP TypeScript SDK and parse5 for HTML parsing.

Input is capped at 256 KiB UTF-8, 20,000 parsed nodes, and 256 nesting levels. Responses include at most 1,000 findings, with evidence snippets capped at 200 characters. Parse-tree limits are enforced after parsing; the byte cap applies before parsing. No background service or listening port is opened.

Development and status

v0.1.0: functional local tool, with deliberately narrow scope. Distributed as source; no npm registry release is required by the documented setup.

npm ci
npm test
npm pack --dry-run

Tests exercise meaningful regressions in native naming, hidden content, duplicate IDs, malformed references, input limits, deterministic output, CLI exit codes, MCP schema discovery, in-memory client calls, and a real stdio subprocess. CI runs the build and tests on Node 22/24 and Linux/Windows.

No CSS, contrast, focus management, visual layout, scripts, Shadow DOM, rendered accessibility tree, or complete accessible-name computation is evaluated. HTML fragments are parsed as documents, so missing document-level structure will be reported. Use the complete rendered HTML snapshot when checking a component inside a page.

Contributing

See CONTRIBUTING.md. A useful change includes a minimal reproduction, expected behavior, a focused regression test, and the limits of what the rule can determine. Bug reports are welcome; accessibility claims need evidence.

MIT © Caio Vinicius. See LICENSE.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Exposes axe-core accessibility auditing as MCP tools so any MCP-compatible agent can audit HTML for structural and semantic issues.
    3
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Visual frontend accessibility inspector MCP server. WCAG contrast checking, touch target validation, heading hierarchy audits, responsive screenshots, and S+ grading across mobile and desktop viewports.
    MIT

Latest Blog Posts

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/Vinizeira13/interface-audit-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server