Google Ads

io.github.mcp-dirPublished by GitHub account mcp-dirv0.1.0Updated Oct 28, 2026

Full Google Ads management: read (campaigns, performance, ROAS, keywords, search terms) and write (p

VerifiedStreamable HTTPWeb executableData & AnalyticsBusiness & Commerce

Overview

AI-generated overview

Remote MCP server for Google Ads: lets an assistant read campaigns, performance, ROAS and keywords, and create or pause campaigns, ads, budgets and keywords.

What you can do
  • List accessible MCC and customer accounts, account details and status overviews
  • List campaigns, ads, ad groups and sitelinks with status, budgets and policy diagnostics
  • Report performance: today's metrics, daily breakdown, ROAS, keyword and search-term analytics, custom GAQL queries
  • Review change history with who changed what and when
  • Create campaigns, budgets, ad groups, keywords, negative keywords, responsive search ads and sitelinks
  • Pause, enable, remove or re-bid campaigns, ad groups, ads and keywords; detach sitelinks
When to use it
Useful when you manage Google Ads accounts and want an assistant to answer performance and policy questions, audit changes, or make bulk campaign and keyword edits without opening the Google Ads UI.
Requirements
A remote streamable HTTP endpoint; no local package or runtime. A Google Ads account with OAuth access to the MCC and customer accounts, connected through the provider's connect flow (an Authorization Bearer token header is suggested for IDE agents). Network access to the endpoint.
Before you install
Many tools write to live ad accounts: status changes, budget and bid updates, campaign, ad group, ad and keyword creation, and sitelink removal. Removal of campaigns, ad groups, ads and keywords is irreversible, and budget or bid changes spend real money. The server also asks for an access token and offers bug reporting that includes recent conversation messages.

Installation

In SourceWeft

  1. Open Google Ads in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.mcp-dir%2Fgoogle_ads-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "google-ads": {
      "type": "http",
      "url": "https://api.mcp.ai/p_google_ads"
    }
  }
}

README

This repository has no README.

Tools

35

google_ads_list_accounts

List all Google Ads MCCs and ALL customer accounts the OAuth token can access (via customers:listAccessibleCustomers — not just hierarchy of the MCC). Each customer comes enriched with descriptive_name, currency_code, time_zone, manager flag, status. Use the returned customer_id (10 digits) in `customer_id` on other tools, and `account` to pick the MCC connection when multiple are present. Bulk support: accepts customer_ids for batched execution.

Parametersaccountcustomer_idcustomer_ids

google_ads_status

Without account: overview of all Google Ads MCCs and customer_ids. With account (and optional customer_id): details for that scope. Bulk support: accepts customer_ids for batched execution.

Parametersaccountcustomer_idcustomer_ids

google_ads_account

Get Google Ads account info: name, currency, timezone for a customer (uses account + customer_id to resolve scope). Bulk support: accepts customer_ids for batched execution.

Parametersaccountcustomer_idcustomer_ids

google_ads_campaigns

List Google Ads campaigns with status and budgets. Default (ALL) returns both ENABLED and PAUSED campaigns; pass status ENABLED or PAUSED to narrow. REMOVED (deleted) campaigns are excluded. Bulk support: accepts customer_ids for batched execution.

Parametersstatusaccountcustomer_idcustomer_ids

google_ads_today

Today Google Ads performance: cost, impressions, clicks, conversions, ROAS per campaign plus _summary. Bulk support: accepts customer_ids for batched execution.

Parametersaccountcustomer_idcustomer_ids

google_ads_roas

ROAS for a date range (defaults to current month). Per-campaign cost, conversions, revenue, plus _summary. Bulk support: accepts customer_ids for batched execution.

Parameterssinceuntilaccountcustomer_idcustomer_ids

google_ads_ads

List enabled ads with type, status, campaign name and ad_group_ad.policy_summary (approval_status, review_status, policy_topic_entries) — answers "why is my ad not serving?" without opening the Google Ads UI. Bulk support: accepts customer_ids for batched execution.

Parametersaccountcustomer_idcustomer_ids

google_ads_keywords_keywords

Keyword analytics, search terms, status/policy diagnostics, auction diagnostics, or custom GAQL SELECT. Uses account + customer_id for scope. Actions: `keywords` (last 7 days metrics top 50), `search_terms` (last 7 days), `status` (ALL enabled keywords with approval_status, system_serving_status — e.g. RARELY_SERVED for "Low search volume" — and disapproval_reasons; answers "why is my keyword not serving?"), `diagnostics` (Quality Score, position estimates / top-of-page CPC, impression share, rank-lost; answers "is it bid or Quality Score?"; bundles per-campaign budget-loss as `_campaign_budget_loss` since budget is a campaign property, not keyword; supports campaign_id/ad_group_id filters and days=7|14|30), `raw` (any GAQL SELECT). [Flattened action: keywords] Bulk support: accepts campaign_ids, ad_group_ids, customer_ids for batched execution.

Parametersdaysqueryaccountad_group_idcampaign_idcustomer_idad_group_idscampaign_idscustomer_ids

google_ads_keywords_search_terms

Keyword analytics, search terms, status/policy diagnostics, auction diagnostics, or custom GAQL SELECT. Uses account + customer_id for scope. Actions: `keywords` (last 7 days metrics top 50), `search_terms` (last 7 days), `status` (ALL enabled keywords with approval_status, system_serving_status — e.g. RARELY_SERVED for "Low search volume" — and disapproval_reasons; answers "why is my keyword not serving?"), `diagnostics` (Quality Score, position estimates / top-of-page CPC, impression share, rank-lost; answers "is it bid or Quality Score?"; bundles per-campaign budget-loss as `_campaign_budget_loss` since budget is a campaign property, not keyword; supports campaign_id/ad_group_id filters and days=7|14|30), `raw` (any GAQL SELECT). [Flattened action: search_terms] Bulk support: accepts campaign_ids, ad_group_ids, customer_ids for batched execution.

Parametersdaysqueryaccountad_group_idcampaign_idcustomer_idad_group_idscampaign_idscustomer_ids

google_ads_keywords_status

Keyword analytics, search terms, status/policy diagnostics, auction diagnostics, or custom GAQL SELECT. Uses account + customer_id for scope. Actions: `keywords` (last 7 days metrics top 50), `search_terms` (last 7 days), `status` (ALL enabled keywords with approval_status, system_serving_status — e.g. RARELY_SERVED for "Low search volume" — and disapproval_reasons; answers "why is my keyword not serving?"), `diagnostics` (Quality Score, position estimates / top-of-page CPC, impression share, rank-lost; answers "is it bid or Quality Score?"; bundles per-campaign budget-loss as `_campaign_budget_loss` since budget is a campaign property, not keyword; supports campaign_id/ad_group_id filters and days=7|14|30), `raw` (any GAQL SELECT). [Flattened action: status] Bulk support: accepts campaign_ids, ad_group_ids, customer_ids for batched execution.

Parametersdaysqueryaccountad_group_idcampaign_idcustomer_idad_group_idscampaign_idscustomer_ids

google_ads_keywords_diagnostics

Keyword analytics, search terms, status/policy diagnostics, auction diagnostics, or custom GAQL SELECT. Uses account + customer_id for scope. Actions: `keywords` (last 7 days metrics top 50), `search_terms` (last 7 days), `status` (ALL enabled keywords with approval_status, system_serving_status — e.g. RARELY_SERVED for "Low search volume" — and disapproval_reasons; answers "why is my keyword not serving?"), `diagnostics` (Quality Score, position estimates / top-of-page CPC, impression share, rank-lost; answers "is it bid or Quality Score?"; bundles per-campaign budget-loss as `_campaign_budget_loss` since budget is a campaign property, not keyword; supports campaign_id/ad_group_id filters and days=7|14|30), `raw` (any GAQL SELECT). [Flattened action: diagnostics] Bulk support: accepts campaign_ids, ad_group_ids, customer_ids for batched execution.

Parametersdaysqueryaccountad_group_idcampaign_idcustomer_idad_group_idscampaign_idscustomer_ids

google_ads_keywords_raw

Keyword analytics, search terms, status/policy diagnostics, auction diagnostics, or custom GAQL SELECT. Uses account + customer_id for scope. Actions: `keywords` (last 7 days metrics top 50), `search_terms` (last 7 days), `status` (ALL enabled keywords with approval_status, system_serving_status — e.g. RARELY_SERVED for "Low search volume" — and disapproval_reasons; answers "why is my keyword not serving?"), `diagnostics` (Quality Score, position estimates / top-of-page CPC, impression share, rank-lost; answers "is it bid or Quality Score?"; bundles per-campaign budget-loss as `_campaign_budget_loss` since budget is a campaign property, not keyword; supports campaign_id/ad_group_id filters and days=7|14|30), `raw` (any GAQL SELECT). [Flattened action: raw] Bulk support: accepts campaign_ids, ad_group_ids, customer_ids for batched execution.

Parametersdaysqueryaccountad_group_idcampaign_idcustomer_idad_group_idscampaign_idscustomer_ids

google_ads_performance

Daily performance breakdown: cost, impressions, clicks, conversions, revenue per day. Bulk support: accepts customer_ids for batched execution.

Parametersdaysaccountcustomer_idcustomer_ids

google_ads_changes

Change history / audit log: who changed what in the account and when. Covers campaigns, ad groups, ads (headlines/descriptions/final URLs), keywords, budgets and bids, with the user_email who made each change, the client (web UI / API / bulk upload), the operation (CREATE/UPDATE/REMOVE), the changed field mask and the old→new resource. Backed by Google Ads change_event (last 30 days only, per customer). Pass `since`/`until` (YYYY-MM-DD or "YYYY-MM-DD HH:MM:SS") or `days`; for incremental polling pass `since` = the last seen change timestamp. Bulk support: accepts customer_ids for batched execution.

Parametersdayslimitsinceuntilaccountcustomer_idcustomer_ids

google_ads_campaign_update_status

Pause, enable or remove one or more Google Ads campaigns. REMOVED is irreversible. Pass campaign ids from google_ads_campaigns. Google rejects status changes on trial (draft/experiment) campaigns, which can only be changed in the Google Ads UI.

Parametersstatusrequiredaccountcustomer_idcampaign_idsrequiredpartial_failure

google_ads_campaign_update_budget

Update the daily budget of a campaign. Pass the campaign id and the new amount in the account currency unit (R$50,50 -> 50.5; converted to micros internally). Bulk support: accepts campaign_ids, customer_ids for batched execution.

Parametersamountrequiredaccountcampaign_idrequiredcustomer_idcampaign_idscustomer_ids

google_ads_ad_group_update_status

Pause, enable or remove ad groups. REMOVED is irreversible.

Parametersstatusrequiredaccountcustomer_idad_group_idsrequiredpartial_failure

google_ads_ad_update_status

Pause, enable or remove ads. Each entry needs ad_group_id + ad_id because the ad resource is keyed by both (customers/X/adGroupAds/{ad_group_id}~{ad_id}). Bulk support: accepts customer_ids for batched execution.

Parametersadsrequiredstatusrequiredaccountcustomer_idcustomer_idspartial_failure

google_ads_keyword_update_status

Pause, enable or remove keywords. Each entry needs ad_group_id + criterion_id (the keyword criterion id). Bulk support: accepts customer_ids for batched execution.

Parametersstatusrequiredaccountkeywordsrequiredcustomer_idcustomer_idspartial_failure

google_ads_keyword_update_bid

Update max CPC for one or more keywords. Bid in account currency unit (e.g. 1.5 = R$1,50). Bulk support: accepts customer_ids for batched execution.

Parametersaccountcpc_bidrequiredkeywordsrequiredcustomer_idcustomer_idspartial_failure

google_ads_campaign_budget_create

Create a campaign_budget. Required to create a campaign. Amount is daily, in account currency unit (50 = R$50/day). Bulk support: accepts customer_ids for batched execution.

Parametersnamerequiredamountrequiredaccountcustomer_idcustomer_idsdelivery_method

google_ads_campaign_create

Create a Google Ads campaign. Defaults to channel_type=SEARCH, status=PAUSED (safe), bidding_strategy=MANUAL_CPC. Provide budget_id from google_ads_campaign_budget_create. Declares no EU political advertising by default (Reg 2024/900, required by Google). Only SEARCH, DISPLAY and SHOPPING can be created through the API: VIDEO (YouTube) is read-only on Google side, and PERFORMANCE_MAX must be created together with its asset group. Build those two in the Google Ads interface and use this MCP to report on them. Bulk support: accepts budget_ids, merchant_ids, customer_ids for batched execution.

Parametersnamerequiredstatusaccountbudget_idrequiredbudget_idsfeed_labelcustomer_idmerchant_idchannel_typecustomer_idsmerchant_idseu_political_ad+2 more

google_ads_ad_group_create

Create an ad group inside a campaign. Default status ENABLED, type SEARCH_STANDARD. Optional cpc_bid as the ad-group-level default max CPC. Bulk support: accepts campaign_ids, customer_ids for batched execution.

Parametersnamerequiredtypestatusaccountcpc_bidcampaign_idrequiredcustomer_idcampaign_idscustomer_ids

google_ads_keyword_add

Add positive keywords to an ad group. Each keyword: { text, match_type, cpc_bid? }. match_type = EXACT | PHRASE | BROAD. Bulk support: accepts ad_group_ids, customer_ids for batched execution.

Parametersstatusaccountkeywordsrequiredad_group_idrequiredcustomer_idad_group_idscustomer_idspartial_failure

google_ads_negative_keyword_add

Add negative keywords at campaign or ad group scope. Pass scope + the matching target_id (campaign_id or ad_group_id). Bulk support: accepts target_ids, customer_ids for batched execution.

Parametersscoperequiredaccountkeywordsrequiredtarget_idrequiredtarget_idscustomer_idcustomer_idspartial_failure

google_ads_responsive_search_ad_create

Create a Responsive Search Ad (RSA) inside an ad group. Headlines: 3-15 entries (each <= 30 chars). Descriptions: 2-4 entries (each <= 90 chars). final_urls required. Default status PAUSED. Bulk support: accepts ad_group_ids, customer_ids for batched execution.

Parameterspath1path2statusaccountheadlinesrequiredfinal_urlsrequiredad_group_idrequiredcustomer_idad_group_idscustomer_idsdescriptionsrequired

show_version

Show Version

Show the current MCP platform and adapter versions.

Takes no parameters.

report_bug

Report Bug

Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction.

Parameterscontextmessagerequiredconversation

connect

Connection Status

Returns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns connect_url for the toolkit and per-install URLs.

Takes no parameters.

toolkit_info

Toolkit Info

Returns the current toolkit state: installed MCPs, their connection status, the accounts connected to each one, and how many catalog tools each exposes.

Takes no parameters.

marketplace

Marketplace

The official mcp.ai marketplace — the in-platform catalog of every MCP/tool, AND the way to run them. Covers capability requests like "find an MCP that does X", "consulta um CPF", "is there a tool for Y". Core flow: action=search discovers MCPs by intent → describe returns one MCP's full profile (every tool with its id + params, pricing, auth) so you pick the right tool_id → invoke RUNS that tool. KEY: invoke works even when the MCP is NOT installed — it runs the tool pontualmente (one-off), without adding the MCP to the toolkit and without bloating the tool list. If the MCP needs a credential/login, invoke returns a connect link; if it is paid and the wallet is empty, invoke returns a checkout/top-up link (the user opens it, then you retry). Use install only to make an MCP PERMANENT in the active toolkit (its tools then show up natively in future sessions); prefer invoke for a single/occasional use. list_tools lists what is callable right now. subscribe/cancel handle per-MCP billing; report_bug sends feedback; request_mcp asks us to build a NEW MCP when nothing fits. Search/describe flag installed_in_toolkit vs installed_in_workspace. Writes (install/uninstall/subscribe/cancel and the one-off install behind invoke) require workspace owner/admin. It also carries the mcp.ai PROMPT LIBRARY, which is about ready-made prompt TEXT rather than MCPs: search_prompts finds one, get_prompt returns its full text with {{variables}} filled, and publish_prompt saves a prompt and returns a shareable mcp.ai/p/<slug> link that opens without login.

Parameterslimitqueryactionmcp_idmessagetool_idargumentsimmediatetier_slugprompt_bodyprompt_slugprompt_tool+11 more

authenticate

Authenticate

MCP.AI for IDE agents (Cursor, etc.): log in in the browser, copy the access token. Best: add it to this server's config as a header `Authorization: Bearer <token>` for a permanent, non-expiring connection. Or paste it here for a session-only login: call with { token: "<jwt>" } after the user pastes, or with no args to get the link.

Parameterstoken

Version history

1
  1. v0.1.0LatestSep 16, 2026

Score

75% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts

    Declare a GitHub repository with a README, or serve resource_documentation in the OAuth protected-resource metadata.

  • License10 pts

    Declare a license in the repository or the registry entry.