Skip to content

feat: add a new skill for accessibility debugging and auditing with Chrome DevTools MCP.#1002

Merged
natorion merged 9 commits intomainfrom
skills
Feb 20, 2026
Merged

feat: add a new skill for accessibility debugging and auditing with Chrome DevTools MCP.#1002
natorion merged 9 commits intomainfrom
skills

Conversation

@natorion
Copy link
Copy Markdown
Contributor

No description provided.

@natorion natorion marked this pull request as ready for review February 20, 2026 08:38
@natorion natorion enabled auto-merge February 20, 2026 08:38
@natorion natorion disabled auto-merge February 20, 2026 11:24
@natorion
Copy link
Copy Markdown
Contributor Author

The code examples are hit or miss. Let;s see if I can make them better.

@natorion
Copy link
Copy Markdown
Contributor Author

I now tuned the js snippets a bit, so that gemini 2.5 pro is able to utilize them for effect. I think this looks good for now.

@natorion natorion enabled auto-merge February 20, 2026 12:27
@natorion natorion added this pull request to the merge queue Feb 20, 2026
Merged via the queue into main with commit b0c6d04 Feb 20, 2026
20 checks passed
@natorion natorion deleted the skills branch February 20, 2026 12:39

**Accessibility Tree vs DOM**: Visually hiding an element (e.g., `CSS opacity: 0`) behaves differently for screen readers than `display: none` or `aria-hidden="true"`. The `take_snapshot` tool returns the accessibility tree of the page, which represents what assistive technologies "see", making it the most reliable source of truth for semantic structure.

**Reading web.dev documentation**: If you need to research specific accessibility guidelines (like `https://web.dev/articles/accessible-tap-targets`), you can append `.md.txt` to the URL (e.g., `https://web.dev/articles/accessible-tap-targets.md.txt`) to fetch the clean, raw markdown version. This is much easier to read using the `read_url_content` tool!
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is read_url_content agent/model agnostic? Or will they be able to map that to whatever their own implemention is called?

Chrome automatically checks for common accessibility problems. Use `list_console_messages` to check for these native audits first:

- `types`: `["issue"]`
- `includePreservedMessages`: `true` (to catch issues that occurred during page load)
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we instruct to use tools with such high specificity, how do we ensure they stay aligned to potential future API updates?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As the skills are in the same directory as the tools, I would assume they will change in lockstep.


1. Locate buttons, inputs, and images in the `take_snapshot` output.
2. Ensure interactive elements have an accessible name (e.g., a button should not just say `""` if it only contains an icon).
3. **Orphaned Inputs**: Verify that all form inputs have associated labels. Use `evaluate_script` to check for inputs missing `id` (for `label[for]`) or `aria-label`:
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think there's a chance to shorten here. The model will be able to infer to check for inputs missing id(forlabel[for]) or aria-label`` from the following code snippet anyway.

};
```

````
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Orphaned?

Comment on lines +61 to +63
4. Check images for `alt` text.

### 4. Focus & Keyboard Navigation
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Orphaned too?

According to web.dev, tap targets should be at least 48x48 pixels with sufficient spacing. Since the accessibility tree doesn't show sizes, use `evaluate_script`:

```javascript
// Usage in console: copy, paste, and call with element: fn(element)
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment can be removed.

};
````

_Pass the element's `uid` from the snapshot as an argument to the tool._
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To which tool?


**Note**: This script uses a simplified algorithm and may not account for transparency, gradients, or background images. For production-grade auditing, consider injecting `axe-core`.

```javascript
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: we could shorten this to js for every snippet, for token optimization.

**Note**: This script uses a simplified algorithm and may not account for transparency, gradients, or background images. For production-grade auditing, consider injecting `axe-core`.

```javascript
el => {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not actionable for this PR, but is there an opportunity to expose this internal DevTools functionality through CDP? @OrKoN?

Verify document-level accessibility settings often missed in component testing:

```javascript
(() => {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't this use evaluate_script instead of printing to the console? Because the later would require the list console messages tool.

github-merge-queue bot pushed a commit that referenced this pull request Feb 25, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.18.0](chrome-devtools-mcp-v0.17.3...chrome-devtools-mcp-v0.18.0)
(2026-02-24)


### 🎉 Features

* `--slim` mode for maximum token savings
([#958](#958))
([c402b43](c402b43))
* add a new skill for accessibility debugging and auditing with Chrome
DevTools MCP.
([#1002](#1002))
([b0c6d04](b0c6d04))
* add experimental screencast recording tools
([#941](#941))
([33446d4](33446d4))
* add skill to debug and optimize LCP
([#993](#993))
([2cd9b95](2cd9b95))
* add storage-isolated browser contexts
([#991](#991))
([59f6477](59f6477))
* add take_memory_snapshot tool
([#1023](#1023))
([7ffdc5e](7ffdc5e))
* support any-match text arrays in wait_for
([#1011](#1011))
([496ab1b](496ab1b))
* support type_text
([#1026](#1026))
([b5d01b5](b5d01b5))


### 🛠️ Fixes

* detect X server display on Linux
([#1027](#1027))
([1746ed9](1746ed9))


### ♻️ Chores

* cleanup string and structured console formatters
([#1005](#1005))
([0d78685](0d78685))
* extract version in a seprate file
([#1032](#1032))
([0106865](0106865))
* move emulation settings to context
([#1000](#1000))
([bc3c40e](bc3c40e))
* optimize slim tool descriptions and params
([#1028](#1028))
([ca6635d](ca6635d))
* simplify JavaScript code examples, update code block language, and
refine descriptions in a11y debugging skill documentation.
([#1009](#1009))
([5cedcaa](5cedcaa))
* types for JSON output of IssueFormatter
([#1007](#1007))
([9ef4479](9ef4479))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
wolfib pushed a commit to wolfib/chrome-devtools-mcp that referenced this pull request Mar 10, 2026
wolfib pushed a commit to wolfib/chrome-devtools-mcp that referenced this pull request Mar 10, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.18.0](ChromeDevTools/chrome-devtools-mcp@chrome-devtools-mcp-v0.17.3...chrome-devtools-mcp-v0.18.0)
(2026-02-24)


### 🎉 Features

* `--slim` mode for maximum token savings
([ChromeDevTools#958](ChromeDevTools#958))
([c402b43](ChromeDevTools@c402b43))
* add a new skill for accessibility debugging and auditing with Chrome
DevTools MCP.
([ChromeDevTools#1002](ChromeDevTools#1002))
([b0c6d04](ChromeDevTools@b0c6d04))
* add experimental screencast recording tools
([ChromeDevTools#941](ChromeDevTools#941))
([33446d4](ChromeDevTools@33446d4))
* add skill to debug and optimize LCP
([ChromeDevTools#993](ChromeDevTools#993))
([2cd9b95](ChromeDevTools@2cd9b95))
* add storage-isolated browser contexts
([ChromeDevTools#991](ChromeDevTools#991))
([59f6477](ChromeDevTools@59f6477))
* add take_memory_snapshot tool
([ChromeDevTools#1023](ChromeDevTools#1023))
([7ffdc5e](ChromeDevTools@7ffdc5e))
* support any-match text arrays in wait_for
([ChromeDevTools#1011](ChromeDevTools#1011))
([496ab1b](ChromeDevTools@496ab1b))
* support type_text
([ChromeDevTools#1026](ChromeDevTools#1026))
([b5d01b5](ChromeDevTools@b5d01b5))


### 🛠️ Fixes

* detect X server display on Linux
([ChromeDevTools#1027](ChromeDevTools#1027))
([1746ed9](ChromeDevTools@1746ed9))


### ♻️ Chores

* cleanup string and structured console formatters
([ChromeDevTools#1005](ChromeDevTools#1005))
([0d78685](ChromeDevTools@0d78685))
* extract version in a seprate file
([ChromeDevTools#1032](ChromeDevTools#1032))
([0106865](ChromeDevTools@0106865))
* move emulation settings to context
([ChromeDevTools#1000](ChromeDevTools#1000))
([bc3c40e](ChromeDevTools@bc3c40e))
* optimize slim tool descriptions and params
([ChromeDevTools#1028](ChromeDevTools#1028))
([ca6635d](ChromeDevTools@ca6635d))
* simplify JavaScript code examples, update code block language, and
refine descriptions in a11y debugging skill documentation.
([ChromeDevTools#1009](ChromeDevTools#1009))
([5cedcaa](ChromeDevTools@5cedcaa))
* types for JSON output of IssueFormatter
([ChromeDevTools#1007](ChromeDevTools#1007))
([9ef4479](ChromeDevTools@9ef4479))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants