{"name":"io.github.mharnett/google-ads","slug":"mharnett-google-ads","title":null,"description":"Google Ads MCP with MCC support: 35 tools for campaigns, keywords, reporting, GAQL.","url":"https://mcp.market/server/mharnett-google-ads","rating":null,"grade":"B","score":83,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":18,"stars":1,"forks":1,"downloads_week":null,"last_push_at":"2026-09-26T01:21:36.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/mharnett/mcp-google-ads","website":null,"version":"1.0.1","remotes":[],"packages":[{"registryType":"npm","identifier":"mcp-google-ads","version":"1.0.1","transport":{"type":"stdio"},"environmentVariables":[{"description":"OAuth client ID","isRequired":true,"name":"GOOGLE_ADS_CLIENT_ID"},{"description":"OAuth client secret","isRequired":true,"isSecret":true,"name":"GOOGLE_ADS_CLIENT_SECRET"},{"description":"OAuth refresh token","isRequired":true,"isSecret":true,"name":"GOOGLE_ADS_REFRESH_TOKEN"},{"description":"Google Ads API developer token","isRequired":true,"isSecret":true,"name":"GOOGLE_ADS_DEVELOPER_TOKEN"}]}],"tools":[{"name":"google_ads_ad_performance","description":"Get ad performance report with metrics, ad copy (headlines/descriptions), final URLs, and ad strength rating.","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_ad_performance_by_conversion","description":"Get ad performance broken down by conversion action. Shows which ads drive which conversion types.","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_add_campaign_negatives","description":"Add negative keywords at the campaign level. Use for campaign-specific negatives that shouldn't be in a shared list.","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_add_shared_negatives","description":"Add negative keywords to a shared negative keyword list. Keywords will immediately block matching queries across all campaigns the list is applied to.","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_create_ad_group","description":"Create a new ad group (will be PAUSED until approved). Returns ad group ID.","write_action":true,"price_micros":0,"input_schema":null},{"name":"google_ads_create_campaign","description":"Create a new campaign (will be PAUSED until approved). Returns campaign ID.","write_action":true,"price_micros":0,"input_schema":null},{"name":"google_ads_create_keywords","description":"Create keywords for an ad group (will be PAUSED until approved). Keywords are auto-labeled for easy discovery via google_ads_list_pending_changes.","write_action":true,"price_micros":0,"input_schema":null},{"name":"google_ads_create_responsive_search_ad","description":"Create a responsive search ad (will be PAUSED until approved). Validates before creating. Headlines/descriptions can be plain strings or objects with pinned_position (1-3 for headlines, 1-2 for descriptions).","write_action":true,"price_micros":0,"input_schema":null},{"name":"google_ads_create_shared_set","description":"Create a new shared negative keyword list at account level. Returns the new shared set ID.","write_action":true,"price_micros":0,"input_schema":null},{"name":"google_ads_enable_items","description":"Enable paused campaigns, ad groups, or ads. REQUIRES USER APPROVAL. Use after reviewing in Google Ads UI.","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_gaql_query","description":"Execute a raw GAQL (Google Ads Query Language) query. Use this for custom reports or accessing any Google Ads API resource not covered by other tools. See https://developers.google.com/google-ads/api/docs/query/overview for GAQL syntax.","write_action":true,"price_micros":0,"input_schema":null},{"name":"google_ads_get_campaign_tracking","description":"Get campaign tracking parameters including tracking URL template, final URL suffix, and custom URL parameters","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_get_client_context","description":"Get the current client context based on working directory. Call this first to confirm which Google Ads account you're working with.","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_keyword_performance","description":"Get keyword performance report with metrics including impressions, clicks, cost, conversions, quality score components (quality score, expected CTR, ad relevance, landing page experience), and impression share metrics.","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_keyword_performance_by_conversion","description":"Get keyword performance broken down by conversion action. Shows which keywords drive which conversion types (e.g., form fills, MQLs, etc.).","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_keyword_volume","description":"Get historical search volume estimates for a list of keywords using the Google Ads Keyword Planner. Returns avg monthly searches, competition level, and CPC bid range for each keyword.","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_link_shared_set","description":"Link a shared negative keyword list to one or more campaigns. Once linked, all negatives in the list will apply to those campaigns.","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_list_ad_groups","description":"List ad groups, optionally filtered by campaign","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_list_campaigns","description":"List all campaigns for the current client account","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_list_conversion_actions","description":"List all available conversion actions (e.g., form fills, MQLs, etc.) to understand what conversion tracking is set up.","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_list_pending_changes","description":"List all pending changes (paused items with claude- label) awaiting review","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_pause_items","description":"Pause enabled campaigns, ad groups, or ads. REQUIRES USER APPROVAL. This will stop items from serving.","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_pause_keywords","description":"Pause active keywords by their criterion resource names.","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_remove_adgroup_negatives","description":"Remove ad-group-level negative keywords by their resource names. Get resource names from a GAQL query on ad_group_criterion.","write_action":true,"price_micros":0,"input_schema":null},{"name":"google_ads_remove_campaign_negatives","description":"Remove campaign-level negative keywords by their resource names. Get resource names from a GAQL query on campaign_criterion.","write_action":true,"price_micros":0,"input_schema":null},{"name":"google_ads_remove_shared_negatives","description":"Remove negative keywords from a shared negative keyword list by their resource names. Get resource names from a GAQL query on shared_criterion.","write_action":true,"price_micros":0,"input_schema":null},{"name":"google_ads_search_term_insight_terms","description":"Drill into a specific search term category to see the individual search terms within it. Requires an insight_id from google_ads_search_term_insights.","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_search_term_insights","description":"Get search term category insights for a campaign. Shows the search categories your ads appeared against (like the Insights panel in the Google Ads UI). Must query one campaign at a time. Optionally compares two date ranges to show trends.","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_search_term_report","description":"Get search term report showing actual search queries that triggered ads, with the keyword they matched to.","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_search_term_report_by_conversion","description":"Get search term report broken down by conversion action. Shows which search queries drive which conversion types.","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_unlink_shared_set","description":"Unlink a shared negative keyword list from one or more campaigns. The list's negatives will no longer apply to those campaigns.","write_action":false,"price_micros":0,"input_schema":null},{"name":"google_ads_update_campaign_budget","description":"Update the daily budget for a campaign. Can update the existing budget amount or create a new solo budget and reassign the campaign to it (useful for breaking shared budgets).","write_action":true,"price_micros":0,"input_schema":null},{"name":"google_ads_update_campaign_tracking","description":"Update campaign tracking parameters: final URL suffix, tracking URL template, and/or custom URL parameters. Use google_ads_get_campaign_tracking first to see current values.","write_action":true,"price_micros":0,"input_schema":null},{"name":"google_ads_validate_ad","description":"Validate an RSA without creating it. Use this to check for errors before creating.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":83,"grade":"B","scanned_at":"2026-09-27T22:36:21.820Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-27T22:36:21.750Z","components":{"code":{"score":25,"max":25,"notes":["11 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 2 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"mcp-google-ads","version":"1.0.1","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":9,"publishedAt":"2026-04-08T23:39:02.068Z","repositoryUrl":"git+https://github.com/mharnett/mcp-google-ads.git"}],"repo":{"found":true,"owner":"mharnett","repo":"mcp-google-ads","archived":false,"pushedAt":"2026-09-26T01:21:36Z","stars":1,"forks":1,"openIssues":1,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/2389468?v=4","ownerCreatedAt":"2012-09-20T23:04:55Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/2389468?v=4&s=128","source":"github"},"presence":{"stars":1,"forks":1,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-26T01:21:36.000Z","score":18}}}},"grade_history":[],"reviews":[]}