Featured

Deploy OpenClaw in 60 seconds — 20% off logoDeploy OpenClaw in 60 seconds — 20% off

Launch OpenClaw on Hostinger in about 60 seconds and keep your agent live 24/7. Our referral link gives you 20% off, no coupon code needed.

Launch on Hostinger
Run your Hermes agent on Hostinger, fully managed logoRun your Hermes agent on Hostinger, fully managed

Launch Hermes on Hostinger in one click, fully managed, no VPS knowledge needed. Use code ZACAARON10 for 10% off.

Launch on Hostinger
Crawl and scrape any site into clean data, 10% off logoCrawl and scrape any site into clean data, 10% off

Firecrawl crawls and scrapes any site into clean markdown for your agent. Get 1,000 free credits, and new users get 10% off their first purchase.

Try Firecrawl free
Your own AI agent, running 24/7 with QwikClaw logoYour own AI agent, running 24/7 with QwikClaw

QwikClaw sets up and runs an always-on OpenClaw agent for you. One click, no config files, no server setup.

Deploy now
One API to scrape, enrich, and extract the internet. logoOne API to scrape, enrich, and extract the internet.

Context.dev gives your agents a single API to scrape, enrich, and extract live web data — no proxies, no parsers, no maintenance.

Start building free
SetupClaw: done-for-you OpenClaw for founders & exec teams logoSetupClaw: done-for-you OpenClaw for founders & exec teams

White-glove OpenClaw for founders and exec teams (4–50+ employees): we install, harden, integrate your tools, and maintain it — secured from day one.

Get it set up for you
SEO data APIs for your agent, $1 free credit logoSEO data APIs for your agent, $1 free credit

DataForSEO gives your agent live access to SERP results, keyword data, backlinks, and on-page SEO data through one API. New accounts get a $1 credit, good for up to 20,000 keyword or backlink lookups.

Try DataForSEO free
Reach 47,000+ AI builders

A flat monthly placement in front of developers actively installing AI tools. No lock-in, cancel anytime.

Advertise here

Works with

Claude CodeClaude DesktopCursorVS CodeClineCodex CLIOpenClaw+ any MCP client

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

Enables AI-first accessibility testing by investigating pages, explaining findings, and applying fixes via natural language, integrated with Playwright tests and local or cloud AI models.

README.md

Accessibility Evidence Engine (AEE)

![CI](https://github.com/Elizabeth1979/accessibility-engine/actions/workflows/ci.yml)

AI-first accessibility testing that augments your existing Playwright tests.

axe tells you the alt attribute exists. AEE tells you whether the alt text is _right_ — and writes you a better one.

Static scanners (axe-core) answer "is the attribute present?" and top out around 30–50% of real issues, because the defects that matter — a meaningless alt, an icon button named "button", a heading that doesn't describe its section, meaning carried by color alone — are not statically detectable. AEE puts an AI judgment layer on top of that deterministic floor and asks "is it correct in this context?", returning a verdict, a grounded reason, a suggested fix, and a reliability tier.

AEE is agent-native: you operate it by chat through an MCP server (run investigations, query the evidence, apply fixes), declare a page's intent in plain language to sharpen judgments, chat with the report locally, and let it open remediation PRs.

Status: implemented end to end and verified on a local model — no API key. Coverage spans Tier 1 (naming), Tier 2 vision (color-alone, focus-visible, text-in-images), Tier 3 dynamic (focus, live regions, keyboard), the Tier 4 axe-core floor, and Tier 5 advisory (never a certified PASS). The agent surfaces (MCP, triage) and remediation (fix) are real. See docs/ROADMAP.md for current state and docs/PLAN.md for the architecture.

How it works

Playwright test → observers capture EVIDENCE → AI judges quality (evidence only) → REPORT + fixes
                                                         ↑
                              AI-first surfaces: MCP server · triage UI · auto-fix/PR

The core invariant: AI sees captured evidence only, never the live page — so judgments are grounded and reproducible, and the rule UNKNOWN never becomes PASS holds.

Packages

| Package | Role | | --- | --- | | @aee/core | Contracts, zod schemas, evidence/judge/report types (depends on zod only) | | @aee/observers | Evidence grounding: DOM, a11y tree, screenshots, images, styles, network, SR | | @aee/ai | AI judgment + conversational explain() + fix drafting (evidence only) | | @aee/judges | Per-concern judges = axe-core floor + AI judgment | | @aee/playwright | Driver + test fixture + checkpoint() | | @aee/reporter | JSON report + terminal summary | | @aee/mcp | MCP server — the agent-native surface | | @aee/triage | Local "chat with your report" UI | | @aee/fix | Apply suggested fixes and open PRs |

Quickstart — drop-in Playwright fixture

import { test, expect } from '@aee/playwright'; // drop-in for '@playwright/test'

test('checkout flow', async ({ page, aee }) => {
  await page.goto('/checkout');
  await aee.checkpoint('checkout-loaded', {
    intent: { purpose: 'Checkout', primaryAction: 'Pay', notes: 'cart icon opens the cart drawer' },
  });
  // ...your existing test, unchanged...
});

Talk to it — the MCP server

AEE is agent-native: a coding agent (Claude Code, Cursor, …) connects to the MCP server and investigates pages by chat. Build, then run it over stdio:

pnpm build
node packages/mcp/dist/bin.js      # or `aee-mcp` once the package is linked

Register it like any stdio MCP server — local model, no API key:

{ "mcpServers": { "aee": {
  "command": "node",
  "args": ["/abs/path/accessibility-engine/packages/mcp/dist/bin.js"],
  "env": { "AEE_LLM_PROVIDER": "local" }
} } }

Then investigate a page (→ a graded report with fixes), explain a finding from evidence, suggest_fix (→ targeted FixPlans), and apply_fix (→ patches the fixes into source). Full reference: docs/mcp-tools.md.

Development

pnpm install
pnpm build       # tsc -b across all packages
pnpm typecheck
pnpm test        # node --test over built dist/
pnpm gen:schemas # regenerate JSON Schema in /schemas from the zod source
pnpm demo        # investigate a sample page and print the graded report

Requires Node ≥ 22 and pnpm. pnpm demo needs Chromium (pnpm exec playwright install chromium); set AEE_LLM_PROVIDER=local (with a local server running) to judge for real — otherwise AI verdicts are UNKNOWN and the axe floor still reports.

Model backends (no API key required)

The AI layer is provider-agnostic: it depends on a one-method JudgmentModel seam, not on any SDK. Pick a backend with createAIClient({ provider }) or the AEE_LLM_PROVIDER env var.

| Provider | Backend | Needs | | --- | --- | --- | | local | A local model over the OpenAI-compatible API (Ollama, LM Studio, llama.cpp, vLLM, …) | a running local server — no key | | claude | Anthropic Claude (claude-opus-4-8 by default) | ANTHROPIC_API_KEY | | stub | Always-UNKNOWN (the default when no key is set) | nothing |

Run the engine against a local model — no key, no cloud:

# Ollama (default base URL http://localhost:11434/v1)
export AEE_LLM_PROVIDER=local
export AEE_LLM_MODEL=gemma4:e4b      # any chat model you have pulled
pnpm test                            # the local live tests now exercise real judging

Point AEE_LLM_BASE_URL at LM Studio (http://localhost:1234/v1), llama.cpp, vLLM, or any OpenAI-compatible endpoint. A local judgment that can't be reached or parsed degrades to UNKNOWN — never a guessed PASS.

License

MIT

See related servers & alternatives →

Related MCP servers

Browse all →

Related guides

Hand-picked reading to help you choose and use Browser & Scraping servers.