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 分