npm @vertaaux/mcp-serverstdioMITupdated 2mo ago
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.
Was kannst du mit vertaaux mcp machen?
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.
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-mcp
npm
npm install -g @vertaaux/mcp-server
VERTAAUX_API_KEY=vx_live_... vertaaux-mcp
Drift 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:http
IDE 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 |
|---|---|---|---|
VERTAAUX_API_KEY |
Yes | β | API authentication key |
VERTAAUX_API_BASE |
No | https://vertaaux.ai/api/v1 |
API endpoint URL |
PORT |
No | 8787 |
HTTP transport port |
GITHUB_TOKEN |
No | β | GitHub API access for generate_pr |
Tools
Audit Tools (Core)
| Tool | Description |
|---|---|
audit_url |
Run UX & accessibility audit on a deployed URL. Returns top 5 issues with severity breakdown. |
audit_repo |
Static analysis on local codebase (React/Vue/Svelte/HTML). Finds missing alt text, unlabeled buttons/inputs/links. |
audit_artifact |
Audit from HAR files (response times, failed requests, large payloads) or Lighthouse JSON (accessibility findings). |
get_findings |
Retrieve findings from a completed audit with filtering by severity, rule, and pagination. |
get_audit |
Get audit job status and results by job ID. |
Fix & Verify Tools
| Tool | Description |
|---|---|
explain_finding |
Deep-dive into a finding: WCAG criteria, repro steps, fix guidance, before/after code examples. |
suggest_fix |
Generate search/replace patch with confidence score. Supports single and batch mode. |
generate_patch |
Generate accessibility fix patch for a specific issue from an audit. |
run_verification_suite |
Verify a patch fixes the issue without regressions via before/after audit. |
generate_pr |
Create a draft GitHub PR with fix patches. Requires GITHUB_TOKEN. |
create_pr_comment |
Generate a PR comment with suggestion blocks, ordered by severity. |
Analysis Tools
| Tool | Description |
|---|---|
analyze_component |
Heuristic UX review of component code (no browser needed). Checks images, buttons, inputs, links. |
run_llm_audit |
Provider-agnostic LLM audit (Mistral/OpenAI via Vertaa adapter). |
capture_screenshot |
Capture screenshot by running a quick audit. |
compare_competitors |
Compare UX metrics against competitor URLs with category-level score deltas. |
explain_issue |
Format an issue into developer-friendly markdown guidance. |
Management Tools
| Tool | Description |
|---|---|
create_webhook |
Register webhook for audit notifications. |
list_webhooks / delete_webhook |
Manage webhooks. |
create_schedule |
Cron-based scheduled audits with score threshold alerts. |
get_schedule / list_schedules / update_schedule / delete_schedule |
Manage schedules. |
get_quota |
Check plan and remaining credits. |
get_engines |
List available engine versions. |
Accessibility Tools (Multi-Engine)
| Tool | Description |
|---|---|
audit_a11y |
Multi-engine accessibility audit using axe-core, AccessLint, and custom analyzers. Returns WCAG-mapped findings with structured fix suggestions and fixability ratings. Supports min_impact filtering and mode (basic/standard/deep). |
diff_a11y |
Compare current accessibility findings against a saved baseline. Returns fixed, new, and unchanged findings with net change summary. Requires a prior audit_a11y call to establish the baseline. |
Deprecated
| Tool | Description |
|---|---|
run_audit |
DEPRECATED β Use audit_url instead. |
Prompt Templates
Pre-built workflow prompts for common audit scenarios:
| Prompt | Description | Arguments |
|---|---|---|
quick_audit |
Audit a URL and summarize top issues with fix recommendations | url |
fix_accessibility |
Full audit β patch β PR comment workflow | url |
compare_ux |
Compare against competitors and identify UX gaps | url, competitors, industry? |
monitor_regression |
Set up scheduled monitoring with alerts | url, frequency? |
audit_codebase |
Static analysis on local codebase | path |
Resources
The server exposes MCP resources via vertaa:// URIs:
| URI Pattern | Description |
|---|---|
vertaa://audits/{auditId} |
Full audit result |
vertaa://audits/{auditId}/summary |
Lightweight summary |
vertaa://audits/{auditId}/findings/{findingId} |
Single finding detail |
vertaa://screenshots/{auditId} |
Screenshot metadata |
vertaa://screenshots/{auditId}/annotated |
Annotated screenshot |
vertaa://history/{encodedUrl} |
Audit history for URL |
vertaa://history/{encodedUrl}/trend |
Score trend analysis |
vertaa://guidelines/{topic} |
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 blocks
Development
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.ts
Testing
npm test # Run test suite
npm run test:watch # Watch mode
npm run test:coverage # Coverage report
Building
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
Installation
vertaaux mcp zu deinem Client hinzufΓΌgen. WΓ€hl den, den du nutzt.
claude mcp add mcp-server -- npx -y @vertaaux/mcp-servercodex mcp add mcp-server -- npx -y @vertaaux/mcp-serveramp mcp add mcp-server -- npx -y @vertaaux/mcp-server{
"mcpServers": {
"mcp-server": {
"command": "npx",
"args": [
"-y",
"@vertaaux/mcp-server"
]
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"mcp-server": {
"command": "npx",
"args": [
"-y",
"@vertaaux/mcp-server"
]
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
code --add-mcp '{"name":"mcp-server","command":"npx","args":["-y","@vertaaux/mcp-server"]}'Or add the block manually to `.vscode/mcp.json` under `servers`.
{
"mcpServers": {
"mcp-server": {
"command": "npx",
"args": [
"-y",
"@vertaaux/mcp-server"
]
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
{
"mcpServers": {
"mcp-server": {
"command": "npx",
"args": [
"-y",
"@vertaaux/mcp-server"
]
}
}
}Add to `cline_mcp_settings.json` via the MCP Servers panel.
{
"mcpServers": {
"mcp-server": {
"command": "npx",
"args": [
"-y",
"@vertaaux/mcp-server"
]
}
}
}Add to `~/.gemini/settings.json`.
{
"mcpServers": {
"mcp-server": {
"type": "local",
"command": "npx",
"args": [
"-y",
"@vertaaux/mcp-server"
],
"tools": [
"*"
]
}
}
}Add to `~/.copilot/mcp-config.json`, or run `/mcp add` inside the CLI.
{
"context_servers": {
"mcp-server": {
"command": {
"path": "npx",
"args": [
"-y",
"@vertaaux/mcp-server"
]
}
}
}
}Add to your Zed `settings.json`.
npx -y @vertaaux/mcp-serverRun `goose configure`, choose **Add Extension β Command-line Extension**, and paste this command.
Score
78 / 100
Gut
- Dokumentation25/25
- Pflege22/25
- Vertrauen16/20
- Funktionsumfang3/15
- Installation12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 76 days ago
- Has a release history
- Repository is not archived
- Licensed MIT
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 12 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint β no local install
Versionsverlauf
| Versionen | VerΓΆffentlicht |
|---|---|
| 1.2.2Aktuell | 12. Mai 2026 |
| 1.2.1 | 6. Mai 2026 |
| 1.1.1 | 9. Apr. 2026 |