vertaaux-mcp
Enables AI agents to open draft GitHub PRs with framework-aware patches applied atomically via Git Trees API, and export audit results as SARIF for GitHub Code Scanning.
Provides semantic markup auditing capabilities including HTML5 validation, heading hierarchy analysis, and landmark region assessment as part of UX audits.
Supports static analysis of JavaScript codebases for UX and accessibility issues, with framework-aware patch generation for detected problems.
Supports auditing from Lighthouse JSON artifacts as input sources for comprehensive UX and accessibility analysis alongside other audit engines.
Provides npm package distribution and installation options for the MCP server, enabling easy deployment and integration into development workflows.
Supports framework-aware patch generation for React codebases, automatically detecting React components and generating appropriate fixes for UX and accessibility issues.
Supports framework-aware patch generation for Svelte codebases, automatically detecting Svelte components and generating appropriate fixes for UX and accessibility issues.
Includes SVG analysis as part of accessibility audits, checking for proper ARIA usage and accessibility attributes in SVG elements.
VertaaUX MCP Server
The only MCP server with an autonomous audit, fix, and verify loop. Detects UX and accessibility issues across 7 categories, generates framework-aware patches (React, Vue, Angular, Svelte), opens atomic GitHub PRs via the Git Trees API, and verifies the fix landed in production. Built for CI/CD pipelines with policy-as-code thresholds.
Why this server is different
verify_fixesloop: close the audit, fix, re-audit cycle without leaving the agent loop. Budget-capped at 3 iterations to prevent runaway billing.Framework-aware patches:
suggest_fixdetects React/Vue/Angular/Svelte/Nuxt via the nearestpackage.jsonand emits idiomatic patches (JSX rewrites for React, HTML attrs preserved elsewhere).Atomic Git Trees PRs:
generate_prapplies N patches in a single commit or zero. Conflict graph + AST gate (Babel, vue-eslint-parser, svelte/compiler) refuse unparseable patches before they reach the PR.Deterministic finding IDs:
rule:hashformat stable across audit runs so agents can reference findings without storing state.Multi-engine a11y:
audit_a11ycombines axe-core, AccessLint, and VertaaUX analyzers in a single call.Policy-as-code:
policy_checkmirrors the GitHub Action's threshold evaluator exactly so CI and agent verdicts match.
Related MCP server: UX MCP Server
Features
38 Tools across audit, fix, PR, schedule, webhook, policy, and a11y categories
7 Prompt Templates for common workflows
8 Resource URIs for audit data and UX guidelines
Enterprise Controls: domain allowlist, rate limiting, PII redaction
Dual Transport: stdio (CLI/Desktop) + HTTP streaming (web)
Official MCP SDK: spec-compliant via
@modelcontextprotocol/sdk
Install
MCP Official Registry
npx -y @modelcontextprotocol/cli install io.github.PetriLahdelma/vertaaux-mcpnpm
npm install -g @vertaaux/mcp-server
VERTAAUX_API_KEY=vx_live_... vertaaux-mcpDrift policy:
smithery.yaml,glama.json, andserver.jsonare auto-generated from the live MCP tool registry bynpm run generate:manifests. Never hand-edit them. Seedocs/REGISTRY-PUBLISHING.mdfor the runbook.
Quick Start
# 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 Integration
Claude Desktop
Add to ~/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 (with MCP extension)
Add to .vscode/settings.json:
{
"mcp.servers": {
"vertaaux": {
"command": "node",
"args": ["./mcp-server/dist/index.js"],
"env": {
"VERTAAUX_API_KEY": "vx_live_..."
}
}
}
}Cursor
Add to .cursor/mcp.json:
{
"mcpServers": {
"vertaaux": {
"command": "node",
"args": ["/path/to/mcp-server/dist/index.js"],
"env": {
"VERTAAUX_API_KEY": "vx_live_..."
}
}
}
}Environment Variables
Variable | Required | Default | Purpose |
| Yes | — | API authentication key |
| No |
| API endpoint URL |
| No |
| HTTP transport port |
| No | — | GitHub API access for |
Tools
Audit Tools (Core)
Tool | Description |
| Run UX & accessibility audit on a deployed URL. Returns top 5 issues with severity breakdown. |
| Static analysis on local codebase (React/Vue/Svelte/HTML). Finds missing alt text, unlabeled buttons/inputs/links. |
| Audit from HAR files (response times, failed requests, large payloads) or Lighthouse JSON (accessibility findings). |
| Retrieve findings from a completed audit with filtering by severity, rule, and pagination. |
| Get audit job status and results by job ID. |
Fix & Verify Tools
Tool | Description |
| Deep-dive into a finding: WCAG criteria, repro steps, fix guidance, before/after code examples. |
| Generate search/replace patch with confidence score. Supports single and batch mode. |
| Generate accessibility fix patch for a specific issue from an audit. |
| Verify a patch fixes the issue without regressions via before/after audit. |
| Create a draft GitHub PR with fix patches. Requires |
| Generate a PR comment with suggestion blocks, ordered by severity. |
Analysis Tools
Tool | Description |
| Heuristic UX review of component code (no browser needed). Checks images, buttons, inputs, links. |
| Provider-agnostic LLM audit (Mistral/OpenAI via Vertaa adapter). |
| Capture screenshot by running a quick audit. |
| Compare UX metrics against competitor URLs with category-level score deltas. |
| Format an issue into developer-friendly markdown guidance. |
Management Tools
Tool | Description |
| Register webhook for audit notifications. |
| Manage webhooks. |
| Cron-based scheduled audits with score threshold alerts. |
| Manage schedules. |
| Check plan and remaining credits. |
| List available engine versions. |
Accessibility Tools (Multi-Engine)
Tool | Description |
| Multi-engine accessibility audit using axe-core, AccessLint, and custom analyzers. Returns WCAG-mapped findings with structured fix suggestions and fixability ratings. Supports |
| Compare current accessibility findings against a saved baseline. Returns fixed, new, and unchanged findings with net change summary. Requires a prior |
Deprecated
Tool | Description |
| DEPRECATED — Use |
Prompt Templates
Pre-built workflow prompts for common audit scenarios:
Prompt | Description | Arguments |
| Audit a URL and summarize top issues with fix recommendations |
|
| Full audit → patch → PR comment workflow |
|
| Compare against competitors and identify UX gaps |
|
| Set up scheduled monitoring with alerts |
|
| Static analysis on local codebase |
|
Resources
The server exposes MCP resources via vertaa:// URIs:
URI Pattern | Description |
| Full audit result |
| Lightweight summary |
| Single finding detail |
| Screenshot metadata |
| Annotated screenshot |
| Audit history for URL |
| Score trend analysis |
| UX guidelines (buttons, forms, navigation, color-contrast, errors, content) |
Enterprise Controls
Configure domain allowlists, rate limits, and PII redaction programmatically:
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]' }
],
},
});Example: Audit-to-PR Workflow
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 blocksDevelopment
Project Structure
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.tsTesting
npm test # Run test suite
npm run test:watch # Watch mode
npm run test:coverage # Coverage reportBuilding
npm run build # TypeScript → dist/Error Handling
All errors include structured recovery guidance:
{
"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" }
}
}Error codes follow JSON-RPC 2.0: -32700 (parse), -32600 (invalid request), -32601 (method not found), -32602 (invalid params), -32603 (internal error).
API Reference
The MCP server communicates with the VertaaUX API v1. See the API Documentation.
License
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.
TDQS
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
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for Mint — AI-powered QA that runs your app in a real browser on every PR.
The OpenZeppelin Solidity Contracts MCP server integrates OpenZeppelin's security and style rules into AI-driven development workflows, enabling AI assistants to generate safe, correct, and production-ready smart contracts. It automatically validates generated code against OpenZeppelin standards (including imports, modifiers, naming conventions, and security checks) and supports various contract types including ERC-20, ERC-721, ERC-1155, Stablecoins, RWA, Governor, and Account contracts through prompt-driven workflows.
Official MCP server for Qase — manage test cases, runs, suites, defects via AI tools.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn 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!217451Mozilla Public 2.0
- AlicenseBqualityBmaintenanceAn 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.2311127MIT
- AlicenseAqualityDmaintenanceAn MCP server for web accessibility testing that enables scanning, auditing, and fixing WCAG, ADA, and other compliance issues directly from your IDE, with free local scans, AI-generated framework-aware fixes, and verification capabilities.14616MIT
- 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.28BSD 4-Clause "Original" or "Old"
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/VertaaUX/mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server