Aether WCAG Scanner

io.github.allchemylabs由 GitHub 账号 allchemylabs 发布v1.0.8更新于 Oct 30, 2026

WCAG 2.1 AA accessibility scanner (Playwright + axe-core) with grounded, browser-verified fixes.

概览

AI 生成的概览

在真实浏览器中扫描网页的 WCAG 2.1 AA 无障碍违规,并返回具体、经浏览器验证的修复建议。

可以做什么
  • 在真实浏览器中扫描 URL 或单页应用的多条路由,按严重程度分组返回违规项及修复建议
  • 针对单个违规获取修复方案或规则级说明,含 WCAG 成功标准和技巧示例
  • 无需在线 URL 或浏览器即可检查 HTML 片段的无障碍问题
  • 通过重新扫描页面或对比原始与修复后 HTML 来验证修复,报告已清除项、回归问题和合规变化
  • 按发现 ID 对已返回的修复提交反馈
适用场景
当编码助手需要回答某个页面或组件的无障碍或 WCAG 合规问题,并希望基于渲染后的实测结果而非原始 HTML 推断时适用。适合在可修改的站点或组件上执行扫描、修复、验证的循环,也适合快速检查粘贴的标记。
运行要求
以 npm 包形式通过 stdio 在本地运行,需要 Node.js 20 或更高版本;首次扫描会下载 Playwright 的 Chromium(约 500 MB)。可选的 ALLCHEMY_API_KEY 用于启用云端修复;不设置时扫描器完全离线运行并提供模板修复。离线使用无需账号。
安装前请注意
可选的 ALLCHEMY_API_KEY 属于机密信息;设置后修复请求会发送到托管引擎,页面内容会离开本机。工具本身不会修改文件,但随附的技能和钩子可以就地编辑源码,并在编辑后报告启发式检查结果。自动化扫描只能覆盖部分无障碍障碍,不能证明法律合规。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Aether WCAG Scanner,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Aether WCAG Scanner

An MCP server for Claude Code, Cursor, Codex and other coding agents that finds WCAG 2.1 AA accessibility violations and returns ready-to-apply fixes — not just a list of problems.

It drives a real browser (Playwright + axe-core) across desktop, tablet, and mobile viewports, then pairs each violation with a concrete fix: corrected HTML, the relevant WCAG success criteria, and technique code examples.

It works free without a key. For higher quality, contextual fixes, get a beta key at beta.allchemylabs.ai (sign in with GitHub).


Why it's different

An AI coding agent working from markup alone has to infer what a page does. Aether runs the page in a real browser, measures it with axe-core, and grounds every suggested fix in the WCAG spec, so the agent is working from measurements rather than inference.

Coding agent aloneAether, offlineAether, with API key
How it looks at the pageReads the HTML it is givenRenders the page in Chromium at desktop, tablet and mobile widths and runs axe-coreSame
What it can measureStructure visible in the markupWhat axe measures on the rendered page: contrast, accessible names, ARIA usage, focusable regions, landmarksSame
Fix suggestionsFrom the model's general knowledgeDeterministic templates for the common rulesTemplates first, then WCAG-corpus examples, then a model; every cited technique passes a grounding check
How fixes are checkedNot checked unless you set that upaxe re-run on the fixed element; reports what cleared and what regressedSame
What each fix citesWhatever the model recallsThe axe rule and its severityThe WCAG success criteria and techniques, with rejected candidates shown
NetworkDepends on the agentNone; runs entirely on your machineFix requests go to the hosted engine; falls back to offline templates when it is unreachable

Install

/plugin marketplace add https://github.com/allchemylabs/claude-plugins.git/plugin install aether-wcag-scanner@allchemylabs

Once the official Claude Code marketplace listing is live, you can also install it directly from there.

Installing with /plugin install inside Claude Code prompts for your Allchemy Labs API key; paste the key you got from beta.allchemylabs.ai. Installing from the terminal (claude plugin install …), or letting Claude run the install for you, does not prompt, so set the key afterwards with the command below. Run the same command to change the key later:

/plugin configure aether-wcag-scanner@allchemylabs

The first start installs the plugin's dependencies (about a minute) and the first scan downloads Chromium for Playwright. If /mcp shows the server as not connected right after install, wait a moment and run /reload-plugins.

Running without a key

The plugin asks for a key at install because the cloud fixes need one. The scanner itself runs locally and still works without a key (for example after a terminal install, or via npx): you get local template fixes for every violation. A beta key adds higher quality, contextual fixes from the hosted insights engine; get one at beta.allchemylabs.ai (sign in with GitHub). Set it via the prompt above, or put ALLCHEMY_API_KEY=<key> in the .env of the project you are scanning.


Use it outside Claude Code (any MCP client)

The same server is published to npm and the MCP Registry as @allchemylabs/aether-wcag-scanner. Any MCP client that speaks stdio can run it:

json
{  "mcpServers": {    "aether-wcag-scanner": {      "command": "npx",      "args": ["-y", "@allchemylabs/aether-wcag-scanner"],      "env": { "ALLCHEMY_API_KEY": "<your beta key>" }    }  }}

The first scan downloads Playwright's Chromium once (about 500 MB on disk: the browser plus its headless shell). Without ALLCHEMY_API_KEY the scanner still runs fully offline and returns template fixes.

Claude Code gets the /wcag-scan skill, which drives the scan → review → fix → verify loop. Other agents only see the tool descriptions and the instructions the server sends at connect time, so for the same behaviour copy AGENTS.md into your project (Codex reads it natively; Cursor and Windsurf accept it as a rules file). Without it an agent may fetch the page HTML and guess instead of running the browser scan.

The 5 tools

ToolWhat it does
aether_scan_and_fixRecommended. Scan a URL — or a single-page app across routes via the spa block — and return violations with fixes, each verified on the real browser, in one call. Set maxFixes: 0 for a fast scan-only pass.
aether_get_fixGet a fix for one specific violation (verified on the real browser). Omit html to instead get a rule-level explanation — WCAG success criteria and technique examples.
aether_verify_fixDeterministically verify a fix with real Playwright + axe — re-scan a URL or diff original vs fixed HTML. Reports whether the target cleared, any new regressions, and the net compliance delta.
aether_check_htmlAnalyze an HTML snippet for issues — no live URL or browser needed.
aether_submit_feedbackRate a fix (useful / not useful) so the guidance engine keeps improving; your correction helps seed better fixes.

Just ask Claude naturally, e.g. "check localhost:3000 for accessibility issues and fix them" — it will pick the right tool.

The /wcag-scan skill

Run /wcag-scan <url> for a guided workflow: scan → review violations → apply fixes → re-scan to verify → summarize. The skill orchestrates the tools above and edits your files in place.

Hooks

The plugin adds two hooks to Claude Code:

  • Session start: checks that the plugin's dependencies and Chromium are installed, and installs them on the first run.
  • After each edit: when Claude edits an HTML, JSX, TSX, Vue or Svelte file, a quick heuristic check (no browser) reports possible accessibility issues to Claude. It never blocks an edit, and its findings can be false positives.

To turn the post-edit check off in every project, run /plugin configure aether-wcag-scanner@allchemylabs and set Post-edit accessibility check to false. To turn it off (or back on) for one project, add this to that project's .claude/settings.local.json:

json
{ "env": { "AETHER_POSTEDIT_HOOK": "0" } }

Use "1" to turn it back on for that project. Restart Claude Code after either change.


Scanning single-page apps

Pass a spa block to aether_scan_and_fix instead of url:

json
{ "spa": { "entryUrl": "http://localhost:4200", "framework": "angular", "maxRoutes": 10 } }
  • entryUrl — where the app boots. Routes are discovered by crawling client-side links unless you list them in routes: [{ "path": "/settings", "name": "Settings" }].
  • framework — angular, react, vue, or omit to auto-detect.
  • maxRoutes — cap on discovered routes.

Navigation is client-side (the browser context and app state are kept between routes), and readiness is decided by a layered stability cascade — DOM quiet, framework hooks such as Angular testability, pending-request drain — never by Playwright's networkidle, which deadlocks on apps with long-polling or websockets. A config that sets networkIdle is rejected for that reason.

Requirements

  • Node.js >= 20
  • Chromium (installed automatically on first run)

Disclaimer

Aether is an accessibility analysis and guidance tool. Using the platform does not, by itself, make your website, application, or digital service conformant with WCAG, the ADA (including Title II), the European Accessibility Act, Section 508, EN 301 549, or any other accessibility law or standard.

Automated scans detect only a subset of accessibility barriers. A "zero issues" result means the scanner did not flag anything in its detection range — not that the property is legally compliant.

You remain responsible for:

  • reviewing findings with qualified people
  • fixing issues in the underlying code and content
  • conducting or commissioning manual testing and audits as needed
  • maintaining accessibility as the product changes
  • obtaining legal advice for your specific obligations

Aether does not provide legal advice and does not replace an accessibility audit or a VPAT/ACR prepared by a qualified auditor.

License

MIT for the client (this plugin). The hosted insights engine and related Allchemy Labs services are proprietary — see LICENSE and NOTICE.

来源:README.md,提交 8d890a3

工具

5

aether_scan_and_fix

START HERE for any accessibility / a11y / WCAG question about a URL. Scans the page in a real browser (Playwright + axe-core, desktop/tablet/mobile) for WCAG 2.1 AA violations AND generates grounded fixes in one call; do not fetch and read the page HTML yourself instead. Pass `url` for a page or the `spa` block for a multi-route single-page app. Returns violations grouped by severity, each with fixHtml (a SUGGESTION — nothing is modified), explanation, WCAG techniques, confidence tier, and a measured `verification` block (verified / targetCleared / regressions / newViolations / complianceDelta). Defaults generate fixes for the top 10 violations; set maxFixes:0 only if the user explicitly wants a scan without fixes.

输入参数spaurlmaxFixesviewportminSeverityverifyFixes

aether_get_fix

Get a RAG-powered fix OR explanation for a WCAG violation. Pass `html` (the failing element) to get a concrete fixHtml plus a measured verification. Omit `html` to get a rule-level explanation (WCAG success criteria, technique code examples, failure patterns, and fix guidance). Requires ALLCHEMY_API_KEY for RAG output; falls back to templates without it.

输入参数urlhtmlruleId必填verifyparentHtmlsiblingHtmlchildrenHtmlfailureSummary

aether_check_html

Analyze an HTML snippet for WCAG accessibility issues without needing a live URL or browser. Uses static heuristic checks and optionally enriches results with RAG-powered fixes. Use this when a developer pastes HTML or asks about a component's accessibility.

输入参数html必填context

aether_verify_fix

Deterministically verify a WCAG fix with the real Playwright + axe-core engine. URL mode re-scans a live page; snippet mode diffs original vs fixed HTML before deploy. Returns MEASURED facts: verified, targetCleared, regressions (what the fix took away from the element: a lost ARIA state, focus, name or interactive role; snippet mode), newViolations, resolvedViolations and complianceDelta. `verified` (targetCleared with no regressions) is the authoritative "did the fix work?" signal.

输入参数urlruleId必填baselinefixedHtmloriginalHtml

aether_submit_feedback

Submit developer feedback on a previously returned WCAG fix/artifact, keyed by its finding_id. Records a rating plus an optional reason_code and the code the developer actually shipped, so the fix pipeline can learn from misses. Requires ALLCHEMY_API_KEY.

输入参数rating必填scanIdratedByfreeTextversionsfindingId必填reasonCodedeveloperCorrection

版本历史

6
  1. v1.0.8最新Oct 21, 2026
  2. v1.0.6Oct 6, 2026
  3. v1.0.5Oct 2, 2026
  4. v1.0.3Oct 1, 2026
  5. v1.0.2Sep 23, 2026
  6. v1.0.0Sep 23, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分