Accessibility checks in your AI coding assistant
Pulxon’s MCP server and API let Claude Code, Cursor or your own scripts check a page in a real browser, read every failing element with the WCAG requirement it breaks and how to fix it, change the code, and check again. The fix happens where the code is.
Free with any Pulxon account. Monitoring data needs a Pro or Business plan.
How it works
- Create an API key in your dashboard and add Pulxon to your assistant with one command.
- Ask it, for example:
Check https://staging.example.com/checkout with Pulxon and fix the critical issues in this repository.
- The assistant calls
check_page, gets each failing element with its selector, HTML and fix, edits your components, and calls it again to confirm the issue is gone.
The checked page has to be reachable from the internet: production, staging or a preview deploy. Pulxon cannot open localhost on your computer.
Connect your assistant
Replace pxk_YOUR_API_KEY with your key. When you create a key in the dashboard, these commands come with it filled in. The MCP server address is https://pulxon.com/api/mcp (Streamable HTTP, key in the Authorization header).
Run this in your terminal, then ask Claude to check a page.
Add this to ~/.cursor/mcp.json (or your client’s user-level MCP settings), not to a project file you commit.
Start a check, then read it at the address in the Location header.
MCP tools
| Tool | What it does |
|---|---|
| check_page | Check one public web page for accessibility problems. Loads it in a real browser, runs axe-core (WCAG 2.2 A/AA) and walks the page with the Tab key (visible focus, focus hidden behind other content, keyboard traps), waits up to about 50 seconds and returns every failing rule with the elements (CSS selector, HTML, what was found), the WCAG requirement, what it means for visitors and how to fix it. Re-run it after a fix to confirm. |
| get_check_result | Get the result of a check started earlier (use it when check_page answered that the check is still running). |
| list_sites | List the websites in your Pulxon account, with their plan and whether weekly monitoring is available. |
| get_monitoring_report | The latest weekly monitoring run of one of your websites (Pro and Business): each page's score, the issues across pages and what changed since the previous run. |
| explain_rule | Pulxon's fix guidance for one axe rule id (e.g. color-contrast, image-alt, label): how to fix it, an example, and who usually fixes it. |
| check_contrast | Contrast ratio of a text (or icon) color on a background color, graded against WCAG 1.4.3, 1.4.11 and 1.4.6, with the closest text color that passes AA when it fails. Use it while choosing colors, before any page exists. |
| list_rules | The rules Pulxon has its own fix guidance for (axe rules and Pulxon's keyboard checks: pulxon-focus-visible, pulxon-focus-obscured, pulxon-keyboard-trap), with who usually fixes each. Use explain_rule for the details of one. |
REST API
Send your key as Authorization: Bearer pxk_…. Requests and answers are JSON. Errors look like {"error": {"code": "rate_limited", "message": "…"}}, with a Retry-After header on 429.
| Endpoint | Returns |
|---|---|
| POST /api/v1/checks | Start a check. Body: {"url": "…", "device": "desktop" | "mobile"}. Answers 202 with the check (or 200 when a check of the same page from the last minute is reused). |
| GET /api/v1/checks/{id} | The check: status queued, running, done or failed; when done, the score and every issue with its elements, requirement and fix. |
| GET /api/v1/sites | Your websites, their plan and whether monitoring is available. |
| GET /api/v1/sites/{id}/monitoring | The latest monitoring run (Pro and Business): pages, issues across pages and the changes since the previous run. |
| GET /api/v1/rules/{ruleId} | Pulxon’s fix guidance for one axe rule. |
One issue in a finished check
{
"ruleId": "button-name",
"impact": "critical",
"title": "Buttons must have discernible text",
"description": "Ensure buttons have discernible text",
"wcag": [
"4.1.2"
],
"level": "A",
"requirements": [
{
"id": "4.1.2",
"name": "Name, Role, Value",
"level": "A",
"requirement": "Every control needs a name, a role and a state that assistive technology can read."
}
],
"consequence": "Screen reader users hear only \"button\" with no name, so they cannot tell what it does. Voice-control users cannot say its name to press it.",
"affects": [
"Blind and screen reader users",
"Motor and keyboard users"
],
"owner": "Developer",
"howToFix": "Every button needs a name that assistive technology can announce. Add visible text, or an aria-label when the button only shows an icon.",
"fixExample": "<button type=\"button\" aria-label=\"Close dialog\">\n <svg aria-hidden=\"true\">…</svg>\n</button>",
"learnMoreUrl": "https://dequeuniversity.com/rules/axe/4.13/button-name",
"elementCount": 1,
"elements": [
{
"selector": [
"header > .menu-toggle"
],
"html": "<button class=\"menu-toggle\"><svg>…</svg></button>",
"failureSummary": "Fix any of the following:\n Element does not have inner text that is visible to screen readers",
"screenshotUrl": "https://pulxon.com/api/checker/screenshots/<check id>/issue-1.jpg"
}
]
}Limits and good to know
- 30 new page checks an hour per account, across all its keys.
- 1000 requests an hour per key, and up to 5 active keys per account.
- A check of the same page and device from the last 60 seconds is reused, so re-check after you deploy the fix.
check_pagewaits up to 50 seconds; a slower page answers “still running” and the assistant reads it later withget_check_result.- Checks and their screenshots are kept for 90 days.
- Pulxon stores only a fingerprint of each key. Revoke a key in the dashboard and it stops working at once. Keep keys out of shared repositories: use your client’s user-level settings or an environment variable.
- Results quote HTML from the checked page. The server tells assistants to treat it as data, but only point Pulxon at pages you trust.
- Automated checks find only part of all accessibility barriers. A clean result is a good sign, not proof that a page works for everyone: test with a keyboard and a screen reader too.