One writes, one reads, one is a category.
Local write path
Apache-2.0, local MCP server for Google Ads, JSON-RPC 2.0 over stdio, running on your machine against your own Google Cloud project and credentials. Writes go through plan → validate → commit.
Official google-ads-mcp
Read-only. It answers ad-hoc GAQL exploration and never writes. Both servers speak JSON-RPC over stdio, so one .mcp.json entry each runs them side by side in the same client.
Write-capable MCP servers
A category, not a specific product. What each one does about caps, plan IDs, validation, git review and a spend guard is unknown here, so treat every cell as "verify before use".
Row by row, in plain words.
A dash means the fact is not stated here. That is not a "no" — it means check the other product's own documentation.
| Property | AdRails | Google's official google-ads MCP | Generic write servers |
|---|---|---|---|
| Runs on your machine | Yes, nothing is hosted | — | — |
| Transport | JSON-RPC 2.0 over stdio | JSON-RPC over stdio | — |
| Reads campaigns, status, search terms | Yes (adsops_campaigns, adsops_status, adsops_terms) | Ad-hoc GAQL exploration | — |
| Writes to the account | Yes, through plan → validate → commit | read-only (no writes) | Only if it exposes write tools — verify |
| Change expressed as a git-committed desired-state file | Yes | — | — |
| Dry-run diff against live state | Yes, adsops_plan writes nothing | — | — |
Single-use, expiring plan_id bound to the plan | Yes | — | — |
| Caps in a policy file no AdRails tool can write | Yes | — | — |
| Validate-only pass before every commit | Yes | — | — |
| Refuses to act on an uncommitted state file | Yes, require_clean_git defaults to true | — | — |
| Blocks exposure increases when the guard heartbeat is stale | Yes, when max_guard_age_min is set | — | — |
| Pause-only scheduled spend guard | Yes, guard-all every 15 minutes | — | — |
| Enables campaigns by default | No, allow_enable defaults to false | — | — |
| Reconciles a timed-out commit instead of retrying | Yes | — | — |
| Hosted SaaS option | None, ever | — | — |
| Licence | Apache-2.0 | — | — |
| Price | Free core, no subscriptions | — | — |
Reads and writes want different trade-offs.
Exploration is safe to run freely and awkward to constrain, so the official server owns it. A write is where money moves, so AdRails makes every write pass a diff, a validate-only call to Google, an account lock, an audit line, and a commit that quotes the exact plan the agent was shown. In practice: the agent reads with the official server, proposes a change to a desired-state or policy file, and applies it through adsops_plan / adsops_apply.
When NOT to use AdRails
If any line below describes you, a different tool — or no tool — is the better answer.
- You want a hosted service or an API to call. AdRails does not host anything and does not proxy Google calls. You need a machine, a Python runtime and your own credentials.
- You only need ad-hoc GAQL exploration. Use Google's read-only server; AdRails is the write path.
- You want a platform-level billing control. AdRails is a threshold with automatic pause attempts, not billing control. Keep platform-side billing limits as the real limit.
- Your machine sleeps and you cannot schedule the guard. The guard only acts when it is scheduled and the machine is awake. A chat-session MCP process is not a monitor.
- Your agent has shell access as the same OS user. Such an agent can edit files or call Google directly. AdRails constrains the tool calls it serves, not the machine underneath.
- You need to remove negative keywords or re-enable campaigns routinely. Negatives are append-only, and enabling needs
allow_enableturned on in the policy file. - You need a pip install from PyPI today. The PyPI release is coming soon; install from GitHub meanwhile.
Straight answers.
Does AdRails replace Google's official google-ads MCP?
No. Google's server answers ad-hoc GAQL exploration and never writes; AdRails is the write path. They run side by side in the same MCP client, one stdio entry each.
Is AdRails hosted?
No, and it is never hosted. It runs on your machine against your own Google Cloud project and credentials, and the only endpoint it talks to is the Google Ads API.
Can I run AdRails and another write-capable MCP server on the same account?
AdRails takes account locks (lease files in lock_dir) so two AdRails writers cannot collide, but that lock covers AdRails processes and not other software. Whether another write-capable server is safe on the same account depends on what that server does, so check its own guardrails before trusting it with spend.
pipx install git+https://github.com/antonioac1/adrails — the console script is adsops, the server runs as python3 -m adsops --config /absolute/path/config.json, and the PyPI release is coming soon.
Free core · Apache-2.0 · no AdRails account
Read the rails.
Then decide.
Open source, Apache-2.0. Your keys, your caps, and the limits written down.