MCP server for Google Search Console using OAuth — query your GSC data from Claude Code and any MCP client
Server has 4 well-named tools with clear descriptions and reasonable parameter schemas. All tools are READ_ONLY and follow verb_noun naming (gsc_list_*, gsc_query_*, gsc_inspect_*, gsc_list_*). Descriptions are 50-150 chars, meeting baseline. However, critical gap: ListToolsRequestSchema returns empty inputSchema (type:object, properties:{}, additionalProperties:true) for ALL tools, hiding actual parameter definitions from clients. Zod validation happens server-side but clients cannot see constraints, enums, or required fields. This violates pattern:constrained-input and pattern:tool-description. Output schemas are undocumented, clients don't know what fields to expect from each tool. Error handling returns Zod validation issues but lacks recovery guidance.
Run URL Inspection on a specific URL. Returns indexing status, last crawl, canonical, mobile usability, rich results, and any issues Google reports.
List all sitemaps submitted for a property, with their status, errors, and last download time.
List all Search Console properties the authenticated user has access to.
Query Search Analytics data (clicks, impressions, CTR, position) for a property. Supports grouping by query, page, country, device, searchAppearance, or date. Use ISO dates (YYYY-MM-DD).
ListToolsRequestSchema advertises empty inputSchema (properties:{}, additionalProperties:true) for all tools. Actual parameter definitions exist in tool.inputSchema (Zod) but are not exposed to MCP clients. Clients cannot discover enums, required fields, or constraints.
Output schemas are not documented. Clients don't know what fields gsc_query_analytics returns (e.g., does it return rows, totals, metadata?). This forces LLMs to guess structure and breaks downstream tool chaining.
Error handling returns raw Zod validation issues but lacks recovery guidance. Example: 'Invalid arguments: [{"code":"invalid_enum_value","expected":"web|image|video","received":"photo"}]' tells LLM nothing about what to do next.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
gsc_list_sites and gsc_list_sitemaps have empty input schemas ({}). No pagination parameters (limit, offset, cursor) visible to clients, even though GSC APIs likely return large result sets.
gsc_query_analytics accepts rowLimit (1-25000) but no guidance on result size impact. Returning 25k rows will exhaust context windows. Description should state default and recommend limits for LLM reasoning.