Camberstack: Google Ads
Server Details
Hosted MCP for Google Ads, Search Console, GA4 and Merchant Center: ask, build, approve changes.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- zwznco/camberstack-mcp
- GitHub Stars
- 0
- Server Listing
- Camberstack
- ChatGPT
- –
- Claude
- Camberstack
TDQS
Scored across 34 tools
Most tools are cleanly separated by platform and action, and descriptions actively route the agent (e.g. analytics_report says use search_console_performance for search queries instead). The main soft spots are the cluster of Search Console read tools (summary, performance, trend, opportunities) and preset tools like account_overview and analytics_landing_pages sitting next to the generic report/run_gaql tools, which can overlap in intent.
There is a strong platform-prefix convention (analytics_*, search_console_*, merchant_*, plus propose_/apply_/undo_ lifecycle verbs) that makes families predictable. However, verb-first names (list_accounts, run_gaql, switch_account) are mixed with noun-first names (account_overview, billing, keyword_ideas, landing_page_speed), so the pattern is not fully uniform.
34 tools is heavy by the usual 3-15 guideline, though justified by spanning four Google products (Ads, GA4, Merchant Center, Search Console) plus account/subscription management. Each domain has a coherent 5-10 tool cluster, but the total surface is large enough to burden tool selection.
The read surface is deep per domain and the proposal/apply/undo/discard lifecycle plus change history gives a closed loop for mutations. Minor gaps remain, such as no GA4 audience or event-management tools beyond key events, and no direct ad/keyword reporting tool beyond falling back to run_gaql.
Publisher details
- Operator
- camberstack.io
- Operator website
- https://camberstack.io
- Vendor relationship
- Not applicable
- Documentation
- https://camberstack.io/#setup
- Trust center
- Not applicable
- Restrictions
- After 3 applies requires pro plan
Available Tools
34 toolsaccount_overviewAccount overviewARead-onlyInspect
Spend, clicks, conversions and cost per conversion per campaign over a window, plus attention when something needs a look: disapproved ads and why, Google's recommendations, primary conversions gone quiet.
Inputs: customer_id (required), days.
analytics_landing_pagesGoogle Analytics landing pagesARead-onlyInspect
Where visitors land and whether it works: sessions, users, engagement rate, key events (GA4's conversions) and key event rate per landing page, most sessions first. Pass channel to see one source, e.g. "Paid Search" for Google Ads traffic or "Organic Search". Changes nothing.
Inputs: property_id (required), days, limit, channel, +2 more.
analytics_propertiesList Google Analytics propertiesARead-onlyInspect
Lists the Google Analytics 4 properties this Google login can read. Use a property_id from here in the other Google Analytics tools. If Google Analytics isn't part of the connection yet, says so and returns grant_url, a personal link the user opens to add it.
Inputs: no named parameters.
analytics_reportRun a Google Analytics reportARead-onlyInspect
Any GA4 report: dimensions and metrics by their GA4 API names, highest first. Common dimensions: date, landingPage, pagePath, sessionDefaultChannelGroup, sessionSourceMedium, sessionCampaignName, sessionGoogleAdsCampaignName, deviceCategory, country, eventName. Common metrics: sessions, totalUsers, engagedSessions, engagementRate, keyEvents, sessionKeyEventRate, screenPageViews, ecommercePurchases, purchaseRevenue. For Google search queries, clicks and positions use search_console_performance: GA4's organicGoogleSearch* fields need Search Console linked in GA4 and combine with few dimensions. Changes nothing.
Inputs: metrics (required), property_id (required), days, limit, +5 more.
analytics_setupGoogle Analytics setupARead-onlyInspect
How a GA4 property is set up: its web streams with their measurement IDs (what the site's tag must use), which events are key events (GA4's conversions), and which Google Ads accounts it's linked to. Check this before proposing setup changes. Changes nothing.
Inputs: property_id (required).
apply_changesApply an approved proposalADestructiveInspect
Applies a proposal from propose_changes to the account. Only call this after the user has explicitly approved that proposal. All or nothing: every change is checked with Google first, and if one still fails the ones before it are rolled back. Each change is logged and, unless its summary says otherwise, can be reversed with undo_changes. If the account changed since the proposal, nothing is applied and the result (status "needs approval") is a new proposal with the updated summary: show it to the user and apply it only after they approve.
Inputs: proposal_id (required).
billingPlan and billingARead-onlyInspect
Shows the user's Camberstack plan: the Google Ads accounts used in the last 30 days against the number the plan covers (Free 1, Plus 1, Pro 5, Agency 25), and on Free which Google service it covers. Returns personal links to upgrade (Free to Plus or Pro, Plus to Pro, Pro to Agency) or to change card and cancel (paid plans). This is the Camberstack subscription only, not a Google Ads account's own billing, invoices or ad spend.
Inputs: no named parameters.
change_historyChange historyBRead-onlyInspect
Every proposal made through Camberstack, with what was applied, what failed, and what was undone.
Inputs: limit, customer_id.
discard_proposalDiscard a proposalADestructiveInspect
Marks an open proposal as discarded so it can never be applied; this can't be reversed (propose again instead). Changes nothing in the Google Ads account.
Inputs: proposal_id (required).
disconnectDisconnect Google AdsADestructiveInspect
Revokes Camberstack's Google access and deletes the stored credentials. The user must confirm.
Inputs: confirm (required).
keyword_ideasKeyword ideas (Keyword Planner)ARead-onlyInspect
Google Keyword Planner ideas from seed keywords and/or a landing-page URL: average monthly searches, competition and the top-of-page bid range in the account's currency, biggest first. Ideas the account already targets, or already blocks as negatives, are marked in_account. Changes nothing.
Inputs: customer_id (required), url, limit, keywords, +3 more.
keyword_metricsKeyword volume and bids (Keyword Planner)ARead-onlyInspect
Google Keyword Planner numbers for an exact list of keywords: average monthly searches, the last 12 months, competition and the top-of-page bid range in the account's currency. Use it to size keywords before adding them or to check a trend. Send the whole list in one call, not one per keyword: Keyword Planner rate-limits bursts. Up to 100 come back as objects; over 100, as a compact table (columns, months, rows). Changes nothing.
Inputs: keywords (required), customer_id (required), language_id, location_ids.
landing_page_speedLanding page speed (PageSpeed Insights)ARead-onlyInspect
Google PageSpeed Insights: whether real visitors get a fast page (Core Web Vitals from Chrome, last 28 days), a Lighthouse score, and the fixes worth most. Use it on ad landing pages (from landing_page_view or analytics_landing_pages) when clicks don't convert; landing-page experience is part of Quality Score. Any public URL. Takes 10-40s. Changes nothing.
Inputs: urls (required), fixes, strategy.
list_accountsList Google Ads accountsARead-onlyInspect
Lists every Google Ads account this login can reach, including client accounts under a manager (MCC). Start here. spentLast30Days says whether an account had ad spend in the last 30 days (show it when the user picks one). When the user's plan is at its limit, each account also says whether the plan covers it (plan_status: active or locked).
Inputs: no named parameters.
merchant_accountsList Merchant Center accountsARead-onlyInspect
Lists the Google Merchant Center accounts this Google login can read, including sub-accounts of an advanced (multi-client) account. Use an account_id from here in the other Merchant Center tools. If Merchant Center isn't part of the connection yet, says so and returns grant_url, a personal link the user opens to add it.
Inputs: no named parameters.
merchant_ad_spendMerchant Center issues by ad spendARead-onlyInspect
Which Merchant Center problems cost money: products that are disapproved, limited or pending, joined with what they earned in Shopping and Performance Max ads (cost, clicks, conversions, conversion value) over the window, most value first, and whether each has stopped spending in the last 7 days. Use it when Shopping or Performance Max results drop, before fixing issues one by one. Changes nothing.
Inputs: account_id (required), customer_id (required), days, limit.
merchant_product_issuesMerchant Center product issuesARead-onlyInspect
Why products aren't showing on Google (Shopping ads and free listings): the account's own issues, how many products are eligible, limited, pending or disapproved, and every product issue (such as a price mismatch or a missing GTIN) with how many products it affects, worst first, and a few example products. With offer_id, that one product's issues in full. Use it when Shopping or Performance Max spend or clicks drop, or products are missing. Changes nothing.
Inputs: account_id (required), examples, offer_id.
merchant_reportRun a Merchant Center reportARead-onlyInspect
Runs a read-only Merchant Center Query Language (MCQL) query on one account and returns up to limit rows. One view per query. product_performance_view: segments date, week, offer_id, title, brand, marketing_method (ADS or ORGANIC), customer_country_code, category_l1…l5, product_type_l1…l5, custom_label0…4; metrics clicks, impressions, click_through_rate (conversions, conversion_value and conversion_rate count free listings only). It needs a date range and at least one metric, e.g. SELECT offer_id, title, clicks, impressions FROM product_performance_view WHERE date DURING LAST_30_DAYS AND marketing_method = 'ADS' ORDER BY clicks DESC LIMIT 50. product_view (current status): id, offer_id, title, brand, price, availability, gtin, feed_label, aggregated_reporting_context_status (ELIGIBLE, ELIGIBLE_LIMITED, PENDING, NOT_ELIGIBLE_OR_DISAPPROVED), item_issues, click_potential (LOW, MEDIUM, HIGH); id must be selected. Also price_competitiveness_product_view, price_insights_product_view and best_sellers_product_cluster_view. WHERE joins conditions with AND only (no OR); dates as date BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' or date DURING LAST_7_DAYS / LAST_30_DAYS. Reports work on standalone accounts and sub-accounts, not on an advanced account itself. Changes nothing.
Inputs: query (required), account_id (required), limit.
paid_organic_overlapPaid vs organic overlapARead-onlyInspect
Joins a Google Ads account's search terms with a website's Search Console queries over the same days. Returns paid_and_ranking (searches you pay for where the site already ranks near the top organically, with ad spend) and organic_gaps (searches the site shows up for on page 2 or lower with no ad or keyword). Changes nothing; follow up with propose_changes.
Inputs: site_url (required), customer_id (required), days, limit, +2 more.
propose_analytics_changesPropose Google Analytics changes (applies nothing)AIdempotentInspect
Checks Google Analytics setup changes against the live property and stores them as a proposal with a plain-English summary; nothing is changed. Show the summary to the user and apply only after they approve, with apply_changes (undo_changes reverses it). Supported: create_ga4_property (a property plus a web stream; the applied result gives the measurement ID and the tag the site needs), mark_key_event / unmark_key_event (GA4's conversions), set_key_event_counting (also recounts a Google Ads import of it), link_google_ads / unlink_google_ads. Point out any ⚠ line before they approve.
Inputs: changes (required).
propose_changesPropose Google Ads changes (applies nothing)AIdempotentInspect
Checks a set of changes against the live account and dry-runs them with Google, then stores them as a proposal and returns a plain-English summary. Nothing is changed. Show the summary to the user and apply only after they approve. Supported: add_negative_keywords, pause_campaign, enable_campaign, pause_keyword, enable_keyword, pause_ad_group, enable_ad_group, set_daily_budget, set_end_date, and building: create_campaign (Search), create_display_campaign, create_demand_gen_campaign (YouTube), create_performance_max_campaign, all created paused; add_ad_group, add_keywords, add_responsive_search_ad, add_sitelinks, set_conversion_goal; and tuning: set_keyword_bid, set_ad_group_bid, pause_ad, enable_ad (to replace an ad rather than edit it: add the new one and pause the old in one proposal), add_campaign_targeting, remove_campaign_targeting, set_location_mode, set_bidding_strategy, set_shared_bid_strategy, create_shared_bid_strategy, set_url_suffix, set_eu_political_advertising (Google refuses every change to an account until each campaign has declared this), create_conversion_action, set_conversion_counting, import_ga4_key_event, remove_conversion_action; and deleting: delete_keyword, delete_ad, delete_ad_group, delete_campaign (ads, ad groups and campaigns can't be undone), delete_negative_keywords, delete_sitelinks; and negatives: add_ad_group_negatives, delete_ad_group_negatives, create_negative_list, edit_negative_list, apply_negative_list, delete_negative_list; and edit_responsive_search_ad, which keeps the ad instead of replacing it; and set_ad_schedule, set_device_bid, add_campaign_assets, delete_campaign_assets, set_ai_max, set_conversion_settings; and create_remarketing_list, set_campaign_audience, act_on_recommendation; and link_merchant_center / unlink_merchant_center (Shopping and Performance Max need the link). Point out any ⚠ line in the summary to the user before they approve. At most 50 changes per proposal, counting each keyword in add_keywords and add_negative_keywords as one (a create_campaign or add_ad_group counts as one however much it holds); for more, split them into several proposals up front and show the user all the summaries together.
Inputs: changes (required), customer_id (required).
propose_merchant_changesPropose Merchant Center changes (applies nothing)AIdempotentInspect
Checks Merchant Center product changes against the live account and stores them as a proposal with a plain-English summary; nothing is changed. Show the summary to the user and apply only after they approve, with apply_changes (undo_changes reverses it). Supported: set_product_attributes (override a product's price, sale price, GTIN, brand, title, availability, …, e.g. to fix a price mismatch or a missing GTIN), exclude_products / include_products (from Shopping ads or free listings), clear_product_overrides; and add_product / update_product / delete_product for products Camberstack creates in its own data source. Changes to products from the merchant's feed are overrides in Camberstack's own supplemental data source, layered on top: the feed itself is never edited. Point out any ⚠ line before they approve. A fix in the feed or the store (Shopify, …) lasts longer: suggest it too.
Inputs: changes (required), account_id (required).
propose_search_console_changesPropose Search Console changes (applies nothing)AIdempotentInspect
Checks Search Console changes against the live property and stores them as a proposal with a plain-English summary; nothing is changed. Show the summary to the user and apply only after they approve, with apply_changes (undo_changes reverses it, except where a ⚠ line says it can't). Supported: submit_sitemap (also resubmits, so Google reads it again), delete_sitemap, add_site (unless the login already owns the domain, it stays unverified until the user verifies ownership in Search Console), remove_site. Requesting indexing isn't possible through Google's API. A connection made before editing existed answers with a link that adds it. Point out any ⚠ line before they approve.
Inputs: changes (required).
run_gaqlRun a read-only GAQL queryARead-onlyInspect
Runs any read-only Google Ads Query Language SELECT for questions the other tools don't cover. Returns up to 500 rows. Google rejects queries that break these rules: selecting or segmenting by segments.date needs a finite range in WHERE (segments.date DURING LAST_30_DAYS, or BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'); click_view needs a single day (segments.date = 'YYYY-MM-DD'); every field used in WHERE or ORDER BY must also be in SELECT. Maximize clicks is target_spend in the API: campaign.target_spend.cpc_bid_ceiling_micros (there is no campaign.maximize_clicks). Unsure of a field's name or whether it fits this FROM? Look it up first with a query that has no FROM, which reads Google's field catalog instead of the account (any customer_id): SELECT name, category, selectable WHERE name LIKE '%search_term%', or SELECT attribute_resources, metrics, segments WHERE name = 'campaign' for what can be used FROM campaign.
Inputs: query (required), customer_id (required).
search_console_inspect_urlsInspect URLs in Google's indexARead-onlyInspect
Google's index record for each page: indexed or not and the reason (for example "Discovered - currently not indexed"), last crawl, robots.txt and fetch result, the canonical Google chose against the one the page declares, and structured-data items with their errors. Use it when a page gets no impressions, or seems to have dropped, before assuming a ranking problem. Changes nothing.
Inputs: urls (required), site_url (required).
search_console_opportunitiesSearch Console opportunitiesARead-onlyInspect
Finds where more organic clicks are within reach: queries on positions 4-20 with the clicks a realistic climb would add, top-5 queries with an unusually low click-through rate (a title or description to fix), and question-shaped queries. Changes nothing.
Inputs: site_url (required), days, fresh, limit, +3 more.
search_console_performanceSearch Console performanceARead-onlyInspect
Organic Google Search clicks, impressions, CTR and average position for a website, grouped by query, page, country, device or date, most clicks first. Search Console's last 2-3 days are incomplete, so the window ends 3 days ago unless fresh is set. Group by query and page together to see whether several pages compete for the same search; by page and date to see when a page's impressions or position changed. Changes nothing.
Inputs: site_url (required), days, fresh, limit, +8 more.
search_console_sitemapsSearch Console sitemapsARead-onlyInspect
The sitemaps submitted for a website: when Google last downloaded each one, how many URLs it lists, and its error and warning counts. Changes nothing: propose_search_console_changes submits one.
Inputs: site_url (required).
search_console_sitesList Search Console sitesARead-onlyInspect
Lists the websites (Search Console properties) this Google login can read. Use a site_url from here in the other Search Console tools.
Inputs: no named parameters.
search_console_summarySearch Console summaryARead-onlyInspect
A website's total organic Google Search clicks, impressions, CTR and average position over a window, next to the same number of days before it, with the change. Site-wide totals, more complete than adding up per-query rows. Changes nothing.
Inputs: site_url (required), days, fresh, end_date, +1 more.
search_console_trendSearch Console trendARead-onlyInspect
Compares a window with the same number of days right before it, query by query and page by page: rising, falling, new and lost queries, rising searches the site is losing position on, and rising and falling pages. Totals are the site's true totals. Changes nothing.
Inputs: site_url (required), days, fresh, limit, +4 more.
send_feedbackSend feedback to CamberstackAInspect
Sends the user's message to Camberstack's maintainer, who reads every one and can reply to the user's Google email. Use it when the user wants to report a bug or ask for something Camberstack doesn't do. Show them the exact message first and send it only after they agree. Put in only what they want said: no account IDs, campaign data or conversation history.
Inputs: message (required), kind.
switch_accountPick the plan's accountADestructiveIdempotentInspect
Takes customer_id as one of the plan's accounts. Call it after a tool answered "Account choice:" and the user picked this account. Once the plan's accounts are taken there is no switching: another account answers "Plan limit:" with when it opens and the upgrade options. Changes nothing in Google Ads; a no-op for an account that is already active. Merchant Center accounts are a separate allowance: pass mc:<account_id>, as the notice gives it.
Inputs: customer_id (required).
undo_changesPropose reversing an applied proposalAInspect
Builds a new proposal that would reverse an applied one (removes the negatives it added, restores statuses and budgets). Changes nothing by itself: like any proposal, it must be approved and then applied with apply_changes.
Inputs: proposal_id (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
Related MCP Connectors
Google Ads MCP: reports, search terms, negatives, budgets, campaigns. Approval on every write.
Hosted Google Ads MCP for Claude and ChatGPT. Preview every write. No developer token.
Hosted MCP server for GA4, Google Ads and Search Console. Google OAuth, nothing to install.
Hosted MCP server for marketing agencies: connect Google Ads, GA4, Search Console, Meta, LinkedIn and more to Claude or ChatGPT. Pull reports and make changes via OAuth login, no setup.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceA hosted remote MCP server that connects marketing platforms such as Google Ads, GA4, Search Console, Meta Ads, Microsoft Ads, LinkedIn Ads, TikTok Ads, and Google Business Profile, enabling plain-English performance analysis, KPI and budget tracking, report creation, and previewed account changes.8MIT
- AlicenseAqualityCmaintenanceUnifies Google Ads, Tag Manager, Search Console, and GA4 into a single MCP server, enabling reporting, monitoring, campaign/tag/property creation, and live mutations with dry-run safety.94Apache 2.0
- AlicenseNot gradedqualityBmaintenanceA hosted MCP server that enables managing Google Ads, Microsoft Advertising, TikTok Ads, LinkedIn Ads, and other Google services from ChatGPT, Claude, or any MCP client using natural language, with no code or API keys required.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for Google Tag Manager and Google Ads, enabling AI agents to audit, fix, and manage GTM containers and Google Ads campaigns programmatically.64 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.