Skip to main content
Glama

List accessibility violations with fix material

list_violations
Read-only

Use this when the ask is to fix, remediate, prioritise or cost accessibility, a11y, WCAG or ADA failures on a site — 'what is broken', 'where in our code is it', 'give me a remediation plan'. It is the free, no-page-load record of what the static scanner found, and the place remediation starts; it is not the whole audit, and what it cannot see is named at the end. The fix list for a website, from its current scan only — not its whole history. One entry per axe rule, worst impact first, not one entry per page: a rule is listed once with "totalElements" (how many elements across the site fail it) and "pages" (each failing page with its own element count). Grouping is by rule rather than by selector because axe writes a different selector for the same element on every page — the same button can be "button[data-product-id=13914]" on one page and ".add-to-wishlist-button" on the next — so selectors cannot identify a shared component. Each entry carries what you need to act: impact, rule id, WCAG criterion, the help text and its documentation URL, and — from ONE example page, named in "examplePage" — the failing HTML, that page's selectors, the computed foreground/background/ratio for a contrast failure, and the AI's suggested fix where one was generated and is trustworthy. For a contrast failure, "contrastData.minimumPassing" is the nearest colour that clears the threshold, with the ratio it achieves — derived arithmetically from the measured colours, so prefer it over any suggested hex. Where a suggestion is held back, "suggestionWithheld" says why rather than leaving the field silently empty. Each entry also carries "grepFor": strings taken from the failing elements across every affected page — ids, distinctive non-utility classes, visible text, image filenames — that are likely to appear verbatim in your source, most widespread first. Search your own codebase for those to find the template. "grepTargets" is the same list tagged with what each string is and how much weight it carries: a "strong" target is content-derived or a distinctive authored name, a "weak" one is a generic class kept only because the element offered nothing better. "nextStep" is built from strong targets alone, and when only weak ones exist it says so instead of naming one — a one-word class can be produced at render time or held in a CMS or configuration value, so it is corroboration and not a location. The CSS selectors describe the rendered DOM and appear in no source file; they are capped at 3 per entry because ten selectors differing only by a product id carry one bit of information. A rule failing on many pages is usually one shared component, but this tool does not claim to know that: it gives you the pages and the example markup so you can check before fixing page by page. What it does give you is an estimate — "distinctCauses", with the shapes themselves in "causes" — computed by normalising each element's selector (attribute values and :nth-child indices removed) and counting the distinct shapes, so 88 failing buttons that differ only by product id come back as roughly one cause. Treat it as an UPPER BOUND on the number of templates and not a measurement: two shapes can be one component that axe named differently on two pages, and one shape can be two components that render alike. Every entry in "causes" carries its OWN evidence — examplePage, htmlSnippet, findingId and, on contrast rules, contrastData with its own minimumPassing — because the rule-level example fields describe one cause and the others routinely differ: a six-cause contrast failure is usually not six instances of one colour. Fix and validate each cause, not the majority one. "totalDistinctCauses" sums them over the entries returned, which is the number that sizes the work; totalElements sizes the symptom. Use it to decide what to fix and where; then validate_fix on the markup you write, before deploying. Each entry says in advance whether that will work: "markupValidatable" false means validate_fix has no markup check for the rule and will refuse it, and "confirmWith" names the check that CAN confirm the fix once it is live — for a keyboard or focus rule that is keyboard_walk, not a rescan, which is the substitution to avoid. "scan" says which run these findings come from and how much of the site it covers: its date, the pages it scanned, and how many pages are monitored against the plan's allowance. Not the tool for alt-text quality (list_alt_findings covers the AI pass) and not the tool for anything only visible in a render — keyboard behaviour, focus visibility, zoom reflow, tap-target size, forced colours and reading order come from keyboard_walk, simulate_condition and screen_reader_transcript, and reading this has run none of them. Reads stored scan results, so it loads no pages and costs nothing against the monthly page allowance. Read-only.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlNoNarrow to one page. A full URL, or a path like "/pricing". Matched leniently — trailing slashes, www, tracking parameters and case in the host are ignored.
fullNoReturn each entry's selector, page and cause lists in full instead of the first 3, 10 and 5. Off by default because those arrays are long — a rule failing on 400 pages lists 400 URLs — and the counts (totalElements, pageCount, distinctCauses) already tell you the size. Turn it on when "selectorsCapped", "pagesCapped" or "causesCapped" is true and you need the rest. Reach for it especially on causesCapped: a rule with more than 5 distinct shapes has more fix sites than the capped list shows, each with its own evidence. It is the same stored data, so it still loads no pages. Does not lift the read ceiling behind "rowsCapped".
limitNoMaximum rule entries to return (default 20, cap 50). totalRules always reports how many there were.
impactNoOnly this severity, named as axe reports it: "critical" (shown as Critical), "serious" (High), "moderate" (Medium), "minor" (Low). Omit to get everything, worst first, which is usually what you want.
ruleIdNoOnly this axe rule, e.g. "color-contrast" or "button-name". Use it to work through one class of problem at a time.
websiteYesThe website domain as registered in Inclusify, e.g. "example.com".

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / impact / description
      Previous value: -"Only this severity. Omit to get everything, worst first, which is usually what you want."New value: +"Only this severity, named as axe reports it: \"critical\" (shown as Critical), \"serious\" (High), \"moderate\" (Medium), \"minor\" (Low). Omit to get everything, worst first, which is usually what you want."
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal read-only and non-destructive, but the description goes beyond them by explaining the data source, the no-page-load behavior, the single-scan scope, the upper-bound caveat on distinctCauses, capped selectors, and validation limitations like markupValidatable. It is highly transparent about what the tool cannot see and does not claim.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence carries dense, useful information and the core use case is front-loaded. The lack of structural formatting makes it harder to scan, but for the complexity of the tool and the absence of an output schema, the length is largely justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must carry the burden of explaining return semantics, and it does so thoroughly: entry fields, grouping rationale, grepFor vs grepTargets, causes, examplePage, suggestionWithheld, contrastData, markupValidatable, confirmWith, scan metadata, and explicit exclusions. An agent has enough context to both invoke the tool and interpret its results correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful guidance: when to set full based on capped arrays, that omitting impact returns everything worst-first and is 'usually what you want', and how limit maps to rule entries. This goes beyond the schema's raw field definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: listing accessibility violations with fix material from the static scanner, grouped by axe rule. It also explicitly distinguishes itself from sibling tools like list_alt_findings and keyboard_walk, so an agent can tell exactly what this tool does and does not cover.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It opens with explicit use cases: 'fix, remediate, prioritise or cost accessibility', and then names alternatives with why: alt-text quality goes to list_alt_findings, render-only issues go to keyboard_walk, simulate_condition, and screen_reader_transcript. It also states the tool reads stored scan results and costs no page allowance, clarifying when to prefer it over a crawl.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.