mya11yreport-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MYA11Y_MCP_LOG_DIR | No | Session log directory. Defaults to .mya11yreport-mcp/logs under the current working directory. | <cwd>/.mya11yreport-mcp/logs |
| PLAYWRIGHT_HEADLESS | No | Default headless mode for browser sessions. Set to 'false' to require a real display (can be overridden per session). | true |
| MYA11Y_MCP_IDLE_CLOSE_MS | No | Idle auto-close delay in milliseconds (min 1000). Default is 300000 (5 minutes). | 300000 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| start_sessionA | Starts a browser session and returns its sessionId — pass that sessionId to every subsequent tool call (navigate, click, type, run_a11y_audit, ...). Each session is an isolated page with its own cookies, audit history, and action log. Sessions auto-close after 5 minutes of inactivity (MYA11Y_MCP_IDLE_CLOSE_MS overrides). |
| close_sessionA | Stops a session and terminates its browser context (page state and cookies are gone; the session's history file is finalized with a closedAt timestamp). Returns closed:false plus the active sessions when the id is unknown. A closed session can be started again later; its previous history is archived, not overwritten. |
| get_audit_guideA | Returns the step-by-step accessibility audit workflow for agents as markdown: how to enumerate URLs from a sitemap, run the automated axe-core pass, the structure/tab-order/images/contrast reviews, the output-report format, and exactly which checks (keyboard navigation, screen-reader compatibility, image meaning) must be done by a human. Call this before starting an audit. Needs no session or browser. Also published at https://mya11y.report/mcp/auditor-skill. |
| run_a11y_auditA | Runs an axe-core accessibility audit on the session page (or on url if provided, navigating first). Returns the session audit history: pages (hex ids, one per URL) and audits ({pageId, audit} entries) including the fresh result. Each audit contains violation counts by impact, per-violation details (rule id, help, selectors, failure summaries), and pass/incomplete rule counts. |
| check_color_contrastA | Computes the WCAG 2.2 contrast ratio between two colors and which of the four AA/AAA thresholds they clear. Accepts hex or rgb()/rgba() colors. Needs no session and no browser. Pass fontSizePx and fontWeight to also classify the pair as WCAG large text. |
| list_imagesA | Lists every and inline on the session page with its accessible name, the source that name came from (aria-label, aria-labelledby, alt, title, desc or none), its src/currentSrc and sanitized SVG markup, a decorative flag, and a shadow-piercing selector. Derived flags mark genuinely missing alt text and overly long alt text (>250 chars). Top frame only, open shadow roots only. |
| get_structureA | Reads the page structure: landmark regions, headings, lists (nested) and iframes, each with a shadow-piercing selector. A heading outline grouped by region with skipped-level and repeated-H1 flags is included when both regions and headings are returned. Top frame only, open shadow roots only. |
| get_tab_orderA | Lists the page's tab stops in the order the Tab key reaches them, using the tabbable algorithm: positive tabindex values first (ascending), then everything else in document order. Each stop reports its position, tag, label, effective tabindex, shadow-piercing selector and an outOfOrder flag when tabindex is positive. Top frame only; hidden/disabled/inert elements are excluded. |
| navigateA | Opens a URL in the session page and waits for it to load. Returns the final URL, page title, HTTP status, the session headless mode, and the hex pageId assigned to this URL for audit tracking. |
| clickA | Clicks an element in the session page. Auto-waits for the element to be visible, stable, and actionable. Targets support CSS selectors or accessibility-first locators (getByRole, getByText, getByLabel, ...). |
| typeA | Types text into an element (input, textarea, contenteditable). By default replaces the current value; set clear:false to append. Targets support selectors or getBy* locators. |
| press_keyA | Presses a key or chord (Enter, Tab, Escape, arrows, Space, Shift+Tab, Control+A, ...) in the session page. With a target, focuses that element and sends the key to it; without one, sends the key to the currently focused element. Use it for keyboard navigation, submitting a form with Enter, closing a dialog with Escape, or exercising keyboard-only interactions. |
| checkA | Checks a checkbox or radio input in the session page. No-op if already checked. Targets support selectors or getBy* locators (e.g. getByRole with name). |
| uncheckB | Unchecks a checkbox in the session page. No-op if already unchecked. |
| select_optionA | Selects an inside a element on the session page, matched by the option's value attribute. Waits for the element to be actionable. Targets support selectors or getBy* locators, same as type. |
| scroll_byA | Scrolls the session page window by the given deltas (window.scrollBy) and returns the new scroll position. For lazy-loaded content, scroll then re-run get_page_snapshot. |
| screenshotA | Captures the current viewport of the session page (what is on screen after scrolling — not the full page). Saved as .png inside the session log directory; returns the file path plus the scroll position and viewport at capture time. |
| get_page_snapshotA | Returns a YAML accessibility-tree snapshot of the session page (roles, names, states). Use it to discover roles/names to target with getByRole/getByText/getByLabel in click/type/check. |
| get_viewport_sizeA | Returns the session page's viewport size in CSS pixels. |
| get_scroll_positionA | Returns the current scroll position of the session page plus document scroll dimensions and the viewport size — useful for planning further scroll_by deltas. |
| evaluateA | Evaluates a JavaScript expression or function in the session page via Playwright page.evaluate and returns its value. Use it to inspect the live DOM (computed styles, geometry, custom element state) when get_page_snapshot is not enough. The result must be serializable across the Playwright boundary; non-serializable or undefined values come back as null with serializable:false. This runs arbitrary page JavaScript — only evaluate code you intend to run. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 21 tools
The tools split into clear lifecycle, inspection, and interaction groups, and each inspection tool targets a distinct artifact (a11y tree, landmarks, tab stops, images). A few minor overlaps exist, such as get_viewport_size and get_scroll_position both returning viewport dimensions, and get_page_snapshot versus get_structure both describing page structure, but descriptions clarify the intended use.
Most tools follow a verb_noun snake_case pattern (start_session, get_tab_order, run_a11y_audit). The interaction tools deviate as bare verbs (navigate, click, type, check, uncheck, evaluate, screenshot) and scroll_by uses a preposition, so the pattern is not uniform, but the categories are still readable and predictable.
21 tools is on the heavy side for a single server, landing in the 16-25 range that feels bloated at first glance. That said, the count is justified by the combination of browser automation, page inspection, session management, and audit functionality; it is broad but not redundant.
The surface covers the full accessibility audit loop: session lifecycle, navigation, automated axe-core audits, contrast checks, structural inspection, and keyboard/form interactions for manual checks. Minor gaps remain, such as no explicit viewport resizing, hover action, or full-page screenshot option, but agents can work around them with evaluate or scrolling.