vertaaux-mcp
VertaaUX MCP 서버
자동화된 감사, 수정 및 검증 루프를 갖춘 유일한 MCP 서버입니다. 7가지 카테고리에 걸쳐 UX 및 접근성 문제를 감지하고, 프레임워크 인식 패치(React, Vue, Angular, Svelte)를 생성하며, Git Trees API를 통해 원자적(atomic) GitHub PR을 열고, 수정 사항이 프로덕션에 적용되었는지 검증합니다. 정책 기반 코드(policy-as-code) 임계값을 사용하여 CI/CD 파이프라인을 위해 구축되었습니다.
이 서버가 차별화되는 이유
verify_fixes루프: 에이전트 루프를 벗어나지 않고 감사, 수정, 재감사 주기를 완료합니다. 과도한 비용 청구를 방지하기 위해 3회 반복으로 예산이 제한됩니다.프레임워크 인식 패치:
suggest_fix는 가장 가까운package.json을 통해 React/Vue/Angular/Svelte/Nuxt를 감지하고 관용적인 패치(React의 경우 JSX 재작성, 그 외에는 HTML 속성 유지)를 생성합니다.원자적 Git Trees PR:
generate_pr은 N개의 패치를 단일 커밋으로 적용하거나 전혀 적용하지 않습니다. 충돌 그래프 + AST 게이트(Babel, vue-eslint-parser, svelte/compiler)를 통해 구문 분석이 불가능한 패치가 PR에 도달하기 전에 차단합니다.결정론적 발견 ID:
rule:hash형식은 감사 실행 전반에 걸쳐 안정적이므로 에이전트가 상태를 저장하지 않고도 발견 사항을 참조할 수 있습니다.멀티 엔진 a11y:
audit_a11y는 axe-core, AccessLint 및 VertaaUX 분석기를 단일 호출로 결합합니다.정책 기반 코드:
policy_check는 GitHub Action의 임계값 평가기를 그대로 반영하여 CI와 에이전트의 판정이 일치하도록 합니다.
Related MCP server: UX MCP Server
기능
38개의 도구: 감사, 수정, PR, 일정, 웹훅, 정책 및 a11y 카테고리 전반
7개의 프롬프트 템플릿: 일반적인 워크플로우용
8개의 리소스 URI: 감사 데이터 및 UX 가이드라인용
엔터프라이즈 제어: 도메인 허용 목록, 속도 제한, PII 마스킹
이중 전송: stdio(CLI/데스크톱) + HTTP 스트리밍(웹)
공식 MCP SDK:
@modelcontextprotocol/sdk를 통한 사양 준수
설치
MCP 공식 레지스트리
npx -y @modelcontextprotocol/cli install io.github.PetriLahdelma/vertaaux-mcpnpm
npm install -g @vertaaux/mcp-server
VERTAAUX_API_KEY=vx_live_... vertaaux-mcp드리프트 정책:
smithery.yaml,glama.json및server.json은npm run generate:manifests를 통해 라이브 MCP 도구 레지스트리에서 자동 생성됩니다. 절대로 직접 수정하지 마십시오. 런북은docs/REGISTRY-PUBLISHING.md를 참조하십시오.
빠른 시작
# Install & build
npm install && npm run build
# Run (stdio transport, for Claude Desktop, VS Code, Cursor)
VERTAAUX_API_KEY=vx_live_... npm start
# Run (HTTP transport, for web clients)
VERTAAUX_API_KEY=vx_live_... npm run start:httpIDE 통합
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json에 추가:
{
"mcpServers": {
"vertaaux": {
"command": "node",
"args": ["/path/to/mcp-server/dist/index.js"],
"env": {
"VERTAAUX_API_KEY": "vx_live_..."
}
}
}
}VS Code (MCP 확장 프로그램 사용)
.vscode/settings.json에 추가:
{
"mcp.servers": {
"vertaaux": {
"command": "node",
"args": ["./mcp-server/dist/index.js"],
"env": {
"VERTAAUX_API_KEY": "vx_live_..."
}
}
}
}Cursor
.cursor/mcp.json에 추가:
{
"mcpServers": {
"vertaaux": {
"command": "node",
"args": ["/path/to/mcp-server/dist/index.js"],
"env": {
"VERTAAUX_API_KEY": "vx_live_..."
}
}
}
}환경 변수
변수 | 필수 | 기본값 | 목적 |
| 예 | — | API 인증 키 |
| 아니오 |
| API 엔드포인트 URL |
| 아니오 |
| HTTP 전송 포트 |
| 아니오 | — |
|
도구
감사 도구 (핵심)
도구 | 설명 |
| 배포된 URL에서 UX 및 접근성 감사를 실행합니다. 심각도별 분류와 함께 상위 5개 문제를 반환합니다. |
| 로컬 코드베이스(React/Vue/Svelte/HTML)에 대한 정적 분석을 수행합니다. 누락된 alt 텍스트, 레이블이 없는 버튼/입력/링크를 찾습니다. |
| HAR 파일(응답 시간, 실패한 요청, 대용량 페이로드) 또는 Lighthouse JSON(접근성 발견 사항)에서 감사합니다. |
| 심각도, 규칙 및 페이지네이션별 필터링을 통해 완료된 감사의 발견 사항을 검색합니다. |
| 작업 ID별로 감사 작업 상태 및 결과를 가져옵니다. |
수정 및 검증 도구
도구 | 설명 |
| 발견 사항에 대한 심층 분석: WCAG 기준, 재현 단계, 수정 지침, 수정 전/후 코드 예제. |
| 신뢰도 점수와 함께 검색/바꾸기 패치를 생성합니다. 단일 및 배치 모드를 지원합니다. |
| 감사에서 특정 문제에 대한 접근성 수정 패치를 생성합니다. |
| 감사 전/후 비교를 통해 패치가 회귀 없이 문제를 해결하는지 검증합니다. |
| 수정 패치가 포함된 GitHub PR 초안을 생성합니다. |
| 심각도순으로 정렬된 제안 블록이 포함된 PR 댓글을 생성합니다. |
분석 도구
도구 | 설명 |
| 컴포넌트 코드에 대한 휴리스틱 UX 검토(브라우저 불필요). 이미지, 버튼, 입력, 링크를 확인합니다. |
| 공급자 독립적 LLM 감사(Vertaa 어댑터를 통한 Mistral/OpenAI). |
| 빠른 감사를 실행하여 스크린샷을 캡처합니다. |
| 카테고리 수준의 점수 차이와 함께 경쟁사 URL 대비 UX 지표를 비교합니다. |
| 문제를 개발자 친화적인 마크다운 지침으로 형식화합니다. |
관리 도구
도구 | 설명 |
| 감사 알림을 위한 웹훅을 등록합니다. |
| 웹훅을 관리합니다. |
| 점수 임계값 알림이 포함된 Cron 기반 예약 감사를 설정합니다. |
| 일정을 관리합니다. |
| 플랜 및 남은 크레딧을 확인합니다. |
| 사용 가능한 엔진 버전을 나열합니다. |
접근성 도구 (멀티 엔진)
도구 | 설명 |
| axe-core, AccessLint 및 사용자 지정 분석기를 사용하는 멀티 엔진 접근성 감사. 구조화된 수정 제안 및 수정 가능성 등급과 함께 WCAG 매핑된 발견 사항을 반환합니다. |
| 현재 접근성 발견 사항을 저장된 기준선과 비교합니다. 수정됨, 신규, 변경 없음 발견 사항을 순 변경 요약과 함께 반환합니다. 기준선을 설정하려면 이전 |
지원 중단
도구 | 설명 |
| 지원 중단 — 대신 |
프롬프트 템플릿
일반적인 감사 시나리오를 위한 사전 구축된 워크플로우 프롬프트:
프롬프트 | 설명 | 인수 |
| URL을 감사하고 수정 권장 사항과 함께 상위 문제를 요약합니다 |
|
| 전체 감사 → 패치 → PR 댓글 워크플로우 |
|
| 경쟁사와 비교하고 UX 격차를 식별합니다 |
|
| 알림과 함께 예약된 모니터링을 설정합니다 |
|
| 로컬 코드베이스에 대한 정적 분석 |
|
리소스
서버는 vertaa:// URI를 통해 MCP 리소스를 노출합니다:
URI 패턴 | 설명 |
| 전체 감사 결과 |
| 경량 요약 |
| 단일 발견 사항 세부 정보 |
| 스크린샷 메타데이터 |
| 주석이 달린 스크린샷 |
| URL에 대한 감사 기록 |
| 점수 추세 분석 |
| UX 가이드라인(버튼, 양식, 탐색, 색상 대비, 오류, 콘텐츠) |
엔터프라이즈 제어
도메인 허용 목록, 속도 제한 및 PII 마스킹을 프로그래밍 방식으로 구성합니다:
import { configureEnterpriseControls } from './server.js';
configureEnterpriseControls({
allowlist: {
allowed_domains: ['*.example.com'],
denied_domains: ['internal.example.com'],
},
budget: {
max_requests: 100,
max_pages: 50,
max_duration_ms: 60000,
max_concurrency: 3,
},
redaction: {
redact_emails: true,
redact_phone_numbers: true,
redact_credit_cards: true,
custom_patterns: [
{ name: 'api_key', pattern: 'sk_[a-zA-Z0-9]{20,}', replacement: '[REDACTED]' }
],
},
});예시: 감사-to-PR 워크플로우
1. audit_url({ url: "https://example.com", mode: "deep" })
→ Returns audit_id with top 5 issues
2. get_findings({ audit_id: "...", severity: "critical" })
→ Returns all critical findings with deterministic IDs
3. suggest_fix({ audit_id: "...", finding_id: "button-name:a1b2c3d4" })
→ Returns search/replace patch with 85% confidence
4. run_verification_suite({ url: "...", selector: "button.submit", rule_id: "button-name" })
→ Verifies fix resolves the issue
5. create_pr_comment({ file_path: "src/Button.tsx", patches: [...] })
→ Generates PR comment with suggestion blocks개발
프로젝트 구조
mcp-server/
├── src/
│ ├── index.ts # Main entry, tool registration
│ ├── server.ts # MCP server config, resources, middleware
│ ├── a11y-tools.ts # Multi-engine a11y audit & baseline diffing tools
│ ├── http.ts # HTTP transport entry point
│ ├── prompts.ts # MCP prompt templates
│ ├── analysis.ts # Component analysis engine
│ ├── patch.ts # Patch generation
│ ├── verification.ts # Patch verification
│ ├── pr-comment.ts # PR comment generation
│ ├── tools/
│ │ ├── audit-url.ts # audit_url tool
│ │ ├── audit-repo.ts # audit_repo tool (static analysis)
│ │ ├── audit-artifact.ts # audit_artifact tool (HAR/Lighthouse)
│ │ ├── get-findings.ts # get_findings tool
│ │ ├── explain-finding.ts# explain_finding tool
│ │ ├── suggest-fix.ts # suggest_fix tool
│ │ ├── generate-pr.ts # generate_pr tool
│ │ └── index.ts # Tool exports
│ ├── transports/
│ │ ├── stdio.ts # Stdio transport (default)
│ │ └── http.ts # HTTP streaming transport
│ ├── middleware/
│ │ ├── allowlist.ts # Domain/path allowlist
│ │ ├── budget.ts # Rate limiting & quotas
│ │ ├── redaction.ts # PII redaction
│ │ └── index.ts # Middleware stack
│ ├── resources/
│ │ ├── audit-results.ts # vertaa://audits/* resources
│ │ ├── screenshots.ts # vertaa://screenshots/* resources
│ │ ├── historical.ts # vertaa://history/* resources
│ │ ├── legacy.ts # Guidelines resources
│ │ └── index.ts # Resource exports
│ ├── schemas/
│ │ ├── audit.ts # Audit schemas (mode, findings)
│ │ ├── findings.ts # Finding schemas
│ │ ├── controls.ts # Enterprise control schemas
│ │ ├── errors.ts # Error schemas
│ │ └── index.ts
│ ├── utils/
│ │ ├── error-recovery.ts # Structured errors with recovery guidance
│ │ ├── change-tracker.ts # Baseline change tracking
│ │ └── deterministic-id.ts # Stable finding IDs
│ └── index.test.ts # Test suite
├── README.md
├── package.json
├── tsconfig.json
└── vitest.config.ts테스트
npm test # Run test suite
npm run test:watch # Watch mode
npm run test:coverage # Coverage report빌드
npm run build # TypeScript → dist/오류 처리
모든 오류에는 구조화된 복구 지침이 포함되어 있습니다:
{
"code": "AUDIT_NOT_FOUND",
"message": "Audit abc123 not found.",
"recovery": {
"action": "Start a new audit for this URL",
"tool": "audit_url",
"params": { "url": "https://example.com" }
}
}오류 코드는 JSON-RPC 2.0을 따릅니다: -32700(구문 분석), -32600(잘못된 요청), -32601(메서드 없음), -32602(잘못된 매개변수), -32603(내부 오류).
API 참조
MCP 서버는 VertaaUX API v1과 통신합니다. API 문서를 참조하십시오.
라이선스
MIT
Available Tools
29 toolsanalyze_componentARead-onlyIdempotent
[session] Static a11y + UX analysis of one component's source (HTML/JSX/Vue/Svelte/Angular). No browser, no network. Best for pre-commit feedback on a snippet. vs audit_repo: scans the whole codebase tree. vs audit_url: runs the full rule engine on a live page.
| Name | Required | Description | Default |
|---|---|---|---|
| componentCode | Yes | Component source code (HTML/JSX/etc) | |
| componentType | No | Type of component being analyzed | |
| framework | No | Framework used for the component |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds value beyond annotations by stating it is static analysis ('No browser, no network'), confirming readOnly and idempotent behavior. Annotations already cover safety profile.
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?
Three concise sentences: core function, usage context, and sibling comparisons. Every sentence provides unique value with no 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?
Fully covers purpose, usage, and what the tool does not do. With output schema present, no need to explain return values. Sibling differentiation is excellently handled.
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 coverage is 100%, so baseline 3. Description mentions 'static a11y + UX analysis' which gives context but doesn't add specific parameter details beyond 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?
Clearly states verb 'analyze' and resource 'component's source' with specific frameworks. Differentiates from siblings audit_repo and audit_url by contrasting scope.
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?
Explicitly says 'Best for pre-commit feedback on a snippet' and provides clear when-not instructions by naming alternatives audit_repo and audit_url.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_a11yA
[a11y] Multi-engine a11y audit on a URL (axe-core + AccessLint + VertaaUX analyzers). Returns normalised WCAG findings with machine-actionable fix suggestions. Set baseline_name to save for later diff_a11y.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to audit (must be publicly accessible) | |
| baseline_name | No | If provided, save the findings under this name for later use with diff_a11y | |
| min_impact | No | Filter findings to this impact level and above. Defaults to showing all. | |
| mode | No | Audit depth: basic (fastest), standard (default), deep (most thorough) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, idempotentHint=false. The description adds context that the tool runs multiple engines and returns fix suggestions, but does not disclose behavioral traits beyond what annotations provide. 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?
Two sentences with no waste. The leading '[a11y]' tag aids quick identification. Every word adds value.
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 complexity (4 params, output schema exists, annotations present), the description covers purpose, key parameters, and optional saving. It is sufficient for an agent to understand and invoke the tool correctly.
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 coverage is 100% with parameter descriptions. The description adds value by explaining baseline_name as saving for future diff and mode as audit depth levels, going beyond 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?
Description clearly states it's a multi-engine accessibility audit on a URL, listing specific engines (axe-core, AccessLint, VertaaUX) and output type (normalized WCAG findings with fix suggestions). This distinguishes it from sibling tools like diff_a11y and run_audit.
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?
Description mentions saving findings for diff via baseline_name, providing a clear use case. However, it does not explicitly state when to use this tool vs alternatives like run_audit or analyze_component, missing explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_artifactA
[audit] Audit a captured browser artifact instead of a live URL. Use for CI-run debugging or customer bug reports without re-running the browser. Supports: har (response times, failures, payloads, security headers), lighthouse (a11y + perf JSON). playwright-trace returns INVALID_PARAMS, use audit_url.
| Name | Required | Description | Default |
|---|---|---|---|
| artifact_path | Yes | Absolute or workspace-relative path to the artifact file on disk (e.g. "./test-results/trace.har"). | |
| artifact_type | Yes | Artifact format. Supported: "har" (HTTP Archive), "lighthouse" (Lighthouse JSON). "playwright-trace" is accepted by the enum but returns INVALID_PARAMS — use audit_url instead. | |
| url_hint | No | Canonical page URL for generating stable finding IDs (recommended — without it, findings get artifact-local IDs that do not cross-reference with audit_url runs against the live page). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide basic hints (readOnlyHint=false, etc.), but the description adds key behavioral details: supported artifact types (har, lighthouse), that playwright-trace is invalid, and that omitting url_hint causes local IDs that don't cross-reference with live runs.
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?
Two well-structured sentences plus a list – no filler. First sentence states purpose and use cases, second specifies supported types, third gives exclusion. Every sentence adds value.
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 3 parameters, an output schema, and annotations, the description covers purpose, usage, parameter details, and behavior completely. It provides all necessary context for correct selection and invocation.
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 coverage is 100%, but description adds meaning beyond schema: it clarifies artifact_type enum values (especially that playwright-trace returns error), and explains url_hint's role in cross-referencing findings with audit_url runs.
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 audits a captured browser artifact (not live URL), with specific use cases like CI debugging and bug reports. It distinguishes from sibling tools like audit_url by focusing on artifacts.
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?
Explicitly says when to use: 'Use for CI-run debugging or customer bug reports without re-running the browser.' It also tells when not to use: 'playwright-trace returns INVALID_PARAMS, use audit_url'. This provides clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_repoA
[audit] Static UX + a11y scan of a local codebase tree (React/Vue/Svelte components, HTML templates). Detects missing alt text, unlabeled buttons/inputs/links, placeholder labels. For live pages use audit_url.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to codebase root | |
| include | No | Glob patterns for files to include | |
| exclude | No | Glob patterns for files to exclude | |
| mode | No | Analysis depth: basic (first 50 files), standard (200), deep (500) | standard |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-destructive behavior (readOnlyHint=false, destructiveHint=false). The description adds context by specifying it is a static scan and lists types of issues detected. While it does not detail side effects, the nature of a static scan is non-mutating, and annotations already cover safety.
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 concise (two sentences), front-loaded with the core purpose, and includes a sibling distinction. Every sentence adds value without 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 the existence of an output schema (as indicated by context signals) and the clear parameter documentation, the description is complete. It explains the tool's role, what it detects, and when to use an alternative, fully covering needed context.
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 descriptions cover all parameters (100% coverage), providing adequate documentation. The tool description does not add further meaning beyond the schema; it reiterates the tool's purpose but does not enhance parameter understanding.
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's purpose: 'Static UX + a11y scan of a local codebase tree' and lists specific detections (missing alt text, unlabeled elements). It also distinguishes from sibling 'audit_url' for live pages.
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 advises when not to use this tool ('For live pages use audit_url'), providing a clear alternative. It implies usage for local codebase scanning.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_urlA
[audit] Run a full UX + a11y audit on a live URL. Returns top 5 issues + scores; use get_findings for the full list. Offline mode (localhost/file://) is static-only.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Website URL to audit (must be publicly accessible) | |
| mode | No | Audit depth: basic (5-10s), standard (15-30s), deep (60s+) | standard |
| timeout_ms | No | Max wait time in milliseconds | |
| wait | No | Wait for completion or return immediately with audit_id | |
| baseline_id | No | Previous audit ID to compare against (enables change tracking) | |
| force_compare | No | Override cross-major engine version comparison block (BASE-03 escape hatch) | |
| offline | No | Offline mode for local HTML/Storybook (file:// or localhost URLs) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate it's not read-only (runs audit), not destructive, not idempotent. Description adds that offline mode is static-only, which is a behavioral constraint. It doesn't discuss rate limits or side effects beyond the audit computation. No contradiction 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 one sentence with a short follow-up note. It is front-loaded with the purpose and uses concise language. Every sentence adds value.
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 7 parameters and output schema exists, the description covers the essential: what the tool does, output format (top 5 issues + scores), and a special mode caveat. It references a sibling for more details. It doesn't explain 'static-only' further, but with output schema present, it is fairly 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 context about offline mode for localhost/file:// URLs, which adds meaning to the offline parameter. However, it doesn't elaborate on other parameters like timeout, wait, baseline_id, etc. The additional value beyond schema is marginal.
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 runs a full UX and accessibility audit on a live URL, returns the top 5 issues and scores, and distinguishes from get_findings for the full list. It also notes offline mode limitations.
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 tells when to use this tool (to get top issues) and when to use get_findings (for full list). It also mentions offline mode suitability for local HTML/Storybook. Could be slightly more explicit about when not to use, but it's clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_screenshotA
[session] Capture a hosted screenshot of a URL plus the full audit result. CONSUMES 1 audit quota, implemented via audit_url under the hood, not a lightweight headless snapshot. Use mode='basic' for cheapest. Hints (viewport, fullPage, highlightIssues, waitForSelector) are advisory.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The website URL to capture | |
| mode | No | Audit depth mode (default: basic) | |
| wait | No | Wait for audit completion (default: true) | |
| timeout | No | Optional wait timeout in milliseconds | |
| interval | No | Polling interval in milliseconds | |
| viewport | No | Viewport hints (currently informational) | |
| fullPage | No | Full-page capture hint (informational) | |
| highlightIssues | No | Highlight issues hint (informational) | |
| waitForSelector | No | Selector to wait for before capture | |
| user_agent | No | Optional custom user agent string | |
| engine_version | No | Optional engine version to use |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors beyond annotations: consumes audit quota, implemented via audit_url (not lightweight), and hints are advisory. Annotations only say readOnlyHint=false, which aligns with the consumption note, no contradiction.
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 concise (two sentences) and front-loaded with the main purpose. The prefix '[session]' adds context, and every sentence contributes meaningful information. Could be slightly more structured, but overall 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?
Given 11 parameters and the presence of an output schema, the description adequately covers core behavior (screenshot+audit, quota consumption, advisory hints). It explicitly notes the implementation via audit_url, which provides context among siblings. Minor gap: no mention of return format, but output schema exists.
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?
Although schema coverage is 100% (baseline 3), the description adds value by clarifying that hints (viewport, fullPage, etc.) are advisory and not guaranteed to be honored. It also highlights mode='basic' as most cost-effective, aiding parameter selection.
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's purpose: 'Capture a hosted screenshot of a URL plus the full audit result.' This is a specific verb+resource+outcome, distinguishing it from lightweight screenshot tools by emphasizing it includes an audit.
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 offers a usage tip ('Use mode='basic' for cheapest') but lacks guidance on when to use this tool versus siblings like audit_url or run_audit. No explicit when-not-to-use or alternative comparisons are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_competitorsA
[session] Audit your site vs N competitor URLs in parallel, return side-by-side scores + top-5 differentiators with optional industry benchmarks. Best for positioning, pitch decks, quarterly scans. vs diff_audits: that compares two existing audit IDs (free); this runs N+1 fresh audits (consumes N+1 quota).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Your site's URL | |
| competitors | Yes | Competitor URLs to compare against | |
| industry | No | Industry for benchmark context | |
| mode | No | Audit depth mode (default: basic) | |
| wait | No | Wait for audit completion (default: true) | |
| timeout | No | Optional wait timeout in milliseconds | |
| interval | No | Polling interval in milliseconds |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool runs N+1 fresh audits (not read-only), consumes quota, and returns side-by-side scores with differentiators. This adds context beyond the annotations (readOnlyHint=false, destructiveHint=false) without contradiction.
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, front-loaded with the core action, and each sentence provides essential information without redundancy. It is highly concise and structured effectively.
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 presence of an output schema, the description need not detail return format, but it still mentions scores and differentiators. It covers key behavioral aspects like parallelism, quota consumption, and use cases, making it complete for an agent to decide correctly.
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 coverage is 100%, so the baseline is 3. The description adds value by mentioning 'parallel' execution, 'optional industry benchmarks', and quota consumption, but does not deeply elaborate on each parameter's usage. The added context justifies 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 states a specific verb+resource: 'Audit your site vs N competitor URLs in parallel' and clearly distinguishes from sibling tool diff_audits, which compares existing audits. This makes 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 'Best for positioning, pitch decks, quarterly scans' and contrasts with diff_audits, stating when to use this tool (fresh audits) vs when to use the alternative (existing audits). It also notes quota consumption.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_pr_commentA
[pr] Generate a PER-FILE GitHub PR comment with in-line gh pr suggestion blocks for a11y patches against ONE file, ordered by severity. Returns markdown ready to post.
vs format_pr_comment: audit-level summary. vs generate_pr: opens the actual PR.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the file being patched (for comment header) | |
| patches | Yes | Array of patches with optional verification status. Patches are ordered by severity (critical first). | |
| include_unverified | No | Include patches without verification (default: true) | |
| include_failed | No | Include patches that failed verification (default: false) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false and destructiveHint=false. The description adds behavioral details: returns markdown (not posting), patches ordered by severity, in-line suggestion blocks. No contradiction 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?
Three concise sentences: first defines purpose, second and third compare to siblings. No wasted content; every sentence adds value.
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?
Description covers purpose, output format, and sibling differentiation. Given output schema exists and 2 required parameters, it provides sufficient context. Could mention prerequisites (e.g., PR context) but not necessary.
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 the schema fully documents parameters. The description adds minor guidance about patches being ordered by severity, but does not compensate beyond baseline for high 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?
Description clearly states the tool generates a per-file GitHub PR comment with in-line suggestion blocks for a11y patches, ordered by severity, returning markdown. It also explicitly differentiates from siblings 'format_pr_comment' and 'generate_pr'.
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?
Description provides explicit comparisons to two sibling tools ('vs format_pr_comment' and 'vs generate_pr'), guiding when to use this tool instead. It does not include explicit 'when not to use' beyond those comparisons, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_scheduleA
[schedule] Create a recurring audit on a cron schedule. Best for daily a11y regression checks, weekly competitor diffs, post-deploy smoke audits. Returns id + next_run_at. Set alert_on_fail / alert_on_score_drop + score_threshold to trigger webhook_url + email_recipients alerts. Counts against monthly quota.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The website URL to audit | |
| mode | No | Audit depth mode (default: basic) | |
| cron_expression | Yes | Cron expression (e.g., '0 9 * * 1' for Mondays at 9am) | |
| name | Yes | Name for this schedule | |
| enabled | No | Whether the schedule is enabled (default: true) | |
| alert_on_fail | No | Alert if audit fails (default: true) | |
| alert_on_score_drop | No | Alert if score drops (default: false) | |
| score_threshold | No | Alert if score drops below this threshold (0-100) | |
| webhook_url | No | Optional webhook URL for alerts | |
| email_recipients | No | Optional comma-separated email addresses for alerts |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds behavioral details beyond annotations: counts against monthly quota, returns id + next_run_at, and explains alert trigger mechanism. 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?
Two sentences, front-loaded with purpose and use cases, no redundant information. Every sentence adds value.
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?
Covers purpose, use cases, alert configuration, and quota. Mentions return value. Lacks error handling or prerequisites, but adequate for a create tool with good schema and output schema.
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 coverage is 100%, so baseline is 3. Description adds value by grouping alert parameters and explaining their combined effect, going beyond individual schema descriptions.
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?
Description clearly states 'Create a recurring audit on a cron schedule' and gives specific use cases like 'daily a11y regression checks, weekly competitor diffs, post-deploy smoke audits', distinguishing it from one-time audit tools like run_audit.
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?
Description provides strong usage context (e.g., 'Best for daily a11y regression checks') and mentions quota impact, but does not explicitly contrast with siblings like run_audit or update_schedule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_webhookA
[webhook] Register an HTTPS endpoint to receive audit event notifications (audit.completed, audit.failed, etc.). Outgoing requests are HMAC-SHA256-signed via your secret in X-Vertaaux-Signature. Returns id + active status.
URL must be HTTPS and externally reachable; SSRF-blocked URLs are rejected. Use list_webhooks first to avoid duplicates.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | HTTPS URL that will receive POST callbacks. Must be publicly reachable — localhost and private IPs are blocked by SSRF protection. | |
| secret | Yes | Shared secret (16-128 chars) for HMAC-SHA256 signing. Your receiver verifies the X-Vertaaux-Signature header against this secret. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, destructiveHint=false) are present. The description adds valuable behavioral context: HMAC-SHA256 signing, accepted event types, SSRF protection, and what is returned (id + active status). No contradiction 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?
Three sentences efficiently convey purpose, mechanism, constraints, and usage hint. Front-loaded with main action, 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?
For a two-parameter tool with an output schema, the description covers all necessary aspects: purpose, how it works, constraints, return values, and preventative measure against duplicates. It is fully 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 coverage is 100%, and the description reinforces the parameter meanings with extra context (e.g., URL must be publicly reachable, secret used for signing). This adds meaning beyond 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 'register' and the resource 'HTTPS endpoint to receive audit event notifications'. It distinguishes from siblings by suggesting to use list_webhooks first to avoid duplicates, and implicitly distinguishes from delete_webhook.
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?
Explicit guidance is given: 'Use list_webhooks first to avoid duplicates.' This tells the agent when to use creation versus checking existing webhooks. Also notes URL constraints and SSRF blocking, which inform usage conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_scheduleADestructive
[schedule] DESTRUCTIVE: permanently delete an audit schedule by ID; future runs are cancelled. Prefer update_schedule with enabled=false to pause without losing config. Look up ID via list_schedules.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Schedule ID to delete (from list_schedules) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true; description adds that deletion is permanent and cancels future runs, which enhances transparency beyond 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?
Extremely concise single sentence with critical info front-loaded, no unnecessary 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?
Given low complexity (1 param, destructive action, output schema exists), the description fully covers behavior, alternatives, and parameter sourcing. No gaps.
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 has 100% coverage for the single parameter; description adds value by specifying how to obtain the ID (from list_schedules), which aids correct invocation.
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?
Clearly states 'permanently delete an audit schedule by ID' with explicit destructive connotation. Distinguishes from sibling tools like update_schedule and list_schedules.
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?
Explicitly advises to use update_schedule with enabled=false as a safer alternative, and directs to list_schedules for ID lookup, providing strong usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_webhookADestructive
[webhook] DESTRUCTIVE: permanently delete a webhook by ID; future events stop delivering. No soft-delete. Look up ID via list_webhooks.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook ID to delete (from list_webhooks) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructiveHint=true. Description adds context: 'DESTRUCTIVE', 'permanently delete', 'No soft-delete', and 'future events stop delivering', which exceeds annotation information. No contradiction.
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?
Two sentences with no wasted words. Important terms like 'DESTRUCTIVE' are front-loaded. Each sentence adds essential information.
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 only one parameter and an output schema present, the description completely covers the tool's purpose, usage, and effect. No additional context needed.
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 covers 100% of the single parameter with description 'Webhook ID to delete (from list_webhooks)'. The overall description reinforces the parameter's purpose by mentioning list_webhooks, adding value beyond 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?
Explicitly states 'permanently delete a webhook by ID; future events stop delivering. No soft-delete.' Clearly identifies the action, resource, and effect, distinguishing it from sibling list_webhooks.
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?
Directs the agent to 'Look up ID via list_webhooks,' providing a clear prerequisite and when to use this tool. The destructive nature implies not to use for temporary disabling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_a11yARead-onlyIdempotent
[a11y] SECONDARY a11y diff using NAMED baselines (saved earlier via audit_a11y with baseline_name). Returns regressions + fixes + unchanged + net-change summary. vs diff_audits: prefer that, works with any audit IDs, full 7-category coverage. Use diff_a11y only when you already have a named a11y baseline.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to re-audit | |
| baseline | Yes | Name of the saved baseline to diff against (must have been saved with audit_a11y baseline_name) | |
| min_impact | No | Filter findings to this impact level and above. Defaults to showing all. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes return categories (regressions, fixes, unchanged, net-change summary) and prerequisite that baseline must be saved via audit_a11y, going beyond annotations that already mark it read-only and idempotent.
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?
Three sentences efficiently convey purpose, alternatives, and usage condition without fluff.
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's complexity (3 params, 2 required, output schema present, annotations present), the description covers when to use, what it does, prerequisites, and return types completely.
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 coverage is 100% so baseline is 3, but the description adds critical context that the baseline parameter must be a named baseline saved via audit_a11y, which enhances understanding beyond 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?
Description clearly states 'SECONDARY a11y diff using NAMED baselines' and lists return categories, distinguishing from sibling diff_audits with explicit preference and scope difference.
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?
Explicitly compares with diff_audits ('prefer that') and states condition for using this tool: 'only when you already have a named a11y baseline.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_findingARead-onlyIdempotent
[findings] Deep-dive a specific finding by ID: returns element HTML, screenshot URL, WCAG criteria, user impact, repro steps, before/after fix code. Use after audit_url to expand on a finding from get_findings.
| Name | Required | Description | Default |
|---|---|---|---|
| finding_id | Yes | Finding ID from get_findings (format: rule:hash) | |
| audit_id | Yes | Audit ID that contains this finding | |
| include_screenshot | No | Include screenshot URL | |
| include_trace | No | Include trace URL (larger payload) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, making the tool's safety clear. The description adds value by detailing the specific data returned (HTML, screenshot, WCAG criteria, etc.) beyond what annotations convey.
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, front-loaded sentence that immediately conveys the tool's purpose and outputs. No redundant words, and the usage hint is concise. Every part earns its place.
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 description covers the tool's inputs, outputs, and usage context (after audit_url). An output schema exists, so detailed return format documentation is not needed. Given the tool's complexity, the description is fully adequate.
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 has 100% coverage, meaning each parameter already has a thorough description (e.g., 'Finding ID from get_findings (format: rule:hash)'). The description adds minimal additional meaning, 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 action ('deep-dive'), the resource ('a specific finding by ID'), and the output (element HTML, screenshot URL, WCAG criteria, etc.). It also distinguishes from sibling tools like get_findings by indicating this is a deeper dive on a specific finding.
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 advises 'Use after audit_url to expand on a finding from get_findings', providing clear context on when to use this tool. It could improve by mentioning when not to use it, but the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_issueARead-onlyIdempotent
[session] Format an INLINE audit issue object into developer-friendly guidance: WCAG explanation, user impact, code-level fix, canonical reference links. No network call. vs explain_finding: that fetches by ID from the backend; this one takes the issue literal you already have.
| Name | Required | Description | Default |
|---|---|---|---|
| issue | Yes | The issue object from an audit result | |
| context | No | Optional additional context |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds 'No network call' as extra behavioral context beyond annotations, confirming it is a client-side operation. 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?
Two sentences pack significant information without excess. First sentence lists outputs concisely; second sentence provides sibling comparison. Efficient but slightly dense.
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 complexity of nested object input and presence of output schema, the description sufficiently explains the tool's purpose, scope, and differentiation. Missing details like output format are covered by output schema.
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?
Input schema has 100% coverage (both parameters described in detail with field descriptions). The description does not add new parameter-level information beyond what the schema provides, so 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 tool formats an inline audit issue object into developer-friendly guidance, listing specific outputs (WCAG explanation, user impact, code-level fix, reference links). It also distinguishes from the sibling `explain_finding` by noting this tool takes the issue literal directly rather than fetching by ID.
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?
Explicitly contrasts with `explain_finding`, stating that `explain_issue` takes an inline issue object and makes 'No network call'. This provides clear guidance on when to use this tool versus the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_patchA
[fix] LEGACY issue-based fix generator (no framework detection). Returns search/replace patch + confidence + explanation. vs suggest_fix (PREFERRED): framework-aware (React/Vue/Angular/Svelte), finding-based, JSX-idiomatic patches. Use generate_patch only for legacy job_id/issue_id consumers.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The audit job ID containing the issue | |
| issue_id | Yes | The specific issue ID to generate a patch for | |
| file_path | No | Path to the source file containing the issue (preferred over inline content) | |
| file_content | No | Inline source code if file_path not available |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds context beyond annotations: reveals legacy nature, lack of framework detection, and output contents (patch, confidence, explanation). Annotations already indicate it's not read-only and not destructive.
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?
Extremely concise: two sentences, front-loaded with key facts (legacy, output, comparison). Every sentence adds value.
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 4 parameters, output schema, and sibling comparisons, the description covers purpose, usage guidance, and key distinctions without redundancy. No gaps.
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?
Input schema has 100% coverage with descriptions for all 4 parameters. The description implies the role of job_id/issue_id and file_path/file_content but does not add new semantics beyond 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?
Clearly states it's a LEGACY issue-based fix generator that returns a search/replace patch with confidence and explanation. Distinct from suggest_fix, which is framework-aware and preferred.
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?
Explicitly advises to use generate_patch only for legacy job_id/issue_id consumers, and compares to suggest_fix as the preferred alternative with framework-awareness.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_prA
[pr] OPENS a draft GitHub PR with N a11y patches applied ATOMICALLY via Git Trees (all-or-nothing commit). Refuses overlapping patches (CONFLICT) and unparseable JS/TS/JSX/Vue/Svelte (AST_INVALID via Babel/vue-eslint-parser/svelte/compiler gate). Inputs from suggest_fix (preferred) or generate_patch (legacy). Requires GITHUB_TOKEN; without it, set local_only=true to get patch content. Always creates DRAFT, never auto-merges.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | GitHub repo owner (user or org) | |
| repo | Yes | GitHub repo name | |
| base_branch | No | Base branch for PR | main |
| patches | Yes | Patches from suggest_fix tool | |
| title | No | PR title (auto-generated if not provided) | |
| body | No | PR description (auto-generated if not provided) | |
| draft | No | Create as draft PR (recommended) | |
| local_only | No | Just return patch content, do not create PR |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations being minimal (readOnlyHint=false, destructiveHint=false, idempotentHint=false), the description adds rich behavioral context: atomic all-or-nothing commit, refusal of conflicts and invalid AST, draft-only creation, no auto-merge, and token requirement. No contradiction 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?
Description is dense but well-structured, starting with main purpose and then detailing constraints and inputs. Some redundancy could be trimmed, but it's efficient overall.
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?
Covers purpose, guidelines, behavior, parameter context adequately. Given presence of output schema, description focuses on inputs and behavior. Minor omission: error handling beyond CONFLICT and AST_INVALID, but not critical.
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 coverage is 100%, so description adds supplementary context: patches come from suggest_fix, local_only as fallback without token. This adds value beyond schema definitions.
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 it opens a draft GitHub PR with a11y patches applied atomically via Git Trees, distinguishing it from siblings like suggest_fix and generate_patch. It specifies it always creates draft PRs and never auto-merges.
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?
Explicitly states when to use (with patches from suggest_fix, preferred) and alternatives (generate_patch is legacy). Provides conditions: requires GITHUB_TOKEN; otherwise set local_only=true. Also mentions it refuses overlapping patches and unparseable files.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_auditARead-onlyIdempotent
[audit] Fetch the status and (when completed) results of an audit job by ID: status, progress 0-100, 7-category scores, issues array. Poll after audit_url/run_audit/run_llm_audit/audit_a11y with wait=false. Same ID namespace across all of them.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Audit job identifier returned by audit_url, run_audit, run_llm_audit, or audit_a11y (field name varies — job_id, audit_id, or id — they are the same value). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent behavior. Description adds return format details (status, progress, scores, issues) not in 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?
Three concise sentences, front-loaded with purpose, 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?
With output schema present, description covers key return fields, usage context, and ID namespace. Complete for effective use.
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 covers job_id with description of field name variations. Description adds value by stating same ID namespace across all audit tools.
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?
Clearly states the tool fetches status and results of an audit job, distinguishing it from sibling tools that initiate audits.
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?
Explicitly recommends polling after specific audit initiation tools when wait=false, and notes the shared ID namespace.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_enginesARead-onlyIdempotent
[quota] List audit engine versions on this account: semver-tagged releases plus a 'latest' alias and per-version release notes. Use to pin audits for reproducible deltas or discover newer analyzers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate safe, read-only, idempotent behavior. Description adds valuable context about quota implications and the structure of results (semver, alias, release notes), exceeding annotation coverage.
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?
Two concise sentences: first defines action and scope, second provides use cases. No wasted words, information is front-loaded.
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?
Description covers purpose, usage, quota context, and result structure. Annotations and output schema complement it well, making the definition complete for this simple listing tool.
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?
No parameters in schema, so description doesn't need param details. It implicitly confirms no input required, meeting baseline for zero-parameter tool.
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?
Description clearly states the tool lists audit engine versions, specifying semver releases, 'latest' alias, and release notes. It distinguishes the tool from siblings by focusing on engine version listing, not auditing or analysis.
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?
Explicitly mentions two use cases: pinning audits and discovering newer analyzers. Provides clear context for when to use, though no explicit exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_findingsARead-onlyIdempotent
[findings] Get findings from a completed audit with pagination + filtering by severity, rule, or change status. Use after audit_url/audit_repo/audit_artifact for detailed findings.
| Name | Required | Description | Default |
|---|---|---|---|
| audit_id | Yes | Audit ID from audit_url or similar | |
| severity | No | Filter by severity level | |
| rule_id | No | Filter by rule ID (e.g., "button-name") | |
| status | No | Filter by change status (requires baseline) | |
| limit | No | Results per page (max 100) | |
| offset | No | Pagination offset |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds pagination/filtering context but no additional behavioral traits beyond what annotations provide.
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?
Two sentences, but the first includes a redundant tag '[findings]' that could be removed. Otherwise concise and front-loaded.
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?
With output schema existing and annotations covering safety, the description is complete for a filtering tool, though it doesn't detail return structure.
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 coverage is 100%, and description mentions filtering and pagination parameters but adds no syntax or format details beyond 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?
Description clearly states verb (Get) and resource (findings), specifies pagination and filtering options, and guides usage after other audit tools, distinguishing it from siblings.
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?
Explicitly says 'Use after audit_url/audit_repo/audit_artifact for detailed findings,' providing sequential context, though no exclusion or alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quotaARead-onlyIdempotent
[quota] Get the authenticated account's tier (free/pro), audits remaining in current billing window, reset timestamp, and feature flags. Call before batch audits to avoid mid-run quota errors.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so safety is clear. The description adds value by listing the exact data returned (tier, audits remaining, reset timestamp, feature flags) and the rationale for pre-batch usage, which goes beyond 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?
Two sentences, no redundancy. First sentence front-loads the purpose and return fields; second sentence provides crucial usage guidance. Every word earns its place.
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 zero-parameter, read-only tool with a full output schema, the description covers all essential aspects: return fields, usage scenario, and purpose. No gaps remain.
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?
No parameters exist, so the description has no burden. The schema coverage is 100%, and the description adds context about what values are returned, which is appropriate. Baseline 4 for zero-parameter tools.
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 specifies the verb ('Get') and resource ('the authenticated account's tier, audits remaining, reset timestamp, and feature flags'). It differentiates itself from siblings by focusing on quota information, with no other sibling serving a similar purpose.
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?
Explicitly advises 'Call before batch audits to avoid mid-run quota errors,' giving a concrete use case and timing recommendation. No exclusions or alternatives needed given the tool's unique purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scheduleARead-onlyIdempotent
[schedule] Read full config of an audit schedule by ID: cron, target URL, audit mode, enabled, alerts (alert_on_fail / alert_on_score_drop + score_threshold), webhook_url, email_recipients, last/next_run_at. Look up ID via list_schedules.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Schedule ID (look up via list_schedules) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, and non-destructive. The description aligns by stating 'Read'. It adds transparency by listing the fields returned. No contradiction. However, it does not disclose any additional behavioral traits beyond 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 sentences that convey purpose, return fields, and ID lookup method. No filler.
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 single-parameter read tool with output schema, the description covers everything needed: purpose, ID source, and return fields. It is fully 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?
The schema already describes the 'id' parameter fully. The description adds useful context on how to find the ID (via list_schedules), which aids the agent. Since schema coverage is 100%, baseline is 3, and the added context raises it to 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 uses a specific verb 'Read' and specifies the resource 'audit schedule by ID'. It enumerates the fields returned, and explicitly references sibling tool 'list_schedules' for ID lookup, distinguishing its purpose.
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?
It provides clear context for when to use (after ID obtained from list_schedules) but does not state exclusions or alternative tools explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_schedulesARead-onlyIdempotent
[schedule] List all audit schedules on the account: ID, target URL, cron, mode, enabled, alert config, next_run_at. Use before update_schedule or delete_schedule to look up the ID.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds value by listing returned fields and the usage hint, but does not contradict annotations. No additional behavioral traits beyond annotations are missing.
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 tool category and action, then lists fields and usage hint. 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?
Given no parameters and an existing output schema, the description adequately explains what the tool does, what it returns, and how it should be used in a workflow. No gaps remain.
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 has no parameters, so schema description coverage is 100%. The description does not need to add parameter info; baseline 4 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 lists all audit schedules and mentions specific fields returned (ID, target URL, cron, etc.). It distinguishes from siblings by explicitly saying to use it before update_schedule or delete_schedule for ID lookup.
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 gives explicit usage guidance: 'Use before update_schedule or delete_schedule to look up the ID.' It does not mention when not to use or alternatives like get_schedule, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhooksARead-onlyIdempotent
[webhook] List webhooks on the account: ID, URL, subscribed event types (audit.completed, audit.failed, etc.), active status, last-delivery timestamp. Use before create_webhook (avoid duplicates) or delete_webhook (look up ID).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, so the safety profile is clear. The description adds context about the specific fields returned, which is helpful beyond 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?
Short and front-loaded: starts with a tag, then lists output fields concisely, then gives usage guidance. Every sentence adds value, 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?
Given zero parameters, clear annotations, and an output schema, the description is complete: it tells what the tool returns and when to use it relative to siblings.
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 has zero parameters with 100% coverage, so baseline is 4. No parameter info needed; description adds no param info, which 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 it lists webhooks on the account, specifying the output fields (ID, URL, subscribed event types, active status, last-delivery timestamp). This distinguishes it from sibling tools like create_webhook and delete_webhook.
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?
Explicitly says 'Use before create_webhook (avoid duplicates) or delete_webhook (look up ID).' This provides clear when-to-use and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_auditA
[audit] DEPRECATED: use audit_url. Kept for legacy clients only.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The website URL to audit | |
| mode | No | Audit depth mode (default: basic) | |
| timeout | No | Optional timeout in milliseconds | |
| user_agent | No | Optional custom user agent string | |
| engine_version | No | Optional engine version to use (default: latest) | |
| fail_on_score | No | Fail if overall score is below this threshold (0-100) | |
| fail_on_drop | No | Fail if score drops by this amount from previous audit |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not add behavioral information beyond what annotations provide. Annotations indicate readOnlyHint=false and destructiveHint=false, but the description merely states it is an audit tool. It does not clarify side effects or any behavioral traits, so it fails to add 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 extremely concise, consisting of a single sentence that immediately conveys the category, deprecation status, and recommended alternative. No wasted words; front-loaded with key information.
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 description is complete for a deprecated tool: it tells the agent what it does and what to use instead. However, it could mention that the tool still functions for legacy clients, but the context of deprecation is sufficient. Output schema exists but is not referenced.
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?
Input schema has 100% description coverage for all 7 parameters. The description does not elaborate on any parameter meanings, but the baseline is 3 since schema already fully documents them. No additional semantic value added.
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 labels the tool as an audit tool ('[audit]') and clearly states it is deprecated, directing the agent to use 'audit_url' instead. This leaves no ambiguity about the tool's function and its intended replacement.
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 provides explicit guidance: only use this tool for legacy clients, and otherwise use 'audit_url'. This is a clear directive on when and when not to use the tool, with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_llm_auditA
[audit] LLM-based UX audit of a URL via the VertaaUX provider-agnostic adapter (Mistral/OpenAI/etc.). Returns qualitative narrative on hero clarity, messaging, copy tone, conversion nudges, things rule-based audits miss. vs audit_url: that's rule-based WCAG/a11y. Consumes LLM credits, separate from audit quota.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The website URL to audit | |
| maxTokens | No | Optional max tokens for the LLM response (<=1200) | |
| temperature | No | Optional temperature for sampling (0-1) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide basic safety hints, and the description adds key behavioral context: it consumes LLM credits and operates via an external adapter. No contradiction, but could further disclose side effects like persistence.
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 sentences plus a contrast line, front-loaded with the core function. Every sentence adds value with no 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 the existence of an output schema, the description sufficiently covers purpose and usage boundaries. It could mention prerequisites like URL accessibility but remains largely 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?
Input schema covers all three parameters with descriptions (100% coverage). The tool description adds no additional parameter detail beyond indicating the nature of the audit.
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 it performs an LLM-based UX audit on a URL, listing specific qualitative aspects like hero clarity and messaging, and distinguishes itself from the rule-based sibling audit_url.
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?
Explicitly contrasts with audit_url (rule-based WCAG/a11y) and notes LLM credit consumption, providing clear guidance on when to use this tool and its resource implications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_verification_suiteA
[audit] PRE-deploy patch verification: test a proposed patch (search/replace + CSS selector) against a live URL in a sandboxed browser BEFORE you commit. Runs before/after axe-core, returns score delta + rule pass. vs verify_fixes: that's POST-deploy URL-vs-baseline comparison; this is patch-vs-live in isolation.
| Name | Required | Description | Default |
|---|---|---|---|
| patch_id | No | ID of a previously generated patch to verify (not yet supported) | |
| patch_content | No | Inline patch content for verification | |
| url | Yes | URL to verify the patch against — must be a live, reachable page (the verifier renders it in a headless browser). | |
| selector | Yes | CSS selector of the element that had the original issue. HOW TO GET IT: (1) call get_findings(audit_id, finding_id) — returns finding.selector directly; (2) or call explain_finding(finding_id) which includes the element selector and context; (3) or read finding.node.target[0] from an axe-core finding. Required — the verifier scopes the before/after check to this element. | |
| rule_id | No | Axe-core rule ID to check is fixed (e.g., 'color-contrast', 'button-name', 'link-name'). When omitted, all rules on the selector element are checked. Strongly recommended for precise pre-deploy verification — source it from `finding.rule` in the audit response. | |
| timeout_ms | No | Verification timeout in milliseconds (default: 60000, max: 120000) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses behavioral traits: runs in a sandboxed browser, performs before/after axe-core checks, returns score delta and rule pass. Annotations indicate non-destructive and non-read-only; description adds meaningful process details without contradiction.
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 concise (3-4 sentences), front-loaded with the key action, and every sentence adds value. No superfluous wording.
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?
Covers main use case, parameter sourcing, and distinguishes from an alternative. With an output schema present, the description does not need to detail return format extensively. However, it could mention error handling or prerequisites for 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?
The description significantly augments the input schema by providing practical guidance for obtaining the selector (from get_findings, explain_finding, or finding.node.target), explains rule_id sourcing, and clarifies constraints like URL must be live. All 6 parameters are covered.
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's purpose as pre-deploy patch verification, specifying it tests a proposed patch against a live URL in a sandboxed browser. It distinguishes from verify_fixes (post-deploy comparison) and uses specific verbs and resources.
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?
Explicitly states when to use (pre-deploy, before commit) and contrasts with the alternative verify_fixes (post-deploy). Provides clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_fixARead-onlyIdempotent
[fix] PRIMARY framework-aware fix generator. Pass finding_id + audit_id to get an idiomatic search/replace patch (React/Next/Vue/Angular/Svelte/Nuxt detected via nearest package.json). Returns patch + confidence + framework_confidence + needs_human_review. Single (default) or batch (multiple finding_ids). Pipe output into generate_pr or run_verification_suite. vs generate_patch: that's the legacy issue/job ID variant.
| Name | Required | Description | Default |
|---|---|---|---|
| finding_id | No | Finding ID to fix (single mode) | |
| audit_id | Yes | Audit ID containing the finding(s) | |
| finding_ids | No | Multiple finding IDs (batch mode) | |
| file_content | No | Source file content for better patch accuracy | |
| file_path | No | Source file path |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, covering safety. The description adds that output includes patch, confidence, framework_confidence, and needs_human_review, plus framework detection via nearest package.json, providing behavioral detail beyond 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?
Two sentences (though second is fragmented) are reasonably concise. Purpose is front-loaded. Some redundancy (e.g., listing frameworks) but overall 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?
Given an output schema exists, the description covers all necessary aspects: input parameters, modes, output summary, framework detection, and integration with sibling tools. No gaps for the complexity level.
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 by explaining single vs batch mode (finding_id vs finding_ids) and mentioning optional file_content/file_path for better accuracy, augmenting the schema's concise descriptions.
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 identifies the tool as a 'PRIMARY framework-aware fix generator' that produces search/replace patches for various frameworks. It explicitly distinguishes from sibling 'generate_patch' as the legacy variant, leaving no ambiguity.
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?
Provides clear usage instructions: pass finding_id + audit_id, single or batch mode, and suggests piping to generate_pr or run_verification_suite. Does not explicitly mention when not to use, but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_scheduleA
[schedule] Partial update of an audit schedule (all fields except id are optional). Use list_schedules to look up ID. Common: pause via enabled=false, change cadence via cron_expression, add score-drop alerts.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Schedule ID to update (from list_schedules) | |
| url | No | Replace the target URL being audited | |
| mode | No | Audit depth: basic (fastest, core checks), standard (balanced), deep (most thorough, slower) | |
| cron_expression | No | 5-field cron expression for run cadence (e.g. "0 2 * * *" = daily at 02:00 UTC) | |
| name | No | Human-readable label shown in dashboards | |
| enabled | No | Master switch: set false to pause the schedule without deleting it | |
| alert_on_fail | No | Send an alert when a scheduled audit run fails to complete | |
| alert_on_score_drop | No | Send an alert when the overall score drops below score_threshold from the previous run | |
| score_threshold | No | Score (0-100) below which alert_on_score_drop fires — e.g. 80 alerts when the audit scores under 80 | |
| webhook_url | No | Override the webhook URL used for alerts (defaults to the account's default webhook) | |
| email_recipients | No | Comma-separated email addresses to notify on alerts |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutation (readOnlyHint=false) and not destructive (destructiveHint=false). The description adds that it is a partial update (affects only provided fields) and provides examples like pausing via enabled=false, which is 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 extremely concise: two sentences. The first sentence states the purpose, the second provides prerequisite and common examples. No unnecessary 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?
Given 11 parameters, mutation nature, and existence of an output schema, the description covers prerequisites, common use cases, and partial update semantics. It does not detail return values (handled by output schema) or side effects, but is sufficient for typical usage.
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 coverage is 100%, so baseline is 3. The description adds value by linking parameters to common tasks (e.g., 'pause via enabled=false, change cadence via cron_expression, add score-drop alerts'), providing meaningful context beyond individual parameter descriptions.
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 'Partial update of an audit schedule', specifying the verb (update) and resource (audit schedule). It distinguishes from sibling tools like create_schedule, delete_schedule, get_schedule, and list_schedules by being the sole update operation.
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 provides context for when to use this tool, advising to 'Use list_schedules to look up ID' and giving common use cases (pause, change cadence, add alerts). It does not explicitly state when not to use, but the examples cover typical modifications.
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.
29 tool updates
v0.1.0- First observed
analyze_component - First observed
audit_a11y - First observed
audit_artifact - First observed
audit_repo - First observed
audit_url - First observed
capture_screenshot - First observed
compare_competitors - First observed
create_pr_comment - First observed
create_schedule - First observed
create_webhook - First observed
delete_schedule - First observed
delete_webhook - First observed
diff_a11y - First observed
explain_finding - First observed
explain_issue - First observed
generate_patch - First observed
generate_pr - First observed
get_audit - First observed
get_engines - First observed
get_findings - First observed
get_quota - First observed
get_schedule - First observed
list_schedules - First observed
list_webhooks - First observed
run_audit - First observed
run_llm_audit - First observed
run_verification_suite - First observed
suggest_fix - First observed
update_schedule
TDQS
Scored across 29 tools
Most tools have distinct purposes, but some pairs (e.g., audit_url vs audit_a11y, suggest_fix vs generate_patch) could cause confusion despite clear descriptions. The 'vs' notes help, but the sheer number of tools increases ambiguity.
All tool names follow a consistent verb_noun snake_case pattern (e.g., audit_url, create_schedule, delete_webhook). No mixing of styles or irregular names.
29 tools is on the high side for a domain that could be covered with fewer. While the set is comprehensive, some tools are deprecated or legacy, and the count feels slightly bloated.
The tool set covers the full lifecycle of accessibility auditing: running audits (multiple types), retrieving results, explaining findings, generating fixes, creating PRs, scheduling, diffing, webhooks, quota management, and even competitor analysis. No obvious gaps.
Maintenance
Related MCP Connectors
Free WCAG 2.2/ADA/508 accessibility MCP: scan, AI fixes, verify, vision audit, localhost tunnel
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP server for visual regression testing: triage a PR's UI diffs from your coding agent.
Related MCP Servers
- AlicenseBqualityBmaintenanceAn MCP (Model Context Protocol) server for performing accessibility audits on webpages using axe-core. Use the results in an agentic loop with your favorite AI assistants (Cline/Cursor/GH Copilot) and let them fix a11y issues for you!2309 npm53Mozilla Public 2.0
- AlicenseBqualityCmaintenanceAn MCP server that provides comprehensive UX best practices covering accessibility, usability, UI patterns, design systems, performance, and more, enabling clients to analyze and generate UX-optimized code and recommendations.2382 npm32MIT
- AlicenseAqualityBmaintenanceFree WCAG 2.2 / ADA / Section 508 accessibility MCP: scan pages, get AI fixes, verify them, run a vision audit, and scan localhost through a secure tunnel. Sign in with a free account for full audits.420470 npmMIT
- AlicenseNot gradedqualityBmaintenanceSelf-hosted design audit MCP server that reviews UI code against Nielsen's heuristics and an accessibility rubric, returning scores and fixable findings. It also enables verifying previously flagged issues against updated code.21 npmBSD 2-Clause "Simplified"