Session Overview

Sam asked whether the Google Ads MCP could be created as a skill, confirmed the MCP itself should be installed, and clarified it is a fork of Google's official repo already sitting in his GitHub account. Goal: install the MCP on the Windows machine (AL0082-SAGUIAR) so it works in both Claude Desktop and Claude Code, and capture the install process as a reusable skill so future sessions do not rebuild from scratch.

The goal evolved mid-session in an important way. Late in the work, a duplicate check against the Knowledge Base surfaced a prior handoff (Google Ads MCP Write Tools, 2026-04-12) that showed this same MCP had already been installed on Sam's Mac with six custom write tools and a stdio server. Inspection of the GitHub fork confirmed those Mac-local files were never committed and pushed. The session had to be reframed: the Windows install is a second machine install of the read-only vanilla fork, not a fresh install of the write-tool-enhanced version Sam has on his Mac.

What Was Accomplished

1. Repo identified and inspected

Located the fork at samaguiar1982-cpu/google-ads-mcp, parent repo googleads/google-ads-mcp, Python, Apache 2.0, default branch main. Pulled the README, pyproject.toml, and tools directory listing.

Confirmed the pipx-installable entry point in pyproject.toml is google-ads-mcp pointing to ads_mcp.server:run_server. That is the vanilla upstream entry point. The fork on GitHub has no mutate.py, no server_stdio.py, and tools/ contains only core.py, get_resource_metadata.py, and search.py.

2. Credentials located

Pulled Google Ads credentials from Notion A - Passwords page (dc6e22b8-4666-4fa0-a9c5-e3c5fe4d6c1f). Confirmed the primary OAuth client from project-claude-489923 has a working refresh token. Developer token hsQ-65334MAZh6s02rXBJA has Explorer access. MCC is 867-659-9345 (login customer ID 8676599345, no dashes). Four accessible accounts: 3813916687 main search, 1581498091 LSA Louisville, 3050138639 LSA Lexington, 8676599345 additional.

3. Auth decision

Picked existing OAuth refresh token over gcloud ADC. Reasoning: Sam already has a valid refresh token in the vault tied to aguiarlawmarketing@gmail.com, the only identity with account access. gcloud ADC could silently authenticate under a different Google identity logged into the browser, and ADC refresh tokens have a known 7-day inactivity expiry quirk in some orgs. Writing an ADC-format JSON file that mimics gcloud's output lets the Google auth library consume the existing refresh token with no browser consent required.

4. Files created

Three deliverables saved to /mnt/user-data/outputs/ and presented to Sam:

5. Skill reconciliation check

Checked /mnt/skills/user/ for existing skills that might overlap. Only google-ads-optimizer exists. Inspected its first 60 lines and confirmed it covers analysis and recommendations (wasted spend analysis, bid adjustments, negative keywords, Quality Score work, RSA testing) with data-source fallbacks to CSV exports and Chrome browser scraping. The new google-ads-mcp skill is genuinely new scope: MCP server install, auth operations, GAQL syntax, troubleshooting. No overlap, no duplicate skill created.

What Was Tried and Didn't Work

  1. First Notion data source fetch failed with zero pages. Called notion-create-pages with an empty pages array by mistake. No harm done. Re-fetched the data source schema with a proper fetch call and got the full SQLite schema needed for correct property JSON.