An MCP server that provides tools to interact with Google Ads API, including GAQL query execution, account listing, and keyword planning. Features OAuth 2.1 authentication with Firestore token storage.
The server defines 3 tools with reasonable descriptions and input schemas. However, there are notable gaps in output schema documentation, parameter constraints, and error guidance. Tool names follow verb_noun convention (run_gaql, list_accounts, run_keyword_planner) and are reasonably specific. Descriptions are present but several parameters lack detailed constraints or format guidance. The run_keyword_planner tool has particularly verbose descriptions (~300+ chars per param), which is at the high end of the baseline (p90=392 chars) but generally acceptable. Output schemas are not documented anywhere in the visible source, which is a significant gap. Error handling is not evidenced in the code sample provided.
List all accessible accounts including nested sub-accounts.
Execute GAQL using the non-streaming search endpoint for consistent JSON parsing.
Generate keyword ideas using Google Ads KeywordPlanIdeaService. This tool allows you to generate keyword ideas based on seed keywords or a page URL. You can specify targeting parameters such as language, location, and network to refine your keyword suggestions.
No output schemas documented for any tool. LLMs cannot plan downstream tool calls or know what fields to expect from results. This violates the core pattern:tool requirement.
run_gaql and list_accounts lack detailed parameter descriptions. 'customer_id' is described as 'The Google Ads customer ID' but does not specify format (10 digits, no dashes, etc.). 'manager_id' in both tools lacks explanation of when/why it is needed.
run_keyword_planner accepts optional date range parameters (start_year, start_month, end_year, end_month) but does not document the valid ranges, what happens if only partial date info is provided, or how they interact. Parameter relationships are undocumented.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | <=2025-11-25 | v2 |
run_keyword_planner 'keywords' parameter is an array but does not specify minimum/maximum length, character constraints, or whether duplicates are accepted. 'page_url' parameter has no format specification or validation rules.
No error handling documentation visible. If a tool fails (invalid customer_id, API rate limit, authentication error), there is no guidance on what the LLM should do next or how to recover. No error categorization (retryable vs fatal).
All three tools are marked Risk: READ_ONLY, which is correct, but there is no explicit tool annotation (readOnlyHint) visible in the schema. Modern MCP tools should use readOnlyHint to signal idempotency to agents.
list_accounts takes no parameters yet has no description explaining what structure it returns, how many accounts it returns (pagination?), or whether it includes nested sub-accounts only or also primary accounts. The description 'List all accessible accounts including nested sub-accounts' is minimal.