Google Search Console API tools via Model Context Protocol
Server has 6 tools with basic schemas and descriptions, but significant quality gaps. Tool names follow verb_noun pattern (list_, get_, search_) which is good. However, descriptions are inconsistent: one tool has Dutch text ('Lijst alle sites...'), others are English. Parameter descriptions are minimal (10-30 chars), lacking context on format, constraints, or when to use each tool. The 'requestBody' parameter in search_console_api_searchanalytics_query uses type 'any' with no schema validation, this violates constrained-input pattern. No output schemas documented. Error handling exists but lacks recovery guidance. No tool annotations (readOnlyHint, etc.). Overall structure is present but falls short of production quality.
Get details of a specific crawl error.
Get details of a specific sitemap.
List crawl errors.
List all sitemaps for a property.
Lijst alle sites waarvoor de gebruiker toegang heeft.
Get search analytics data. Also supports hourly data via HOUR dimension and HOURLY_ALL dataState.
Inconsistent description language: 'search_console_api_list_sites' uses Dutch ('Lijst alle sites...') while others use English. LLMs expect consistent language for reliable tool selection.
Parameter 'requestBody' in search_console_api_searchanalytics_query has type 'any' with no schema validation. This violates constrained-input pattern and allows hallucinated/invalid API payloads.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., siteUrl from list_sites response). Violates response-shaper pattern.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
Parameter descriptions are minimal (10-30 chars) and lack context on format, constraints, or dependencies. E.g., 'category' parameter in list_crawl_errors has no enum of valid values (notFound, authPermissions, etc.).
Error responses lack recovery guidance. createErrorResponse() returns raw error messages without suggesting next steps (e.g., 'Try list_sites() first to find valid siteUrl values').