AdLoop vs GrowSurf

A side-by-side look at the AdLoop and GrowSurf MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.

AdLoop logoAdLoopMarketing · Local subprocess (stdio)Google Ads, GA4 and Tag Manager in your AI client, with a preview before every change.65GreatAuth: oauth 2.0GrowSurf logoGrowSurfMarketing · Local subprocess (stdio)Build and manage GrowSurf referral and affiliate programs through AI assistants.61GoodAuth: not declared

Verdict: choose AdLoop for marketing work as a local process; choose GrowSurf for marketing as a local process. You can also run both side by side in one mcpServers block.

Which MCP server should you choose?

AdLoop logoChoose AdLoop when

  • You need dedicated capabilities in the Marketing domain.
  • You prefer a local stdio subprocess transport.
  • Its auth model fits you: OAuth 2.0.
  • You want tools like health_check, get_account_summaries, run_ga4_report.
Explore AdLoop

GrowSurf logoChoose GrowSurf when

  • You need dedicated capabilities in the Marketing domain.
  • You prefer a local stdio subprocess transport.
  • You have the keys it needs: GROWSURF_API_KEY, GROWSURF_CAMPAIGN_ID.
  • You want tools like growsurf_integration_guide, growsurf_agent_program_creation_eval, growsurf_program_design_advisor.
Explore GrowSurf

Feature & specification comparison

Rows where the two servers differ are marked.

SpecAdLoop logoAdLoopGrowSurf logoGrowSurf
CategoryMarketingMarketing
Quality signal65/100 · Great61/100 · Good
Install commandConfirmedConfirmed
TransportLocal subprocess (stdio)Local subprocess (stdio)
AuthOAuth 2.0Not declared
PricingNot declaredNot declared
Required env varsNone listedGROWSURF_API_KEYGROWSURF_CAMPAIGN_ID
Verified ownerCommunity listingCommunity listing
GitHub stars2840
Directory activity 1 views 0 installs 0 upvotes 2 views 0 installs 0 upvotes
Tools13463

Tools & capabilities

AdLoop tools 134

  • health_checkTest AdLoop connectivity — checks OAuth token, GA4 API, Google Ads API, and (when configured) the Reddit Ads API. Returns the status of each service and actionable guidance when something is broken, which makes it the diagnostic for failures in other tools. Google Ads API: https://developers.google.com/google-ads/api/docs/start, Google Analytics Data API: https://developers.google.com/analytics/devguides/reporting/data/v1 and Reddit Ads API: https://ads-api.reddit.com/docs/v3/
  • get_account_summariesList all GA4 accounts and properties accessible by the authenticated user. Serves as the discovery step for which GA4 properties are available. Returns account names, property names, and property IDs. Google Analytics Data API: https://developers.google.com/analytics/devguides/reporting/data/v1 and Admin API: https://developers.google.com/analytics/devguides/config/admin/v1
  • run_ga4_reportRun a custom GA4 report with optional filters, ordering, paging and a comparison period. Returns the property, the date range, the dimension and metric headers, one row per dimension combination (values as strings), row_count and total_row_count (plus next_offset while more rows remain). At least one dimension or metric is required. With compare_start/compare_end the comparison period is a second date range: every row then carries a dateRange value of "current" or "comparison", and date_ranges maps both labels to their dates. Invalid filters or ordering return "Validation failed" with details, before anything is sent. Queries the GA4 Data API. Dimensions and metrics: https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema
  • run_realtime_reportRun a GA4 realtime report showing current active users and events. Useful for checking if tracking is firing correctly after code changes. Returns the dimension and metric headers and one row per dimension combination over the realtime window (the last 30 minutes). Google Analytics Data API: https://developers.google.com/analytics/devguides/reporting/data/v1 and Admin API: https://developers.google.com/analytics/devguides/config/admin/v1
  • get_tracking_eventsList all GA4 events and their volume for the given date range. Returns every distinct event name with its total event count, sorted by count (highest first). Shows what tracking is configured and active. Google Analytics Data API: https://developers.google.com/analytics/devguides/reporting/data/v1 and Admin API: https://developers.google.com/analytics/devguides/config/admin/v1
  • list_key_eventsList the key events (conversions) configured on a GA4 property. Returns each key event's event name, counting method (ONCE_PER_EVENT or ONCE_PER_SESSION), create time, whether GA4 allows deleting it, whether it is a custom event, and its resource name, sorted by event name, plus the total. Reads the GA4 Admin API (keyEvents.list). Google Analytics Data API: https://developers.google.com/analytics/devguides/reporting/data/v1 and Admin API: https://developers.google.com/analytics/devguides/config/admin/v1
  • list_ga4_dimensions_and_metricsList the dimensions and metrics a GA4 property can report on, including custom ones. Returns the exact API names valid in run_ga4_report for this property: each with its UI name, category, whether it is a custom definition (customEvent:..., customUser:...), and deprecated API names; metrics also carry their type and, for calculated metrics, the expression. Reads the GA4 Data API metadata (properties.getMetadata), which uses no report quota. Google Analytics Data API: https://developers.google.com/analytics/devguides/reporting/data/v1 and Admin API: https://developers.google.com/analytics/devguides/config/admin/v1
  • list_gsc_sitesList all Google Search Console properties the authenticated user can access. Serves as the discovery step for the site URLs that search analytics reports (run_gsc_report) take. Returns the site URL and permission level for each property. Search Console API: https://developers.google.com/webmaster-tools
  • run_gsc_reportRun a Google Search Console search analytics report. Returns clicks, impressions, CTR, and average position broken down by the requested dimensions. Useful for diagnosing organic traffic drops, finding keyword opportunities, and cross-referencing with GA4 and Ads data. One request returns at most 25,000 rows; a full page carries next_start_row for the following request. With data_state "all" the response metadata names the first date whose data is still incomplete. Queries the Search Console API: https://developers.google.com/webmaster-tools/v1/searchanalytics/query
  • analyze_page_speedRun PageSpeed Insights for a landing page — Lighthouse + real-user data. Returns the performance score (0-100), lab Core Web Vitals (LCP, CLS, TBT, FCP), CrUX field data from real Chrome users where available (p75 LCP/INP/CLS/FCP/TTFB + FAST/AVERAGE/SLOW ratings), and the top improvement opportunities with estimated savings. When the page itself has too little traffic for field data, the origin-wide field data is returned instead, marked field.scope="origin". Typical input is an ad final_url: slow landing pages depress Quality Score and waste paid clicks. Takes 10-30s; that is normal for a Lighthouse run. PageSpeed Insights API: https://developers.google.com/speed/docs/insights/v5/about
  • list_merchant_accountsList Google Merchant Center accounts the connected user can access. Returns each account's numeric ID, name and whether it is a test account. Provides the account_id used by get_merchant_feed_health; not needed when merchant.account_id is set in the config. Merchant API: https://developers.google.com/merchant/api/overview
  • get_merchant_feed_healthMerchant Center feed health — disapproved products + account issues. Disapproved feed items silently starve Shopping and Performance Max campaigns; this reports approved/pending/disapproved counts per reporting context (Shopping ads, free listings, ...), the top product issues by affected products (with documentation links), and account-level issues — CRITICAL ones stop offers serving entirely. Product-status data lags reality by ~30 minutes. Merchant API: https://developers.google.com/merchant/api/overview
  • +122 more on the listing page

GrowSurf tools 63

  • growsurf_integration_guidePlan a web integration for a referral or affiliate program. Returns Markdown steps for installing the Universal Code, identifying participants, tracking referrals or sales, and verifying webhooks. Does not inspect or change a program. Use `growsurf_client_snippets` for browser JavaScript examples, `growsurf_api_library_snippets` for backend code, or `growsurf_mobile_sdk_guide` for native or React Native apps.
  • growsurf_agent_program_creation_evalGenerate Markdown prompts and acceptance checks for evaluating an agent's program-creation workflow: starter content, rewards, configuration, and frontend installation. Does not create a program or run the checks. Use `growsurf_program_design_advisor` to choose a program design, or `growsurf_integration_guide` to plan its web integration.
  • growsurf_program_design_advisorGenerate program designs, benchmarks, typical rewards, and metric definitions, including participant-to-referral and lead-to-referral ratios. Read-only. Returns a short draft, complete `benchmarkFacts`, a proposed `configurationPlan`, and unresolved `decisions`. Incentive amounts and qualifying actions remain unresolved unless supplied by the customer. `detail: summary` returns a configuration draft and reward structure; `detail: full` adds detailed benchmark tables. Hosted figures describe GrowSurf's high-performing programs; without a bundle, guidance is documentation-based. `programType: AFFILIATE` selects affiliate advice. `industry: other` covers local services, pets, hospitality, and agencies. All inputs are optional.
  • growsurf_troubleshoot_referral_trackingDiagnose referral tracking and program problems. Accepts a symptom or description without requiring a program or participant ID. Covers referrals not credited, participant emails not sending, rewards not issued, participants not added, Universal Code not detected, integrations or CRMs not syncing, Zapier errors, fraud flags, and analytics discrepancies. Returns ordered diagnostic checks, likely causes, fixes, and documentation links. It does not read program or participant records. Unknown `symptom` keys return the available symptoms. A `description` matches only when it contains a symptom label or alias verbatim; otherwise the symptom list is returned.
  • growsurf_mobile_sdk_guideGet Markdown implementation guidance for native iOS/Android SDK 0.9.0 or React Native SDK 0.1.0, including attribution, `shareUrl` sharing, `trackShare`, and the native GrowSurf Window. Choose `platform` and `participantState` to tailor the guide; `includeInstallSnippets` controls installation examples. Does not install an SDK or create a participant token. Use `growsurf_client_snippets` for browser JavaScript or `growsurf_api_library_snippets` for backend token-creation code.
  • growsurf_api_library_snippetsGenerate Markdown code examples for the official backend REST API libraries in TypeScript, Python, PHP, Ruby, and Java. Select `language` and `workflow`; both default to `all`. Covers setup, program lookup, participant creation, referral credit, sales, and mobile participant tokens. Returns code without executing API calls. Use `growsurf_client_snippets` for browser JavaScript or `growsurf_mobile_sdk_guide` for native or React Native app setup.
  • growsurf_get_campaignFetch your GrowSurf campaign (program) details via REST. Embedded reward settings do not establish that an individual reward was earned, approved, or delivered. Earned reward records belong to the individual participant. Targets `campaignId` if supplied, otherwise `GROWSURF_CAMPAIGN_ID`.
  • growsurf_list_campaignsList the GrowSurf programs available to the bound team, including their IDs for program selection. Deleted programs are not returned. Does not require `GROWSURF_CAMPAIGN_ID`.
  • growsurf_create_campaignCreate a new GrowSurf program (campaign) with type-appropriate starter content and optional inline rewards. Starter content includes Design, Emails, Options, Installation, and GrowSurf Window defaults. Only `type` is required. The program starts in `DRAFT` status and is owned by the credential's bound team. `currencyISO` defaults to `USD` and is immutable after creation. `goal` sets the sharing settings at creation and cannot be set later. Incentives require the customer's chosen amount or commission rate. Without `rewards`, GrowSurf's starter rewards are switched off and award nothing. Editor-tab configuration is not accepted here. Does not require `GROWSURF_CAMPAIGN_ID`. The response includes the new program `id`.
  • growsurf_update_campaignUpdate your GrowSurf program's (campaign's) identity and lifecycle: name, companyName, companyLogoImageUrl, and status (set IN_PROGRESS to publish/resume the program, COMPLETE to end it). Only the fields you send are changed. `type`, `urlId`, and `currencyISO` are immutable (currency is chosen once at program creation), so this tool does not accept them. Editor-tab config (design, emails, options, installation) is edited with the dedicated config sub-resource tools, not here. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.
  • growsurf_clone_campaignClone your GrowSurf program (campaign) into a new DRAFT program. Integrations and credentials are not copied; active rewards are cloned. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.
  • growsurf_list_campaign_rewardsList your GrowSurf program's configured Campaign Rewards, including switched-off rewards and rewards whose group is not selected. Deleted rewards are excluded. A reward can be earned only when it also appears in the campaign response's embedded `rewards` array. These settings do not establish that a participant earned or received a reward; earned reward records belong to the individual participant. Targets `campaignId` if supplied, otherwise `GROWSURF_CAMPAIGN_ID`.
  • +51 more on the listing page

Ready-to-paste client configs

Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.

AdLoop

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "adloop": {
      "command": "uvx",
      "args": [
        "adloop"
      ]
    }
  }
}

GrowSurf

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "growsurf": {
      "command": "npx",
      "args": [
        "-y",
        "@growsurfteam/growsurf-mcp"
      ],
      "env": {
        "GROWSURF_API_KEY": "YOUR_GROWSURF_API_KEY_HERE",
        "GROWSURF_CAMPAIGN_ID": "YOUR_GROWSURF_CAMPAIGN_ID_HERE"
      }
    }
  }
}

Frequently asked questions

AdLoop is categorized under Marketing and uses a local stdio subprocess. GrowSurf belongs to Marketing and uses a local stdio subprocess. Pick AdLoop for marketing work and GrowSurf for marketing.

Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.

AdLoop has no declared pricing — check the project's own site. Auth: oauth 2.0. GrowSurf has no declared pricing — check the project's own site. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.

Yes. MCP clients support multiple servers: add adloop and growsurf as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, AdLoop has a quality signal of 65/100 (Great) with 1 views, 0 installs and 284 GitHub stars. GrowSurf has 61/100 (Good) with 2 views, 0 installs and 0 GitHub stars.