@getmcpads/google-ads-mcp-server 1.0.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,20 @@
1
+ # Changelog
2
+ ## 2.0.0 - 2026-09-20
3
+
4
+ - Add descending image/video asset pagination.
5
+ - Add account-scoped upload processing reads and return the native upload ID.
6
+ - Retain API v25, standalone MCC discovery and credential redirect protection.
7
+ - Require Node.js 22.12 or newer and check Node 22/24 in CI.
8
+ - Update vulnerable dependencies and regenerate the MCP catalog.
9
+ - No hosted creative UI or MCP Apps integrations.
10
+
11
+
12
+ ## 1.1.0
13
+
14
+ - Synchronize applicable platform features with GetMCPAds commit b1471be while retaining local read-only exploration tools and credential configuration.
15
+ - Expose 34 read tools and 10 explicitly enabled write tools.
16
+ - Add MCP annotations, parameter descriptions, structured results, server identity and an offline-generated discovery card.
17
+ - Preserve preview/confirmation boundaries; test provider request construction and errors with mocked APIs.
18
+ - Refuse credential-bearing redirects and document provider-specific limitations.
19
+
20
+ No live advertiser mutation is performed by the release tests.
package/README.md CHANGED
@@ -1,34 +1,67 @@
1
- # google-ads-mcp-server
1
+ <div align="center">
2
2
 
3
+ # Google Ads MCP server
4
+
5
+ ### Turn Google Ads questions into useful answers.
6
+
7
+ Explore performance, research keywords and prepare campaign changes from your MCP client.
8
+
9
+ [![Release](https://img.shields.io/github/v/release/getmcpads-com/google-ads-mcp-server?color=2448e5)](https://github.com/getmcpads-com/google-ads-mcp-server/releases/latest)
3
10
  [![CI](https://github.com/getmcpads-com/google-ads-mcp-server/actions/workflows/ci.yml/badge.svg)](https://github.com/getmcpads-com/google-ads-mcp-server/actions/workflows/ci.yml)
4
11
  [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
5
- [![Node](https://img.shields.io/badge/node-%E2%89%A518-brightgreen.svg)](package.json)
12
+ [![Node](https://img.shields.io/badge/node-%E2%89%A522.12-brightgreen.svg)](package.json)
13
+
14
+ [Watch the demo](https://www.getmcpads.com/home/film/get-mcp-ads-film-1080p.mp4) · [What's new](#whats-new) · [Install](#install-this-release) · [Tool reference](#tools) · [Try hosted getmcpads](https://www.getmcpads.com/tools/google-ads?utm_source=github&utm_medium=readme&utm_campaign=google-ads)
15
+
16
+ [![Watch the getmcpads product demo: campaign review in Claude](https://www.getmcpads.com/home/film/poster-rich.webp)](https://www.getmcpads.com/home/film/get-mcp-ads-film-1080p.mp4)
17
+
18
+ **[Play the 27-second product film](https://www.getmcpads.com/home/film/get-mcp-ads-film-1080p.mp4)**
19
+
20
+ </div>
21
+
22
+ The film demonstrates hosted getmcpads with staged data. Its creative galleries and MCP Apps interface belong to the hosted product. This repository provides the standalone native API tools.
23
+
24
+ **35 read tools** · **10 write tools**, disabled by default.
25
+
26
+ Run locally with your own platform credentials and a client that supports stdio MCP, such as Claude Desktop, Claude Code or Cursor. Your requests go directly to the platform. For managed connections, including supported ChatGPT setups, use the hosted option.
27
+
28
+ ## What's new
6
29
 
7
- An open-source [Model Context Protocol](https://modelcontextprotocol.io) server for the
8
- **Google Ads API**. It lets Claude, ChatGPT, Cursor or any MCP client read and analyse your
9
- Google Ads data, plan keywords, and change campaigns if you choose to.
30
+ **[v2.0.0: Native tools and security update](https://github.com/getmcpads-com/google-ads-mcp-server/releases/tag/v2.0.0) · September 20, 2026**
10
31
 
11
- You run it. Your credentials stay on your machine. Nothing is proxied through a third party.
32
+ - Add descending image/video asset pagination.
33
+ - Add account-scoped upload processing reads and return the native upload ID.
34
+ - Retain API v25, standalone MCC discovery and credential redirect protection.
35
+ - Require Node.js 22.12 or newer and check Node 22/24 in CI.
36
+ - Update vulnerable dependencies and regenerate the MCP catalog.
37
+
38
+ [Full changelog](CHANGELOG.md) · [Source synchronization details](SOURCE_SYNC.md) · [All releases](https://github.com/getmcpads-com/google-ads-mcp-server/releases)
39
+
40
+ ### Upgrade notes
41
+
42
+ Requires **Node.js 22.12 or newer**. CI covers Node 22 and 24. Version 2.0.0 drops Node 18 and 20 support. Read the current tool schemas before reusing saved arguments. Writes remain optional and require explicit confirmation. Hosted creative integrations and MCP Apps UI are outside this release.
43
+
44
+ ## Install this release
45
+
46
+ This is a GitHub source release. npm and MCP Registry versions are published separately. The commands below select this exact version; unpinned `npx` examples later in this document select the version currently available on npm.
12
47
 
13
48
  ```bash
14
- npx -y @getmcpads/google-ads-mcp-server
49
+ git clone --branch v2.0.0 --depth 1 https://github.com/getmcpads-com/google-ads-mcp-server.git
50
+ cd google-ads-mcp-server
51
+ npm ci
52
+ npm run build
15
53
  ```
16
54
 
17
- Also listed in the [MCP Registry](https://registry.modelcontextprotocol.io) as **`com.getmcpads/google-ads`**, so clients that read the registry can install it by name.
55
+ Configure your MCP client to run `node` with the absolute path to `dist/cli.js` and the platform credentials documented below.
18
56
 
19
- > **Prefer not to run it yourself?** [getmcpads.com](https://www.getmcpads.com) is the hosted
20
- > version of this server, with Google Ads alongside Meta Ads, TikTok Ads, Pinterest Ads, GA4 and
21
- > Search Console behind a single endpoint, hosted OAuth, and cross-platform reporting.
22
- > Same tools, same safety model, no setup.
23
-
24
- ---
57
+ > **Prefer a managed connection?** [Use Google Ads with hosted getmcpads](https://www.getmcpads.com/tools/google-ads?utm_source=github&utm_medium=readme&utm_campaign=google-ads). Connect your account, select the data your assistant may access and use the hosted MCP connection. See the site for current features and plans.
25
58
 
26
59
  ## What you get
27
60
 
28
61
  | | |
29
62
  |---|---|
30
- | **31 read tools** | Campaigns, ad groups, budgets, bidding strategies, search terms, landing pages, Performance Max assets and placements, Shopping, recommendations, change history |
31
- | **7 write tools** | Off by default. Status, budgets, bids, schedules, renames, campaign creation. Each one **previews before it applies** |
63
+ | **35 read tools** | Campaigns, ad groups, budgets, bidding strategies, search terms, landing pages, Performance Max assets and placements, Shopping, recommendations, change history |
64
+ | **10 write tools** | Off by default. Status, budgets, bids, schedules, renames, campaign creation. Each one **previews before it applies** |
32
65
  | **Full Keyword Planner** | Keyword ideas, historical metrics, forecasts, ad group themes, geo target suggestions |
33
66
  | **130 metrics, 84 dimensions** | With a compatibility matrix that catches invalid combinations before they hit the API |
34
67
  | **5 resources** | Live catalogues the model can read: metrics, dimensions, compatibility rules, 11 workflow recipes |
@@ -51,41 +84,6 @@ covers them through `google_ads_run_readonly_rpc` and dedicated tools.
51
84
 
52
85
  ---
53
86
 
54
- ## How this compares to Google's own MCP server
55
-
56
- Google shipped an official Google Ads MCP server in April 2026. It takes the opposite design
57
- approach, and the comparison is more nuanced than for other platforms.
58
-
59
- | | Google's official server | This server | [getmcpads.com](https://www.getmcpads.com) |
60
- |---|---|---|---|
61
- | Tools | **3**: list accounts, GAQL search, resource metadata | **38** (31 read + 7 write) | 38, plus 5 other platforms |
62
- | Hosting | Self-hosted (pipx) or Cloud Run | **Self-hosted.** stdio, local process | Hosted for you |
63
- | Requires knowing GAQL | **Yes**, for anything beyond listing accounts | No, catalogues drive the query | No |
64
- | Keyword Planner | ❌ | ✅ ideas, history, forecasts | ✅ |
65
- | Reach Planner, audience insights | ❌ | ✅ via read-only RPC | ✅ |
66
- | Performance Max diagnostics | Via hand-written GAQL | ✅ dedicated tools | ✅ |
67
- | Writes | ❌ read-only by design | ✅ **preview first**, applied only on `confirm: true` | ✅ preview first |
68
- | Metric compatibility | None | **Query planner splits incompatible requests** | Same planner |
69
- | Auditable | Yes, it is open too | **Yes.** Apache-2.0 | This server, audited |
70
-
71
- **Be fair about it.** Google's server is self-hostable too, so "your data stays on your
72
- machine" is not a difference here. Its 3 tools are a deliberate minimalist design: one GAQL
73
- tool can express most of the reporting surface, and a model fluent in GAQL will do a lot with
74
- very little.
75
-
76
- The difference is where the knowledge lives. There, it lives in the model, which has to write
77
- correct GAQL against a schema of thousands of fields. Here, it lives in the server, in
78
- catalogues and a compatibility matrix. Add to that the planning services GAQL cannot reach at
79
- all, and writes that cannot fire on the first call.
80
-
81
- **Choose Google's** if your model writes good GAQL and you only need reporting.
82
- **Choose this one** if you want named metrics instead of query language, Keyword Planner and
83
- Reach Planner access, or guarded writes.
84
- **Choose [getmcpads.com](https://www.getmcpads.com)** if you want this server's capabilities
85
- without running it, or you need more than one ad platform in the same conversation.
86
-
87
- ---
88
-
89
87
  ## Getting credentials
90
88
 
91
89
  This is the heaviest setup of any advertising platform. Four values are needed, and one of
@@ -123,6 +121,16 @@ to this server so you can revoke it on its own.
123
121
  If the accounts you query sit under an MCC, set `GOOGLE_ADS_LOGIN_CUSTOMER_ID` to the manager
124
122
  account ID. Dashes are accepted and stripped. Skip it for a standalone account.
125
123
 
124
+ You can also leave it unset. Google refuses any request against a managed account unless the
125
+ call names its manager, with a `USER_PERMISSION_DENIED` that mentions neither the account nor
126
+ the manager, so it reads as missing access rather than as a missing header. When the variable
127
+ is unset and the account you query is not directly accessible, the server asks the managers it
128
+ can reach which accounts they hold, and announces the one that holds yours. The answer is
129
+ resolved once and kept for the life of the process.
130
+
131
+ Setting the variable is still faster: it skips that discovery entirely, and it is the right
132
+ choice when every account you query sits under the same MCC.
133
+
126
134
  Run **`google_ads_health_check`** as your first call. It verifies all four credentials, lists
127
135
  the accounts you can actually reach, and reports what is missing, without printing any secret.
128
136
 
@@ -182,8 +190,8 @@ npm start
182
190
  | `GOOGLE_ADS_CLIENT_ID` | none | **Required.** OAuth client ID |
183
191
  | `GOOGLE_ADS_CLIENT_SECRET` | none | **Required.** OAuth client secret |
184
192
  | `GOOGLE_ADS_REFRESH_TOKEN` | none | **Required.** From the consent flow |
185
- | `GOOGLE_ADS_LOGIN_CUSTOMER_ID` | none | Optional. Manager (MCC) account ID |
186
- | `GOOGLE_ADS_ENABLE_WRITES` | *unset* | Set to `1` to register the 7 write tools |
193
+ | `GOOGLE_ADS_LOGIN_CUSTOMER_ID` | none | Optional. Manager (MCC) account ID. Resolved automatically when unset |
194
+ | `GOOGLE_ADS_ENABLE_WRITES` | *unset* | Set to `1` to register the 10 write tools |
187
195
  | `LOG_LEVEL` | `info` | `debug`, `info`, `warn`, `error` |
188
196
 
189
197
  Check your setup at any time:
@@ -240,61 +248,68 @@ Two further guardrails:
240
248
 
241
249
  ## Tools
242
250
 
251
+ Every tool is listed below. See [server-card.json](server-card.json) for complete parameter and output schemas.
252
+
243
253
  <details>
244
- <summary><b>31 read tools</b></summary>
254
+ <summary><b>35 read tools</b></summary>
245
255
 
246
- ### Discovery and health
247
256
  | Tool | Purpose |
248
- |---|---|
249
- | `google_ads_health_check` | Validates all four credentials and lists reachable accounts |
250
- | `google_ads_list_accounts` | Every account the credentials can reach |
251
- | `google_ads_get_account_details` | Currency, timezone, status, account settings |
252
- | `google_ads_get_account_hierarchy` | The MCC tree above and below an account |
257
+ | --- | --- |
258
+ | `google_ads_list_accounts` | List Google Ads customer accounts accessible with the current credentials. |
259
+ | `google_ads_get_account_details` | Get detailed information for a specific Google Ads customer account. |
260
+ | `google_ads_run_gaql` | Execute a raw GAQL (Google Ads Query Language) query. |
261
+ | `google_ads_get_insights` | Query Google Ads performance insights with intelligent query planning. |
262
+ | `google_ads_get_campaigns` | List campaigns for a Google Ads account with status, budget, channel type, and bidding strategy. |
263
+ | `google_ads_get_adgroups` | List ad groups for a Google Ads account, optionally filtered by campaign. |
264
+ | `google_ads_get_keyword_performance` | Get keyword-level performance data from keyword_view resource. |
265
+ | `google_ads_validate_query` | Validate metric/dimension/resource compatibility BEFORE executing a query. |
266
+ | `google_ads_health_check` | Read-only connectivity check. |
267
+ | `google_ads_get_account_hierarchy` | List accessible customers and, where possible, manager/client relationships from GAQL customer_client. |
268
+ | `google_ads_get_conversion_actions` | List conversion actions with status, type, category, primary/include-in-conversions flags, owner customer, and last activity dates when supported. |
269
+ | `google_ads_get_change_events` | Fetch recent change_event rows. |
270
+ | `google_ads_get_recommendations` | List Google Ads recommendations with type, resource, campaign/ad group links, dismissed state, and impact when supported. |
271
+ | `google_ads_get_budgets` | List campaign budgets with amount, status, delivery method, and recommended budget fields when supported. |
272
+ | `google_ads_get_bidding_strategies` | List portfolio bidding strategies. |
273
+ | `google_ads_get_search_terms` | Fetch search term performance from search_term_view or campaign_search_term_insight depending on reportType. |
274
+ | `google_ads_get_landing_pages` | Fetch landing_page_view performance with final URL, campaign/ad group context, traffic, conversion, and landing-page quality metrics when supported. |
275
+ | `google_ads_get_pmax_assets` | List Performance Max asset group assets from asset_group_asset with asset group/campaign context and optional date-range performance metrics. |
276
+ | `google_ads_get_simulations` | Read-only planning/forecast query for campaign, ad group, or portfolio bidding simulations. |
277
+ | `google_ads_get_paid_organic_search_terms` | Read-only paid/organic search terms report. |
278
+ | `google_ads_get_shopping_products` | Read-only Merchant Center product catalog/eligibility report via shopping_product. |
279
+ | `google_ads_get_shopping_performance` | Read-only Shopping performance report keyed by Merchant Center product dimensions. |
280
+ | `google_ads_get_pmax_placements` | Read-only Performance Max placement diagnostics from performance_max_placement_view. |
281
+ | `google_ads_get_pmax_asset_diagnostics` | Read-only Performance Max asset group diagnostics. |
282
+ | `google_ads_list_image_assets` | List the account's image asset library (FROM asset) with stable, publicly served full-size URLs on tpc.googlesyndication.com, dimensions, file size, and mime type. |
283
+ | `google_ads_list_video_assets` | List the account's YouTube video assets (FROM asset) with derived watch, embed, and public thumbnail URLs. |
284
+ | `google_ads_get_demand_gen_assets` | List Demand Gen ads (video responsive, multi-asset, carousel) with their referenced creatives resolved: stable image URLs and YouTube video IDs with embed and thumbnail URLs. |
285
+ | `google_ads_generate_keyword_historical_metrics` | Get Keyword Planner search-volume history for supplied keywords. |
286
+ | `google_ads_generate_keyword_ideas` | Discover Keyword Planner ideas from up to 20 seed keywords, a URL, keywords plus URL, or a whole site. |
287
+ | `google_ads_generate_keyword_forecast_metrics` | Forecast impressions, clicks, CTR, CPC, cost, conversions, and CPA for a temporary keyword campaign. |
288
+ | `google_ads_search_fields` | Search Google's live GoogleAdsField catalog. |
289
+ | `google_ads_suggest_geo_targets` | Resolve up to 25 location names or geo target IDs to Google Ads geoTargetConstants. |
290
+ | `google_ads_generate_ad_group_themes` | Organize supplied keywords into existing Google Ads ad groups. |
291
+ | `google_ads_run_readonly_rpc` | Advanced read-only escape hatch for allowlisted Google Ads services outside GAQL: Audience Insights, Reach Planner, benchmarks, creator/trending insights, targeting suggestions, Smart Campaign suggestions, identity verification, invoices, and payments accounts. |
292
+ | `google_ads_get_video_upload` | Read the processing state and YouTube video ID of one Google Ads upload in the selected customer. |
253
293
 
254
- ### Structure and settings
255
- | Tool | Purpose |
256
- |---|---|
257
- | `google_ads_get_campaigns` / `google_ads_get_adgroups` | List entities and their settings |
258
- | `google_ads_get_budgets` / `google_ads_get_bidding_strategies` | Budgets and bidding configuration |
259
- | `google_ads_get_conversion_actions` | Conversion actions and their settings |
260
- | `google_ads_get_change_events` | Change history: who changed what, and when |
294
+ </details>
261
295
 
262
- ### Performance
263
- | Tool | Purpose |
264
- |---|---|
265
- | `google_ads_get_insights` | The main reporting tool. Named metrics, no GAQL required |
266
- | `google_ads_validate_query` | Check a metric and dimension combination *before* running it |
267
- | `google_ads_get_keyword_performance` / `google_ads_get_search_terms` | Keyword and query performance |
268
- | `google_ads_get_landing_pages` | Landing page performance |
269
- | `google_ads_get_paid_organic_search_terms` | Paid and organic side by side |
270
- | `google_ads_get_simulations` | Bid and budget simulations |
271
- | `google_ads_get_recommendations` | Google's own recommendations for the account |
272
-
273
- ### Performance Max and Shopping
274
- | Tool | Purpose |
275
- |---|---|
276
- | `google_ads_get_pmax_assets` / `google_ads_get_pmax_asset_diagnostics` | Asset groups, assets and their issues |
277
- | `google_ads_get_pmax_placements` | Where Performance Max actually served |
278
- | `google_ads_get_shopping_performance` / `google_ads_get_shopping_products` | Shopping performance and product data |
296
+ <details>
297
+ <summary><b>10 write tools</b></summary>
279
298
 
280
- ### Keyword Planner
281
- | Tool | Purpose |
282
- |---|---|
283
- | `google_ads_generate_keyword_ideas` | Keyword ideas from seeds or a URL |
284
- | `google_ads_generate_keyword_historical_metrics` | Volumes, competition, trends |
285
- | `google_ads_generate_keyword_forecast_metrics` | Forecast clicks, cost and conversions |
286
- | `google_ads_generate_ad_group_themes` | Suggested ad group groupings |
287
- | `google_ads_suggest_geo_targets` | Resolve place names to geo target constants |
299
+ Disabled by default. Calls preview unless explicitly confirmed. Check the configuration and exact schema before use.
288
300
 
289
- ### Escape hatches
290
301
  | Tool | Purpose |
291
- |---|---|
292
- | `google_ads_run_gaql` | Run a raw read-only GAQL SELECT |
293
- | `google_ads_run_readonly_rpc` | Call an allowlisted non-GAQL read service: Reach Planner, audience insights, benchmarks |
294
- | `google_ads_search_fields` | Search the API field schema |
295
-
296
- These exist so a new field or service doesn't require a new release. Only read-only
297
- statements and an allowlist of services are accepted.
302
+ | --- | --- |
303
+ | `google_ads_upload_video` | Upload MP4/WebM/QuickTime bytes (max 16 MiB) to the Google-managed YouTube channel for the selected ad account. |
304
+ | `google_ads_remove_video_upload` | Remove a video upload owned by the selected ad account. |
305
+ | `google_ads_apply_plan` | Preview, validate and atomically apply a Google Ads v25 build/change plan: campaigns, budgets, ad groups, RSA/Display/Demand Gen ads, image/text/YouTube assets, PMax asset groups and links, keywords, geographic/language targeting listing groups and conversion action configuration (no conversion event uploads). |
306
+ | `google_ads_update_campaign_status` | Pause, re-enable or remove a Google Ads campaign. |
307
+ | `google_ads_create_campaign` | Create a Google Ads campaign. |
308
+ | `google_ads_update_campaign_budget` | Change the daily budget of a Google Ads campaign. |
309
+ | `google_ads_rename_campaign` | Rename a Google Ads campaign. |
310
+ | `google_ads_update_campaign_schedule` | Change the start or end date of a Google Ads campaign. |
311
+ | `google_ads_update_adgroup_status` | Pause, re-enable or remove a Google Ads ad group. |
312
+ | `google_ads_update_adgroup_bid` | Change the default CPC bid of a Google Ads ad group. |
298
313
 
299
314
  </details>
300
315
 
@@ -334,14 +349,20 @@ Full policy and reporting instructions: [SECURITY.md](SECURITY.md).
334
349
 
335
350
  ## Looking for a managed, multi-platform version?
336
351
 
337
- This server does one platform, on your machine, with your credentials. That is on purpose.
352
+ [Try hosted Google Ads](https://www.getmcpads.com/tools/google-ads?utm_source=github&utm_medium=readme&utm_campaign=google_ads_hosted) if you want to use this source without operating a local server.
353
+ getmcpads also connects advertising, Search Console and GA4 through one MCP URL.
354
+ Source availability and plan limits are listed on the site; connecting an account is still required.
338
355
 
339
- If you'd rather not run it yourself, or you need Google Ads **alongside Meta Ads, TikTok Ads,
340
- Pinterest Ads, GA4 and Search Console** behind one endpoint, with hosted OAuth and
341
- cross-platform reporting, that's what we build at **[getmcpads.com](https://www.getmcpads.com)**.
356
+ 1. Follow the [Google Ads connection guide](https://www.getmcpads.com/guides/sources/google-ads).
357
+ 2. Select the account or property your assistant may read.
358
+ 3. Connect [Claude](https://www.getmcpads.com/guides/setup/claude),
359
+ [ChatGPT](https://www.getmcpads.com/guides/setup/chatgpt) or
360
+ [Codex](https://www.getmcpads.com/guides/setup/codex).
361
+ 4. Try a read-only review: “Compare campaign spend and conversions across equal periods. State missing data and do not change anything.”
342
362
 
343
- Same philosophy, less plumbing. This project stays open source and independently useful
344
- either way.
363
+ See the [current hosted tool catalogue](https://www.getmcpads.com/tools/google-ads)
364
+ and [pricing](https://www.getmcpads.com/pricing) before choosing a paid plan.
365
+ This Apache 2.0 adapter remains independently useful with your own credentials.
345
366
 
346
367
  ---
347
368
 
@@ -357,3 +378,15 @@ Please read [SECURITY.md](SECURITY.md) before reporting anything security-relate
357
378
  Google, Google Ads and the Google Ads API are trademarks of Google LLC.
358
379
  **This project is not affiliated with, endorsed by, or sponsored by Google LLC.**
359
380
  It is an independent client of a public API.
381
+
382
+ ## MCP contracts and desktop bundle
383
+
384
+ Every tool declares read/write annotations, parameter descriptions and a structured output schema. Successful calls expose the payload as `structuredContent.result`; errors retain `isError: true`. The generated [server card](server-card.json) contains definitions only.
385
+
386
+ Run `npm run bundle -- /path/to/output` to build a `.mcpb` desktop bundle from the current catalog. Credentials are entered locally during installation. Write tools remain disabled unless explicitly enabled.
387
+
388
+ ## More from getmcpads
389
+
390
+ [Meta Ads](https://github.com/getmcpads-com/meta-ads-mcp-server) · [Google Analytics 4](https://github.com/getmcpads-com/google-analytics-mcp-server) · [Google Search Console](https://github.com/getmcpads-com/google-search-console-mcp-server) · [TikTok Ads](https://github.com/getmcpads-com/tiktok-ads-mcp-server) · [Pinterest Ads](https://github.com/getmcpads-com/pinterest-ads-mcp-server) · [X Ads](https://github.com/getmcpads-com/x-ads-mcp-server)
391
+
392
+ Maintained by **Emmanuel** at [getmcpads](https://www.getmcpads.com). Questions: [hello@getmcpads.com](mailto:hello@getmcpads.com).