MCP server for analyzing Googlebot vs AI crawler parity from Nginx logs and GSC data
Three tools with basic schemas and descriptions, but significant gaps in parameter documentation, output schema clarity, and error handling guidance. Tool names lack action verbs (analyze_logs is acceptable, but gsc_crossref and parity_report are vague). Parameter descriptions are minimal or missing. No documented output schemas. Error handling returns JSON strings instead of structured error objects with recovery guidance. Descriptions are present but generic (10-50 chars for some params). No input validation constraints (enums, ranges, patterns) documented. Composition is reasonable but tools lack idempotency guarantees and chaining metadata.
Parse Nginx combined log format and classify requests by Googlebot vs AI crawlers
Cross-reference log analysis results with GSC search analytics data
Generate comprehensive crawl parity report combining logs and GSC data
Tool names lack clarity. 'gsc_crossref' and 'parity_report' do not start with action verbs and are ambiguous. 'gsc_crossref' could mean cross-reference, compare, or validate. 'parity_report' does not indicate whether it reads, writes, or modifies state.
Parameter descriptions are missing or trivial. 'logs_analysis' in gsc_crossref has a 50-char description; 'gsc_data' has 60 chars. No guidance on expected structure, format, or constraints. LLMs cannot infer whether to pass raw JSON, stringified JSON, or objects.
Output schemas are not documented. Tools return JSON strings via TextContent, but the structure of that JSON (fields, types, nesting) is not declared. Agents cannot plan downstream calls or extract fields reliably.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 45 | 2026-07-28+ | v2 |
Error handling returns unstructured JSON strings instead of actionable error messages. 'Failed to parse logs: <error>' does not tell the LLM whether to retry, ask the user, or abandon the task. No recovery guidance.
No input validation constraints documented. Parameters accept free-form strings with no enum, pattern, or range constraints. 'log_path' could be any string; no guidance on file format, encoding, or size limits. LLMs will pass invalid paths without validation.