analyze_urlLABSCO SUMMARY
Not whether the ARIA is valid — how far away the button is.
The output is a keystroke count plus the path that produces it, per target, attached to a selector, the penalties that raised the score and candidate fixes. A saved baseline and diff_results then make a fix verifiable rather than asserted. It is an announcement simulator calibrated against the W3C ARIA-AT assertions, which the project is explicit about — critical journeys still want a real screen reader.
What it is
A screen-reader navigation-cost analyzer with an MCP server built in. Conformance scanners answer whether the ARIA is correct; this answers a different question — how expensive is it for someone on NVDA, JAWS or VoiceOver to reach the checkout button. It drives a real browser through Playwright, builds a navigation graph from landmarks, headings and linear Tab, and scores every interactive target.
What you get
- A scored analysis of one page, SARIF by default, with optional exploration of menus, dialogs, tabs and disclosures and opt-in keyboard and form probes —
analyze_url - The step-by-step path to a single target, with the announcements a screen reader would make along the way —
trace_path - Predicted paths checked against
@guidepup/virtual-screen-reader, returning reachability and mean accuracy per strategy —validate_url - Site-level triage across several routes, with aggregated stats and navigation costs that repeat from page to page —
analyze_pages - Before-and-after comparison of two runs: improvements, regressions and severity changes —
diff_results - Ranked fix suggestions by impact, and the AT profiles available to run under —
suggest_remediations,list_profiles - Sign-in state saved once so protected pages can be analyzed —
save_auth - Observed calibration datasets run against saved analysis JSON, returning structured scoring signals —
calibration_report
Requirements
Node.js 20 or later and npm install tactual. Playwright and the MCP SDK ship as runtime dependencies, so the installed tactual-mcp binary starts the stdio server with nothing else to install; the README's client entry resolves tactual-mcp through npm, which does not have that name. tactual-mcp --http serves http://127.0.0.1:8787/mcp instead, which the project asks you to put behind an authenticated TLS proxy. The URL-taking MCP tools accept only http: and https:, never local files, and private IP ranges are not filtered — treat the URL an agent supplies as trusted input.
Setup effort
One command — npm install tactual
USE CASES
Finding what is expensive to reach
Analyze the page and read back the targets that cost the most keystrokes, each with its selector.
Explaining one bad result
Trace the exact path to that target and read the announcements a screen reader would make on the way.
Proving a fix landed
Save a run before the change, run again after, and diff the two for improvements and regressions.
Triaging a whole app
Run several routes at once and find the navigation cost that repeats across pages — usually a shared component.
Checking work behind a login
Authenticate once, save the session, then analyze the pages that need it.
9 tools
Listed in project docs. Your client may show a different list.
validate_urlcalibration_reporttrace_pathlist_profilesdiff_resultssuggest_remediationssave_authanalyze_pagesBEFORE YOU INSTALL
What to know first
Tools you get
9 tools named in the project's documentation.
INSTALLATION
Connect your client
Server setup
npm install tactualMCP Clients
Any MCP client — global install
npm install -g tactual
tactual-mcp