WCAG Accessibility MCP
A11y Feedback MCP
코딩 및 디자인 에이전트에게 “WCAG를 준수하라”는 단순한 주의 환기가 아니라, 실제 접근성 피드백 루프를 제공합니다.
a11y-feedback-mcp는 Chromium에서 인터페이스를 렌더링하고 axe-core를 실행한 뒤, 모든 Model Context Protocol 클라이언트에 실행 가능한 증거(위반된 규칙, 영향, CSS 선택자, DOM 스니펫, 계산된 스타일, 경계 상자, 수정 단계, 수학적으로 통과하는 대비 후보)를 반환합니다.
Codex 및 Claude Code와 직접 작동합니다. Claude Design의 경우, 권장 워크플로는 Claude Code를 Claude Design의 MCP 서버와 이 서버 양쪽에 연결한 다음, 생성된 HTML 또는 라이브 미리보기를 감사하고 수정 사항을 디자인 워크플로로 다시 보내는 것입니다.
이 도구는 WCAG 인증 서비스가 아닌 자동화된 테스트 보조 도구입니다. 의도적으로 검사가 불완전함을 보고하며, 키보드, 포커스, 스크린 리더, 확대/축소, 동작, 인지, 콘텐츠 품질에 대해서는 사람의 테스트가 필요합니다.
“라이브 피드백”의 의미
flowchart TD
A["Agent creates or changes UI"] --> B["Render at target viewport"]
B --> C["Run axe + contrast analysis"]
C --> D["Return evidence and correction"]
D --> E["Agent proposes or applies code fix"]
E --> F["Re-run same audit"]
F --> G["Human checks incomplete behavior"]이 서버는 읽기 전용입니다. 프로젝트를 조용히 수정하지 않습니다. 연결된 에이전트는 해당 증거를 사용하여 범위가 정해진 변경을 수행한 다음, 감사를 다시 실행해 이를 검증합니다.
Related MCP server: Accessibility MCP Server
도구
도구 | 목적 |
| 렌더링된 공개 또는 로컬 개발 URL을 감사합니다 |
| 호스팅 전에 생성된 HTML을 감사합니다 |
| 허용된 프로젝트 루트 내부의 로컬 |
| 색상 쌍과 텍스트 스타일에 대한 WCAG 대비를 계산합니다 |
| 통과하는 가장 작은 검정/흰색 방향 색상 조정을 제안합니다 |
| axe 규칙 ID를 구현 및 검증 지침으로 변환합니다 |
| W3C 링크와 자동/수동 적용 범위가 포함된 전체 A/AA/AAA 기준 세트를 반환합니다 |
모든 도구는 읽기 전용으로 명시됩니다. 서버는 또한 accessibility-fix-loop 프롬프트를 노출합니다.
표준 프로파일
감사 도구는 wcag2a, wcag2aa, wcag2aaa, wcag21aa, wcag21aaa, wcag22aa, wcag22aaa, best-practice를 지원합니다. AA 프로파일은 필수 A 및 AA 기준을 모두 포함하고, AAA 프로파일은 A, AA, AAA를 포함합니다. W3C가 최신 WCAG 버전을 권장하고 일반적인 정책으로 사이트 전체에 AAA를 요구하는 것에 대해 경고하기 때문에 wcag22aa가 기본값으로 유지됩니다. AAA는 명시적인 향상 목표로 사용하고 기준별 진행 상황을 보고하십시오.
axe 매핑은 부분적인 자동 적용 범위를 의미하며, 완전한 성공 기준이 테스트되었음을 의미하지 않습니다. get_wcag_checklist는 자동화가 완료할 수 없는 수동 작업을 포함하여 WCAG 2.2 AA에 필요한 55개 전체 기준 또는 WCAG 2.2 AAA에 필요한 86개 전체 기준을 제공합니다.
요구 사항
Node.js 20 이상
Chrome 또는 Edge 권장
Windows, macOS, 또는 Linux
서버는 먼저 설치된 Chrome/Edge를 찾습니다. 지원되는 Linux 환경에서는 번들된 @sparticuz/chromium을 대신 사용할 수 있습니다. A11Y_MCP_BROWSER_PATH에 명시적인 브라우저 실행 파일을 설정할 수 있습니다. Chromium 샌드박싱은 기본적으로 활성화된 상태로 유지됩니다. A11Y_MCP_NO_SANDBOX=true는 그렇지 않으면 Chrome을 시작할 수 없는 제한된 컨테이너나 Lambda 스타일 런타임에서만 설정하십시오.
Windows에 설치
프로젝트를 보관하는 폴더에서 PowerShell을 엽니다:
git clone https://github.com/aditya-ariosity/a11y-feedback-mcp.git
cd a11y-feedback-mcp
npm install
npm run build저장소가 아직 GitHub에 없다면 먼저 이 폴더를 다운로드하거나 복사한 다음, 폴더 안에서 마지막 세 개의 명령을 실행하십시오.
Codex 연결
PowerShell에서 빌드된 진입점의 절대 경로를 사용하십시오:
codex mcp add a11y-feedback -- node "C:\full\path\to\a11y-feedback-mcp\dist\index.js"또는 동일한 구성을 ~/.codex/config.toml에 추가하십시오:
[mcp_servers.a11y_feedback]
command = "node"
args = ["C:\\full\\path\\to\\a11y-feedback-mcp\\dist\\index.js"]
startup_timeout_sec = 30
tool_timeout_sec = 90
[mcp_servers.a11y_feedback.env]
A11Y_MCP_ALLOWED_ROOT = "C:\\full\\path\\to\\your-projects"Codex를 다시 시작한 다음 요청하십시오:
이 페이지를 1440×900 및 390×844에서 감사하세요. 치명적(critical) 및 심각한(serious) 문제를 수정하고, 두 감사를 다시 실행한 다음, 남은 수동 검사를 나열하세요.
검증 및 문제 해결은 docs/codex.md를 참조하십시오.
Claude Code 연결
claude mcp add --scope user a11y-feedback -- node "C:\full\path\to\a11y-feedback-mcp\dist\index.js"연결을 확인하려면 claude mcp list를 실행하십시오. Claude Design 브리지 워크플로는 docs/claude-code-and-design.md를 참조하십시오.
개발
npm install
npm run check
npm test
npm run test:e2e
npm run buildnpm test는 색상 계산, 네트워크 보호, 수정 및 MCP 계약을 다룹니다. npm run test:e2e는 Chromium을 시작하여 의도적으로 접근할 수 없게 만든 픽스처를 감사합니다.
로컬 stdio 서버를 시작합니다:
npm run dev선택적 Streamable HTTP 전송을 시작합니다:
npm run build
npm run start:http엔드포인트는 http://127.0.0.1:3000/mcp이고, 상태 확인은 http://127.0.0.1:3000/health입니다. HTTP는 기본적으로 127.0.0.1에 바인딩됩니다.
환경 변수
변수 | 기본값 | 의미 |
| 자동 감지 | Chrome/Chromium/Edge 실행 파일의 절대 경로 |
| 서버 작업 디렉터리 | 이 루트 아래의 로컬 HTML만 감사할 수 있음 |
| stdio에서 | localhost/사설망 URL 대상 허용 |
| HTTP에서 | 루트 제한 후 HTTP를 통한 로컬 파일 감사 허용 |
|
| 최대 동시 Chromium 감사 수 |
|
| axe 감사 단계의 마감 시간 |
|
| 런타임이 요구하는 경우에만 샌드박스 없이 Chromium 실행 |
|
| HTTP 바인딩 주소 |
| Localhost 이름 | HTTP 모드에서 허용되는 쉼표로 구분된 Host 헤더 |
|
| HTTP JSON 본문 크기 제한; |
|
| HTTP 전송 포트 |
참조 HTTP 서버를 공개 인터넷에 직접 노출하지 마십시오. 인증, TLS, 속도 제한, 요청 크기 제한, 테넌트 격리를 그 앞에 배치하십시오. docs/security.md를 참조하십시오.
현재 범위
MVP는 렌더링된 웹 UI와 결정적 대비 계산을 다룹니다. 아직 네이티브 모바일 앱, PDF, 캔버스, 동영상 자막 또는 원시 Claude Design 픽셀은 검사하지 않습니다. 계획된 어댑터는 MCP 계약을 변경하지 않고 프레임워크 인식 패치, 스크린샷/OCR 지원, 디자인 토큰 통합, CI 주석, 일급 디자인 캔버스 커넥터를 추가할 수 있습니다.
프로젝트 문서
라이선스
Available Tools
7 toolsaudit_fileAudit a local HTML fileARead-onlyIdempotent
Render a local .html or .htm file beneath the configured allowed root and return accessibility findings and corrections. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | Viewport width in CSS pixels. | |
| height | No | Viewport height in CSS pixels. | |
| filePath | Yes | Absolute path, or path relative to the server working directory, to an HTML file. | |
| standard | No | WCAG ruleset to test. Use best-practice to include additional axe guidance. | wcag22aa |
| maxIssues | No | Maximum violation groups returned; summary totals still cover the full run. | |
| maxNodesPerIssue | No | Maximum affected elements returned per rule. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint. The description adds the constraint that files must be 'beneath the configured allowed root', which is a behavioral safety detail not present in any structured field. It also reinforces the read-only nature. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short sentences that front-load the core purpose ('Render a local .html or .htm file') and key constraints ('beneath the configured allowed root', 'Read-only'). No fluff or redundant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters (fully documented in schema), annotations, and no output schema, the description is largely complete. It covers the file type constraint, the allowed root security boundary, the read-only nature, and the expected output (accessibility findings and corrections). Missing is explanation of what 'render' entails (e.g., headless browser, JavaScript execution), but this is minor and compensated by the schema details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (filePath, width, height, standard, maxIssues, maxNodesPerIssue) already has a description in the schema. The tool description adds no additional information about parameters beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Render' and 'return accessibility findings and corrections') and resource ('local .html or .htm file beneath the configured allowed root'). It distinguishes itself from sibling tools like audit_url (which works on URLs) by explicitly specifying 'local file' and the file path restriction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any explicit guidance on when to use this tool versus the available siblings (audit_url, audit_html, etc.). It does not state alternatives, prerequisites (e.g., file must be accessible), or exclusion criteria (e.g., not for raw HTML strings). The purpose implicitly suggests local files, but no clear usage context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_htmlAudit an HTML documentARead-onlyIdempotent
Render supplied HTML in an isolated headless browser and return WCAG findings plus evidence and suggested corrections. Use for generated UI before it is hosted. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| html | Yes | Complete HTML document or fragment to render and test. | |
| width | No | Viewport width in CSS pixels. | |
| height | No | Viewport height in CSS pixels. | |
| baseUrl | No | Optional http(s) base URL used to resolve relative assets. | |
| standard | No | WCAG ruleset to test. Use best-practice to include additional axe guidance. | wcag22aa |
| maxIssues | No | Maximum violation groups returned; summary totals still cover the full run. | |
| maxNodesPerIssue | No | Maximum affected elements returned per rule. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe, read-only operation. The description adds 'isolated headless browser' and 'Read-only' which align with and reinforce the annotations. No contradictions. The description provides modest additional context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundant or filler content. The first sentence clearly states the action and outcome, and the second provides usage guidance and a read-only note. Every part earns its place, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters and no output schema, the description covers the core purpose, usage context, and safety (read-only). It mentions the output type (WCAG findings, evidence, corrections) at a high level. However, it does not explain how parameters like standard or maxIssues influence behavior, though the schema descriptions handle those details. The description is sufficiently complete for an agent to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter already has a description in the input schema. The tool description does not add specific parameter-level details, but it does describe the output (WCAG findings, evidence, corrections), which indirectly informs parameter usage. Baseline 3 is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Render') and resource ('supplied HTML') with a clear outcome ('return WCAG findings plus evidence and suggested corrections'). It also distinguishes from sibling tools like audit_url and audit_file by stating 'Use for generated UI before it is hosted', making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use for generated UI before it is hosted', which provides clear context for when to use this tool. While it does not explicitly list alternatives or when not to use, the sibling tool names (audit_url, audit_file) imply the distinction, and the guidance is sufficient for an agent to select this over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_urlAudit a rendered URLARead-onlyIdempotent
Load a public or local web page in headless Chromium, run axe-core, and return prioritized WCAG findings, DOM evidence, computed styles, and contrast corrections. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute http:// or https:// URL to render and test. | |
| width | No | Viewport width in CSS pixels. | |
| height | No | Viewport height in CSS pixels. | |
| standard | No | WCAG ruleset to test. Use best-practice to include additional axe guidance. | wcag22aa |
| maxIssues | No | Maximum violation groups returned; summary totals still cover the full run. | |
| maxNodesPerIssue | No | Maximum affected elements returned per rule. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint true, and destructiveHint false. The description adds context: it uses headless Chromium, is read-only (reinforcing safely), and lists concrete outputs (WCAG findings, DOM evidence, computed styles, contrast corrections). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence front-loaded with the primary action and outputs, then ends with 'Read-only.' Every part is essential and no filler. Excellent structure and brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters (100% schema coverage), rich annotations, and no output schema, the description provides enough context for an AI agent to select and invoke the tool correctly. It covers inputs, behavior, and safety. Slight deduction because it doesn't mention pagination or error handling for invalid URLs, but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value beyond schema by summarizing the overall return structure (prioritized findings, evidence, contrast corrections), but doesn't detail individual parameter behaviors beyond what schema provides. Slight extra context earns a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool loads a page, runs axe-core, and returns prioritized WCAG findings with specific outputs like DOM evidence and computed styles. It distinguishes itself from siblings like audit_html and audit_file, which operate on different input types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates usage for accessibility auditing of rendered URLs and mentions 'Read-only.' However, it does not explicitly contrast with siblings like check_contrast or explain_issue, nor does it specify when not to use this tool (e.g., for non-public pages or HTML fragments).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_contrastCheck a color pairARead-onlyIdempotent
Calculate the WCAG contrast ratio for foreground and background colors and determine whether the pair passes for the supplied text size and weight.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | AA | |
| background | Yes | Background CSS sRGB color such as white, #ffffff, rgb(), hsl(), or color(srgb ...). | |
| fontSizePx | No | ||
| fontWeight | No | ||
| foreground | Yes | Foreground CSS sRGB color such as white, #767676, rgb(), hsl(), or color(srgb ...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint as false, so the tool's safe behavior is clear. The description adds value by explaining the return includes ratio and pass/fail for given text size/weight, but does not disclose any edge cases (e.g., handling of transparent colors, out-of-gamut colors) or limits (e.g., only sRGB). A 3 is appropriate as annotations carry the safety burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the main action and includes key details (ratio, pass determination, text attributes). It is concise and efficient, though it could be slightly more scannable by breaking into two sentences. No redundancy is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters (2 required) and no output schema, the description covers the main computation (contrast ratio and pass/fail) but omits specifics about return format (e.g., numeric ratio, boolean pass, object). For a calculation tool with moderate complexity, additional context about the scope (sRGB only) or limitations (e.g., does not handle transparency) would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 40%, so the parameter descriptions in the schema partially explain foreground/background colors as 'CSS sRGB color'. However, the tool description clarifies that both 'fontSizePx' and 'fontWeight' are used to determine the pass level, adding meaning beyond the schema's default values and constraints. It compensates for the missing schema descriptions on those parameters, though the level parameter's enum (AA, AAA) is already clear in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Calculate' and the resource 'WCAG contrast ratio', and distinguishes the tool from siblings like 'suggest_contrast_fix' by specifying the output includes both the ratio and a pass/fail determination based on text size and weight.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking color contrast but does not explicitly state when to use this tool versus alternatives like 'suggest_contrast_fix'. It lacks guidance on prerequisites or context (e.g., checking multiple pairs vs. one). Without sibling differentiation, the agent may not know when to choose this over other audit tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_issueExplain an accessibility ruleARead-onlyIdempotent
Return implementation-focused remediation steps and the axe rule reference for a rule ID found in an audit.
| Name | Required | Description | Default |
|---|---|---|---|
| ruleId | Yes | axe rule ID such as color-contrast, button-name, or label. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is read-only and non-destructive. The description adds that it returns 'remediation steps' and 'axe rule reference', which is useful but does not elaborate on any potential limits or side effects. Given the annotations cover the safety profile, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence that front-loads the core purpose ('return implementation-focused remediation steps') and adds the specific context about axe rule reference. No wasted words, but could be slightly more concise by removing 'the axe rule reference' redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is a single required parameter with full schema coverage and no output schema, the description sufficiently explains what the tool does and what it returns. It does not need to detail return structure since there's no output schema. The tool is straightforward and the description covers the key aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides a detailed description for the 'ruleId' parameter (axe rule ID pattern), so schema coverage is 100%. The description does not add new parameter information beyond what the schema states, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns remediation steps and a reference for a given rule ID. It specifies the verb 'return' and the resource 'implementation-focused remediation steps and axe rule reference', and distinguishes from sibling tools like 'check_contrast' which are more specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when a rule ID from an audit is known, but does not explicitly state when NOT to use it or suggest alternatives. For example, it doesn't mention that if you need to run a new audit you should use 'audit_url' instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wcag_checklistGet the complete WCAG requirement checklistARead-onlyIdempotent
Return every success criterion required by a WCAG 2.0, 2.1, or 2.2 A/AA/AAA profile, with W3C references, axe rule mappings, and explicit automated-partial versus manual coverage. Use this to plan the checks that a browser audit cannot complete.
| Name | Required | Description | Default |
|---|---|---|---|
| standard | No | wcag22aa | |
| principle | No | ||
| evaluation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe read operation. The description adds context about the output (references, coverage types) but does not disclose additional behavioral traits such as response size, pagination, or performance implications. Given the rich annotations, a 3 is appropriate as the description adds some value beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, each adding value. The first sentence clearly defines what the tool returns, and the second sentence provides usage guidance. There is no wasted text, and no repetition of schema information. This is a model of conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has three optional parameters, no output schema, and moderate complexity (WCAG profiles with multiple dimensions), the description is too minimal. It does not mention that all parameters are optional, the default value for 'standard' (wcag22aa), or what the response structure looks like (e.g., list of criteria with metadata). For a checklist tool used for planning, users need more context about how the parameters affect the results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the parameters (standard, principle, evaluation) have no descriptions in the schema. Although the parameter names and enum values are somewhat self-explanatory (e.g., 'standard' with values like 'wcag2aa'), the description does not explain how these parameters filter the checklist or fill the gap left by the schema. The description should at least describe the effect of providing these optional parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it returns 'every success criterion required by a WCAG 2.0, 2.1, or 2.2 A/AA/AAA profile, with W3C references, axe rule mappings, and explicit automated-partial versus manual coverage.' This clearly distinguishes the tool from sibling audit tools (audit_url, audit_html, audit_file) which perform automated checking, and from issue-specific tools (check_contrast, etc.). The verb 'return' and resource 'checklist' are precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Use this to plan the checks that a browser audit cannot complete,' giving a clear use case and implying differentiation from automated audit tools. However, it does not explicitly state when not to use this tool or mention alternative tools for other scenarios, which would earn a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_contrast_fixSuggest a passing colorARead-onlyIdempotent
Find the nearest black-or-white-directed foreground or background adjustment that reaches the selected WCAG contrast threshold. Returns a mathematical candidate, not an automatic edit.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | AA | |
| adjust | No | foreground | |
| background | Yes | Background CSS sRGB color such as white, #ffffff, rgb(), hsl(), or color(srgb ...). | |
| fontSizePx | No | ||
| fontWeight | No | ||
| foreground | Yes | Foreground CSS sRGB color such as white, #767676, rgb(), hsl(), or color(srgb ...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the tool is safe and non-destructive. The description adds key behavioral context: it returns a 'mathematical candidate' and explicitly states it is 'not an automatic edit.' This goes beyond annotations by clarifying that the user must apply the suggestion themselves, fully disclosing the tool's scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, each sentence earns its place. The first sentence states the core function concisely; the second clarifies the non-destructive, advisory nature. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 6 parameters (2 required, 2 enums), moderate complexity. The description explains the what and the result, but lacks details like what happens when no adjustment can reach the threshold (returns null/error?). Additionally, there is no output schema, so the return format is left to experimentation. For a mathematical suggestion tool, the description is largely complete, but could mention error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, meaning the schema documents only two parameters (foreground, background) with descriptions. The description adds meaning by explicitly mentioning 'black-or-white-directed' adjustments and connecting parameters to WCAG thresholds. It does not detail each parameter beyond what the schema provides, but for the low coverage, it compensates well by explaining the tool's purpose. The enum parameters (level, adjust) are left for the schema to define, which is acceptable given the tool's focused purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('Find', 'adjustment') and resources ('foreground', 'background', 'WCAG contrast threshold'). It clearly identifies the tool's output as a mathematical candidate, distinguishing it from automatic edits and sibling tools like check_contrast or explain_issue.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives like check_contrast or get_wcag_checklist. However, the mention of 'nearest...adjustment that reaches the selected WCAG contrast threshold' implies it is used when a user needs a suggestion to fix contrast, and 'Returns a mathematical candidate, not an automatic edit' distinguishes it from an auto-fix. No explicit exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.1.4- First observed
audit_file - First observed
audit_html - First observed
audit_url - First observed
check_contrast - First observed
explain_issue - First observed
get_wcag_checklist - First observed
suggest_contrast_fix
TDQS
Scored across 7 tools
Each tool targets a clear and distinct task: three different methods for auditing (by URL, HTML string, or file), a contrast checker, a contrast fix suggester, an issue explainer, and a checklist retriever. There is no overlap or ambiguity among them.
Tool names mostly follow a verb_noun pattern (audit_url, audit_html, audit_file, check_contrast, explain_issue, get_wcag_checklist). The only minor deviation is 'suggest_contrast_fix', which is a verb_verb_noun but still clear and consistent in style.
7 tools is an ideal number for this domain. Each tool covers a necessary function without unnecessary redundancy: three audit entry points, two contrast helpers, one explainer, and one checklist reference. The scope is well-scoped and focused on WCAG accessibility.
The tool set provides a complete lifecycle for accessibility auditing: multiple ways to ingest content for auditing, contrast analysis and remediation, issue explanation, and a checklist for manual coverage. There are no obvious gaps for the intended use case of assessing and fixing WCAG compliance.
Maintenance
Related MCP Connectors
Accessibility compliance for AI coding tools. WCAG 2.2 reviews with shared evidence.
Free WCAG 2.2/ADA/508 accessibility MCP: scan, AI fixes, verify, vision audit, localhost tunnel
Website QA for your coding agent: audit SEO, performance, security, accessibility over MCP.
- mcpOAuthcom.screenshotink
Screenshot, diff, audit and sitemap-capture any web page — 5 MCP tools for AI agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that enables LLMs to perform web accessibility testing against WCAG standards using Deque Axe-core API and Puppeteer.6266 npm92MIT
- AlicenseAqualityCmaintenanceProvides conversational, actionable accessibility testing for AI agents, including auditing, prioritization, and code-level fixes.229 npmMIT
- AlicenseNot gradedqualityDmaintenanceProvides AI agents with web accessibility analysis tools via MCP, enabling checks for alt text, heading hierarchy, color contrast, ARIA validation, and form accessibility.52 npmMIT
- AlicenseAqualityCmaintenanceEnables auditing web pages for WCAG violations, applying deterministic fixes and PRs, all through MCP clients like Claude Desktop.7MIT