flin-google-ads-mcp
Read-only access to Google Ads, providing tools for listing customers, campaigns, ad groups, ads, keywords, and insights (metrics) at various levels such as campaign, ad group, ad, customer, and account.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@flin-google-ads-mcpget yesterday's account-level insights"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
flin-google-ads-mcp
Read-only MCP server for Google Ads, built for simple public use via uvx.
Why this server
Read-only by design
No create/update/delete campaign operations
Credentials via environment variables only
Easy local testing with MCP Inspector
Related MCP server: Google Ads MCP Server
Exposed MCP tools
health_checklist_accessible_customersget_customer_clientsfind_customer_clientsget_campaignsget_ad_groupsget_adsget_insightsget_keywords
get_ads includes RSA content fields (headlines/descriptions/paths/final URLs) when available.
get_insights supports:
campaignad_groupadcustomer(account-level metrics)account(alias ofcustomer)
Requirements
Python 3.10+
Node.js v25.8.1+ (only for MCP Inspector testing)
Google Ads API credentials:
GOOGLE_ADS_DEVELOPER_TOKENGOOGLE_ADS_CLIENT_IDGOOGLE_ADS_CLIENT_SECRETGOOGLE_ADS_REFRESH_TOKEN
Optional:
GOOGLE_ADS_LOGIN_CUSTOMER_IDGOOGLE_ADS_CUSTOMER_ID(default customer if nocustomer_idargument is passed)GOOGLE_ADS_USE_PROTO_PLUS(trueby default)
For MCC flows, you can also pass login_customer_id directly per tool call.
Quick flow: "Avesco spend yesterday"
Find the subaccount by name under the manager:
{
"tool": "find_customer_clients",
"args": {
"manager_customer_id": "6050181535",
"login_customer_id": "6050181535",
"name_query": "Avesco",
"direct_only": false,
"include_hidden": false,
"include_self": false,
"status": "ALL",
"limit": 50
}
}Use the returned
client_customer_idwith account-level insights:
{
"tool": "get_insights",
"args": {
"customer_id": "2054139041",
"login_customer_id": "6050181535",
"level": "account",
"date_range": "YESTERDAY",
"limit": 10
}
}Date ranges
get_insights and get_keywords support:
TODAYYESTERDAYTHIS_WEEK_MON_TODAYTHIS_WEEK_SUN_TODAYLAST_WEEK_MON_SUNLAST_WEEK_SUN_SATLAST_7_DAYSLAST_14_DAYSLAST_30_DAYSLAST_60_DAYSLAST_90_DAYSTHIS_MONTHLAST_MONTHCUSTOM(requiresstart_dateandend_dateinYYYY-MM-DD)
Quickstart (from source)
uv sync --extra dev
cp .env.example .env
# Fill .env values
uv run flin-google-ads-mcpQuickstart (as published package)
uvx flin-google-ads-mcp@latestClaude integration (published via uvx)
{
"mcpServers": {
"flin-google-ads-mcp": {
"command": "uvx",
"args": ["flin-google-ads-mcp@latest"],
"env": {
"GOOGLE_ADS_DEVELOPER_TOKEN": "xxx",
"GOOGLE_ADS_CLIENT_ID": "xxx",
"GOOGLE_ADS_CLIENT_SECRET": "xxx",
"GOOGLE_ADS_REFRESH_TOKEN": "xxx",
"GOOGLE_ADS_CUSTOMER_ID": "1234567890",
"GOOGLE_ADS_LOGIN_CUSTOMER_ID": "1234567890"
}
}
}
}Claude integration (local development)
{
"mcpServers": {
"flin-google-ads-mcp-local": {
"command": "uv",
"args": [
"run",
"--directory",
"/Users/nicolasg/Antigravity/flin-google-ads-mcp",
"flin-google-ads-mcp"
],
"env": {
"GOOGLE_ADS_DEVELOPER_TOKEN": "xxx",
"GOOGLE_ADS_CLIENT_ID": "xxx",
"GOOGLE_ADS_CLIENT_SECRET": "xxx",
"GOOGLE_ADS_REFRESH_TOKEN": "xxx",
"GOOGLE_ADS_CUSTOMER_ID": "1234567890",
"GOOGLE_ADS_LOGIN_CUSTOMER_ID": "0987654321"
}
}
}
}How to test
Detailed guide: docs/testing.md
Release checklist: docs/release.md
Operational usage guide:
Fast path:
uv sync --extra dev
python3 -m pytest
python3 -m compileall srcThen run live smoke tests with MCP Inspector (see the testing guide).
Release on GitHub + PyPI
This repository publishes automatically with GitHub Actions:
CI:
.github/workflows/ci.ymlRelease:
.github/workflows/release.yml(triggered by git tagsv*)
1) Configure PyPI Trusted Publisher (one-time)
In PyPI project settings for flin-google-ads-mcp, add a Trusted Publisher with:
Owner:
flin-agencyRepository:
flin-google-ads-mcpWorkflow:
release.ymlEnvironment:
pypi
2) Cut a release
# bump version in pyproject.toml first, then:
git add -A
git commit -m "release: v0.1.0"
git tag v0.1.0
git push origin main --tagsThe Release workflow builds, tests, and publishes to PyPI using OIDC (no PyPI API token in GitHub secrets).
CI
GitHub Actions validates:
unit tests
import/compile checks
package build
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/flin-agency/flin-google-ads-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server