analyze_url
Analyze web pages to measure screen-reader navigation cost. Identify barriers preventing assistive-technology users from discovering, reaching, and operating interactive targets. Returns scored findings to guide accessibility fixes.
Instructions
Analyze a web page for screen-reader navigation cost. Returns scored findings showing how hard it is for AT users to discover, reach, and operate interactive targets. Read-only — navigates to the URL in a sandboxed browser but does not modify the page.
Recommended: Use format='sarif' for concise, actionable output (~4KB). SARIF auto-filters to findings that need attention (moderate and worse). JSON/markdown include every target and can be 100x larger.
SPAs (React, Next.js, etc.): Pass waitForSelector (e.g., '[data-testid="app"]' or 'main') so Tactual waits for the app to hydrate before capturing.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to analyze | |
| profile | No | AT profile ID (generic-mobile-web-sr-v0, nvda-desktop-v0, jaws-desktop-v0, voiceover-ios-v0, talkback-android-v0) | generic-mobile-web-sr-v0 |
| device | No | Playwright device name for emulation (e.g., 'iPhone 14') | |
| explore | No | Explore hidden branches (menus, tabs, dialogs). Use with format='sarif' to avoid output overflow. | |
| format | No | Output format. 'sarif' (recommended) filters to actionable findings only. 'json' includes all targets. | sarif |
| minSeverity | No | Only include findings at this severity or worse. Reduces output size. | |
| waitForSelector | No | CSS selector to wait for before capturing (essential for SPAs). E.g., 'main', '#app', '[data-hydrated]' | |
| waitTime | No | Additional milliseconds to wait after page load (default: 0). Use for slow-rendering SPAs. | |
| timeout | No | Page load timeout in milliseconds | |
| focus | No | Only analyze targets within these landmarks (e.g., ['main', 'navigation']). Reduces noise in large pages. | |
| excludeSelector | No | CSS selectors to hide from analysis (e.g., ['#notifications', '.cookie-banner']). Elements are set aria-hidden before capture. | |
| exclude | No | Glob patterns to exclude targets by name/role/kind (e.g., ['*cookie*', '*notification*', 'banner']). Case-insensitive, supports * and ? wildcards. | |
| maxFindings | No | Maximum detailed findings to return (default: 15 for JSON/markdown, 25 for SARIF). Use 3-5 for quick checks, higher for thorough audits. | |
| probe | No | Run keyboard probes on interactive targets (focus, activation, Escape recovery, Tab trapping). Adds ~30-60s but detects real focus management issues. Off by default — use for deep investigation, not for triage or fix-verify loops. analyze_pages never probes. | |
| summaryOnly | No | Return only summary stats (severity counts, top issue groups, average score) without individual findings. ~500 bytes. Use for quick page health checks before diving deeper. | |
| includeStates | No | Include captured states in JSON output for passing to trace_path's statesJson parameter. Uses compact format (~5KB): state IDs, target IDs+selectors+roles, and provenance. The 'states' key in the output is the value to pass as statesJson to trace_path. | |
| storageState | No | Path to a Playwright storageState JSON file containing cookies and localStorage. Use save_auth to create this file, then pass the path here to analyze authenticated pages. Example: 'tactual-auth.json' |