MCP server for Google Ads and Meta Ads. Wraps both APIs directly to manage Search campaigns, keywords and ads, with new campaigns always created paused.
Server has 13 tools with mostly complete schemas and descriptions. Naming follows verb_noun convention (list_, get_, create_, add_, set_, remove_). Descriptions are present but vary in quality (10-150 chars). Input schemas use Zod with type definitions and descriptions. However, output schemas are not formally documented, responses are text-wrapped JSON without declared structure. Error handling is minimal; no recovery guidance or actionable error messages visible. Missing parameter descriptions for several tools (e.g., google_ads_add_keywords, google_ads_remove_keywords show no input schema in source). Composition is good, tools are single-responsibility and chainable (e.g., list_campaigns → get_campaign_structure). Security: credentials injected via environment (GOOGLE_ADS_CUSTOMER_ID, META_AD_ACCOUNT_ID), not exposed as parameters.
Add keywords to an existing ad group
Add campaign-level negative keywords
Create a new Search campaign with ad groups, keywords and RSAs. Always created PAUSED.
Get a campaign's ad groups, keywords, ads, and negatives
List campaigns with status and budget
Permanently remove keywords. Requires confirm_delete: true.
Six tools (add_keywords, set_keyword_status, remove_keywords, update_bid_strategy, add_negative_keywords, set_campaign_status for Google Ads) have no visible input schemas in source code.
Output schemas are not formally documented. Tools return text-wrapped JSON without declared field types or structure. LLMs cannot plan downstream calls or extract fields reliably.
No error handling or recovery guidance visible. Tools do not return actionable error messages (e.g., 'Invalid status: got X, must be one of Y'). Agents cannot self-correct on failures.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Enable or pause a campaign. The only tool that can turn spend on.
Pause or enable keywords (reversible)
Change a campaign's bidding strategy
Get an ad's review status and rejection reason if any
List ads in an account filtered by effective_status (e.g. DISAPPROVED)
List Meta campaigns with status and budget
Enable or pause a Meta campaign. The only tool that can turn spend on.
Destructive operations (remove_keywords) lack confirmation step. No dry-run or confirm_delete validation visible in source. Agents could accidentally delete keywords without safeguard.
Parameter descriptions are minimal or missing for several tools. E.g., 'Add keywords to an existing ad group' lacks details on required fields, format, or constraints.