A Model Context Protocol (MCP) server providing access to Google Search Console
Server has 6 tools with explicit schemas and descriptions. All tools are READ_ONLY except submit_sitemap (WRITE). Schemas are properly defined using Zod and converted to JSON Schema via zodToJsonSchema. However, descriptions are generic and lack actionable context for LLM selection. Parameter descriptions exist but are minimal (avg ~80 chars). No output schema documentation. Error handling is basic (Zod validation + generic catch). Tool names follow verb_noun convention (list_, search_, get_, submit_) which is good. Missing: output structure docs, error recovery guidance, parameter constraints (enums where applicable), and LLM-optimized descriptions that explain WHEN to use each tool.
Get a sitemap for a site in Google Search Console
Inspect a URL to see if it is indexed or can be indexed
List sitemaps for a site in Google Search Console
List all sites in Google Search Console
Get search performance data from Google Search Console
Submit a sitemap for a site in Google Search Console
Tool descriptions lack actionable context. Descriptions like 'Get search performance data from Google Search Console' do not explain WHEN to use this tool vs alternatives, what data structure is returned, or what prerequisites exist (e.g., must call list_sites first to get siteUrl format).
Output schemas are not documented. Tools return JSON.stringify(response.data) but LLMs cannot see what fields are in response.data. This forces LLMs to guess field names for downstream operations and risks hallucinated field access.
Parameter 'type' in search_analytics uses enum [web, image, video, news] but description does not explain what this filters. Similarly, 'aggregationType' enum values are not explained in the description, LLMs cannot infer when to use 'byNewsShowcasePanel' vs 'byProperty'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Error handling is minimal. Zod validation errors are caught and re-thrown, but there is no guidance for LLMs on recovery. E.g., if siteUrl is invalid, the error should suggest 'Call list_sites() first to see valid site URL formats.'
No pagination support. search_analytics accepts rowLimit (default 1000) but does not document max value, whether results are truncated, or how to fetch next page. Large result sets risk context window exhaustion.