{"name":"io.github.mcp-dir/google_ads-mcp","slug":"mcp-dir-google-ads-mcp","title":"Google Ads","description":"Full Google Ads management: read (campaigns, performance, ROAS, keywords, search terms) and write (p","url":"https://mcp.market/server/mcp-dir-google-ads-mcp","rating":null,"grade":"B","score":72,"certified":false,"status":"active","category":"search","tags":["search"],"presence":{"score":15,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-08-30T19:45:16.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-02T02:35:25.926Z","last_ok_at":"2026-11-02T02:35:25.926Z","latency_ms":77},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/mcp-dir/google_ads-mcp","website":null,"version":"0.1.0","remotes":[{"type":"streamable-http","url":"https://api.mcp.ai/p_google_ads"}],"packages":[],"tools":[{"name":"authenticate","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"token":{"type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"connect","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_account","description":"Get Google Ads account info: name, currency, timezone for a customer (uses account + customer_id to resolve scope).\n\nBulk support: accepts customer_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string"},"customer_id":{"type":"string"},"customer_ids":{"type":"array","items":{"type":"string"}}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_ad_group_create","description":"Create an ad group inside a campaign. Default status ENABLED, type SEARCH_STANDARD. Optional cpc_bid as the ad-group-level default max CPC.\n\nBulk support: accepts campaign_ids, customer_ids for batched execution.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaign_id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["SEARCH_STANDARD","DISPLAY_STANDARD","SHOPPING_PRODUCT_ADS"]},"status":{"type":"string","enum":["ENABLED","PAUSED"]},"cpc_bid":{"type":"number"},"account":{"type":"string"},"customer_id":{"type":"string"},"campaign_ids":{"type":"array","items":{"type":"string"}},"customer_ids":{"type":"array","items":{"type":"string"}}},"required":["campaign_id","name"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_ad_group_update_status","description":"Pause, enable or remove ad groups. REMOVED is irreversible.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"ad_group_ids":{"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["ENABLED","PAUSED","REMOVED"]},"partial_failure":{"type":"boolean"},"account":{"type":"string"},"customer_id":{"type":"string"}},"required":["ad_group_ids","status"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_ad_update_status","description":"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}).\n\nBulk support: accepts customer_ids for batched execution.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"ads":{"type":"array","items":{"type":"object","properties":{"ad_group_id":{"type":"string"},"ad_id":{"type":"string"}},"required":["ad_group_id","ad_id"]}},"status":{"type":"string","enum":["ENABLED","PAUSED","REMOVED"]},"partial_failure":{"type":"boolean"},"account":{"type":"string"},"customer_id":{"type":"string"},"customer_ids":{"type":"array","items":{"type":"string"}}},"required":["ads","status"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_ads","description":"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.\n\nBulk support: accepts customer_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string"},"customer_id":{"type":"string"},"customer_ids":{"type":"array","items":{"type":"string"}}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_campaign_budget_create","description":"Create a campaign_budget. Required to create a campaign. Amount is daily, in account currency unit (50 = R$50/day).\n\nBulk support: accepts customer_ids for batched execution.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string"},"amount":{"type":"number"},"delivery_method":{"type":"string","enum":["STANDARD","ACCELERATED"]},"account":{"type":"string"},"customer_id":{"type":"string"},"customer_ids":{"type":"array","items":{"type":"string"}}},"required":["name","amount"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_campaign_create","description":"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.\n\nBulk support: accepts budget_ids, merchant_ids, customer_ids for batched execution.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string"},"budget_id":{"type":"string"},"channel_type":{"type":"string","enum":["SEARCH","DISPLAY","SHOPPING"]},"bidding_strategy":{"type":"string","enum":["MANUAL_CPC","MAXIMIZE_CONVERSIONS","MAXIMIZE_CONVERSION_VALUE","MAXIMIZE_CLICKS"]},"status":{"type":"string","enum":["ENABLED","PAUSED"]},"merchant_id":{"type":"string"},"feed_label":{"type":"string"},"campaign_priority":{"type":"number"},"eu_political_ad":{"type":"boolean"},"account":{"type":"string"},"customer_id":{"type":"string"},"budget_ids":{"type":"array","items":{"type":"string"}},"merchant_ids":{"type":"array","items":{"type":"string"}},"customer_ids":{"type":"array","items":{"type":"string"}}},"required":["name","budget_id"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_campaign_update_budget","description":"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).\n\nBulk support: accepts campaign_ids, customer_ids for batched execution.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaign_id":{"type":"string"},"amount":{"type":"number"},"account":{"type":"string"},"customer_id":{"type":"string"},"campaign_ids":{"type":"array","items":{"type":"string"}},"customer_ids":{"type":"array","items":{"type":"string"}}},"required":["campaign_id","amount"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_campaign_update_status","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"campaign_ids":{"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["ENABLED","PAUSED","REMOVED"]},"partial_failure":{"type":"boolean"},"account":{"type":"string"},"customer_id":{"type":"string"}},"required":["campaign_ids","status"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_campaigns","description":"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.\n\nBulk support: accepts customer_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"status":{"default":"ALL","type":"string","enum":["ALL","ENABLED","PAUSED"]},"account":{"type":"string"},"customer_id":{"type":"string"},"customer_ids":{"type":"array","items":{"type":"string"}}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_changes","description":"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.\n\nBulk support: accepts customer_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"},"days":{"type":"number"},"limit":{"type":"number"},"account":{"type":"string"},"customer_id":{"type":"string"},"customer_ids":{"type":"array","items":{"type":"string"}}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_keyword_add","description":"Add positive keywords to an ad group. Each keyword: { text, match_type, cpc_bid? }. match_type = EXACT | PHRASE | BROAD.\n\nBulk support: accepts ad_group_ids, customer_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ad_group_id":{"type":"string"},"keywords":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"match_type":{"type":"string","enum":["EXACT","PHRASE","BROAD"]},"cpc_bid":{"type":"number"}},"required":["text"]}},"status":{"type":"string","enum":["ENABLED","PAUSED"]},"partial_failure":{"type":"boolean"},"account":{"type":"string"},"customer_id":{"type":"string"},"ad_group_ids":{"type":"array","items":{"type":"string"}},"customer_ids":{"type":"array","items":{"type":"string"}}},"required":["ad_group_id","keywords"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_keyword_update_bid","description":"Update max CPC for one or more keywords. Bid in account currency unit (e.g. 1.5 = R$1,50).\n\nBulk support: accepts customer_ids for batched execution.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"keywords":{"type":"array","items":{"type":"object","properties":{"ad_group_id":{"type":"string"},"criterion_id":{"type":"string"}},"required":["ad_group_id","criterion_id"]}},"cpc_bid":{"type":"number"},"partial_failure":{"type":"boolean"},"account":{"type":"string"},"customer_id":{"type":"string"},"customer_ids":{"type":"array","items":{"type":"string"}}},"required":["keywords","cpc_bid"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_keyword_update_status","description":"Pause, enable or remove keywords. Each entry needs ad_group_id + criterion_id (the keyword criterion id).\n\nBulk support: accepts customer_ids for batched execution.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"keywords":{"type":"array","items":{"type":"object","properties":{"ad_group_id":{"type":"string"},"criterion_id":{"type":"string"}},"required":["ad_group_id","criterion_id"]}},"status":{"type":"string","enum":["ENABLED","PAUSED","REMOVED"]},"partial_failure":{"type":"boolean"},"account":{"type":"string"},"customer_id":{"type":"string"},"customer_ids":{"type":"array","items":{"type":"string"}}},"required":["keywords","status"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_keywords_diagnostics","description":"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).\n\n[Flattened action: diagnostics]\n\nBulk support: accepts campaign_ids, ad_group_ids, customer_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string"},"campaign_id":{"type":"string"},"ad_group_id":{"type":"string"},"days":{"type":"number"},"account":{"type":"string"},"customer_id":{"type":"string"},"campaign_ids":{"type":"array","items":{"type":"string"}},"ad_group_ids":{"type":"array","items":{"type":"string"}},"customer_ids":{"type":"array","items":{"type":"string"}}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_keywords_keywords","description":"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).\n\n[Flattened action: keywords]\n\nBulk support: accepts campaign_ids, ad_group_ids, customer_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string"},"campaign_id":{"type":"string"},"ad_group_id":{"type":"string"},"days":{"type":"number"},"account":{"type":"string"},"customer_id":{"type":"string"},"campaign_ids":{"type":"array","items":{"type":"string"}},"ad_group_ids":{"type":"array","items":{"type":"string"}},"customer_ids":{"type":"array","items":{"type":"string"}}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_keywords_raw","description":"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).\n\n[Flattened action: raw]\n\nBulk support: accepts campaign_ids, ad_group_ids, customer_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string"},"campaign_id":{"type":"string"},"ad_group_id":{"type":"string"},"days":{"type":"number"},"account":{"type":"string"},"customer_id":{"type":"string"},"campaign_ids":{"type":"array","items":{"type":"string"}},"ad_group_ids":{"type":"array","items":{"type":"string"}},"customer_ids":{"type":"array","items":{"type":"string"}}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_keywords_search_terms","description":"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).\n\n[Flattened action: search_terms]\n\nBulk support: accepts campaign_ids, ad_group_ids, customer_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string"},"campaign_id":{"type":"string"},"ad_group_id":{"type":"string"},"days":{"type":"number"},"account":{"type":"string"},"customer_id":{"type":"string"},"campaign_ids":{"type":"array","items":{"type":"string"}},"ad_group_ids":{"type":"array","items":{"type":"string"}},"customer_ids":{"type":"array","items":{"type":"string"}}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_keywords_status","description":"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).\n\n[Flattened action: status]\n\nBulk support: accepts campaign_ids, ad_group_ids, customer_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string"},"campaign_id":{"type":"string"},"ad_group_id":{"type":"string"},"days":{"type":"number"},"account":{"type":"string"},"customer_id":{"type":"string"},"campaign_ids":{"type":"array","items":{"type":"string"}},"ad_group_ids":{"type":"array","items":{"type":"string"}},"customer_ids":{"type":"array","items":{"type":"string"}}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_list_accounts","description":"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.\n\nBulk support: accepts customer_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string"},"customer_id":{"type":"string"},"customer_ids":{"type":"array","items":{"type":"string"}}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_negative_keyword_add","description":"Add negative keywords at campaign or ad group scope. Pass scope + the matching target_id (campaign_id or ad_group_id).\n\nBulk support: accepts target_ids, customer_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"scope":{"type":"string","enum":["campaign","ad_group"]},"target_id":{"type":"string"},"keywords":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"match_type":{"type":"string","enum":["EXACT","PHRASE","BROAD"]}},"required":["text"]}},"partial_failure":{"type":"boolean"},"account":{"type":"string"},"customer_id":{"type":"string"},"target_ids":{"type":"array","items":{"type":"string"}},"customer_ids":{"type":"array","items":{"type":"string"}}},"required":["scope","target_id","keywords"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_performance","description":"Daily performance breakdown: cost, impressions, clicks, conversions, revenue per day.\n\nBulk support: accepts customer_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"days":{"default":7,"type":"number"},"account":{"type":"string"},"customer_id":{"type":"string"},"customer_ids":{"type":"array","items":{"type":"string"}}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_responsive_search_ad_create","description":"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.\n\nBulk support: accepts ad_group_ids, customer_ids for batched execution.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"ad_group_id":{"type":"string"},"headlines":{"type":"array","items":{"type":"string"}},"descriptions":{"type":"array","items":{"type":"string"}},"final_urls":{"type":"array","items":{"type":"string"}},"path1":{"type":"string"},"path2":{"type":"string"},"status":{"type":"string","enum":["ENABLED","PAUSED"]},"account":{"type":"string"},"customer_id":{"type":"string"},"ad_group_ids":{"type":"array","items":{"type":"string"}},"customer_ids":{"type":"array","items":{"type":"string"}}},"required":["ad_group_id","headlines","descriptions","final_urls"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_roas","description":"ROAS for a date range (defaults to current month). Per-campaign cost, conversions, revenue, plus _summary.\n\nBulk support: accepts customer_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"},"account":{"type":"string"},"customer_id":{"type":"string"},"customer_ids":{"type":"array","items":{"type":"string"}}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_sitelink_create","description":"Create sitelink extensions and attach them to a campaign (default), the whole account (scope=customer) or an ad group. A sitelink is a SitelinkAsset (its own link_text + final_url, optionally 2 description lines) linked to the scope — it is NOT the ad's display path (that is path1/path2 on the RSA). link_text <= 25 chars; if you set descriptions you must set BOTH (each <= 35 chars). Google needs at least ~2 sitelinks to actually show them. The created assets are shared in the account library.\n\nBulk support: accepts target_ids, customer_ids for batched execution.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"scope":{"default":"campaign","type":"string","enum":["campaign","customer","ad_group"]},"target_id":{"type":"string"},"sitelinks":{"type":"array","items":{"type":"object","properties":{"link_text":{"type":"string"},"final_url":{"type":"string"},"description1":{"type":"string"},"description2":{"type":"string"}},"required":["link_text","final_url"]}},"partial_failure":{"type":"boolean"},"account":{"type":"string"},"customer_id":{"type":"string"},"target_ids":{"type":"array","items":{"type":"string"}},"customer_ids":{"type":"array","items":{"type":"string"}}},"required":["sitelinks"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_sitelink_remove","description":"Detach sitelinks from a campaign / account / ad group. Pass the link_resource_name(s) from google_ads_sitelinks. Removes only the association (the shared sitelink asset stays in the account library), so it is reversible by re-attaching.\n\nBulk support: accepts customer_ids for batched execution.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"link_resource_names":{"type":"array","items":{"type":"string"}},"partial_failure":{"type":"boolean"},"account":{"type":"string"},"customer_id":{"type":"string"},"customer_ids":{"type":"array","items":{"type":"string"}}},"required":["link_resource_names"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_sitelinks","description":"List sitelink assets in the account and where they are attached (campaign / account / ad group level), with each link's resource_name (pass it to google_ads_sitelink_remove) and status. Use to audit existing sitelinks before creating new ones.\n\nBulk support: accepts customer_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string"},"customer_id":{"type":"string"},"customer_ids":{"type":"array","items":{"type":"string"}}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_status","description":"Without account: overview of all Google Ads MCCs and customer_ids. With account (and optional customer_id): details for that scope.\n\nBulk support: accepts customer_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string"},"customer_id":{"type":"string"},"customer_ids":{"type":"array","items":{"type":"string"}}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"google_ads_today","description":"Today Google Ads performance: cost, impressions, clicks, conversions, ROAS per campaign plus _summary.\n\nBulk support: accepts customer_ids for batched execution.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string"},"customer_id":{"type":"string"},"customer_ids":{"type":"array","items":{"type":"string"}}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"marketplace","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"action":{"default":"search","type":"string","enum":["search","describe","install","uninstall","subscribe","cancel","resume","report_bug","request_mcp","list_tools","invoke","search_prompts","get_prompt","publish_prompt"]},"query":{"default":"","type":"string"},"mcp_id":{"default":"","type":"string"},"limit":{"default":10,"type":"number"},"tier_slug":{"default":"","type":"string"},"immediate":{"default":false,"type":"boolean"},"cancel_reason":{"type":"string","enum":["too_expensive","missing_features","switched_service","unused","customer_service","too_complex","low_quality","other"]},"cancel_comment":{"default":"","type":"string"},"message":{"default":"","type":"string"},"report_context":{"default":"","type":"string"},"conversation":{"default":"[]","type":"string"},"request_name":{"default":"","type":"string"},"request_details":{"default":"","type":"string"},"tool_id":{"default":"","type":"string"},"arguments":{"default":"{}","type":"string"},"prompt_slug":{"default":"","type":"string"},"prompt_vars":{"default":"{}","type":"string"},"prompt_category":{"default":"","type":"string"},"prompt_tool":{"default":"","type":"string"},"prompt_title":{"default":"","type":"string"},"prompt_description":{"default":"","type":"string"},"prompt_body":{"default":"","type":"string"},"prompt_targets":{"default":[],"type":"array","items":{"type":"string","enum":["claude","chatgpt","cursor","lovable"]}}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"report_bug","description":"Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"message":{"type":"string"},"context":{"default":"","type":"string"},"conversation":{"default":"[]","type":"string"}},"required":["message"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"show_version","description":"Show the current MCP platform and adapter versions.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"toolkit_info","description":"Returns the current toolkit state: installed MCPs, their connection status, the accounts connected to each one, and how many catalog tools each exposes.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":72,"grade":"B","scanned_at":"2026-11-01T22:10:34.383Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-01T22:10:34.292Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":12,"max":20,"notes":["remote reachable in 10648ms","handshake note: MCP handshake timed out after 10000ms"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (endpoint requires auth); not counted"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":12,"max":15,"notes":["last push 63 days ago"]},"identity":{"score":9,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"probes":[{"url":"https://api.mcp.ai/p_google_ads","reachable":true,"authRequired":false,"latencyMs":10648,"error":"MCP handshake timed out after 10000ms"}],"packages":[],"repo":{"found":true,"owner":"mcp-dir","repo":"google_ads-mcp","archived":false,"pushedAt":"2026-08-30T19:45:16Z","stars":0,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/207912538?v=4","ownerCreatedAt":"2025-04-16T18:01:51Z","license":"MIT"},"icon":{"url":null,"source":"none"},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-08-30T19:45:16.000Z","score":15}}}},"grade_history":[],"reviews":[]}