Gemini CLI takes your Google Ads connector as one JSON block in
settings.json — wire it up and your agent reads and runs the account
from plain-language prompts, at the speed of a sentence. There's a single
trap: the field is httpUrl, not url. Get that right and the rest is
two minutes — restart, /mcp, first prompt. This page covers the
Gemini-specific details; how the connector itself works across
every MCP client is the pillar.
The config block
Edit ~/.gemini/settings.json (create it if missing) and add:
{
"mcpServers": {
"adcopilot": {
"httpUrl": "https://mcp.adcopilot.cloud/c/<your connector key>/mcp"
}
}
}
If the file already has content, merge the mcpServers object into it
rather than pasting a second JSON document — a syntax error here makes
Gemini CLI silently ignore the whole file.
Two placement rules:
httpUrl, noturl. Gemini CLI usesurlfor SSE servers andhttpUrlfor streamable HTTP. The connector is streamable HTTP; the wrong field gives you a server entry that never lists tools.- Global file, not project file. A
.gemini/settings.jsoninside a repo works too — but the connector address is a credential, and repo config gets committed. Keep the key in your home directory.
Restart Gemini CLI after editing; the config is read at startup.
Verify, then ask
Inside Gemini CLI, run:
/mcp
You should see adcopilot with its tool list — reads like search and
list_accessible_customers, writes like create_campaign and
add_negative_keywords. If the server shows but tools do not, it is the
httpUrl trap above; if nothing shows at all, work through
the troubleshooting page.
Then three first prompts, in order:
List the Google Ads accounts you can see.
In account <account>, what did we spend in the last 7 days, by campaign,
with conversions and cost per conversion?
Which search terms cost money in the last 14 days without converting?
Top 20 by cost — just show me, don't change anything.
All three are reads: no confirmations, no risk, immediate answers. They are also a calibration test — you know this account, so check the numbers against the UI once, and you have established the accuracy that every later approval leans on.
How approvals look here
The first time the agent calls a write tool — say
add_negative_keywords — Gemini CLI stops and asks for confirmation,
naming the tool, with options to allow once or always allow. That pause
is the approval loop, and the sane policy is the same one as in
every other client:
graduate read tools and harmless writes to always-allow as they prove
boring, keep budgets and statuses on manual confirmation forever.
Resist the shortcut of "trust": true on the server entry. It switches
off confirmations wholesale — reads and budget changes alike — which
trades the entire safety mechanism for a saved keypress.
Two quirks worth using deliberately
includeToolsmakes a read-only session. Add"includeTools": ["search", "list_accessible_customers", "get_resource_metadata"]to the server entry and Gemini CLI exposes only those tools — an ads analyst config with no write path at all. Client-side filtering, not a server guarantee, but a tidy default for a first week or a reporting-only teammate.- Config edits need a restart. Gemini CLI reads
settings.jsonat launch. If you edit the block mid-session and wonder why nothing changed — that is why.
Five minutes from here
Paste the block, restart, run /mcp, and ask the three first prompts —
that is the whole setup, and the third prompt usually surfaces the first
wasted spend worth killing. The same connector address works unchanged in
Claude Code and
Cursor, so trying another client
costs nothing but the paste.
No connector address yet?
Start a free pilot — sign in with
your own Google account, copy the private address it gives you, and drop
it into the httpUrl field above. Seven days, full toolset, up to five accounts, no card.
Frequently asked questions
Why does Gemini CLI show the server but no tools?
Nearly always the wrong field name: url instead of httpUrl. Gemini CLI treats url as an SSE endpoint and httpUrl as streamable HTTP; the connector speaks streamable HTTP, so the url variant fails to complete the handshake. Fix the field, restart Gemini CLI, and run /mcp again — the tool list should populate.
Should I set trust: true to skip the confirmation prompts?
Not for a server with write tools. trust: true suppresses the per-call confirmation, which is the only thing standing between a misread instruction and an executed account change. If the prompts feel heavy, use the always-allow option on individual read tools as they come up, and keep confirmations on every tool that mutates the account.
Can I make Gemini CLI read-only for my ads account?
Yes, at the client level: Gemini CLI's per-server includeTools setting lets you list only the tools you want exposed — list the read tools and the session simply has no write capability. It is a client-side filter rather than a server guarantee, but for day-one exploration or a teammate's config it is a clean way to run reads with zero risk.
Try it on your own account for a week
The full set of tools for the week, so you can see what it actually does — and it still cannot delete anything. No cost, no card, no contract: you connect your own Google account and can withdraw the access whenever you like.
- Up to 5 accounts
- One week
- Full tools
- No card
- Autonomous agentsLevels of autonomy in Google Ads management, which optimisation work is safe unattended versus which needs approval, and why irreversible actions should not be automated.
- Google Ads MCP serverWhat a Google Ads MCP server is, how free self-hosted servers compare to a hosted one, the full tool list AdCopilot exposes, and what you need to connect.
- Connect ClaudeStep-by-step instructions for adding a Google Ads MCP connector to Claude Desktop, claude.ai and Claude Code, including what to ask it first and how to revoke access.
- Connect ChatGPTStep-by-step instructions for adding a Google Ads MCP connector to ChatGPT, what it can read and change, and how to withdraw access.