- Admob Mcp
Admob Mcp
๐ AdMob Model Context Protocol (MCP) Server
A powerful Model Context Protocol (MCP) server that exposes Google AdMob management, mediation waterfall operations, advanced revenue analysis, and A/B experiments directly to MCP-compatible AI clients (such as Claude Code CLI, Claude Desktop, Cursor, Windsurf, and Cline).
Features a local Rules Engine and Safety Layer ensuring that mutating operations are audited, verified, and run via dry-runs before touching your live AdMob account.
๐ Architecture Overview
MCP-admob/
โโโ admob_mcp/ โ MCP Server Layer (FastMCP)
โ โโโ server.py โ Server entry point, async context & lifespans
โ โโโ resources.py โ Exposed resources (ad-sources, format-support)
โ โโโ prompts.py โ Integrated workflow prompt templates
โ โโโ tools/ โ MCP Tool modules
โ โโโ reporting.py โ Read-only reports & network data
โ โโโ management.py โ Mediation Group CRUD
โ โโโ experiments.py โ A/B experiment lifecycles
โ โโโ diagnostics.py โ Expert metrics analysis & geo recommendations
โโโ admob_core/ โ Business Logic & Library Layer
โ โโโ client.py โ Async Google AdMob REST API v1beta wrapper
โ โโโ auth.py โ OAuth 2.0 credential loading & browser flow
โ โโโ db.py โ Local SQLite metrics database (admob_metrics.db)
โ โโโ analyzer.py โ AdMonExpert core diagnostics & sync logic
โ โโโ rules.py โ Mediation policy validator (Rules Engine)
โ โโโ safety.py โ Write safeguard & audit logger
โ โโโ registry.py โ 13+ Ad Source capabilities knowledge base
โโโ config.yaml โ App categories & rule configuration thresholds
โโโ requirements.txt โ Python package dependencies
โโโ .env.example โ Template for required environment variables
โโโ .env โ Your secrets (not committed โ copy from .env.example)
โโโ credentials.json โ OAuth 2.0 Client credentials (not committed โ you provide)
โโโ token.json โ Authorized OAuth user token (not committed โ auto-generated)
๐ ๏ธ Prerequisites & Setup
1. Enable the Google AdMob API
- Open the Google Cloud Console.
- Select or create your project.
- Search for AdMob API in the API Library and click Enable.
2. Download OAuth 2.0 Desktop Credentials
- Navigate to APIs & Services โ Credentials.
- Click Create Credentials โ OAuth client ID.
- Select Desktop app as the Application Type.
- Download the generated client JSON and save it in the root of this repo as
credentials.json.
3. Create Virtual Environment & Install Dependencies
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
Python 3.10+ required.
fastmcpdoes not support Python 3.9 or older.
4. Configure Environment (.env)
cp .env.example .env
Then edit .env:
PUBLISHER_ID=pub-XXXXXXXXXXXXXXXX # Your AdMob Publisher ID (AdMob UI โ Account)
CREDENTIALS_PATH=credentials.json # Path to your OAuth credentials file
TOKEN_PATH=token.json # Where to cache the authorized token
AUDIT_LOG_PATH=audit.log # Log file for mutating operations
SLACK_WEBHOOK_URL= # (Optional) Slack alert webhook
5. Run the One-time Authorization Flow
python admob_core/auth.py
A browser tab will open โ authenticate with your Google AdMob account and grant permissions. This writes token.json which is cached and auto-refreshed on all subsequent runs.
๐ป Integrating with AI Clients
Replace
/path/to/MCP-admobwith the absolute path to wherever you cloned this repo.
๐ค Claude Code (CLI)
claude mcp add admob-mediation \
--env PYTHONPATH="/path/to/MCP-admob" \
--env PUBLISHER_ID="pub-XXXXXXXXXXXXXXXX" \
--env CREDENTIALS_PATH="/path/to/MCP-admob/credentials.json" \
--env TOKEN_PATH="/path/to/MCP-admob/token.json" \
--env AUDIT_LOG_PATH="/path/to/MCP-admob/audit.log" \
-- "/path/to/MCP-admob/.venv/bin/python" -m admob_mcp
Or via JSON:
claude mcp add-json admob-mediation '{
"command": "/path/to/MCP-admob/.venv/bin/python",
"args": ["-m", "admob_mcp"],
"env": {
"PYTHONPATH": "/path/to/MCP-admob",
"PUBLISHER_ID": "pub-XXXXXXXXXXXXXXXX",
"CREDENTIALS_PATH": "/path/to/MCP-admob/credentials.json",
"TOKEN_PATH": "/path/to/MCP-admob/token.json",
"AUDIT_LOG_PATH": "/path/to/MCP-admob/audit.log"
}
}'
Verify with claude mcp list.
๐ฅ๏ธ Claude Desktop App
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"admob-mediation": {
"command": "/path/to/MCP-admob/.venv/bin/python",
"args": ["-m", "admob_mcp"],
"cwd": "/path/to/MCP-admob",
"env": {
"PYTHONPATH": "/path/to/MCP-admob",
"PUBLISHER_ID": "pub-XXXXXXXXXXXXXXXX",
"CREDENTIALS_PATH": "/path/to/MCP-admob/credentials.json",
"TOKEN_PATH": "/path/to/MCP-admob/token.json",
"AUDIT_LOG_PATH": "/path/to/MCP-admob/audit.log"
}
}
}
}
Restart Claude Desktop to reload.
๐ Cursor IDE
- Settings โ Features โ MCP โ + Add New MCP Server
- Name:
admob-mediation| Type:command - Command:
/path/to/MCP-admob/.venv/bin/python -m admob_mcp - Ensure your
.envis populated in the project root.
๐ Windsurf / Cline / Roo Code
"admob-mediation": {
"command": "/path/to/MCP-admob/.venv/bin/python",
"args": ["-m", "admob_mcp"],
"env": {
"PYTHONPATH": "/path/to/MCP-admob",
"PUBLISHER_ID": "pub-XXXXXXXXXXXXXXXX",
"CREDENTIALS_PATH": "/path/to/MCP-admob/credentials.json",
"TOKEN_PATH": "/path/to/MCP-admob/token.json",
"AUDIT_LOG_PATH": "/path/to/MCP-admob/audit.log"
}
}
๐งฉ MCP Primitives Reference
๐ ๏ธ Tools (14 total)
Reporting โ Read-Only
| Tool | Description |
|---|---|
admob_list_apps | Lists all active apps in the publisher account |
admob_list_ad_units | Lists ad units, optionally filtered by app_id |
admob_network_report | Network revenue report across dates, apps, formats, countries |
admob_mediation_report | Mediation revenue report broken down by network, bidding vs waterfall |
Mediation Management โ Write Operations
| Tool | Description |
|---|---|
admob_list_mediation_groups | Lists all mediation groups with targeting and line items |
admob_list_ad_sources | Lists available ad network sources supported by AdMob |
admob_create_mediation_group | Creates a mediation group (runs Rules Engine validation first) |
admob_update_mediation_group | Updates targeting, status, or line items of a mediation group |
Experiments โ A/B Testing
| Tool | Description |
|---|---|
admob_create_ab_experiment | Creates a mediation A/B experiment |
admob_stop_ab_experiment | Stops an A/B experiment and selects the winner variant |
Diagnostics & Optimization
| Tool | Description |
|---|---|
admob_expert_sync | Syncs 14 days of mediation metrics into the local SQLite DB |
admob_expert_analyze | Root-cause analysis: fill rate anomalies, match rate drops, revenue alerts |
admob_recommend_networks_geo | Tier-1/Tier-2 network recommendations for a country + ad format |
admob_request_placement_map | Returns a placement mapping template for UX/monetization planning |
๐ฆ Resources (3)
| URI | Description |
|---|---|
admob://ad-sources | Full ad network registry with bidding/waterfall support and source IDs |
admob://app-categories | App category definitions and child-directed settings from config.yaml |
admob://format-support | Format support matrix per ad source (banner, interstitial, rewarded, etc.) |
๐ก Prompts (2)
| Prompt | Description |
|---|---|
optimize_app(app_id) | Step-by-step audit: sync data โ analyze โ inspect groups โ recommend changes |
portfolio_health | Portfolio-wide audit: flags stale A/B tests, revenue drops, missing partners |
๐ Safety, Auditing & Rules Engine
All write operations go through a two-stage safety pipeline before touching the live API:
Stage 1 โ Rules Engine (rules.py)
| Rule | Severity | Description |
|---|---|---|
format_check | ๐ด BLOCK | Prevents adding a network that doesn't support the group's ad format |
child_directed | ๐ด BLOCK | Blocks bidding networks on COPPA-tagged apps |
min_bidding | ๐ก WARN | Alerts when fewer than 3 bidding partners are configured |
admob_network_required | ๐ก WARN | Warns if AdMob Network is absent from the waterfall |
pangle_region | ๐ก WARN | Warns if Pangle is added outside its strong geos (APAC, US, BR, MX) |
Stage 2 โ Snapshot + Audit Log (safety.py)
dry_run=Trueon any write tool previews the change without hitting the API- Every real mutation captures a pre-change snapshot and appends a structured JSON entry to
audit.log
โ๏ธ Configuration (config.yaml)
Customize app categories and rule thresholds:
app_categories:
gaming:
app_ids: ["ca-app-pub-XXXX~YYYY"] # AdMob app IDs to tag
child_directed: false
primary_formats: ["REWARDED_VIDEO", "INTERSTITIAL", "BANNER"]
rules:
min_bidding_partners: 3
stale_ecpm_threshold_days: 30
stale_experiment_days: 14
โ Troubleshooting
| Error | Fix |
|---|---|
ValueError: PUBLISHER_ID must be provided | Check .env contains PUBLISHER_ID=pub-... and that the server's cwd points to the repo root |
FileNotFoundError: credentials.json not found | Place credentials.json in the repo root or set CREDENTIALS_PATH to its absolute path |
403 Forbidden / AdMob API not enabled | Enable the AdMob API in Google Cloud Console for your project |
401 Unauthorized / Token Expired | Delete token.json and re-run python admob_core/auth.py |
fastmcp not found / install errors | Ensure you're using Python 3.10+ (python --version) |
๐ Requirements
- Python 3.10+
- Google Cloud project with AdMob API enabled
- OAuth 2.0 Desktop App credentials (
credentials.json) - An active AdMob publisher account
๐ License
MIT โ see LICENSE.
Server Config
{
"mcpServers": {
"admob-mediation": {
"command": "/path/to/MCP-admob/.venv/bin/python",
"args": [
"-m",
"admob_mcp"
],
"cwd": "/path/to/MCP-admob",
"env": {
"PYTHONPATH": "/path/to/MCP-admob",
"PUBLISHER_ID": "pub-XXXXXXXXXXXXXXXX",
"CREDENTIALS_PATH": "/path/to/MCP-admob/credentials.json",
"TOKEN_PATH": "/path/to/MCP-admob/token.json",
"AUDIT_LOG_PATH": "/path/to/MCP-admob/audit.log"
}
}
}
}Recommend Servers
View AllA Serper MCP Server