Skip to content

Security: johnoconnor0/google-ads-mcp

SECURITY.md

Security Policy

Supported Versions

The following versions of the Google Ads MCP Server are currently supported with security updates:

Version Supported Notes
1.0.x Current stable release (v1)
2.0.x 🚧 In development (v2) - not yet released
< 1.0 Pre-release versions no longer supported

Reporting a Vulnerability

We take the security of the Google Ads MCP Server seriously. If you discover a security vulnerability, please report it responsibly.

How to Report

GitHub Issues (Preferred)

  1. Go to the Issues page
  2. Click "New Issue"
  3. For sensitive security issues: Email john@anthril.com first, or use GitHub's private vulnerability reporting if available
  4. For non-sensitive issues: Create a public issue with the "security" label

What to Include

Please include the following information in your report:

  • Description: Clear description of the vulnerability
  • Impact: What could an attacker accomplish?
  • Reproduction Steps: Detailed steps to reproduce the issue
  • Affected Versions: Which versions are affected?
  • Suggested Fix: If you have ideas for how to fix it (optional)
  • Environment: Python version, OS, Google Ads API version

Example Report Template:

## Vulnerability Description
[Brief description of the security issue]

## Impact
[What could happen if this is exploited?]

## Steps to Reproduce
1. [First step]
2. [Second step]
3. [Additional steps...]

## Affected Versions
- Version 1.0.0
- All versions prior to X.X.X

## Suggested Fix (Optional)
[Your suggestions for fixing the issue]

## Environment
- Python: 3.10
- OS: Windows 11
- Google Ads API: v17

Response Timeline

  • Initial Response: Within 48 hours
  • Status Update: Within 7 days
  • Fix Timeline: Depends on severity
    • Critical: 1-7 days
    • High: 7-14 days
    • Medium: 14-30 days
    • Low: 30-90 days

Disclosure Policy

  • Private Disclosure: Please give us reasonable time to fix the issue before public disclosure
  • Credit: We will credit you in the security advisory (unless you prefer to remain anonymous)
  • Public Advisory: Once fixed, we will publish a security advisory with details

Security Best Practices

Credential Management

NEVER commit credentials to version control

  • Do NOT commit your developer_token, client_id, client_secret, or refresh_token
  • Use environment variables for sensitive configuration
  • Use .gitignore to exclude configuration files containing secrets
  • Consider using a secrets manager (AWS Secrets Manager, Azure Key Vault, HashiCorp Vault)

Example - Secure credential storage:

# Use environment variables
export GOOGLE_ADS_DEVELOPER_TOKEN="your-token"
export GOOGLE_ADS_CLIENT_ID="your-client-id"
export GOOGLE_ADS_CLIENT_SECRET="your-secret"
export GOOGLE_ADS_REFRESH_TOKEN="your-refresh-token"

OAuth Token Management

Rotate tokens regularly

  • Refresh tokens should be rotated periodically (every 90 days recommended)
  • Use short-lived access tokens (handled automatically by the Google Ads API client)
  • Revoke tokens that are no longer needed

Secure token storage:

  • Store refresh tokens in encrypted storage
  • Limit file permissions: chmod 600 config.yaml on Linux/macOS
  • Never log refresh tokens or access tokens

MCC (Manager) Account Security

For multi-account management:

  • Use MCC accounts with appropriate access levels
  • Follow the principle of least privilege
  • Audit MCC access regularly
  • Enable two-factor authentication (2FA) on Google Ads accounts

API Rate Limiting

Prevent abuse and quota exhaustion:

  • Implement rate limiting in your application
  • Use the built-in caching mechanisms (Memory or Redis)
  • Monitor API quota usage via Google Ads API reporting
  • Implement exponential backoff for retries

Logging and Monitoring

Secure logging practices:

  • Never log sensitive data (tokens, credentials, personal information)
  • Use structured logging with appropriate log levels
  • Implement log rotation to prevent disk exhaustion
  • Monitor logs for suspicious activity
  • Use the built-in logger with appropriate configurations:
logging:
  level: INFO  # Use INFO or WARNING in production (not DEBUG)
  format: json
  console: false
  file: /var/log/google-mcp/server.log

Network Security

Secure communications:

  • Always use HTTPS for API communications (enforced by Google Ads API)
  • If exposing the MCP server over a network, use TLS/SSL
  • Implement proper authentication and authorization
  • Use firewall rules to restrict access

Input Validation

Prevent injection attacks:

  • The server validates all GAQL queries using query_optimizer.py
  • Customer IDs are validated to prevent injection
  • User inputs are sanitized before being used in API calls
  • Pydantic models enforce type safety

Dependency Management

Keep dependencies up to date:

# Check for outdated packages
pip list --outdated

# Update packages
pip install --upgrade google-ads mcp httpx pydantic

# Audit for known vulnerabilities
pip-audit

Monitor security advisories:

Known Security Considerations

Google Ads API Authentication

  • OAuth 2.0 Flow: The server uses OAuth 2.0 for authentication
  • Developer Token: Required for API access - protect like a password
  • Refresh Token: Long-lived token that can generate access tokens - protect carefully

Refresh Token Storage

  • Refresh tokens are stored in config.yaml or environment variables
  • Risk: If compromised, an attacker can access your Google Ads accounts
  • Mitigation: Use encrypted storage, restrict file permissions, rotate regularly

Developer Token Protection

  • Developer tokens are account-specific and grant API access
  • Risk: Token misuse could lead to unauthorized API access
  • Mitigation: Treat as a secret, never commit to version control, use environment variables

Multi-Account Access

  • MCC accounts can access multiple client accounts
  • Risk: Compromise of MCC credentials affects all managed accounts
  • Mitigation: Use strict access controls, audit regularly, enable 2FA

GAQL Query Execution

  • Custom GAQL queries can access account data
  • Risk: Malicious queries could extract sensitive information
  • Mitigation: Query validation, input sanitization, access controls

Security Updates

Update Notifications

Security updates will be announced via:

  • GitHub Releases: All releases include security notes
  • GitHub Security Advisories: Critical vulnerabilities
  • CHANGELOG.md: Detailed change notes (when created)

Applying Security Updates

# Update to the latest version
cd /path/to/google-mcp
git pull origin main
pip install -r requirements.txt --upgrade

# Restart the MCP server
# (restart Claude Desktop or your integration)

Security Patch Policy

  • Critical vulnerabilities: Immediate patch release
  • High severity: Patch within 7 days
  • Medium/Low severity: Included in next regular release

Additional Resources

Contact

For security-related questions or concerns:


Last Updated: December 17, 2025

Security Response SLA

  • Initial triage acknowledgement: within 3 business days.
  • Status update after validation: within 7 business days.
  • Remediation target for confirmed critical vulnerabilities: as soon as practicable, with an initial mitigation plan within 14 days.

VirusTotal Audit

Last updated: 2026-05-18T16:44:22.568Z

File SHA256 Status Link
google_ads_mcp.py 972c4d649845a849a66fe42a31de9a3d8b614230b3438df03e7d14d769bd7961 Not present in VirusTotal n/a
requirements.txt 24c0308c461410ea39a52a386ff5d6c7349ed457868f3dca41e51b4cd95f3f25 Not present in VirusTotal n/a
pyproject.toml 37a2810ca7c73db197b1e3c5f773b248906ce0670dbce3052e4fab3cbcacfadd Not present in VirusTotal n/a
README.md c0ec7cdc3dd83fab42d3061900584e3f34255581149696740c77540f86bdd83d Not present in VirusTotal n/a
SECURITY.md 82e5646f0cbc917707314bf4e8d08feaef6d4aecd600ad8fbd65e54e4b533ff9 Not present in VirusTotal n/a
.github/workflows/ci.yml 7e3952f3b263406bd66176a5a1df2299e332edafd3c02d54009568a4af05aa62 Not present in VirusTotal n/a
.github/workflows/secret-scan.yml 81ca73fbfc638997d69d914a6f9a6cfbba811763b0623c2899d80d555c3ad58d Not present in VirusTotal n/a
.github/workflows/release-check.yml a1f9bd662da69b04a211871854b99f37b94972351f25e07c8749861c725856f4 Not present in VirusTotal n/a

Raw report is stored in .virustotal/latest.json.

There aren't any published security advisories