Google Ads
Google Ads MCP with MCC support: 35 tools for campaigns, keywords, reporting, GAQL.
Connector by mharnett · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/mharnett-google-ads
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 26, 2026.
- Tools
- 20 read · 42 write · 6 delete · 9 not yet classified
- Secrets
- 3 (API keys, tokens or passwords)
- Install scripts
- None found
- Runs as
- Node.js package
Tools by what they do 77
Read from the source code; the running server may list different tools.
Read 20 · Look things up without changing anything.
google_ads_ad_performancegoogle_ads_ad_performance_by_conversiongoogle_ads_get_ad_strengthgoogle_ads_get_campaign_diagnosticsgoogle_ads_get_campaign_trackinggoogle_ads_get_client_contextgoogle_ads_get_experimentgoogle_ads_keyword_performancegoogle_ads_keyword_performance_by_conversiongoogle_ads_keyword_volumegoogle_ads_list_ad_groupsgoogle_ads_list_campaigns
Show 8 more tools
google_ads_list_conversion_actionsgoogle_ads_list_experimentsgoogle_ads_list_pending_changesgoogle_ads_search_term_insight_termsgoogle_ads_search_term_insightsgoogle_ads_search_term_reportgoogle_ads_search_term_report_by_conversiongoogle_ads_validate_ad
Write 42 · Create, change, send or run things.
google_ads_add_adgroup_negativesgoogle_ads_add_campaign_negativesgoogle_ads_add_shared_negativesgoogle_ads_apply_labelgoogle_ads_attach_user_list_audiencegoogle_ads_create_ad_groupgoogle_ads_create_and_attach_audience_bundlegoogle_ads_create_calloutgoogle_ads_create_campaigngoogle_ads_create_demand_gen_multi_asset_adgoogle_ads_create_experimentgoogle_ads_create_image_asset
Show 30 more tools
google_ads_create_keywordsgoogle_ads_create_lead_form_assetgoogle_ads_create_page_feedgoogle_ads_create_responsive_search_adgoogle_ads_create_shared_setgoogle_ads_create_sitelinkgoogle_ads_create_structured_snippetgoogle_ads_detach_portfolio_bid_strategygoogle_ads_enable_itemsgoogle_ads_enable_keywordsgoogle_ads_link_shared_setgoogle_ads_rename_ad_groupgoogle_ads_rename_campaigngoogle_ads_replace_sitelink_urlgoogle_ads_schedule_experimentgoogle_ads_set_ad_group_location_targetinggoogle_ads_set_campaign_location_targetinggoogle_ads_update_ad_asset_automationgoogle_ads_update_ad_final_urlsgoogle_ads_update_asset_urlsgoogle_ads_update_campaign_ad_rotationgoogle_ads_update_campaign_ad_urlsgoogle_ads_update_campaign_biddinggoogle_ads_update_campaign_budgetgoogle_ads_update_campaign_geo_target_typegoogle_ads_update_campaign_selective_optimizationgoogle_ads_update_campaign_trackinggoogle_ads_update_demand_gen_multi_asset_adgoogle_ads_update_responsive_search_ad_textgoogle_ads_update_video_ad_videos
Delete 6 · Delete, drop, revoke or wipe things.
google_ads_remove_adgroup_negativesgoogle_ads_remove_campaign_negativesgoogle_ads_remove_experimentgoogle_ads_remove_itemsgoogle_ads_remove_shared_negativesgoogle_ads_unlink_shared_set
Not yet classified 9 · We could not tell from the name and description.
google_ads_end_experimentgoogle_ads_gaql_querygoogle_ads_link_asset_to_ad_groupgoogle_ads_link_asset_to_campaigngoogle_ads_link_asset_to_customergoogle_ads_pause_asset_linksgoogle_ads_pause_itemsgoogle_ads_pause_keywordsgoogle_ads_promote_experiment
Secrets and settings it asks for
Secrets: values you paste in that let it act as you.
GOOGLE_ADS_CLIENT_SECRETGOOGLE_ADS_DEVELOPER_TOKENGOOGLE_ADS_REFRESH_TOKEN
Other settings (environment variables or headers).
GOOGLE_ADS_CLIENT_ID
Network hosts it talks to 8
accounts.google.com· found in codeconsole.cloud.google.com· found in codedevelopers.google.com· found in codeforcepoint.com· found in codegithub.com· found in codegoogleapis.com· found in codemyaccount.google.com· found in codeoauth2.googleapis.com· found in code
Files it touches
/dev/null- Your home directory (~)
- Any path the agent passes to its tools
Tools (77)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
google_ads_ad_performanceGet ad performance report with metrics, ad copy (headlines/descriptions), final URLs, and ad strength rating. Includes paused and removed ads that had activity in the date range (status column labels them) — historical metrics are never filtered by current status.
google_ads_ad_performance_by_conversionGet ad performance broken down by conversion action. Shows which ads drive which conversion types. Includes paused and removed ads that had activity in the date range (status column labels them) — historical metrics are never filtered by current status.
google_ads_add_adgroup_negativesAdd negative keywords at the ad-group level. Use when only one ad group in a campaign should exclude the term — other ad groups in the same campaign can still match it. For campaign-wide exclusion use google_ads_add_campaign_negatives instead.
google_ads_add_campaign_negativesAdd negative keywords at the campaign level. Use for campaign-specific negatives that shouldn't be in a shared list.
google_ads_add_shared_negativesAdd negative keywords to a shared negative keyword list. Keywords will immediately block matching queries across all campaigns the list is applied to.
google_ads_apply_labelAttach a label to existing campaigns, ad groups, or ads without changing their status. Label is created if it doesn't exist. Useful for tagging items for audit trails or bulk ops.
google_ads_attach_user_list_audienceAttach a Customer Match / user-list audience to one or more ad groups. Defaults to OBSERVATION mode (reporting-only, does not restrict delivery) — pass mode='TARGETING' to restrict delivery to list members. Use for measuring on-list reach/CPM/conversions of existing campaigns without changing targeting. Get user_list_id from a GAQL query on user_list. DRY-RUN BY DEFAULT: omit `confirm` or pass `confirm: false` to preview.
google_ads_create_ad_groupCreate a new ad group (will be PAUSED until approved). Returns ad group ID. type defaults to SEARCH_STANDARD for back-compat; use DEMAND_GEN_MULTI_ASSET_AD_GROUP for Demand Gen campaigns.
google_ads_create_and_attach_audience_bundleCreate an Audience resource that bundles one or more user_lists (Customer Match lists, lookalikes, etc.) and attach it to ad groups. OR pass `existing_audience_id` to skip creation and attach an existing Audience to additional ad groups (useful for replicating one bundle across many campaigns/theaters). Required for Demand Gen ad groups whose use_audience_grouped flag is set (where direct user_list criterion attachment is rejected with CANNOT_ADD_AUDIENCE_SEGMENT_CRITERION_WHEN_AUDIENCE_GROUPED_IS_SET). Also handles Lookalike audiences which can never be attached as direct user_list criteria. …
google_ads_create_calloutCreate a new CALLOUT Asset (short promotional snippet, max 25 chars, e.g. "Free Shipping"). Callouts are shared and must be linked separately -- use google_ads_link_asset_to_campaign (campaign-level) or google_ads_link_asset_to_customer (account-level) after creation. DRY-RUN BY DEFAULT: omit `confirm` or pass `confirm: false` to preview.
google_ads_create_campaignCreate a new campaign (will be PAUSED until approved). Defaults: channel_type=SEARCH, bidding_strategy=MANUAL_CPC (SEARCH) or MAXIMIZE_CONVERSIONS (DEMAND_GEN), language_id=1000 (English). For DEMAND_GEN provide geo_target_ids (Google Ads geo target constant IDs, e.g. '21134' for Alaska). TARGET_CPA requires target_cpa (dollars). MAXIMIZE_CLICKS may take target_cpc_cap (dollars). start_date/end_date are YYYY-MM-DD.
google_ads_create_demand_gen_multi_asset_adCreate a Demand Gen Multi-Asset ad under a DEMAND_GEN_MULTI_ASSET_AD_GROUP (will be PAUSED until approved). Supports both image-based and video-only ads. Validates character limits and count caps before the API call: headlines (max 5, ≤40 chars each), long_headlines (max 5, ≤90 chars), descriptions (max 5, ≤90 chars). For image ads: marketing_image_asset_ids (1.91:1 landscape, ≥1); for video ads: video_asset_ids (YouTube video asset IDs) — omit images entirely for a video-only ad, or combine both. Square/portrait/logo assets are optional. call_to_action is a string enum value such as 'LEARN_MO…
google_ads_create_experimentCreate a SEARCH_CUSTOM experiment (A/B test) on an existing campaign. Google automatically creates a treatment campaign as a copy of the base. Returns experiment_id and treatment_campaign_id so you can modify the treatment arm (e.g. change final URLs, add RSAs) before scheduling. Use google_ads_schedule_experiment to go live.
google_ads_create_image_assetUpload an image asset for use in Demand Gen (or other image-capable) ads. Provide exactly one of file_path (absolute path to PNG/JPG/GIF on disk) or base64_data (raw base64, no data URL prefix). Validates mime type, max 5MB, min dimensions 600x314 (Demand Gen minimum). Auto-labels the created asset. Returns {asset_id, resource_name, name, bytes, mime_type}.
google_ads_create_keywordsCreate keywords for an ad group (will be PAUSED until approved). Keywords are auto-labeled for easy discovery via google_ads_list_pending_changes.
Show 62 more tools
google_ads_create_lead_form_assetCreate a LeadFormAsset (Google Demand Gen / Discovery / Search lead form). Validates required fields, enum membership, and Google's character limits before hitting the API. NEVER use unless the user explicitly asked for a lead form: requires explicit_lead_form_request=true. After creation, use google_ads_link_asset_to_campaign with field_type=LEAD_FORM (also requires explicit_lead_form_request=true) to attach it to a campaign. v1 supports standard fields only (FULL_NAME, EMAIL, WORK_EMAIL, PHONE_NUMBER, COMPANY_NAME, JOB_TITLE, etc.); custom questions, qualifying questions, and CRM delivery_me…
google_ads_create_page_feedCreate an AI Max / DSA page feed (AssetSet of type PAGE_FEED) and attach it to a campaign. Each URL becomes a PageFeedAsset tagged with the given label. Use this to constrain AI Max final-URL expansion to a specific list of landing pages. Returns the AssetSet resource name and the number of URLs added.
google_ads_create_responsive_search_adCreate 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). path1 and path2 are required (display URL paths). A `claude-YYYY-MM-DD` label is auto-applied; pass additional `labels` to attach more. By default requires ≥15 headlines and ≥4 descriptions (house floor, stricter than the API's own 3/2 minimums); pass allow_partial_assets: true to override.
google_ads_create_shared_setCreate a new shared negative keyword list at account level. Returns the new shared set ID.
google_ads_create_sitelinkCreate a new sitelink Asset (link_text + final_urls, optional two description lines). Sitelinks are shared across campaigns/ad groups -- use google_ads_replace_sitelink_url if the goal is to fix a broken URL on an existing sitelink (sitelink final_urls are immutable; the correct pattern is create new + re-link). DRY-RUN BY DEFAULT: omit `confirm` or pass `confirm: false` to preview.
google_ads_create_structured_snippetCreate a new STRUCTURED_SNIPPET Asset (a header + 3-10 short values, e.g. header "Types" with values ["DLP", "DSPM"]). The header must be one of Google's fixed structured-snippet headers (Amenities, Brands, Courses, Degree programs, Destinations, Featured hotels, Insurance coverage, Models, Neighborhoods, Service catalog, Shows, Styles, Types) -- Google rejects any other header. Each value is max 25 chars. Structured snippets are shared and must be linked separately -- use google_ads_link_asset_to_campaign (campaign-level) or google_ads_link_asset_to_customer (account-level) after creation. DR…
google_ads_detach_portfolio_bid_strategyDetach a campaign from its portfolio (cross-campaign) bid strategy, dropping it to campaign-level Maximize Conversions with no target. This is the ONLY sanctioned way to break a portfolio bid-strategy attachment — google_ads_update_campaign_bidding and google_ads_update_campaign_budget (create_new_budget) both refuse to do this silently and point here instead. IRREVERSIBLE: re-attaching or re-applying tCPA/tROAS targets afterward is a separate manual step. Requires confirm: true.
google_ads_enable_itemsEnable paused campaigns, ad groups, or ads. REQUIRES USER APPROVAL. Use after reviewing in Google Ads UI. Auto-applies today's `Claude-MM-DD-YY` label; pass `labels` to attach additional custom labels so different enable operations stay distinguishable.
google_ads_enable_keywordsEnable paused keywords by their criterion resource names. REQUIRES USER APPROVAL. Use after reviewing in Google Ads UI. Auto-applies today's `Claude-MM-DD-YY` label; pass `labels` to attach additional custom labels so different enable operations stay distinguishable.
google_ads_end_experimentHalt a running experiment. Traffic returns entirely to the base (control) campaign. Moves status to HALTED.
google_ads_gaql_queryExecute 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.
google_ads_get_ad_strengthGet the ad strength rating (POOR, AVERAGE, GOOD, EXCELLENT) for RSAs in a campaign or ad group, along with headline/description counts. Ad strength below GOOD suppresses delivery. Use this to identify ads that need more creative assets.
google_ads_get_campaign_diagnosticsDiagnose why a campaign is not spending or serving. Returns primary_status, primary_status_reasons, serving_status, budget, bidding strategy, and last-7-days metrics in a single call. Use this as the first step when a campaign has unexpectedly low spend or impressions. Includes paused and removed campaigns that had activity in the date range (status column labels them) — historical metrics are never filtered by current status.
google_ads_get_campaign_trackingGet campaign tracking parameters including tracking URL template, final URL suffix, and custom URL parameters
google_ads_get_client_contextGet the current client context and health status based on working directory. Call this first to confirm which Google Ads account you're working with.
google_ads_get_experimentGet full details for an experiment including its arms and treatment campaign ID.
google_ads_keyword_performanceGet 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. Includes paused and removed keywords that had activity in the date range (status column labels them) — historical metrics are never filtered by current status.
google_ads_keyword_performance_by_conversionGet keyword performance broken down by conversion action. Shows which keywords drive which conversion types (e.g., form fills, MQLs, etc.). Includes paused and removed keywords that had activity in the date range (status column labels them) — historical metrics are never filtered by current status.
google_ads_keyword_volumeGet 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.
google_ads_link_asset_to_ad_groupLink an existing asset to one or more ad groups by field type (ad-group level). Supports SITELINK, CALLOUT, STRUCTURED_SNIPPET, and LEAD_FORM (LEAD_FORM requires explicit_lead_form_request=true). Reads each ad group first and reports its name, campaign, current and resulting enabled link count of that field type. WARNS when a SITELINK link would leave an ad group with fewer than 4 enabled ad-group sitelinks: once an ad group has any ad-group sitelink, its campaign-level sitelinks stop serving there, so linking the first one can cut it to 1. The tool does not copy the campaign set; link those y…
google_ads_link_asset_to_campaignLink an existing asset to one or more campaigns by field type. Supports SITELINK, CALLOUT, STRUCTURED_SNIPPET, and LEAD_FORM. Create the asset first (e.g. with google_ads_create_sitelink or google_ads_create_lead_form_asset), then use this to attach it to campaigns. DRY-RUN BY DEFAULT: omit `confirm` or pass `confirm: false` to preview.
google_ads_link_asset_to_customerLink an existing asset to the customer account itself (account-level, applies across every campaign unless overridden at a lower level). Supports SITELINK, CALLOUT, and STRUCTURED_SNIPPET. Create the asset first (e.g. with google_ads_create_sitelink, google_ads_create_callout, or google_ads_create_structured_snippet), then use this to attach it at the account level. To remove an account-level link, use google_ads_pause_asset_links against the resulting customer_asset resource name. DRY-RUN BY DEFAULT: omit `confirm` or pass `confirm: false` to preview.
google_ads_link_shared_setLink a shared negative keyword list to one or more campaigns. Once linked, all negatives in the list will apply to those campaigns.
google_ads_list_ad_groupsList ad groups, optionally filtered by campaign
google_ads_list_campaignsList all campaigns for the current client account
google_ads_list_conversion_actionsList all available conversion actions (e.g., form fills, MQLs, etc.) to understand what conversion tracking is set up.
google_ads_list_experimentsList all experiments in the account, optionally filtered by base campaign ID.
google_ads_list_pending_changesList all pending changes (paused items with claude- label) awaiting review
google_ads_pause_asset_linksPause asset links (customer_asset, campaign_asset, or ad_group_asset). Use this to stop a sitelink from serving without deleting the underlying asset. DRY-RUN BY DEFAULT: omit `confirm` or pass `confirm: false` to get a preview. Resource name form: customers/{cid}/customerAssets/{assetId}~SITELINK, customers/{cid}/campaignAssets/{campId}~{assetId}~SITELINK, or customers/{cid}/adGroupAssets/{agId}~{assetId}~SITELINK. Ad-group links created by google_ads_link_asset_to_ad_group return their adGroupAssets resource names for exactly this.
google_ads_pause_itemsPause enabled campaigns, ad groups, or ads. REQUIRES USER APPROVAL. This will stop items from serving. Auto-applies today's `Claude-MM-DD-YY` label; pass `labels` to attach additional custom labels so different pause operations stay distinguishable (e.g. `fix-landing-page-redirect`).
google_ads_pause_keywordsPause active keywords by their criterion resource names.
google_ads_promote_experimentGraduate the treatment arm to become the permanent campaign (replaces base). Use when the treatment wins. Moves status to PROMOTED.
google_ads_remove_adgroup_negativesRemove ad-group-level negative keywords by their resource names. Get resource names from a GAQL query on ad_group_criterion.
google_ads_remove_campaign_negativesRemove campaign-level negative keywords by their resource names. Get resource names from a GAQL query on campaign_criterion.
google_ads_remove_experimentPermanently remove an experiment that is in SETUP status. Use to clean up orphaned or misconfigured experiments before recreating them. Only works on SETUP experiments (not yet scheduled/running).
google_ads_remove_itemsRemove campaigns, ad groups, or ads permanently. IRREVERSIBLE at the API level (reports on removed resources still work). DRY-RUN BY DEFAULT: omit `confirm` or pass `confirm: false` to get a preview; pass `confirm: true` to actually remove. Labels are applied BEFORE removal so the audit trail survives. Removals run in child-up order (ads → ad_groups → campaigns) so parent removes don't fail on enabled children. Auto-applies today's `Claude-MM-DD-YY` label.
google_ads_remove_shared_negativesRemove negative keywords from a shared negative keyword list by their resource names. Get resource names from a GAQL query on shared_criterion.
google_ads_rename_ad_groupRename an ad group. DRY-RUN BY DEFAULT: omit `confirm` or pass `confirm: false` to preview the change.
google_ads_rename_campaignRename a campaign. DRY-RUN BY DEFAULT: omit `confirm` or pass `confirm: false` to preview the change. Note: renaming a campaign does NOT update its url_custom_parameters (utmcampaign value carries the literal old name). Pair with google_ads_update_campaign_tracking to sync.
google_ads_replace_sitelink_urlFix a broken/outdated sitelink URL. Google Ads treats sitelink Asset.final_urls as immutable, so this creates a new sitelink asset with the corrected URL (preserving link_text + descriptions from the old one unless overridden), re-links every campaign / ad-group / customer-level attachment to the new asset, then removes the old links. The old Asset itself is NOT deleted. DRY-RUN BY DEFAULT.
google_ads_schedule_experimentStart a SETUP experiment so it begins serving traffic. Moves status from SETUP → ENABLED.
google_ads_search_term_insight_termsDrill into a specific search term category to see the individual search terms within it. Requires an insight_id from google_ads_search_term_insights.
google_ads_search_term_insightsGet 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.
google_ads_search_term_reportGet search term report showing actual search queries that triggered ads, with the keyword they matched to.
google_ads_search_term_report_by_conversionGet search term report broken down by conversion action. Shows which search queries drive which conversion types.
google_ads_set_ad_group_location_targetingAdd location (geo) targeting criteria at the ad group level. Required for Demand Gen campaigns — Demand Gen sets location at ad group level, not campaign level. Pass numeric geo target IDs (e.g. '2840' for USA). Existing criteria are NOT removed.
google_ads_set_campaign_location_targetingAdd location (geo) targeting criteria to an existing campaign. Mirrors the geo_target_ids parameter available at campaign creation. Pass the numeric geo target IDs (e.g. '2840' for USA, '2124' for Canada). Existing location criteria are NOT removed — call GAQL to check first if needed.
google_ads_unlink_shared_setUnlink a shared negative keyword list from one or more campaigns. The list's negatives will no longer apply to those campaigns.
google_ads_update_ad_asset_automationSet asset_automation_settings (auto-generated video, image enhancements, etc.) on one or more AdGroupAds. Use this to opt Demand Gen multi-asset ads OUT of Google's auto-generation features so creative output stays under advertiser control. Likely Demand Gen UI mappings (verify in UI on first use): 'Auto-generate video' → GENERATE_VIDEOS_FROM_OTHER_ASSETS; 'Adaptive layouts' → GENERATE_DESIGN_VERSIONS_FOR_IMAGES. Auto-applies today's Claude-MM-DD-YY label.
google_ads_update_ad_final_urlsUpdate final_urls on specific RSAs by ID, IN PLACE via AdService: same ad ID, status and ad-level history kept; Google re-reviews the edited ad. Leaves other ads in the ad group untouched. Refuses non-RSA ads (video final_urls are API-immutable). If an ad is also linked in other ad groups, those links change too -- see other_links in the dry run. Dry-run by default — pass confirm=true to apply.
google_ads_update_asset_urlsUpdate the final_urls on one or more assets (e.g. sitelinks, callouts). DRY-RUN BY DEFAULT: omit `confirm` or pass `confirm: false` to get a preview. Updating an asset's URL affects EVERY campaign/ad group/customer link that uses that asset ID -- use GAQL against customer_asset/campaign_asset/ad_group_asset to check attachments first.
google_ads_update_campaign_ad_rotationSet a campaign's ad rotation (ad_serving_optimization_status) — the setting behind the UI's Settings > Ad rotation. Affects EVERY ad group in the campaign, not just one. ROTATE ("Rotate evenly") self-reverts to OPTIMIZE ("Optimize: Prefer best performing ads") after ~90 days — Google-managed, no follow-up needed. ROTATE_INDEFINITELY does NOT auto-revert and needs a manual revert or reminder. No default mode is applied — you must pass one explicitly, so ROTATE_INDEFINITELY can never be set by omission. DRY-RUN BY DEFAULT: omit `confirm` or pass `confirm: false` to preview.
google_ads_update_campaign_ad_urlsBulk-replace the final URL on every enabled ad in a campaign. Used to point an experiment treatment campaign at a new landing page. Returns a dry-run preview unless execute=true.
google_ads_update_campaign_biddingUpdate a campaign's bidding strategy and/or target CPA / target ROAS. If `strategy` is omitted the current strategy is preserved and only the target values are updated (useful for adding a tCPA to an existing Max Conversions campaign). Dollar amounts are in dollars (converted to micros internally). target_roas is a decimal (e.g., 3.0 = 300%). BLOCKS by default if the change implies a >20% target delta from the campaign's current value, or removes an existing target / switches off a target-based strategy entirely (a 'loosening' change with no percentage to measure) — pass confirm_large_change: …
google_ads_update_campaign_budgetUpdate 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).
google_ads_update_campaign_geo_target_typeSet one or more campaigns' positive geo target type (geo_target_type_setting.positive_geo_target_type) — the setting behind the UI's Locations > Location options > "Presence" vs "Presence or interest". PRESENCE targets people physically in or regularly in the location; PRESENCE_OR_INTEREST also serves people searching about the location from elsewhere. Only these two modes are accepted here. Applies the same mode to every campaign_id passed in the same call. If `label` is passed, it is applied to every one of those campaigns as part of the same call. DRY-RUN BY DEFAULT: omit `confirm` or pass …
google_ads_update_campaign_selective_optimizationSet a campaign's Selective Optimization conversion actions — the subset of conversion actions a Maximize Conversions / Maximize Conversion Value campaign optimizes bidding toward. FULL-ARRAY REPLACE, not additive: the conversion_action_ids list you pass entirely replaces whatever conversion actions are currently set, it does not merge with them. Pass every conversion action ID you want active, not just the ones to add.
google_ads_update_campaign_trackingUpdate 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.
google_ads_update_demand_gen_multi_asset_adAttempt to update copy on a Demand Gen ad. WARNING: on Demand Gen MULTI-ASSET ads the entire creative — headlines, descriptions, AND images — is IMMUTABLE after creation; the Google Ads API rejects any such update with IMMUTABLE_FIELD (verified live 2026-07-12). To change ANY creative on a multi-asset ad you must RECREATE it (create a new ad + pause the old one), not update it. This tool is retained for DG ad formats that may permit copy edits; against a multi-asset ad it will error. Provide the ad's resource name (customers/XXX/adGroupAds/YYY~ZZZ) or numeric ad ID.
google_ads_update_responsive_search_ad_textUpdate an RSA's headline/description text IN PLACE via AdService — same ad ID, no new ad created, no pause/clone. Use this instead of google_ads_create_responsive_search_ad + google_ads_pause_items for a text-only edit. WARNING: an Ad resource can be linked into more than one ad group (e.g. a base campaign and an experiment-page campaign sharing unedited ads); this tool edits the shared Ad resource, so one call changes EVERY linked ad_group_ad — check `affected_ad_group_ad_links` / `shared_across_multiple_ad_groups` in the dry-run before confirming. Pass only headlines and/or descriptions you …
google_ads_update_video_ad_videosAdd or replace the YouTube videos on an existing video responsive ad (VIDEO campaigns, e.g. YouTube reach). The VIDEO channel is campaign-level API-locked, but AD-level video_responsive_ad.videos updates ARE allowed and edit the ad in place (same ad ID) — verified live 2026-07-18. Accepts YouTube URLs (watch/shorts/youtu.be/embed) or 11-char video IDs; finds-or-creates the YouTube video assets; preflights each new video via oEmbed (private videos are rejected by Google Ads — must be Public or Unlisted). Default mode 'append' keeps existing videos and adds new ones. Auto-labels the ad claude-MM…
google_ads_validate_adValidate an RSA without creating it. Use this to check for errors before creating. Enforces: 3-15 headlines (≤30 chars), 2-4 descriptions (≤90 chars), ≥1 final URL, both path1 AND path2 present (≤15 chars each), ≥1 label. Also enforces a house floor of ≥15 headlines and ≥4 descriptions by default (mirroring google_ads_create_responsive_search_ad's pre-check) -- pass allow_partial_assets: true to preview a below-floor ad without that rejection.
Compare and alternatives
Featured in
Signals
- Stars
- 1
- Forks
- 1
- Open issues
- 1
- Last commit
- Oct 23, 2026 (5 days ago)
- Last release
- Sep 9, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- Registry name
io.github.mharnett/google-ads- Version
- 1.0.1
- Auth
- API key
- Packages
- npm mcp-google-ads
- License
- MIT
- Repository
- github.com/mharnett/mcp-google-ads
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
More from mharnett
- 0.580score
Reddit Ads
mharnett
Reddit Ads MCP: campaigns, ad groups, ads, reporting, and audience targeting.
ConnectorBFreshness: BLocal★ 3Claude Code +5 - 0.579score
Ga4
mharnett
Google Analytics 4 MCP: reports, realtime data, custom dimensions, data streams.
ConnectorAFreshness: ALocalClaude Code +5 - 0.576score
Bing Ads
mharnett
MCP server for Microsoft Advertising (Bing Ads) — campaigns, keywords, and reports
ConnectorBFreshness: BLocal★ 4Claude Code +5 - 0.574score
Gtm Ga4
mharnett
GTM + GA4 MCP: tag management, consent auditing, workspace versioning, reports.
ConnectorBFreshness: BLocal★ 2Claude Code +5 - 0.574score
Google Gsc
mharnett
Google Search Console MCP: search analytics, URL inspection, site management.
ConnectorBFreshness: BLocalRead-only★ 2Claude Code +5 - 0.528score
LinkedIn Ads
mharnett
MCP server for LinkedIn Campaign Manager — campaigns, creatives, and analytics
ConnectorBFreshness: BLocalClaude Code +5
Cite this page
Google Ads MCP server. Agent Mart. https://agentmart.dev/connectors/mharnett-google-ads (last updated 2026-10-24)