Google Ads
Connect a Google Ads account to a vTilt project, then read and manage campaigns, ad groups, ads, keywords, and Performance Max through the vTilt MCP server — no separate Google Ads MCP server required.
vTilt can manage your Google Ads account through the same MCP endpoint your AI client already uses for analytics. There is no second server to run: the google-ads-* tools are always listed in tools/list so your agent knows the capability exists. Calls succeed only after you connect an account in project settings (otherwise the server returns feature_disabled).
#Connect Google Ads (required first)
The tools are listed immediately, but return feature_disabled until a project has a connected Google Ads account.
- Open Project → Settings → Google Ads.
- Click Connect Google Ads and complete the Google consent screen. vTilt requests the
https://www.googleapis.com/auth/adwordsscope. - After the redirect, vTilt discovers the accounts you can access and lists them. Pick the default account the tools should use when a call doesn't name one.
- If you manage accounts through an MCC (manager account), set the manager (login) customer id.
vTilt stores the OAuth refresh token encrypted at rest and holds the platform developer token server-side. Your AI client never sees or sends credentials — tool inputs accept neither a refresh token nor a user id.
To stop access, click Disconnect on the same page — vTilt deletes the stored token and linked accounts. The tools stay in tools/list for discoverability; calls return feature_disabled until you connect again.
After switch-project, check features.google_ads in the tool response (or call context-get). You can call google-ads-* tools as soon as that flag is true — re-run tools/list only if your MCP client caches the catalog and still omits other feature-gated tools (replay, AI memory).
#Permissions
Google Ads access is gated by a dedicated google_ads permission resource:
| Action | Who has it | What it allows |
|---|---|---|
google_ads:read | members and above | List accounts, read account data via GAQL |
google_ads:write | owners and admins | Create / update / pause / remove campaigns, ad groups, ads, keywords, and more |
Write tools additionally require a write-scoped credential (an mcp:write OAuth scope or a personal API key with write access), and every write is recorded in the project audit log.
#Reading account data
Always learn the valid fields before querying — the tools steer you to do this so you never guess field names.
google-ads-resource-metadata-get— pass aresource(e.g.campaign,ad_group_ad,keyword_view) to get the selectable fields.google-ads-search— assemble a read-only query fromresource,fields, and optionalconditions,order_by,limit. vTilt builds and validates the GAQL server-side.google-ads-customers-list— see which accounts are linked to the project.
Every tool takes an optional customer_id (dashed 123-456-7890 or digits 1234567890 — both work). Omit it to use the project's default account.
A search for the last 30 days of campaign spend looks like:
{
"resource": "campaign",
"fields": [
"campaign.id",
"campaign.name",
"metrics.cost_micros",
"metrics.clicks"
],
"conditions": [
"campaign.status = 'ENABLED'",
"segments.date DURING LAST_30_DAYS"
],
"order_by": "metrics.cost_micros DESC",
"limit": 25
}#Managing the account (writes)
Write tools mutate the connected account. They cover the common workflows:
| Tool | Does |
|---|---|
google-ads-campaign-status-set | Enable / pause / remove a campaign |
google-ads-campaign-budget-update | Change a campaign budget |
google-ads-ad-group-create, google-ads-ad-group-status-set | Create or set the status of an ad group |
google-ads-responsive-search-ad-create, google-ads-ad-status-set | Add a responsive search ad, set ad status |
google-ads-keyword-add, google-ads-keyword-status-set, google-ads-negative-keyword-add | Manage keywords and negatives |
google-ads-campaign-ai-max-update, google-ads-ad-group-ai-max-update | Configure AI Max |
google-ads-campaign-webpage-criterion-add, google-ads-page-feed-asset-set-create, google-ads-page-feed-assets-add | AI Max / DSA webpage targeting and page feeds |
google-ads-pmax-asset-group-create, google-ads-responsive-display-ad-create, google-ads-ad-group-user-list-add | Performance Max asset groups, display ads, audience targeting |
#Troubleshooting
| Message | Meaning | Fix |
|---|---|---|
feature_disabled (feature: google_ads) | No Google Ads account is connected to this project | Connect one in Project → Settings → Google Ads |
invalid_arguments with next: google-ads-customers-list | The customer_id you passed isn't linked to this project | Call google-ads-customers-list and use a listed account |
| The tools don't appear at all | Account not connected, or your key lacks google_ads:read | Connect the account / check your permissions |
| Reconnect prompt in settings | The Google refresh token was revoked or expired | Click Connect Google Ads again |