a11y-toolkit
It is an MCP accessibility server that audits, fixes, documents, and tracks WCAG 2.2 conformance for web pages.
Audit: run static WCAG audits on URLs or raw HTML (
a11y_audit_url) and deep rendered audits with Playwright for computed contrast, target size, focus indicators, and more (a11y_audit_dom).Contrast: check color pairs or text-over-image contrast, get AA/AAA/non-text verdicts, and find the nearest passing color (
a11y_contrast_pair,a11y_contrast_image,a11y_suggest_color).Fix/document: apply deterministic safe autofixes like unblocking zoom or adding
lang(a11y_autofix) and generate legal accessibility declarations for EAA or RD 1112 (a11y_generate_declaration).Keyboard/reflow/scroll: detect keyboard traps with real Tab walking (
a11y_keyboard), verify 320px reflow (a11y_reflow), and audit infinite-scroll accessibility (a11y_scroll).Snapshots & diffs: capture accessibility snapshots with tab order and screen-reader tree (
a11y_snapshot), then diff them across deploys or URLs (a11y_diff,a11y_diff_urls).Monitoring: generate an injectable aria-live announcement monitor snippet (
a11y_aria_live_snippet).Evidence & explanation: build countersignature-ready evidence packs with criteria matrix, hashes, and signature block (
a11y_evidence), create honest SVG badges (a11y_badge), and get plain-language WCAG criterion explanations (a11y_criterion).
Generates SARIF reports for GitHub code scanning and supports accessibility regression workflows surfaced through GitHub pull requests.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@a11y-toolkitcheck contrast for #1f2328 on #fbfaf7"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
a11y-toolkit — the accessibility layer for AI coding agents
23 MCP tools, 5 prompts and a skill covering the whole WCAG 2.2 loop: audit, fix, document, watch, hand off. 51 of 55 A/AA criteria carry automated signals (93%), every finding ships with a concrete remediation your agent can apply, and the rendered tools run on whichever browser you have — Chromium, Firefox, WebKit, Chrome or Edge.
The European Accessibility Act is in force since June 2025, ADA suits keep landing, and AI agents now write most of the web. A scan is not a defence: the machine finds, the human signs.
What no other a11y tool gives an agent
Capability | axe-core / Lighthouse / pa11y | a11y-toolkit |
Text contrast over images and gradients (pixel sampling of the real background) | ✗ | ✓ |
Form error testing: fills invalid data, really submits, judges what happens | ✗ | ✓ |
Keyboard traps: real Tab walk + Escape-release test, plus focus/input-triggered navigation | ✗ | ✓ |
Infinite-scroll audit: focus survival, announcements, feed end | ✗ | ✓ |
Reflow at 320px and the WCAG text-spacing override, measured | ✗ | ✓ |
Screen reader transcript: what a blind user hears, linearized | ✗ | ✓ |
Tooltips that ignore Escape caught by actually hovering (1.4.13) | ✗ | ✓ |
Legal statements for the EAA / RD 1112/2018, in Spanish and English | ✗ | ✓ |
An evidence pack a human can countersign — hashes, matrix, empty signature block | ✗ | ✓ |
Runs with zero dependencies at core, speaks es/en, any browser you have | heavy runtimes | ✓ |
Related MCP server: Accessibility MCP Server
The tools (23)
Audit
Tool | What it does |
| Express static audit of a URL or raw HTML: 40+ signals across 51 WCAG criteria with a weighted 0-100 score. Covers alt, accessible names, labels, autocomplete (1.3.5), ARIA validity (roles/refs/values), headings, zoom, lang, captions, autoplay, link purpose (2.4.4), list structure, duplicate ids/accesskeys, placeholder-only labels, fieldset/legend for radio groups, label quality, required-field indication, financial forms without confirmation (3.3.4), character-key shortcuts (2.1.4), drag handlers (2.5.7), status regions (4.1.3), heading quality (2.4.6), sensory instructions (1.3.3), orientation lock (1.3.4), images of text (1.4.5), consistent help (3.2.6), site-level nav consistency (3.2.3) and multiple ways (2.4.5). |
| Rendered audit in Chromium/Firefox/WebKit: computed text contrast with alpha compositing (1.4.3), target size 24×24 (2.5.8 — new in WCAG 2.2), focus indicator (2.4.7), :focus/:hover state contrast, text spacing override (1.4.12 — injects WCAG spacing, counts clipped texts), color-only links (1.4.1), DOM-vs-visual order (1.3.2), looping animations (2.2.2), open shadow DOM traversed, same-origin iframes scanned. Accepts |
| Form error testing (3.3.1/3.3.3): fills validatable fields with invalid data, really submits, judges whether errors are identified and announced in the post-submit DOM. Native browser validation counts (unless |
| Keyboard traps (2.1.2) with real Tab walking + cycle detection + Escape-release test. Also detects focus-triggered navigation (3.2.1) and input-triggered navigation (3.2.2). |
| Infinite-scroll audit: does focus survive each batch? Is new content announced (4.1.3)? Does the feed end or offer load-more? |
| 320px reflow (1.4.10): real horizontal scroll + overflowing elements. |
| W3C Nu validator (validator.w3.org/nu): doctype, encoding, structural validity, authoritative alt/lang/role findings mapped to criteria. Self-hosted vnu supported. |
| Hover dismissibility (1.4.13): finds tooltip/overlay candidates, hovers each, and tests whether Escape dismisses the result. |
| Screen reader transcript: what a blind user HEARS on this page — linearized accessibility tree as prose. The single best tool for "does this page make sense without sight?" |
Fix
Tool | What it does |
| Deterministic safe fixes: unblock zoom (1.4.4), autocomplete tokens (1.3.5), missing lang, empty title, accessible form-error layer (aria-invalid + describedby + attribute-derived suggestions — skips forms with their own handling). Judgment fixes returned as |
| Exact ratio + verdicts 1.4.3/1.4.6/1.4.11. Accepts #hex, rgb(), hsl(), CSS names; alpha composites. Suggests nearest passing color. |
| Text over images: pixel-level sampling → worst/median/p95 ratio, % area passing AA, hostile-zone grid. |
| Nearest opaque color reaching the target ratio. |
Document
Tool | What it does |
| Legal statement: RD 1112/2018 art. 10 or European Accessibility Act (EAA). es/en. The document is itself accessible. |
| Honest SVG badge: score, date, "automated screening" scope — never claims conformance. |
| Explains any WCAG 2.2 criterion: what it requires, typical failures, which tool verifies it. |
Watch
Tool | What it does |
| Interactive elements + real tab order + computed accessibility tree (what a screen reader announces). |
| Regression diff between snapshots: interactives, focus order, tree changes. |
| Snapshot two URLs and diff (staging vs production). |
| Injectable monitor logging every aria-live announcement. |
Hand off
Tool | What it does |
| Countersignature-ready evidence pack: full criteria matrix (fail/review/not-flagged/agent-verified/manual-only), SHA-256-hashed artifacts with embedded report bodies (self-verifying), empty signature block tied to the pack hash, measured values (e.g. "3.91:1") surfaced per criterion. Spec: docs/evidence-pack-schema.md. |
| Disprover pattern: re-runs the audit against the live page and marks each finding confirmed or rejected — findings that don't reproduce are rejected with the reason. Returns a fresh score over confirmed findings only. |
| Coverage ledger: persistent record of what has been audited, when, and with what result. Actions: record, gaps, summary. Accumulates across runs. |
5 prompts: audit-page, fix-contrast, pre-deploy-check (GO/NO-GO), declaration-eaa, conformance-wcagem (three-tier WCAG-EM ladder).
Install
mcp-name: io.github.kinti/a11y-toolkit · PyPI: a11y-toolkit · Zenodo DOI:
10.5281/zenodo.22843722
Works with any MCP-capable client — Claude Code/Desktop, Cursor, Windsurf, VS Code, Codex CLI, OpenCode, ZCode, Zed, Cline, Continue, Kimi Code… See docs/clients.md for every verified config format.
claude mcp add a11y-toolkit -- uvx --from a11y-toolkit a11y-toolkit-mcpOr with JSON config:
{
"mcpServers": {
"a11y-toolkit": {
"command": "uvx",
"args": ["--from", "a11y-toolkit", "a11y-toolkit-mcp"],
"timeoutMs": 60000
}
}
}Rendered tools use Playwright if present and accept a browser parameter
(auto, chromium, firefox, webkit, chrome, msedge — auto-detects the first
available). Accept auth_state (Playwright storage_state path) to audit behind login.
Everything else works with zero dependencies.
The skill
git clone https://github.com/kinti/a11y-toolkit && cd a11y-toolkit
./skill/install-skill.sh # → ~/.zcode/skills and ~/.claude/skillsCLI — same engine, one command
a11ytoolkit audit --url https://example.com --pages 5 # sitemap-first crawl
a11ytoolkit pair "#1f2328" "#fbfaf7" # contrast
a11ytoolkit image hero.jpg --text "#fff" --region 120,40,420,90
a11ytoolkit forms https://mysite/contact # form errors
a11ytoolkit kbd https://mysite # keyboard traps + 3.2.1/3.2.2
a11ytoolkit reflow https://mysite # 320px reflow
a11ytoolkit scroll https://medium.com/feed # infinite scroll
a11ytoolkit validate --url https://example.com # W3C Nu
a11ytoolkit hover https://mysite # tooltip dismissibility
a11ytoolkit fix --file page.html -o fixed.html # safe autofix
a11ytoolkit declaration --entidad "Acme" --url https://… --estado parcial --marco eaa
a11ytoolkit snapshot https://mysite --out before.json # before deploy
a11ytoolkit diff before.json after.json # after deploy
a11ytoolkit evidence audit.json -o pack.json # countersignature-ready pack
a11ytoolkit disprove --url https://mysite # re-verify findings
a11ytoolkit budget --budget budget.json --audit audit.json # only NEW findings block
a11ytoolkit sarif --from-audit audit.json -o a11y.sarif # GitHub code scanning
a11ytoolkit badge --score 92 --out badge.svg # honest SVGCoverage: 51 of 55 WCAG 2.2 A/AA criteria (93%)
With automated signal | Manual-only (genuinely human) |
1.1.1, 1.2.2, 1.2.3, 1.2.5, 1.3.1–1.3.5, 1.4.1–1.4.5, 1.4.10–1.4.13, 2.1.1, 2.1.2, 2.1.4, 2.2.1, 2.2.2, 2.4.1–2.4.7, 2.4.11, 2.5.1–2.5.4, 2.5.7, 2.5.8, 3.1.1, 3.1.2, 3.2.1–3.2.4, 3.2.6, 3.3.1–3.3.4, 3.3.8, 4.1.2, 4.1.3 | 1.2.1 (audio transcripts), 1.2.4 (live captions), 2.3.1 (flash detection), 3.3.7 (redundant entry) |
The 4 manual-only criteria each have a knowledge entry (a11y_criterion) telling the
agent exactly how to verify them by hand. The boundary is printed on every report.
Free online analyzer
I also run a11y.jquin.net, a free online analyzer with the same engine — full report, badge, evidence-pack download. Every report ends at the exact boundary where a qualified human begins, which is the point.
Validated against real pages
Benchmarked against axe-core 4.10 on real pages monthly (methodology and results). Found a real WCAG failure on gov.uk that axe does not report (blue button at 3.91:1, manually verified). Drove out our own false positives (hidden skip links, honeypot fields, single-context generic links, image-alt accname — each with a regression fixture).
Why I built this
I have been auditing websites for accessibility since 2003. In twenty years the tools got faster and the failures stayed the same: the same missing alt text, the same keyboard traps, the same forms that swallow your work. When AI agents started writing most of the web, the audit gap stopped being a staffing problem and became an infrastructure one.
So I built the tool I always wanted next to me on an audit. Not another scanner — scanners exist. A toolkit that does half the work, says exactly where it stops, and packages the rest for the person who signs. The gov.uk failure you read about above is not a synthetic benchmark case: this engine found it, and I confirmed it with my own eyes before writing it down.
If it saves you an afternoon, leave a star — it genuinely helps the next auditor find it. If it doesn't, open an issue and tell me what is missing.
Honesty, built in
Every audit says: automation covers 93% of A/AA criteria; the rest needs a human.
The audit-page prompt and the skill have the agent check what it can (keyboard,
focus, zoom, announced errors) using the manual
checklist. A filter, not
a verdict. The remaining human work is priced per criterion — MIN 23 (read and
confirm), MED 19 (verify in the browser), MAX 13 (real interaction and judgment);
full table. And the evidence pack is the handoff object
for the person who signs, screen reader transcript included, so the reviewer sees
what a blind user hears.
Security & scope
A local tool: runs on your machine as your user. a11y_audit_url accepts
http/https only (no file:// — use --file/html for local HTML). a11y_html_validate
in html mode POSTs content to the W3C service (url mode shares only the URL;
self-hosted vnu supported). path/output_path read/write local paths — use it in
MCP clients you trust.
Development
python3 tests/test_contrast.py && python3 tests/test_audit.py && python3 tests/test_v32.py \
&& python3 tests/test_dom.py && python3 tests/test_cli.py && python3 tests/test_solido.py \
&& python3 tests/test_mcp.pytests/test_dom.py self-skips without Playwright. tests/test_solido.py enforces the design
invariants (catalog parity, version alignment, count coverage, hostile-HTML fuzz).
Releases: make release V=X.Y.Z — bumps, gates, tags and pushes atomically.
Roadmap
Done recently: rendered audit with shadow DOM and state contrast, form error testing plus autofix, keyboard traps, infinite scroll, reflow, the W3C Nu integration, SARIF and error budgets, the evidence pack (spec published, self-verifying), sitemap crawling, behind-login auditing, browser auto-detection, the screen reader transcript, and per-criterion effort pricing. The full history lives in the changelog.
Next, roughly in this order:
Attestation interlock: let an external auditor's countersignature reference the evidence pack by hash (their schema, my side adapts)
Publish the monthly axe-core benchmark results from CI, run over real pages
Screen-reader transcript cross-checks against NVDA and VoiceOver output
More verified client configs (JetBrains AI, Gemini CLI), same treatment as docs/clients.md
Author
Jesús Quintana Fernández (jquin.net) — SEO/GEO consultant and web-accessibility practitioner since 2003. MIT © 2026.
Available Tools
23 toolsa11y_aria_live_snippeta11y-toolkit: aria-live monitor snippetARead-onlyIdempotent
Returns injectable JavaScript for an aria-live announcement monitor (bookmarklet or page.evaluate): logs every dynamic-region announcement with time, politeness, role and text — what a screen reader would say, visible on screen. — Diagnostics aid to inject in a browser; not an audit by itself.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | monitor panel language (en default) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so safety is covered. The description adds behavioral detail: it logs announcements with time, politeness, role, and text, and is visible on screen, which goes beyond the structured metadata.
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?
Two sentences, front-loaded with the purpose, no redundant words.
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?
For a simple tool with one optional parameter and no output schema, the description explains the return value (injectable JavaScript), its purpose, and its non-audit nature. It could mention the exact return type but is sufficient.
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 covers the only parameter (lang) with a description and default, so the description adds nothing about parameters. Baseline 3 applies.
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?
States a specific verb (Returns) and resource (injectable JavaScript for an aria-live announcement monitor), and explicitly distinguishes itself from an audit. Clear and unambiguous.
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?
Provides usage context by calling itself a diagnostics aid and clarifying it is not an audit, but does not name alternative tools or specify when to prefer it over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_audit_doma11y-toolkit: Rendered WCAG auditARead-onlyIdempotent
Deep RENDERED WCAG audit via local Playwright/Chromium: real computed text contrast against effective backgrounds with alpha compositing (1.4.3), minimum target size 24×24 (2.5.8, new in WCAG 2.2), visible focus indicator heuristic (2.4.7), plus rendered versions of the static checks (alt, accessible names, labels, headings, lang/title, tabindex, aria-hidden, captions, tables). Findings include remediation. Requires playwright: pip install playwright && playwright install chromium. — Use instead of a11y_audit_url on JS-heavy pages; needs local Playwright.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Page URL to load in Chromium (http/https or file:// for local fixtures) | |
| lang | No | Output language for findings and remediation (default en) | |
| timeout | No | page load timeout seconds (45 default) | |
| auth_state | No | Path to a Playwright storage_state JSON (exported session) to audit behind login — local file, never uploaded |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds meaningful behavioral context beyond that: it performs real rendered checks, computes against effective backgrounds with alpha compositing, includes remediation in findings, and depends on a local Playwright install. This is valuable context that the annotations do not provide.
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 dense and front-loaded with the core purpose. The long list of checks and the installation command are useful, but the second sentence packs many details into a single unwieldy clause. Still, there is no filler or repetition.
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?
The description covers purpose, scope, alternatives, prerequisites, and result hints ('Findings include remediation'). However, there is no output schema and the description does not state the overall return format, so an agent is left inferring how findings are structured. For a complex audit tool, a bit more return-value context would make it complete.
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 documents all four parameters including url, lang, timeout, and auth_state. The description does not add material parameter-level meaning beyond reinforcing that the audit is rendered/browser-based. 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 and resource: a deep rendered WCAG audit of a page via local Playwright/Chromium. It enumerates concrete checks (contrast, target size, focus indicator) and clearly separates this tool from a11y_audit_url by naming that sibling directly. An agent can determine what this tool does without inspecting its schema.
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 routes usage: 'Use instead of a11y_audit_url on JS-heavy pages.' It also states the prerequisite that local Playwright/Chromium must be installed, with an installation command. This gives clear when-to-use and alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_audit_urla11y-toolkit: Express WCAG auditARead-onlyIdempotent
Express WCAG 2.2 audit of a URL or an HTML string: 20+ automated signals with a weighted 0-100 score — images without alt (1.1.1), controls without accessible names (4.1.2), form fields without labels (3.3.2), missing autocomplete on user-data fields (1.3.5), click handlers on non-interactive elements (2.1.1), unknown ARIA roles and broken aria-labelledby (4.1.2), duplicated unnamed landmarks, timed meta refresh (2.2.1), missing skip mechanism (2.4.1), lang/title (3.1.1, 2.4.2), heading structure (1.3.1), blocked zoom (1.4.4), captions (1.2.2), autoplay audio (1.4.2), generic/duplicated link text (2.4.4), target=_blank without warning (3.2.5), positive tabindex (2.4.3), aria-hidden on focusable elements, tables without th, duplicate ids, duplicate accesskeys. Each finding includes concrete remediation. Filter, not verdict: automation covers ~1/3 of WCAG; query a11y_criterion for what a criterion means. — Prefer a11y_audit_dom when JS renders the content or contrast/2.5.8/focus matter; use pages for light multi-page sampling.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to fetch and audit | |
| html | No | raw HTML to audit directly (overrides url) | |
| lang | No | output language (en default) | |
| pages | No | light same-domain crawl: audit up to N pages, aggregated by score and recurring signals (default 1, max 20) | |
| timeout | No | fetch timeout seconds (30 default) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds valuable behavioral context beyond that: it explicitly states the audit is automated, covers ~1/3 of WCAG, is a filter rather than a verdict, and that findings include concrete remediation. This goes beyond the annotations without contradicting them.
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 front-loads the core purpose, then lists specific checks, then adds caveats and routing guidance. Each sentence contributes meaning, though the list of checks could be trimmed without loss. It is more detailed than average but not bloated.
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 lacking an output schema, the description tells the agent that the tool returns a weighted 0-100 score and that each finding includes remediation. It also explains limitations (covers ~1/3 of WCAG) and when to use sibling tools. For a complex audit tool with 5 parameters, this is sufficient context to invoke it 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?
Schema description coverage is 100% — every parameter (url, html, lang, pages, timeout) already has a description. The tool description mentions 'URL or an HTML string' and 'pages' for light multi-page sampling, but these add little beyond the schema. Per the rubric, baseline 3 is appropriate when the schema does the heavy lifting.
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 ('Express WCAG 2.2 audit') and resource ('a URL or an HTML string'), enumerates the exact checks covered, and distinguishes itself from siblings by naming a11y_audit_dom and the pages parameter. An agent can immediately tell what this tool does and how it differs from related tools.
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?
Explicitly states when to prefer alternatives: 'Prefer a11y_audit_dom when JS renders the content or contrast/2.5.8/focus matter; use pages for light multi-page sampling.' It also notes it is a filter, not a verdict, and recommends querying a11y_criterion for criterion meaning. Clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_autofixa11y-toolkit: Deterministic safe auto-fixesARead-onlyIdempotent
DETERMINISTIC safe auto-fixes applied to HTML — the honest anti-overlay: a short closed list of fixes where the correct answer is unique (unblock viewport zoom 1.4.4, add the exact autocomplete token 1.3.5, fill missing html lang and empty title when provided). Everything requiring judgment (alt text, contrast, accessible names) is NOT touched — it returns no_aplicados with the reason and remediation instead. Returns fixed_html + aplicados + no_aplicados. — Only the closed allowlist of provably safe fixes; judgment fixes come back as no_aplicados with remediation.
| Name | Required | Description | Default |
|---|---|---|---|
| html | Yes | raw HTML to fix | |
| lang | No | only if provided and <html> lacks lang | |
| title | No | only if provided and <title> is empty |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only, idempotent, open-world-false, and non-destructive behavior. The description adds genuinely useful context beyond those annotations: deterministic behavior, the exact return shape (fixed_html + aplicados + no_aplicados), and the no-op fallback behavior with remediation for judgment-based issues. It is consistent with the annotations.
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 content is front-loaded and information-dense, but it is somewhat repetitive: 'judgment fixes come back as no_aplicados with remediation' appears twice, and the 'closed allowlist of provably safe fixes' concept is restated. The description earns its place but would benefit from tighter editing.
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, the description explains the return fields and the fallback behavior for unsupported fixes. It gives concrete examples of what the closed allowlist includes, though it does not enumerate every possible fix. That is a minor gap, not a blocking one, since the tool communicates unsupported cases through no_aplicados.
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 coverage is 100%, so the parameters are already documented. The description adds a bit of context by mentioning lang and title as optional fill-ins, but it does not substantially extend the schema descriptions. This is the expected baseline-3 case.
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 the exact verb and resource: it applies deterministic, provably safe auto-fixes to raw HTML. It also distinguishes itself from judgment-based accessibility work by explicitly excluding alt text, contrast, and accessible names, which separates it from the audit and analysis sibling tools.
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?
It clearly defines when to use the tool: only for the closed allowlist of fixes where the correct answer is unique. It also explains that judgment-requiring issues are returned as no_aplicados with remediation, signaling that the tool should not be relied on for those cases. It does not name specific alternative tools, but the boundary is explicit enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_badgea11y-toolkit: Honest SVG badgeARead-onlyIdempotent
Returns an HONEST accessibility badge as accessible SVG: score, date and scope (automated screening ≈ 1/3 of WCAG), color-coded by score. Deliberately does NOT say "conformant" — the honest seal. Embed it in audited sites or statements. — Scope: the honest SVG seal for audited sites; the machine-readable bundle is a11y_evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Badge language (default en) | |
| fecha | No | ISO date (today by default) | |
| score | Yes | 0-100 (from an audit result) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds important behavioral context: the badge is deliberately non-conformant, is based on automated screening covering roughly one-third of WCAG, and is color-coded by score.
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 front-loaded with the core purpose and kept short. The word 'honest' is repeated a few times and the scope note could be tightened, but every sentence contributes useful information.
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, the description explains the return value's format, content, and purpose, while annotations cover side-effect safety. An agent can confidently call this tool for badge generation without missing critical information.
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 documents score, fecha, and lang with descriptions and an enum. The description only confirms that score and date appear in the badge, adding little 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 clearly defines the tool as returning an accessibility badge as accessible SVG with score, date, scope, and color-coding, and explicitly states that it does NOT claim WCAG conformance. It also distinguishes itself from a11y_evidence by scope, so an agent can tell it apart from siblings.
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?
It gives explicit embed contexts ('audited sites or statements') and a scope note that directs machine-readable-bundle needs to a11y_evidence. This provides a clear when-to-use and when-not-to-use distinction among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_contrast_imagea11y-toolkit: Text-over-image contrastARead-onlyIdempotent
TEXT OVER IMAGE contrast: pixel-level sampling of the real background behind the text box → worst/median/p95 ratio, % of area passing AA, and automatic hostile-zone detection on a 3×3 grid (zona_peor). What pair-only checkers cannot do. region="x,y,w,h" recommended. — Use instead of a11y_contrast_pair whenever the background is a photo/gradient.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Output language (default en) | |
| path | Yes | Local path to the screenshot/image the text sits on (PNG/JPG/PPM) | |
| region | No | Text bounding box as "x,y,width,height" in pixels (strongly recommended: defines what to sample) | |
| sample | No | Pixel step: 4 samples every 4px (auto-raised for huge regions) | |
| text_color | Yes | The text color as rendered over the image (must be opaque) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructiveHint. The description goes beyond this by detailing the computational behavior—sampling real background pixels, producing specific ratio metrics, and performing 3x3 grid hostile-zone detection. It does not contradict annotations and adds meaningful context about what the tool actually computes.
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 two sentences, front-loaded with the core purpose, and wastes no words. It uses compact arrow notation to list outputs and ends with a clear usage directive. Every sentence contributes to understanding or selecting the tool.
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?
For a tool with no output schema, the description sufficiently outlines the expected outputs (worst/median/p95 ratio, % area passing AA, hostile-zone detection). It also covers usage context and the key parameter recommendation. Minor gaps like exact output key names or error handling are not critical given the provided detail.
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 all parameters (lang, path, region, sample, text_color) have individual descriptions. The tool description redundantly recommends region='x,y,w,h', which mirrors the schema's 'strongly recommended' note. No additional parameter meaning is provided beyond the schema, so a baseline score of 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 clearly states the tool performs pixel-level contrast sampling of the real background behind text, computing worst/median/p95 ratios, % area passing AA, and hostile-zone detection. It explicitly contrasts with 'pair-only checkers' and names the sibling a11y_contrast_pair, making its unique 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?
It gives an explicit directive: 'Use instead of a11y_contrast_pair whenever the background is a photo/gradient.' It also recommends setting region as 'x,y,w,h' for accurate sampling, providing actionable guidance on when and how to invoke the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_contrast_paira11y-toolkit: Contrast ratio + verdictsARead-onlyIdempotent
Exact WCAG contrast ratio for a color pair: per-criterion verdicts 1.4.3 (AA), 1.4.6 (AAA), 1.4.11 (non-text). Accepts #hex, rgb(), hsl(), CSS color names; rgba/hsl with alpha is composited over the background. If AA fails, suggests the nearest passing color. — For flat pairs; text over images needs a11y_contrast_image.
| Name | Required | Description | Default |
|---|---|---|---|
| bg | Yes | Background color: same formats; alpha composites over white | |
| fg | Yes | Foreground/text color: #hex, rgb(), hsl() or a CSS color name; alpha composites over bg | |
| lang | No | output language (en default) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description reveals key behavior: alpha is composited over the background (or white for bg), per-criterion verdicts are returned, and a nearest passing color is suggested when AA fails. This materially helps an agent predict side effects and output shape.
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?
Two tight sentences front-load the core function and verdicts, then add format support, compositing behavior, fallback suggestion, and the key sibling exclusion. Every clause earns its place with no fluff.
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?
For a simple read-only calculation tool, the description covers what it computes, what inputs it accepts, how alpha is handled, what outputs to expect, and when not to use it. No critical gap remains for an agent to invoke it 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?
Schema description coverage is 100%, so the schema already documents formats and compositing for both fg and bg. The description reinforces those semantics but does not add significant meaning beyond the structured schema; 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 an exact, specific function: computing WCAG contrast ratio for a color pair with per-criterion verdicts (1.4.3, 1.4.6, 1.4.11). It clearly differentiates from a11y_contrast_image by explicitly noting flat pairs vs. text over images.
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?
It gives direct usage context: use for flat color pairs, and explicitly says text-over-images needs a11y_contrast_image. This names the alternative and the condition that selects it, leaving no ambiguity about when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_criteriona11y-toolkit: WCAG criterion explainedARead-onlyIdempotent
Explains a WCAG 2.2 success criterion in plain language (es/en): what it requires, typical failures, and how to verify it with this toolkit (which tool automates which part). Codes like "1.4.3", "2.5.8", "4.1.2". Use it whenever you need to explain WHY a finding matters or what the criterion actually says. — Knowledge lookup; does not fetch or audit anything.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | criterion number, e.g. 1.4.3 | |
| lang | No | Explanation language (default en) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only and idempotent; the description adds that it is a knowledge lookup and does not fetch or audit anything, which is useful beyond the safety hints. It also discloses what the returned explanation covers (requirements, failures, verification), compensating for the absent output schema.
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 compact and front-loaded: the first sentence states purpose and content, the second gives concrete use and a behavioral boundary. Every sentence earns its place without wasted words.
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?
For a simple knowledge-lookup tool, the description covers purpose, output content, language options, when to use it, and the fact that it performs no fetch or audit. With no output schema, this is sufficient for an agent to select and call 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?
Schema coverage is 100% and the schema already documents code and lang with an example and enum. The description reinforces the expected format with several criterion codes and mentions es/en, but adds only marginal value 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 states a specific verb and resource: it explains a WCAG 2.2 success criterion in plain language, covering requirements, typical failures, and toolkit verification. It also distinguishes itself from the sibling audit tools by explicitly saying it is a knowledge lookup and 'does not fetch or audit anything.'
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 gives clear when-to-use guidance: 'Use it whenever you need to explain WHY a finding matters or what the criterion actually says.' It does not explicitly name alternatives or give when-not-to-use conditions, but the knowledge-lookup note and sibling list make the boundary clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_diffa11y-toolkit: Snapshot regression diffARead-onlyIdempotent
Regression diff between two accessibility snapshots (before/after a deploy): added/removed/renamed interactives and focus-order changes. ok=false means a regression to review. Accepts inline JSON (starting with "{") or file paths. — Compares two existing snapshots; a11y_diff_urls snapshots both for you.
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | BEFORE snapshot (inline JSON or path) | |
| b | Yes | AFTER snapshot (inline JSON or path) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is known. The description adds valuable behavioral context beyond that: the meaning of 'ok=false' (a regression to review) and the accepted input formats (inline JSON starting with '{' or file paths). This enriches the agent's understanding of the tool's output and input handling without contradicting the annotations.
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 compact—two or three sentences—and front-loaded with the core purpose and outputs. It uses an em-dash to cleanly separate the alternative-tool note. Every sentence contributes value: purpose, output semantics, input format, and usage differentiation. No fluff or redundancy.
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?
For a simple two-parameter read-only tool with no output schema, the description covers the essential aspects: what it compares, how to interpret the result (ok=false means regression), and how to provide input. It mentions the specific change types (added/removed/renamed interactives and focus-order changes) which gives context on the diff output. The only minor gap is that it doesn't detail the full output structure beyond the ok field, but given the simplicity and the presence of the sibling tool note, this is sufficient.
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 covers both parameters with descriptions ('BEFORE snapshot (inline JSON or path)' and 'AFTER snapshot (inline JSON or path)'), so the schema already documents the basics. The description adds a small but useful detail about inline JSON format (starting with '{'), which goes slightly beyond the schema. With 100% schema coverage, the baseline is 3, and this additional guidance justifies a 4.
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 verb (diff), resource (accessibility snapshots), and purpose (regression detection). It enumerates what is compared (added/removed/renamed interactives and focus-order changes) and explicitly differentiates from the sibling a11y_diff_urls by noting it compares existing snapshots while the other snapshots both. This gives an agent a precise understanding of the tool's role.
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 names the alternative tool (a11y_diff_urls) and the condition for choosing it: 'a11y_diff_urls snapshots both for you.' It also states the typical use case (before/after a deploy) and that it requires existing snapshots, which tells an agent when this tool is appropriate and when another is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_diff_urlsa11y-toolkit: Staging vs production diffARead-onlyIdempotent
Snapshot two URLs and diff them in a single call (e.g. staging vs production). Requires local Playwright. — Convenience for staging-vs-production; manual control is snapshot + a11y_diff.
| Name | Required | Description | Default |
|---|---|---|---|
| url_a | Yes | First URL (usually staging) | |
| url_b | Yes | Second URL (usually production) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds meaningful context beyond that by noting the local Playwright dependency and clarifying that this is a convenience wrapper around two separate operations rather than a novel behavior.
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 two sentences with no filler. The core operation is front-loaded, and the manual alternative is included without unnecessary detail.
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?
For a simple two-parameter, read-only tool with rich annotations, the description covers what the tool does, its prerequisite, and its relationship to the manual flow. No critical information needed to call it correctly 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 coverage is 100%, and the parameter descriptions already explain that url_a is usually staging and url_b is usually production. The tool description adds no additional parameter-level meaning, so the baseline score of 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 action: 'Snapshot two URLs and diff them in a single call,' with the staging-vs-production example making the resource and intent clear. It also distinguishes itself from the manual 'snapshot + a11y_diff' flow, so an agent can differentiate it from related sibling tools.
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 positions this tool as a convenience for staging-vs-production comparisons and names the manual alternative: 'snapshot + a11y_diff.' It also flags the prerequisite 'Requires local Playwright,' giving the agent concrete conditions for when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_disprovea11y-toolkit: Disprover: re-verify findingsARead-onlyIdempotent
Disprover pattern (from Cloudflare's security-audit-skill): re-runs the audit against the live page and marks each finding confirmed or rejected — findings that don't reproduce are rejected with the reason. Catches false positives, race conditions, and page changes between audit and report. Returns a fresh score over confirmed findings only. — Run this before acting on any audit report.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to re-verify against | |
| lang | No | Output language (en default) | |
| informe | No | existing audit report (optional; if absent, audits first) | |
| timeout | No | Timeout seconds (30 default) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and non-destructive. The description adds meaningful behavioral context: it re-runs the live audit, rejects non-reproducing findings with a reason, and catches false positives/race conditions/page changes. No contradiction with annotations.
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?
Four compact, front-loaded sentences cover action, purpose, output, and usage instruction. Every sentence earns its place with no redundancy or filler.
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?
The description provides the core purpose, output summary, and usage context. Since there is no output schema, it doesn't fully specify the exact structure of confirmed/rejected findings, but it gives enough high-level information for an agent to invoke 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?
Schema description coverage is 100%, and each parameter already has a clear description. The main description doesn't add per-parameter details, so it stays at the baseline 3 without needing to compensate.
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?
States a specific verb (re-runs, marks) and resource (audit findings against the live page), and explains the output (fresh score over confirmed findings). It clearly distinguishes the tool from sibling audit and autofix tools by framing it as the verification/disproval step.
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?
Explicitly tells the agent when to use it: 'Run this before acting on any audit report.' It gives clear context for invocation, though it doesn't name alternative tools or state explicit when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_evidencea11y-toolkit: Evidence pack (countersignature-ready)ARead-onlyIdempotent
Builds the COUNTERSIGNATURE-READY evidence pack: the machine→human handoff object for WCAG conformance work. Takes one or more audit reports (any mode — static, rendered, reflow, keyboard, scroll) and returns: the full 55-criterion A/AA matrix (automated-fail / automated-review / not-flagged — NOT pass / not-run / manual-only), each row priced with its human-effort class (MIN 1-3 / MED 5-10 / MAX 15-30 min of human review remaining) and total remaining minutes (the quote input for a review marketplace), every artifact SHA-256-hashed with timestamps, an empty signature block (name, credential, date) whose statement must reference the pack's own sha256, and the tamper-evidence rule stated. Vendor-neutral: any qualified human can countersign it. Evidence, never conformance. — The tier-3 handoff object; feed it every audit report you have.
| Name | Required | Description | Default |
|---|---|---|---|
| informes | Yes | audit report objects (any mode) | |
| snapshot | No | a11y_snapshot output (optional) | |
| evaluador | No | {"nombre":…, "credencial":…, "fecha_revision":…} to prefill the signature block | |
| verificados | No | Criterion codes an agent/human verified against this sample (manual checklist protocol) — they become agent-verified in the matrix; automated-fail stays fail |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (read-only, idempotent), the description discloses rich output behavior: the exact matrix statuses, human-effort pricing, hashing with timestamps, empty signature block, and tamper-evidence rule. It also clarifies vendor neutrality. This consistently aligns with annotations, adding significant detail about what the tool returns.
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 lengthy but front-loaded with a clear purpose and organized as a colon-delimited list of outputs. Every sentence adds detail about the tool's behavior or scope. Slightly dense with parentheticals but not verbose or tautological.
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?
For a tool with no output schema and four parameters, the description covers the primary return payload and how inputs like informes and verificados influence it. Optional snapshot and evaluador are only described in the schema, but the description names the signature block they would affect. Complete enough for a competent agent to invoke it 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?
Schema coverage is 100% so the baseline is 3. The description adds extra meaning by specifying that inputs are audit reports in any mode, that verified criteria become agent-verified in the matrix, and that the output includes a priced review quote. This connects parameters to output behavior beyond the schema's basic field descriptions.
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?
Clearly states the tool's function with 'Builds the COUNTERSIGNATURE-READY evidence pack' and enumerates the exact output components. Differentiates it from sibling audit/snapshot tools by positioning it as the tier-3 handoff object that consumes audit reports. The 'Evidence, never conformance' note further disambiguates its role.
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 'feed it every audit report you have,' giving concrete when-to-use guidance, and specifies that it accepts reports from any audit mode. It does not explicitly name sibling tools to use instead, but the tier-3 positioning implies it is the aggregation step after audits. Lacks explicit when-not-to-use clauses, but the context is sufficient for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_formsa11y-toolkit: Form error testingARead-onlyIdempotent
Form error testing (3.3.1 Error Identification, 3.3.3 Error Suggestion) — the guided flow no competitor automates: fills every validatable field with INVALID data, really submits, and judges the post-submit DOM — are errors identified in text and associated with the field (aria-invalid + aria-describedby, error summary, role=alert), or does the form swallow them? Native browser validation counts as identification (unless the form has novalidate); forms that navigate on submit are honestly noted as not measurable in-page. Requires local Playwright.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Page URL with the form(s) to test | |
| lang | No | Output language (en default) | |
| timeout | No | Page load timeout seconds (45 default) | |
| auth_state | No | Path to a Playwright storage_state JSON to test forms behind login |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and idempotent annotations, the description discloses that the tool actually submits the form with invalid data, which is a significant behavioral trait. It also notes edge cases like native validation and forms that navigate on submit, providing transparency about limitations. This adds value beyond the annotations.
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 informative but slightly long; it front-loads the purpose and then details the flow and edge cases. It uses punctuation effectively to organize information. It could be trimmed, but it remains readable and well-structured.
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?
The description explains the tool's purpose, process, and limitations, including how it handles novalidate and navigation-on-submit. However, it does not describe the output format or return value, which might be expected from a testing tool. Given the absence of an output schema, this is a minor gap.
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 documents all four parameters with descriptions (100% coverage). The description does not add further parameter-specific details beyond mentioning the Playwright requirement, which is a prerequisite rather than a parameter. Thus, the description adds minimal value to parameter semantics.
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 tests form error identification and suggestion (WCAG 3.3.1 and 3.3.3). It specifies the exact flow: fills invalid data, submits, and checks the post-submit DOM. This distinguishes it from sibling tools like a11y_audit_url, which do general accessibility audits.
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 implies this tool is for form error testing, but it doesn't explicitly state when to use it versus other a11y tools. It mentions a prerequisite (local Playwright) but doesn't describe alternatives or exclusions. The context is clear enough for an agent to infer, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_generate_declarationa11y-toolkit: Accessibility statement (EAA/RD 1112)ADestructiveIdempotent
Generates an Accessibility Statement in HTML: art. 10 RD 1112/2018 (Spanish public sector, marco="rd1112") or European Accessibility Act wording (Directive (EU) 2019/882 / Ley 11/2023, marco="eaa"; EN output uses Directive (EU) 2016/2102 / EAA wording). The generated document is itself accessible. Saves to output_path when given. — Legal statement generator; drive contenido_no_accesible from audit findings and a11y_evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Website URL the statement covers | |
| lang | No | Statement language (default en; es uses the Spanish legal wording) | |
| marco | No | Legal framework: rd1112 (Spanish public sector, art. 10) or eaa (European Accessibility Act / private sector) | |
| estado | Yes | Compliance state: plena | parcial | no_conforme (parcial is the honest default when findings exist) | |
| metodo | No | How conformance was evaluated (e.g. "self-evaluation: a11y-toolkit screening + manual review") | |
| entidad | Yes | Legal entity name as it should appear in the statement (company, body…) | |
| feedback | No | Contact channel for accessibility feedback (email or URL) | |
| output_path | No | save the HTML here (optional) | |
| reclamacion | No | Claim/complaint procedure URL or address (legally required in several jurisdictions) | |
| fecha_revision | No | ISO date of the next scheduled review | |
| fecha_evaluacion | No | ISO date of the last evaluation (YYYY-MM-DD) | |
| contenido_no_accesible | No | Non-accessible content list: one string per item, ideally criterion + reason + alternative | |
| disponibilidad_alternativa | No | Where to get the content in an alternative accessible format |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=true; the description adds that the generated document is itself accessible and that output is saved when output_path is given. It also clarifies that 'es' uses Spanish legal wording, providing behavioral nuance beyond the schema. No contradiction with annotations.
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 two sentences, the first covering the core function and legal frameworks, the second offering a brief usage pointer. It is front-loaded and avoids unnecessary verbosity, though the second sentence is somewhat cryptic for an agent not familiar with the tool family.
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?
With 13 parameters, 3 required, and no output schema, the description provides a good overview but leaves gaps: it does not explain the relationship between 'marco' and 'lang', how to choose between them, or the structure of the generated HTML. It also omits mention of the 'reclamacion' and 'disponibilidad_alternativa' parameters, which are legally important. Given the tool's complexity, more context would help.
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 coverage is 100% and each parameter has a description, so the baseline is 3. The description adds extra semantic guidance for key parameters: it tells agents to fill 'contenido_no_accesible' from audit findings and a11y_evidence, and reinforces that 'estado' has an honest default. This goes beyond simple schema documentation.
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 clear verb and resource: 'Generates an Accessibility Statement in HTML'. It distinguishes between two legal frameworks (RD 1112 and EAA) and mentions the optional output_path, separating it from sibling tools like a11y_badge or a11y_ledger. This is specific and unambiguous.
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?
It gives context on when to use it: for generating legal accessibility statements, and explicitly instructs to drive the 'contenido_no_accesible' parameter from audit findings and a11y_evidence. It does not explicitly state when not to use it or name alternatives, but the legal-focus and the cross-reference to other a11y-tools make the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_hovera11y-toolkit: Hover dismissibility (1.4.13)ARead-onlyIdempotent
Content on Hover or Focus (1.4.13): finds tooltip/overlay candidates, hovers each, and tests whether Escape dismisses the result — tooltips that do not dismiss are flagged. Requires local Playwright. — Scope: tooltips only; full audit is a11y_audit_dom, keyboard traps are a11y_keyboard.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Page URL to test | |
| lang | No | Output language (en default) | |
| timeout | No | Page load timeout (45 default) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, indicating a safe, read-only operation. The description adds that it requires local Playwright, which is critical for the agent to know before calling. It also implies the tool will perform browser interactions (hover) but does not detail potential side effects or warnings beyond the Playwright dependency; however, given the strong annotation coverage, this is acceptable.
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 and front-loaded with the criterion and ability. It efficiently uses a dash to introduce scope and alternatives without wasting words. The only minor issue is that it crams several pieces of information into one long sentence, but it remains readable.
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 moderate complexity, the description covers what it does, when to use it, prerequisites, and scope. The output schema is absent, but the description does not specify what the tool returns (e.g., a report of flagged tooltips). Since it flags issues, a brief note on output format would improve completeness, but the current info is largely sufficient.
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 each parameter is documented. The description adds context that the tool runs a browser test requiring local Playwright, which helps agents understand prerequisites. It does not deeply explain each parameter, but the schema covers it, so the baseline of 3 is elevated by the extra environment context.
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: it finds tooltip/overlay candidates, hovers each, and tests whether Escape dismisses the result, flagging non-dismissible tooltips. It identifies a specific accessibility criterion (1.4.13) and distinguishes itself from siblings by stating its scope (tooltips only) and naming the full audit (a11y_audit_dom) and keyboard traps (a11y_keyboard).
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 states when to use this tool (for tooltip hover dismissibility testing) and what it is not for (full audit, keyboard traps), naming the alternatives directly. It also includes a hard prerequisite: 'Requires local Playwright.' This gives the agent clear guidance on invocation conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_html_validatea11y-toolkit: W3C Nu validationARead-onlyIdempotent
The W3C's own parser as a toolkit mode: checks a URL or raw HTML against the Nu Html Checker (validator.w3.org/nu) — doctype, encoding, structural validity, plus alt/lang/role issues from the authoritative source, mapped to WCAG criteria where they overlap. PRIVACY: html mode POSTs the document to the W3C service (url mode shares only the URL, like a11y_audit_url); self-hosted vnu instances supported via base_url for sensitive content.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Page URL to validate (shares the URL with the W3C service) | |
| html | No | Raw HTML to validate — POSTs the content to validator.w3.org/nu; use url or a self-hosted instance for sensitive pages | |
| lang | No | Output language (en default) | |
| base_url | No | Base URL of a self-hosted vnu instance (docker ghcr.io/validator/validator) instead of the public W3C service |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive safety. The description adds valuable behavioral context: privacy implications of POSTing versus sharing URLs, support for self-hosting to avoid sending sensitive content, and the fact that results map to WCAG criteria. These go beyond the annotations and inform the agent of network-side effects.
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 a single dense sentence followed by a PRIVACY note. It front-loads the core purpose and then delivers actionable privacy guidance. No filler, but the structure could be broken into clearer sentences. Every sentence earns its place.
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?
The tool has no output schema, so the description should clarify the return value. It mentions that it checks for issues and maps to WCAG criteria, but does not specify the format of the report (e.g., list of errors, severity, WCAG references). Given the complexity and lack of output schema, this is a notable gap. Annotations cover safety, but the absence of return-format disclosure leaves the agent guessing.
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 coverage is 100% and each parameter is documented. The description adds extra meaning beyond the schema: for 'url' it notes only the URL is shared, for 'html' it warns about POSTing content and suggests self-hosting for sensitive pages, and for 'base_url' it specifies the docker image. This enriches the schema descriptions without repetition.
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 ('checks') and resource ('URL or raw HTML against the Nu Html Checker'), enumerates the validation aspects (doctype, encoding, structural validity, alt/lang/role), and maps to WCAG criteria. It clearly differentiates from siblings by emphasizing the W3C's authoritative parser, and the privacy note references a sibling (a11y_audit_url) to draw a distinction.
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 provides explicit guidance on mode selection: html mode POSTs content, url mode shares only the URL, and self-hosted base_url is recommended for sensitive content. It mentions a sibling (a11y_audit_url) for similarity but stops short of an explicit when-not-to-use statement against other audit tools. Overall, context for choosing modes is clear, but exclusions are implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_keyboarda11y-toolkit: Keyboard-trap detectorARead-onlyIdempotent
Keyboard-trap detection (2.1.2) with REAL Tab walking in Chromium: up to 60 real tab stops, cycle detection (the modal pattern), then the decisive test — does ESCAPE release the cycle? A modal that cycles and releases on Escape is correct and NOT reported; a cycle Escape cannot leave is a trap (high severity). Returns the full tab stop list too. Requires local Playwright. — Scope: keyboard traps (2.1.2); focus visibility is part of a11y_audit_dom.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Page URL to Tab-walk (http/https or file://) | |
| lang | No | Output language (default en) | |
| max_pasos | No | max real Tab presses (60 default) | |
| auth_state | No | Path to a Playwright storage_state JSON (exported session) to Tab-walk behind login |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations (readOnlyHint, openWorldHint, idempotentHint) by detailing the actual algorithm: real Tab walking up to 60 stops, cycle detection, the Escape-release test, and the specific decision rule for reporting a trap as high severity. This is valuable behavioral insight not available from structured fields.
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 dense and front-loaded with the core purpose. Every sentence serves a role: algorithm, cycle/escape logic, return value, environment requirement, and scope separation. No filler or redundancy.
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?
With no output schema, the description still explains the return value (full tab stop list) and the severity logic. It also covers the Playwright prerequisite and scope. It doesn't detail the exact output structure or error behavior, but the essential information for calling is present.
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 covers all 4 parameters with descriptions (100% coverage), so the description doesn't need to compensate. It adds some context (e.g., 'up to 60 real tab stops' aligns with max_pasos) but does not materially change parameter meaning 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 states a specific action ('detection') on a specific resource ('keyboard traps') with the WCAG reference '2.1.2'. It explicitly distinguishes from sibling a11y_audit_dom by noting focus visibility is part of that tool, making the purpose unambiguous.
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 gives explicit scope ('keyboard traps (2.1.2)') and identifies the sibling that covers the adjacent concern ('focus visibility is part of a11y_audit_dom'). It also notes a concrete prerequisite ('Requires local Playwright'), helping agents decide when this tool can be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_ledgera11y-toolkit: Coverage ledger (persistent)BRead-onlyIdempotent
Coverage ledger (from Cloudflare's security-audit-skill): persistent record of what has been audited, when, and with what result. Actions: record (add audit result), gaps (what has never been checked on a URL), summary (portfolio overview). Accumulates across runs — second audits show resolved findings.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL (for record/gaps) | |
| action | Yes | What to do | |
| informe | No | audit report object (for record) | |
| ledger_path | No | ledger file path (default: a11y-ledger.json) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly describes persistent state accumulation and a record action that adds audit results, which is a write-oriented behavior. However, the annotations declare readOnlyHint: true and idempotentHint: true, which directly contradicts the described mutation and accumulation. This is an annotation contradiction that severely undermines the agent's ability to predict the tool's behavior.
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 and front-loaded: it states the core purpose, lists actions, and explains persistence in three sentences. The provenance mention 'from Cloudflare's security-audit-skill' is slightly extraneous, but overall every substantive part earns its place.
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?
There is no output schema, so the description must explain return values and call implications, but it does not. It also omits what the 'informe' object should contain and how ledger_path is resolved. While the high-level purpose is clear, the annotation contradiction and missing operational details leave an agent under-equipped to invoke record 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?
Schema description coverage is 100%, so the baseline is 3. The description adds useful meaning to the action enum values and clarifies the persistent context, but it does not explain the structure of the 'informe' object or the ledger_path behavior beyond the schema. It meets the baseline but does not compensate for the nested object ambiguity.
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 identifies a specific resource (a persistent coverage ledger) and names three distinct actions with concrete effects: record, gaps, and summary. This clearly differentiates it from sibling audit and analysis tools, as it is the stateful tracking layer rather than an auditing tool.
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 action descriptions imply when to use each behavior—record after an audit, gaps to find unchecked URLs, summary for portfolio overview—but there is no explicit when-to-use vs. alternatives guidance. It does not name sibling audit tools or state exclusions, so the usage context is only implied, not fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_reflowa11y-toolkit: 320px reflow checkARead-onlyIdempotent
Reflow check at 320px — criterion 1.4.10 (AA), the check axe and Lighthouse do not automate. Loads the URL at 1280px, then at 320px, and reports real horizontal scroll + the overflowing elements. Method note: browser zoom RE-LAYS OUT at 320 CSS px (that is the standard's own equivalence: 1280 @ 400% zoom = 320px), so the correct measurement is a 320px viewport. Requires local Playwright. — Scope: 320px reflow only (1.4.10); for the full rendered pass use a11y_audit_dom.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Page URL to test at 320px (http/https or file://) | |
| lang | No | Output language (default en) | |
| timeout | No | Page load timeout in seconds (default 45) | |
| auth_state | No | Path to a Playwright storage_state JSON (exported session) to test behind login |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds valuable behavioral context beyond that: it loads the URL at two viewports (1280px and 320px), reports horizontal scroll and overflowing elements, and states the local Playwright requirement. No contradiction exists.
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 front-loaded with the core purpose and scope, then adds the method note and prerequisite. Each sentence earns its place—there is no filler or repetition. The structure flows logically from what it does to how to do it correctly.
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?
For a read-only test tool with no output schema, the description is complete: it explains what is measured, what is reported (real horizontal scroll + overflowing elements), the scope (1.4.10 only), and the alternative tool for broader coverage. Nothing an agent needs to call it correctly 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 all four parameters (url, lang, timeout, auth_state) are documented in the schema. The description only implicitly references url ('Loads the URL') and does not add any param-specific guidance or format details, so it stays at the baseline for full schema coverage.
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 and resource: 'Reflow check at 320px' targeting criterion 1.4.10, and explicitly differentiates from siblings by noting it is the check axe and Lighthouse do not automate. It also names the sibling a11y_audit_dom as the alternative for a full rendered pass, making the tool's purpose unambiguous.
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?
It explicitly directs the agent to use a11y_audit_dom for the full rendered pass, and explains the correct measurement method (1280 @ 400% zoom = 320px) to avoid misinterpretation. The 'Requires local Playwright' prerequisite further clarifies when the tool is applicable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_scrolla11y-toolkit: Infinite-scroll auditARead-onlyIdempotent
Infinite-scroll accessibility audit — the documented disaster nobody automates (Deque guidance + ARIA APG Feed pattern; criteria 2.4.3, 4.1.3, 2.2.2). Real scrolling batches in Chromium with a live-region observer: does the focused element SURVIVE each batch (re-render destroys it — the documented failure)? Is new content ANNOUNCED (aria-live/status receives text, role=feed)? Does the feed END or offer a load-more alternative (footer reachability)? APG feed pattern as positive signal. Honest guard: if no standard items are detected (login walls, non-standard markup) the unfounded signals are skipped with a note. Requires local Playwright. — For paginated feeds only; general page audit is a11y_audit_url/dom.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Feed URL to audit (best on feeds you own or can authenticate into) | |
| lang | No | Output language (default en) | |
| auth_state | No | Path to a Playwright storage_state JSON (exported session) to audit an authenticated feed | |
| max_tandas | No | scroll batches (5 default) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, openWorldHint, idempotentHint, destructiveHint=false) already convey the tool's safe, read-only, side-effect-free nature. The description adds significant context beyond that: it details what the audit checks (focused element survival, announcement, feed end), how it works (real scrolling, live-region observer), and its honest guard (skipping unfounded signals). However, it does not mention potential heavy resource usage or timeouts, which would be useful for an automation tool.
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 information-dense but well-structured, with the key purpose front-loaded in the first sentence and additional details organized logically. It uses a clear em-dash structure and includes practical usage notes without fluff, making every sentence earn its place.
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?
For a complex auditing tool with 4 parameters and no output schema, the description covers most critical context: what it does, how it works, its limitations, and when to use it. However, it doesn't specify what the output format looks like (e.g., report structure), which an agent might need to know if it plans to parse results. Yet since there's no output schema, this is a minor gap, and the description is otherwise quite thorough.
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 coverage is 100%, so parameters are fully documented there. The description adds minimal extra meaning, but it does mention 'login walls' suggesting auth_state use, and 'scroll batches' aligns with max_tandas. Since schema already covers the parameters well, a baseline of 3 is appropriate; the description doesn't need to repeat what's already clear.
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 audits infinite-scroll feeds for accessibility, listing specific criteria (2.4.3, 4.1.3, 2.2.2) and the ARIA APG Feed pattern. It explicitly distinguishes itself from 'a11y_audit_url/dom' for general page audits, which differentiates it from sibling tools.
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 states 'For paginated feeds only; general page audit is a11y_audit_url/dom,' giving clear when-to-use guidance and naming the alternative. It also warns about login walls and non-standard markup, and notes the requirement for local Playwright, which helps the agent decide if the tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_snapshota11y-toolkit: A11y snapshot + tab orderARead-onlyIdempotent
Accessibility snapshot of a URL: interactive elements (tag, role, accessible name, href) in DOM order, the REAL tab focus order, and when Playwright ≥1.49 is available the computed ACCESSIBILITY TREE (aria snapshot — what a screen reader announces). Save it before a deploy and compare after with a11y_diff. Requires local Playwright. — Capture half of the watch loop; compare with a11y_diff (or a11y_diff_urls for two live URLs).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Page URL to snapshot (http/https or file://) | |
| auth_state | No | Path to a Playwright storage_state JSON (exported session) to snapshot behind login |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive behavior. The description adds valuable behavioral context that annotations cannot convey: it requires local Playwright, behavior varies by Playwright version (≥1.49), and it reports the accessibility tree as what a screen reader announces. No contradiction with annotations.
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 informative and mostly well-structured, with the key output details front-loaded. It is slightly redundant by mentioning comparison with a11y_diff twice ('Save it before a deploy and compare after with a11y_diff' and 'compare with a11y_diff'), but it remains efficient and readable.
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?
For a tool without an output schema, the description explains the output contents, the prerequisite environment, the version-dependent behavior, and the sibling tools to use for comparison. An agent has enough context to invoke it correctly and to route the result into the intended diff workflow.
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 parameters url and auth_state are already documented in the schema. The description adds context about the overall tool behavior and prerequisites, but does not materially deepen the meaning of either parameter beyond what the schema provides. 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 uses a specific verb and resource: it captures an accessibility snapshot of a URL and enumerates exactly what it contains (interactive elements in DOM order, real tab focus order, and the computed ARIA snapshot when available). It is clearly distinct from sibling tools by emphasizing the snapshot-and-compare workflow rather than auditing or fixing.
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?
It gives explicit workflow guidance: 'Save it before a deploy and compare after with a11y_diff' and 'Capture half of the watch loop'. This tells the agent when in a process to call it. It does not enumerate exclusions versus every sibling tool, but the comparison and prerequisite guidance are strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_sr_transcripta11y-toolkit: Screen reader transcriptARead-onlyIdempotent
Screen reader TRANSCRIPT: what a blind user HEARS on this page. Walks the accessibility tree linearly and returns the announcement text with roles, names and states — the linearized reading experience, as prose an agent can READ to understand the page from a blind user's perspective. — Read-only: for structure use a11y_snapshot, for keyboard traps use a11y_keyboard. Requires Playwright.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Page URL to transcribe | |
| lang | No | Output language (en default) | |
| timeout | No | Page load timeout (45 default) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint=false), the description adds valuable behavior: it 'walks the accessibility tree linearly' and explains the output as 'announcement text with roles, names and states'. It also discloses the Playwright dependency, which is not present in structured data. No contradiction with annotations.
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 front-loaded with the core purpose ('what a blind user HEARS') and then provides distinctions and requirements. It is fairly concise, though the phrase 'the linearized reading experience, as prose an agent can READ' is slightly redundant with the earlier 'Walks the accessibility tree linearly and returns the announcement text with roles, names and states'.
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?
With no output schema, the description compensates by describing the return value as announcement text with roles/names/states as prose. It includes prerequisite Playwright and differentiates from siblings. Missing edge cases or error behavior, but these are minor for a read-only transcription 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?
The input schema has 100% coverage with each parameter (url, lang, timeout) already described. The description does not add additional parameter-level meaning, so the baseline of 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 clearly states the tool's function: it walks the accessibility tree linearly and returns announcement text with roles, names, and states. It also differentiates from siblings by naming a11y_snapshot for structure and a11y_keyboard for keyboard traps, so an agent can distinguish it from other a11y tools.
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?
Explicit guidance is given: 'for structure use a11y_snapshot, for keyboard traps use a11y_keyboard' directly steers the agent to alternatives, and the 'Read-only' label indicates when to use this tool. The requirement 'Requires Playwright' also serves as a practical precondition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
a11y_suggest_colora11y-toolkit: Nearest passing colorARead-onlyIdempotent
Nearest opaque color (RGB distance) to fg that reaches the target ratio against bg (4.5 default). Returns the color, its ratio and whether it lightens or darkens. — The fixer companion to a11y_contrast_pair failures.
| Name | Required | Description | Default |
|---|---|---|---|
| bg | Yes | The background it must pass against | |
| fg | Yes | The failing foreground color to fix | |
| target | No | Ratio to reach: 4.5 normal text, 3.0 large text/UI, 7.0 AAA (default 4.5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description goes beyond those by explaining the algorithm (opaque, RGB distance), the default target ratio of 4.5, and what the function returns (color, ratio, lightens/darkens). There is no contradiction with annotations.
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 two compact sentences that front-load the core algorithm, then state the return value shape and the relationship to a11y_contrast_pair. No filler or redundant words; every clause earns its place.
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?
For a read-only, 3-parameter tool with 100% schema coverage and strong annotations, the description adequately explains the behavior and return values despite the lack of an output schema. It does not specify the accepted color-string format or edge cases (e.g., impossible targets), which is a minor gap but not a major one.
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?
Input schema coverage is 100%, with useful descriptions for fg, bg, and target including valid ratio values. The description adds algorithmic context ('nearest opaque', 'RGB distance') but mostly repeats the default 4.5 already present in the schema. It does not add input format or extra parameter meaning, so 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 clearly states a specific operation: find the nearest opaque color to fg that reaches the target ratio against bg. It also names the return type (color, ratio, lighten/darken) and explicitly frames itself as the fixer companion to a11y_contrast_pair, distinguishing it from the sibling tools.
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?
It explicitly tells the agent when to use this tool: as the fixer companion to a11y_contrast_pair failures. It does not explicitly list when not to use it or compare against a11y_autofix, so it is clear but lacks exclusion guidance.
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.
19 tool updates
v4.0.0- Changed
a11y_audit_dom4 fields changed- added
Input schema / browserAdded value: +{ + "description": "Browser engine (auto = detect the first available)", + "enum": [ + "auto", + "chromium", + "firefox", + "webkit", + "chrome", + "msedge" + ], + "type": "string" +} - added
Input schema / properties / auth_stateAdded value: +{ + "description": "Path to a Playwright storage_state JSON (exported session) to audit behind login — local file, never uploaded", + "type": "string" +} - added
Input schema / properties / lang / descriptionAdded value: +"Output language for findings and remediation (default en)" - added
Input schema / properties / url / descriptionAdded value: +"Page URL to load in Chromium (http/https or file:// for local fixtures)"
- Changed
a11y_badge1 field changed- added
Input schema / properties / lang / descriptionAdded value: +"Badge language (default en)"
- Changed
a11y_contrast_image5 fields changed- added
Input schema / properties / lang / descriptionAdded value: +"Output language (default en)" - added
Input schema / properties / path / descriptionAdded value: +"Local path to the screenshot/image the text sits on (PNG/JPG/PPM)" - added
Input schema / properties / region / descriptionAdded value: +"Text bounding box as \"x,y,width,height\" in pixels (strongly recommended: defines what to sample)" - added
Input schema / properties / sample / descriptionAdded value: +"Pixel step: 4 samples every 4px (auto-raised for huge regions)" - added
Input schema / properties / text_color / descriptionAdded value: +"The text color as rendered over the image (must be opaque)"
- Changed
a11y_contrast_pair2 fields changed- added
Input schema / properties / bg / descriptionAdded value: +"Background color: same formats; alpha composites over white" - added
Input schema / properties / fg / descriptionAdded value: +"Foreground/text color: #hex, rgb(), hsl() or a CSS color name; alpha composites over bg"
- Changed
a11y_criterion1 field changed- added
Input schema / properties / lang / descriptionAdded value: +"Explanation language (default en)"
- Changed
a11y_diff_urls2 fields changed- added
Input schema / properties / url_a / descriptionAdded value: +"First URL (usually staging)" - added
Input schema / properties / url_b / descriptionAdded value: +"Second URL (usually production)"
- Added
a11y_disprove - Changed
a11y_evidence1 field changed- added
Input schema / properties / verificadosAdded value: +{ + "description": "Criterion codes an agent/human verified against this sample (manual checklist protocol) — they become agent-verified in the matrix; automated-fail stays fail", + "items": { + "type": "string" + }, + "type": "array" +}
- Added
a11y_forms - Changed
a11y_generate_declaration12 fields changed- added
Input schema / properties / contenido_no_accesible / descriptionAdded value: +"Non-accessible content list: one string per item, ideally criterion + reason + alternative" - added
Input schema / properties / disponibilidad_alternativa / descriptionAdded value: +"Where to get the content in an alternative accessible format" - added
Input schema / properties / entidad / descriptionAdded value: +"Legal entity name as it should appear in the statement (company, body…)" - added
Input schema / properties / estado / descriptionAdded value: +"Compliance state: plena | parcial | no_conforme (parcial is the honest default when findings exist)" - added
Input schema / properties / fecha_evaluacion / descriptionAdded value: +"ISO date of the last evaluation (YYYY-MM-DD)" - added
Input schema / properties / fecha_revision / descriptionAdded value: +"ISO date of the next scheduled review" - added
Input schema / properties / feedback / descriptionAdded value: +"Contact channel for accessibility feedback (email or URL)" - added
Input schema / properties / lang / descriptionAdded value: +"Statement language (default en; es uses the Spanish legal wording)" - added
Input schema / properties / marco / descriptionAdded value: +"Legal framework: rd1112 (Spanish public sector, art. 10) or eaa (European Accessibility Act / private sector)" - added
Input schema / properties / metodo / descriptionAdded value: +"How conformance was evaluated (e.g. \"self-evaluation: a11y-toolkit screening + manual review\")" - added
Input schema / properties / reclamacion / descriptionAdded value: +"Claim/complaint procedure URL or address (legally required in several jurisdictions)" - added
Input schema / properties / url / descriptionAdded value: +"Website URL the statement covers"
- Added
a11y_hover - Added
a11y_html_validate - Changed
a11y_keyboard4 fields changed- added
Input schema / browserAdded value: +{ + "description": "Browser engine (auto = detect the first available)", + "enum": [ + "auto", + "chromium", + "firefox", + "webkit", + "chrome", + "msedge" + ], + "type": "string" +} - added
Input schema / properties / auth_stateAdded value: +{ + "description": "Path to a Playwright storage_state JSON (exported session) to Tab-walk behind login", + "type": "string" +} - added
Input schema / properties / lang / descriptionAdded value: +"Output language (default en)" - added
Input schema / properties / url / descriptionAdded value: +"Page URL to Tab-walk (http/https or file://)"
- Added
a11y_ledger - Changed
a11y_reflow5 fields changed- added
Input schema / browserAdded value: +{ + "description": "Browser engine (auto = detect the first available)", + "enum": [ + "auto", + "chromium", + "firefox", + "webkit", + "chrome", + "msedge" + ], + "type": "string" +} - added
Input schema / properties / auth_stateAdded value: +{ + "description": "Path to a Playwright storage_state JSON (exported session) to test behind login", + "type": "string" +} - added
Input schema / properties / lang / descriptionAdded value: +"Output language (default en)" - added
Input schema / properties / timeout / descriptionAdded value: +"Page load timeout in seconds (default 45)" - added
Input schema / properties / url / descriptionAdded value: +"Page URL to test at 320px (http/https or file://)"
- Changed
a11y_scroll4 fields changed- added
Input schema / browserAdded value: +{ + "description": "Browser engine (auto = detect the first available)", + "enum": [ + "auto", + "chromium", + "firefox", + "webkit", + "chrome", + "msedge" + ], + "type": "string" +} - added
Input schema / properties / auth_stateAdded value: +{ + "description": "Path to a Playwright storage_state JSON (exported session) to audit an authenticated feed", + "type": "string" +} - added
Input schema / properties / lang / descriptionAdded value: +"Output language (default en)" - added
Input schema / properties / url / descriptionAdded value: +"Feed URL to audit (best on feeds you own or can authenticate into)"
- Changed
a11y_snapshot2 fields changed- added
Input schema / properties / auth_stateAdded value: +{ + "description": "Path to a Playwright storage_state JSON (exported session) to snapshot behind login", + "type": "string" +} - added
Input schema / properties / url / descriptionAdded value: +"Page URL to snapshot (http/https or file://)"
- Added
a11y_sr_transcript - Changed
a11y_suggest_color3 fields changed- added
Input schema / properties / bg / descriptionAdded value: +"The background it must pass against" - added
Input schema / properties / fg / descriptionAdded value: +"The failing foreground color to fix" - added
Input schema / properties / target / descriptionAdded value: +"Ratio to reach: 4.5 normal text, 3.0 large text/UI, 7.0 AAA (default 4.5)"
4 tool updates
v3.12.0- Changed
a11y_aria_live_snippet1 field changed- changed
Input schema / properties / lang / descriptionPrevious value: -"monitor panel language (es default)"New value: +"monitor panel language (en default)"
- Changed
a11y_audit_url1 field changed- changed
Input schema / properties / lang / descriptionPrevious value: -"output language (es default)"New value: +"output language (en default)"
- Changed
a11y_contrast_pair1 field changed- changed
Input schema / properties / lang / descriptionPrevious value: -"output language (es default)"New value: +"output language (en default)"
- Added
a11y_evidence
12 tool updates
v3.3.0- Changed
a11y_aria_live_snippet1 field changed- changed
Input schema / properties / lang / descriptionPrevious value: -"Idioma del panel del monitor (es por defecto)"New value: +"monitor panel language (es default)"
- Added
a11y_audit_dom - Changed
a11y_audit_url6 fields changed- added
Input schema / properties / htmlAdded value: +{ + "description": "raw HTML to audit directly (overrides url)", + "type": "string" +} - added
Input schema / properties / lang / descriptionAdded value: +"output language (es default)" - added
Input schema / properties / pagesAdded value: +{ + "description": "light same-domain crawl: audit up to N pages, aggregated by score and recurring signals (default 1, max 20)", + "type": "integer" +} - added
Input schema / properties / timeoutAdded value: +{ + "description": "fetch timeout seconds (30 default)", + "type": "number" +} - added
Input schema / properties / url / descriptionAdded value: +"URL to fetch and audit" - removed
Input schema / requiredRemoved value: -[ - "url" -]
- Added
a11y_autofix - Added
a11y_badge - Changed
a11y_contrast_pair1 field changed- changed
Input schema / properties / lang / descriptionPrevious value: -"Idioma de la salida (es por defecto)"New value: +"output language (es default)"
- Added
a11y_criterion - Changed
a11y_diff2 fields changed- changed
Input schema / properties / a / descriptionPrevious value: -"Snapshot ANTES (JSON inline o ruta)"New value: +"BEFORE snapshot (inline JSON or path)" - changed
Input schema / properties / b / descriptionPrevious value: -"Snapshot DESPUÉS (JSON inline o ruta)"New value: +"AFTER snapshot (inline JSON or path)"
- Changed
a11y_generate_declaration2 fields changed- removed
Input schema / properties / lang / descriptionRemoved value: -"Idioma de la declaración (es por defecto; en = Directive (EU) 2016/2102 / EAA wording)" - changed
Input schema / properties / output_path / descriptionPrevious value: -"Guarda el HTML en esta ruta (opcional)"New value: +"save the HTML here (optional)"
- Added
a11y_keyboard - Added
a11y_reflow - Added
a11y_scroll
9 tool updates
v2.3.0- First observed
a11y_aria_live_snippet - First observed
a11y_audit_url - First observed
a11y_contrast_image - First observed
a11y_contrast_pair - First observed
a11y_diff - First observed
a11y_diff_urls - First observed
a11y_generate_declaration - First observed
a11y_snapshot - First observed
a11y_suggest_color
TDQS
Scored across 23 tools
Most tools target clearly distinct concerns (audit, contrast, keyboard, scroll, snapshots, evidence, badges), and the descriptions explicitly disambiguate similar tools like a11y_audit_url vs a11y_audit_dom. However, a11y_diff and a11y_diff_urls are conceptually near-duplicates, and the two audit modes still share an overlapping purpose.
All tools share the snake_case a11y_ prefix, which provides a consistent brand, but the rest of the names mix verb-first (audit_url, suggest_color, generate_declaration), object-verb (html_validate), and bare nouns (badge, criterion, evidence, ledger). There is no consistent verb_noun pattern across the set.
23 tools is on the heavy side and exceeds the typical well-scoped range, though the broad WCAG 2.2 auditing domain justifies much of the specialization. The count feels large but not chaotic, so it lands at borderline rather than excessive.
The toolkit covers a full accessibility workflow: static and rendered audits, specialized checks (contrast, reflow, keyboard traps, scroll, hover, forms), safe fixes, regression snapshots, evidence packs, legal statements, badges, and persistent ledger tracking. There are no obvious dead ends, and the evidence/disprove/ledger tools close the loop from audit to remediation tracking.
Maintenance
Related MCP Connectors
Accessibility compliance for AI coding tools. WCAG 2.2 reviews with shared evidence.
Scan URLs for WCAG 2.1 violations, generate AI fixes, and produce VPAT 2.5 compliance reports.
Accessibility pre-checks (WCAG/BFSG) in a real browser + statement drafts. Pay per call.
- mcpOAuthcom.screenshotink
Screenshot, diff, audit and sitemap-capture any web page — 5 MCP tools for AI agents.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables AI agents to perform comprehensive accessibility audits on websites using Playwright and axe-core against WCAG standards. Provides detailed compliance reports with violation summaries and remediation guidance across multiple browsers.3-
- AlicenseAqualityCmaintenanceProvides conversational, actionable accessibility testing for AI agents, including auditing, prioritization, and code-level fixes.222 npmMIT
- AlicenseAqualityDmaintenanceEnables AI agents to perform comprehensive web accessibility checks (WCAG 2.1/2.2) including color contrast analysis, ARIA validation, and full accessibility report generation without requiring any API key.8MIT
- AlicenseNot gradedqualityDmaintenanceProvides AI agents with web accessibility analysis tools via MCP, enabling checks for alt text, heading hierarchy, color contrast, ARIA validation, and form accessibility.30 npmMIT