B2Tech AdConnect

Model Context Protocol · Google Ads API v24+

Run Google Ads
straight from Claude.

An MCP server that connects Claude to your Google Ads accounts — reads, reporting, keyword research and Search-campaign creation, with an embedded OAuth login. Status: LIVE.

37 tools · embedded OAuth · multi-tenant · student-exclusive

REST httpx · no gRPC Hexagonal architecture Writes born PAUSED Reads via GAQL validateOnly dry-run Multi-tenant on Vercel OAuth Authorization Server REST httpx · no gRPC Hexagonal architecture Writes born PAUSED Reads via GAQL validateOnly dry-run Multi-tenant on Vercel OAuth Authorization Server
What it is

Your Google Ads, driven in natural language

B2Tech AdConnect is a Model Context Protocol server that gives Claude real access to your accounts — not a chatbot that guesses, but typed calls against the Google Ads REST API (v24+).

Real connection

Claude talks to your account

List campaigns, pull spend and conversion reports, research keywords and build Search campaigns — all by chatting with Claude. The Google login is OAuth2, embedded in the flow.

Architecture

Hexagonal, ports-and-adapters

Domain, application and infrastructure kept apart; a pure async httpx client, no gRPC. A single multi-tenant core on Vercel, with MCP as a thin presentation layer.

Status

LIVE in production

Multi-tenant deploy at gamcp.b2tech.io — tokens in Supabase, cache in Upstash, and we are the OAuth Authorization Server. You just OAuth-log in; nothing to install.

What it already does

The complete tool catalog

37 tools grouped by function — from auth to GAQL reporting, from keyword research to the Search funnel that's born paused. Everything below is already implemented and live.

Auth

4 tools
  • google_loginConnect a Google account (browser consent); stores the refresh token.
  • google_submit_callbackFinish login by submitting the redirected callback URL.
  • google_token_statusReports whether the stored credential is valid, its scopes and expiry.
  • google_refresh_tokenMints a fresh access token from the stored refresh token.

Reads & reporting (GAQL)

11 tools
  • list_accessible_customersLists the Google Ads accounts the credential can access.
  • list_campaignsLists campaigns in an account.
  • list_ad_groupsLists ad groups.
  • list_adsLists ads.
  • get_insightsSynchronous report: spend, impressions, clicks, conversions.
  • run_insights_reportLarger report over a date range.
  • get_search_termsSearch terms that triggered the ads.
  • get_recommendationsGoogle's optimization recommendations, filterable by type.
  • generate_keyword_ideasKeyword research: volume, competition, bids.
  • list_conversion_actionsLists the account's conversion actions.
  • get_conversion_tagsRetrieves the gtag / event snippets for a conversion.

Writes — Search funnel

6 · born PAUSED
  • create_campaign_budgetCreate a daily budget (in currency units).
  • create_campaignCreate a Search campaign bound to a budget.
  • create_ad_groupCreate an ad group under a campaign.
  • add_keywordsAdd keywords to an ad group.
  • create_responsive_search_adCreate an RSA (3–15 headlines ≤30 / 2–4 descriptions ≤90).
  • create_search_campaignComposite: budget → campaign → ad group → targeting → keywords → RSA in one call.

Writes — targeting & negatives

3 tools
  • add_geo_targetingAdd geo-target criteria to a campaign.
  • add_age_targetingAdd age-range criteria to an ad group.
  • add_negative_keywordsAdd negative keywords at campaign or ad-group level.

Writes — extensions (assets)

5 tools
  • create_sitelinksAttach sitelink assets to a campaign.
  • create_calloutsAttach callout assets (≤25 chars each).
  • create_structured_snippetAttach a structured-snippet asset (header + values).
  • create_callAttach a call asset (phone + region).
  • create_promotionAttach a promotion asset.

Writes — conversions, status & recs

6 · confirm=true
  • create_conversion_actionCreate a conversion action (returns its tag snippets).
  • update_campaign_statusSet a campaign active/paused/archived (destructive, needs confirm).
  • pause_campaignPause a campaign (destructive, needs confirm).
  • update_ad_group_statusSet an ad group active/paused/archived (destructive, needs confirm).
  • update_ad_statusSet an ad active/paused/archived (destructive, needs confirm).
  • apply_recommendationsApply Google recommendations by resource name (needs confirm).

There's also an MCP prompt analyze_account_performance for guided reporting.

Write safety model

Claude doesn't spend your money on its own

Writing to Google Ads touches real money. So every write goes through explicit guardrails — you're always in control of what becomes spend.

Creations born PAUSED

Nothing spends until you explicitly activate it. Every campaign, ad group and ad is created paused.

Status needs confirm=true

Changing status is destructive. Without confirm, the tool returns a preview and makes no HTTP call.

preview=true = dry-run

Runs a server-side validateOnly: validates the operation without persisting anything. Check before running for real.

No auto-rollback

The funnel is non-atomic: on a mid-way failure it returns the resources already created (PAUSED) and where it stopped — it deletes nothing.

Money in units

Budgets are given in currency units (20.0 = $20/day) and converted to micros in the use case. No cents confusion.

Scope whitelist

The credential only accesses what you authorized in the OAuth consent — and google_token_status shows exactly which scopes are active.

How to connect

Up and running in minutes

Hosted, multi-tenant, zero setup: add the connector, log in with your Google account and Claude is operating your campaigns. Then just ask.

Zero setup

Hosted — gamcp.b2tech.io

Add the MCP server as a connector in Claude and log in. Nothing to install; we handle the developer token and the OAuth tokens.

  1. Add the connector. In Claude.ai → Settings → Connectors → Add custom connector, paste https://gamcp.b2tech.io/api/mcp. In Claude Code, use the command below.
    # Claude Code
    claude mcp add --transport http \
      google-ads https://gamcp.b2tech.io/api/mcp
  2. Log in to Google. Run the google_login tool — it opens browser consent and stores your refresh token securely.
  3. Confirm. Run google_token_status to validate the credential and list_accessible_customers to see your accounts. Ready to operate.
First steps

What to ask Claude

Real requests the server handles end to end — writes are always born PAUSED, activation is yours.

  1. Create a campaign.
    # you, in the chat:
    "Create a Search campaign for my
     clinic with a $50/day budget"
    # → born PAUSED; you activate when ready
  2. Research keywords.
    "Generate keyword ideas for 'dental
     implant' and add the 20 best ones"
    # → generate_keyword_ideas + add_keywords
  3. Read results.
    "How did my campaigns do in the last
     30 days? Where am I burning budget?"
    # → get_insights + get_search_terms

Frequently asked questions

Still have a question? Write to bruno@b2tech.io.

How much does it cost?
B2Tech AdConnect is an exclusive benefit for Claude Code Architect students: access to the hosted server is unlocked by an active Hotmart purchase. Beyond the training, you only need a Google Ads account — login is OAuth and the platform developer token is already configured on the server. Not a student yet? Check out the training at claude-code.b2tech.io.
Is it safe? Can Claude spend money on its own?
No. Every creation is born PAUSED — it never spends until you explicitly activate it. Status changes are destructive and require confirm=true; without confirm, the tool returns a preview and makes no HTTP call.
Do I need a developer token?
No. The hosted deploy (gamcp.b2tech.io) already has the platform token configured — you just OAuth-log in your account and start operating.
Multi-tenant — where do my tokens live?
Refresh tokens live in Supabase and the cache in Upstash; we are the OAuth Authorization Server. No tool accepts a token as an argument.
Which accounts can I access?
The accounts the logged-in credential can access. list_accessible_customers lists them all, and the manager/login-customer is auto-resolved per credential at google_login.
What is preview=true?
It's a server-side dry-run (validateOnly): it validates the operation without persisting anything. Handy to check a write before running it for real.
Do I need to install anything?
No. The server is hosted and multi-tenant (gamcp.b2tech.io) and the source code is private — there is no version to run on your own machine. You just add the connector in Claude and log in with your Google account; we handle the rest.
Start now

Stop tab-switching.
Ask Claude and it runs Google Ads.

Reads, reporting, keyword research and Search campaigns — with embedded OAuth and writes that are born paused. Student-exclusive and live.

37 tools · embedded OAuth2 · multi-tenant on Vercel