MCP Server with A11y Tool for accessibility testing
Single tool 'a11y' with minimal definition quality. Tool name lacks action verb prefix, description is sparse, parameters lack individual descriptions, and output schema is undocumented. The server exposes tool definitions via ListToolsRequestSchema with basic properties but fails to meet production baselines for LLM-optimized tool interfaces. No error handling guidance, no output schema documentation, and parameter relationship (url vs relativePath mutual exclusivity) is undocumented. The tool is READ_ONLY (safe), but definition quality falls well below the 194-char average tool description baseline and 100% parameter annotation baseline for A+ tools.
Run accessibility tests on a URL or a local path (relative URL appended to http://localhost:5000).
Tool name 'a11y' lacks action verb prefix. Should be 'run_a11y', 'test_accessibility', or 'analyze_accessibility' to signal the action to LLMs.
Tool description is 145 characters, below the 194-char production baseline and lacks WHEN context. Missing: When to call vs alternatives? What prerequisites (localhost:5000 running)? What does 'violations found' entail?
Input parameters 'url' and 'relativePath' lack individual descriptions. Descriptions state only 'Full URL to test' and 'Relative path appended to http://localhost:5000', no guidance on mutual exclusivity, format, validation, or when each is appropriate. Violates 100% parameter annotation baseline.
Output schema is completely undocumented. The tool returns structured JSON with violationCount and violations array, but no schema is published to LLMs. LLMs cannot predict the shape of the response or plan downstream reasoning.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 34 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 43 | - | v1 |
Mutual parameter exclusivity (url vs relativePath) is not documented. The tool throws 'Must provide either url or relativePath' at runtime, forcing agents to discover this constraint via trial-and-error instead of reading the definition.
No error handling guidance. Tool can fail if localhost:5000 is not running, if the URL is unreachable, if Puppeteer launch fails, or if axe-core injection fails, but no recovery hints are provided to LLMs.
Dependency on external service (localhost:5000) is not documented. LLMs have no way to know the tool requires a running server or how to detect/recover from its absence.