Skip to main content
Glama
martechery

Google Ads MCP Server

by martechery

MCP Server for Google Ads

npm version License: MIT Node.js CI

TypeScript implementation of an MCP server for Google Ads API with GCloud/ADC authentication. Provides tools for campaign management, performance reporting, and account operations with Multi-Customer Center (MCC) support.

Table of Contents

Related MCP server: Google Ads MCP Server

Prerequisites

  • Node.js 18+ and npm

  • A GCP project with the Google Ads API enabled

  • Ensure the credentials you use (user/ADC) have the Service Usage Consumer role on that project (grants serviceusage.services.use)

  • A Google Ads Developer Token is required:

Quick Start

{
  "mcpServers": {
    "google-ads": {
      "command": "npx", 
      "args": ["mcp-google-ads-ts"],
      "env": {
        "GOOGLE_ADS_DEVELOPER_TOKEN": "YOUR_DEV_TOKEN",       // Required: Your Google Ads Developer Token
        "GOOGLE_ADS_ACCOUNT_ID": "1234567890",                // Optional: Default customer ID (10 digits, no dashes)
        "GOOGLE_ADS_MANAGER_ACCOUNT_ID": "9876543210"         // Optional: MCC account ID for login customer
      }
    }
  }
}

Authentication

The server uses Google Application Default Credentials (ADC) for secure authentication. This is the recommended approach as it provides automatic token refresh and secure credential management.

How Authentication Works

  1. Application Default Credentials (ADC): The server first attempts to use ADC, which automatically finds credentials in this order:

    • Environment variable GOOGLE_APPLICATION_CREDENTIALS pointing to a credential file

    • User credentials from gcloud auth application-default login

    • Service account attached to the compute resource (GCE, Cloud Functions, etc.)

  2. CLI Token Fallback: If enabled with GOOGLE_ADS_GCLOUD_USE_CLI=true, the server can fall back to using gcloud auth print-access-token for authentication

  3. Automatic Token Refresh: Both methods handle token refresh automatically

Setting Up Authentication

gcloud auth application-default login --scopes=https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/adwords

Method 2: Existing ADC File

Place your ADC file at .auth/adc.json in the project directory, or set GOOGLE_APPLICATION_CREDENTIALS to point to your authorized_user JSON file.

Method 3: OAuth Device Flow

Use manage_auth { "action": "oauth_login" } with GOOGLE_OAUTH_CLIENT_ID and GOOGLE_OAUTH_CLIENT_SECRET environment variables to create an ADC file interactively.

Environment Variables

Required

  • GOOGLE_ADS_DEVELOPER_TOKEN: Your Google Ads API developer token (required for all API calls)

Optional

  • GOOGLE_ADS_ACCOUNT_ID (optional): Default Google Ads account ID (10-digit customer ID without dashes). Used as the default customer for all operations when not specified explicitly.

  • GOOGLE_ADS_MANAGER_ACCOUNT_ID (optional): For Multi-Customer Center (MCC) accounts - the manager account ID that acts as the login customer. Required when accessing accounts under an MCC. This is typically your MCC account ID (10-digit numeric ID, no dashes). Note: you can override this per call using the login_customer_id (aka MCC/manager account id) parameter in tools like execute_gaql_query and get_performance.

  • GOOGLE_APPLICATION_CREDENTIALS (optional): Path to an ADC credentials file (authorized_user JSON). Takes precedence over default ADC locations.

  • GOOGLE_ADS_QUOTA_PROJECT_ID (optional): GCP project ID used for quota/billing. Helps avoid 403 errors due to missing quota. Typically your active gcloud project ID.

  • GOOGLE_ADS_API_VERSION (optional): API version string (e.g., v20, v21, v22). Defaults to v21 if unset. Supports format normalization ("21" → "v21").

  • GOOGLE_OAUTH_CLIENT_ID and GOOGLE_OAUTH_CLIENT_SECRET (optional): Desktop OAuth client credentials used by manage_auth with action: "oauth_login" to create local ADC. Only needed if you cannot use gcloud.

  • GOOGLE_ADS_ACCESS_TOKEN (optional): Used by unit tests; for mocked tests this can be any non-empty string. When set, bypasses ADC. For real API calls prefer ADC; if used, this must be a real OAuth 2.0 access token with the Google Ads scope and will not auto-refresh.

Example Configuration

# Required
GOOGLE_ADS_DEVELOPER_TOKEN=your-developer-token-here

# Optional - Default account
GOOGLE_ADS_ACCOUNT_ID=1234567890

# Optional - For MCC accounts
GOOGLE_ADS_MANAGER_ACCOUNT_ID=9876543210

# Optional - Authentication
GOOGLE_ADS_GCLOUD_USE_CLI=true
GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json

Client-Specific Instructions

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\\Claude\\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "google-ads": {
      "command": "npx",
      "args": ["mcp-google-ads-ts"],
      "env": {
        "GOOGLE_ADS_DEVELOPER_TOKEN": "YOUR_DEV_TOKEN",       // Required: Your Google Ads Developer Token
        "GOOGLE_ADS_ACCOUNT_ID": "1234567890",                // Optional: Default customer ID (10 digits, no dashes)
        "GOOGLE_ADS_MANAGER_ACCOUNT_ID": "9876543210",        // Optional: MCC account ID for login customer
        "GOOGLE_ADS_QUOTA_PROJECT_ID": "my-gcp-project"       // Optional: GCP project for quota/billing
      }
    }
  }
}

Claude Code

Install and configure with a single command:

# Required
claude mcp add google-ads \\
  -e GOOGLE_ADS_DEVELOPER_TOKEN=your-token \\
  -- npx mcp-google-ads-ts

# With optional parameters
claude mcp add google-ads \\
  -e GOOGLE_ADS_DEVELOPER_TOKEN=your-token \\
  -e GOOGLE_ADS_ACCOUNT_ID=1234567890 \\
  -e GOOGLE_ADS_MANAGER_ACCOUNT_ID=9876543210 \\
  -e GOOGLE_ADS_QUOTA_PROJECT_ID=my-gcp-project \\
  -- npx mcp-google-ads-ts

For more details, see the Claude Code MCP documentation.

Cursor

Add to your MCP settings in Cursor. Go to Cursor Settings > Features > Model Context Protocol:

{
  "mcpServers": {
    "google-ads": {
      "command": "npx",
      "args": ["mcp-google-ads-ts"],
      "env": {
        "GOOGLE_ADS_DEVELOPER_TOKEN": "YOUR_DEV_TOKEN",       // Required: Your Google Ads Developer Token
        "GOOGLE_ADS_ACCOUNT_ID": "1234567890",                // Optional: Default customer ID (10 digits, no dashes)
        "GOOGLE_ADS_MANAGER_ACCOUNT_ID": "9876543210",        // Optional: MCC account ID for login customer
        "GOOGLE_ADS_API_VERSION": "v21"                       // Optional: API version (defaults to v21)
      }
    }
  }
}

For detailed setup instructions, see the Cursor MCP documentation.

VS Code

Install the MCP extension and add the server configuration:

  1. Install the "MCP Manager" extension from the marketplace

  2. Open Command Palette (Ctrl+Shift+P / Cmd+Shift+P)

  3. Run "MCP: Add Server"

  4. Configure the server:

{
  "name": "google-ads",
  "command": "npx",
  "args": ["mcp-google-ads-ts"],
  "env": {
    "GOOGLE_ADS_DEVELOPER_TOKEN": "YOUR_DEV_TOKEN",       // Required: Your Google Ads Developer Token
    "GOOGLE_ADS_ACCOUNT_ID": "1234567890",                // Optional: Default customer ID (10 digits, no dashes)
    "GOOGLE_ADS_MANAGER_ACCOUNT_ID": "9876543210",        // Optional: MCC account ID for login customer
    "GOOGLE_ADS_API_VERSION": "v21"                       // Optional: API version (defaults to v21)
  }
}

For more information, see the VS Code MCP documentation.

Local Installation

For local development or when you want to run from source:

1. Clone and Build

# Clone the repository
git clone https://github.com/your-username/mcp-google-ads-ts.git
cd mcp-google-ads-ts

# Install dependencies
npm install

# Build the project
npm run build

2. Configure Your MCP Client

{
  "mcpServers": {
    "google-ads": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-google-ads-ts/dist/cli.js"],
      "env": {
        "GOOGLE_ADS_DEVELOPER_TOKEN": "YOUR_DEV_TOKEN",       // Required: Your Google Ads Developer Token
        "GOOGLE_ADS_ACCOUNT_ID": "1234567890",                // Optional: Default customer ID (10 digits, no dashes)
        "GOOGLE_ADS_MANAGER_ACCOUNT_ID": "9876543210",        // Optional: MCC account ID for login customer
        "GOOGLE_APPLICATION_CREDENTIALS": "/path/to/adc.json" // Optional: Path to ADC credentials file
      }
    }
  }
}

3. Development Mode

For development with auto-reload:

npm run dev

Multi-Tenant Mode

Multi-tenant mode allows hosted deployments to accept Google Ads credentials at connection time (no filesystem storage) and keep them immutable for the session lifecycle.

Enable via environment:

  • ENABLE_RUNTIME_CREDENTIALS=true (default: false)

  • RUNTIME_CREDENTIAL_TTL Session TTL in seconds (default: 3600)

  • MAX_CONNECTIONS Maximum in-memory sessions (default: 1000)

  • CONNECTION_SWEEP_INTERVAL Cleanup interval in seconds (default: 300)

  • VERIFY_TOKEN_SCOPE Optional. When true, validates Ads scope at session establishment

  • ALLOWED_CUSTOMER_IDS Optional allowlist of customer IDs (comma-separated)

  • GOOGLE_OAUTH_CLIENT_ID / GOOGLE_OAUTH_CLIENT_SECRET Optional, for refresh flows

  • HTTPS_PROXY Optional proxy for outbound requests

  • NODE_TLS_REJECT_UNAUTHORIZED For proxy/cert handling when required

  • STRICT_IMMUTABLE_AUTH Optional. When true, blocks re-setting credentials for an existing session (default allows overwrite with a warning)

  • OBSERVABILITY_ENABLED Optional. Set to false to disable structured JSON logs (default enabled). Alternatively set OBSERVABILITY=off.

Behavioral differences when enabled:

  • Credentials must be provided via set_session_credentials

  • No fallback to ADC/env credentials

  • manage_auth is disabled

  • Each tool call must include session_key

  • Developer token is required in provided credentials

  • Sticky sessions required for multi-process deployments

Session tools:

  1. set_session_credentials

    • Request:

{
  "session_key": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "google_credentials": {
    "access_token": "ya29...",
    "refresh_token": "1//...",
    "developer_token": "DEV_TOKEN_REQUIRED",
    "login_customer_id": "1234567890",
    "quota_project_id": "my-project"
  }
}
  • Response: { "status": "success", "session_key": "...", "expires_in": 3600 }

  1. get_credential_status

    • Request: { "session_key": "f47ac10b-58cc-4372-a567-0e02b2c3d479" }

    • Response: { "has_credentials": true, "expires_in": 3542, "has_refresh_token": true, "masked_token": "ya29****abcd" }

  2. end_session

    • Request: { "session_key": "f47ac10b-58cc-4372-a567-0e02b2c3d479" }

    • Response: { "status": "session_ended" }

Using standard tools in multi-tenant mode: include session_key in inputs. Example:

{
  "session_key": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "customer_id": "1234567890",
  "query": "SELECT campaign.id, campaign.name FROM campaign LIMIT 5",
  "output_format": "table"
}

Client usage examples

  • Establish session, then execute a GAQL query and get performance with session_key:

{ "tool": "set_session_credentials", "input": {
  "session_key": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "google_credentials": {
    "access_token": "ya29...",
    "refresh_token": "1//...",
    "developer_token": "DEV_TOKEN",
    "login_customer_id": "1234567890",
    "quota_project_id": "my-project"
  }
}}

{ "tool": "execute_gaql_query", "input": {
  "session_key": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "request_id": "req-abc-123",
  "customer_id": "1234567890",
  "query": "SELECT campaign.id, campaign.name FROM campaign LIMIT 5"
}}

{ "tool": "get_performance", "input": {
  "session_key": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "request_id": "req-abc-456",
  "customer_id": "1234567890",
  "level": "campaign",
  "days": 7,
  "limit": 10
}}
  1. refresh_access_token

When a refresh_token is provided and OAuth client env is set, this tool refreshes the access token for the session.

Request

{ "session_key": "f47ac10b-58cc-4372-a567-0e02b2c3d479" }

Response (success)

{ "status": "refreshed", "expires_in": 3600, "masked_token": "ya29****abcd" }

Response (invalid grant)

{ "error": { "code": "ERR_INVALID_GRANT", "message": "Refresh token invalid or revoked. Re-authentication required." } }

Observability

The server emits structured JSON events to stderr (12-factor style) for application-side collection. Each event includes:

{
  "timestamp": "2025-01-01T00:00:00.000Z",
  "tool": "execute_gaql_query",
  "session_key": "...",                // when available
  "customer_id": "1234567890",         // when available
  "request_id": "abc-123",             // pass-through from input when provided
  "response_time_ms": 12,
  "api_version": "v21",
  "error": { "code": "HTTP_403", "message": "..." } // only on errors
}

Control via env:

  • OBSERVABILITY_ENABLED=false (disable)

  • OBSERVABILITY=off (disable)

Error Payloads

All tools return structured error payloads when failures occur:

{ "error": { "code": "ERR_NO_SESSION_KEY", "message": "session_key parameter required in multi-tenant mode" } }

Common codes include: ERR_INPUT, ERR_NOT_ENABLED, ERR_IMMUTABLE_AUTH, ERR_INVALID_GRANT, ERR_INSUFFICIENT_SCOPE, and HTTP_<status> for API responses.

Live Multi-Tenant Integration Test (optional)

You can run a live multi-tenant test flow using environment-provided credentials. Recommended gating:

  • Set VITEST_REAL=1 and ENABLE_RUNTIME_CREDENTIALS=true

  • Provide runtime test credentials via env (examples):

    • TEST_ACCESS_TOKEN, TEST_REFRESH_TOKEN, TEST_DEVELOPER_TOKEN

    • TEST_LOGIN_CUSTOMER_ID, TEST_QUOTA_PROJECT_ID

  • Steps:

    1. Call set_session_credentials with test env values

    2. Run execute_gaql_query and get_performance with session_key

    3. Optionally call refresh_access_token to validate token refresh

    4. Optionally set VERIFY_TOKEN_SCOPE=true to validate scope against live API

    5. Optionally pass ALLOWED_CUSTOMER_IDS to validate allowlist enforcement

Keep the existing single-tenant live tests as primary validation; multi-tenant live tests are optional and depend on environment-provided credentials.

Per-Session Rate Limiting (Optional)

Token-bucket rate limiting protects quotas on a per-session basis when multi-tenant mode is enabled.

  • Env (defaults in parentheses):

    • ENABLE_RATE_LIMITING (true)

    • REQUESTS_PER_SECOND (10)

    • RATE_LIMIT_BURST (20)

  • Error payload on limit:

{ "error": { "code": "ERR_RATE_LIMITED", "message": "Rate limit exceeded. Retry after 1 seconds", "retry_after": 1 } }

Rate limiting is enforced only in multi-tenant mode and only for session-bound tools.

Available Tools

1. manage_auth - Authentication management

Note: When ENABLE_RUNTIME_CREDENTIALS=true (multi-tenant mode), this tool is disabled and returns an error. Use the session tools instead.

{
  action?: 'status' | 'switch' | 'refresh' | 'oauth_login' | 'set_project' | 'set_quota_project',  // Action to perform (default: 'status')
  config_name?: string,        // For 'switch' action: gcloud configuration name
  project_id?: string,         // For 'set_project' and 'set_quota_project' actions
  project?: string,            // Alias for project_id
  allow_subprocess?: boolean   // Allow gcloud command execution (default: true)
}

Comprehensive authentication management tool with multiple actions:

action: 'status' (default)

  • Environment inspection: Shows all Google Ads environment variables

  • ADC file discovery: Locates and validates Application Default Credentials files

  • Token validation: Checks access token presence and scopes via Google OAuth2 API

  • Scope verification: Tests Google Ads API access by calling listAccessibleCustomers

  • Account enumeration: Counts accessible customer accounts under current credentials

  • Troubleshooting hints: Provides guidance when authentication issues are detected

action: 'oauth_login'

  • Device OAuth flow: Interactive browser-based authentication using OAuth client credentials

  • Requires env vars: GOOGLE_OAUTH_CLIENT_ID and GOOGLE_OAUTH_CLIENT_SECRET

  • Saves ADC file: Creates authorized_user JSON at .auth/adc.json

  • Scope validation: Automatically verifies Google Ads API access after completion

  • Sets credentials: Updates GOOGLE_APPLICATION_CREDENTIALS for immediate use

action: 'switch'

  • Configuration switching: Changes active gcloud configuration

  • Requires: config_name parameter

  • Auto-execution: Runs gcloud config configurations activate <name> when allow_subprocess=true

  • Guidance: Provides next steps for refreshing ADC credentials with correct scopes

action: 'refresh'

  • Credential refresh: Re-authenticates ADC with required Google Ads scopes

  • Auto-execution: Runs gcloud auth application-default login with proper scopes

  • Token verification: Prints access token to verify successful authentication

  • Scope testing: Validates Google Ads API access after refresh

action: 'set_project'

  • Project configuration: Sets default GCP project for gcloud

  • Requires: project_id parameter

  • Command: gcloud config set project <project_id>

action: 'set_quota_project'

  • Quota project setup: Sets ADC quota project for billing attribution

  • Requires: project_id parameter

  • Command: gcloud auth application-default set-quota-project <project_id>

Safety Features

  • Dry-run mode: Set allow_subprocess: false to see planned commands without execution

  • gcloud detection: Automatically checks for gcloud CLI availability before execution

  • Error handling: Provides clear error messages and installation links when gcloud is missing

  • Timeout protection: Commands have built-in timeouts to prevent hanging

Example user prompts:

// Check authentication status
"Check my Google Ads authentication status"

// Refresh credentials with Google Ads scopes  
"Refresh my Google Ads authentication credentials"

// Switch gcloud configuration
"Switch to my-project gcloud configuration"

// Set up OAuth authentication
"Help me set up OAuth authentication for Google Ads"

// Show what commands would run without executing
"Show me what commands would run to refresh my auth (dry-run mode)"

2. list_resources - List Google Ads resources

{
  kind: string,              // Required: Resource type (accounts, campaigns, ad_groups, ads, etc.)
  customer_id?: string,      // Customer ID (uses default if not specified)
  parent_id?: string,        // Parent resource ID for hierarchical resources
  output_format?: string     // Output format (table, json, csv)
}

Lists various Google Ads resources with support for hierarchical relationships and multiple output formats.

Supported resource types:

  • accounts - List accessible customer accounts

  • campaigns - List campaigns

  • ad_groups - List ad groups

  • ads - List ads

  • keywords - List keywords

  • extensions - List ad extensions

Example user prompts:

"List all my Google Ads accounts"
"Show me campaigns for customer ID 1234567890"
"Get all ad groups in JSON format"
"List keywords for the Search campaign"

3. execute_gaql_query - Execute Google Ads Query Language queries

{
  query: string,               // Required: GAQL query
  customer_id?: string,        // Customer ID (uses default if not specified)
  login_customer_id?: string,  // Optional: MCC/manager account ID for this call (overrides env)
  output_format?: string,      // Output format (table, json, csv)
  page_size?: number,          // Results per page (default: 1000)
  page_token?: string,         // Pagination token
  auto_paginate?: boolean,     // Auto-paginate through all results
  max_pages?: number           // Maximum pages to fetch
}

Executes custom GAQL queries for advanced data retrieval and analysis with automatic pagination support.

Example user prompts:

"Run this GAQL query: SELECT campaign.name, metrics.clicks FROM campaign WHERE segments.date DURING LAST_7_DAYS"
"Execute a query to get impressions and CTR for all active campaigns"
"Query ad performance data for the past 30 days in CSV format"
"Show me all campaigns with their budgets and status"

4. get_performance - Get performance metrics

{
  level: string,               // Required: Reporting level (account, campaign, ad_group, ad, keyword)
  customer_id?: string,        // Customer ID (uses default if not specified)
  login_customer_id?: string,  // Optional: MCC/manager account ID for this call (overrides env)
  date_range?: string,         // Date range (LAST_7_DAYS, LAST_30_DAYS, etc.)
  days?: number,               // Custom days back from today
  metrics?: string[],          // Specific metrics to retrieve
  segments?: string[],         // Segmentation dimensions
  filters?: object,            // Query filters
  output_format?: string,      // Output format (table, json, csv)
  page_size?: number,          // Results per page
  auto_paginate?: boolean      // Auto-paginate through all results
}

Retrieves performance metrics and reports for campaigns, ad groups, ads, and keywords with flexible filtering and segmentation.

Example user prompts:

"Get campaign performance for the last 7 days"
"Show me ad group metrics with cost and conversions for last month"
"Get keyword performance data segmented by device"
"Analyze ad performance with CTR and quality score metrics"

5. gaql_help - Google Ads Query Language reference

{
  topic?: string,            // Specific help topic
  search?: string            // Search term for help content
}

Provides interactive help and documentation for Google Ads Query Language (GAQL), including available resources, fields, functions, and operators.

Example user prompts:

"Help me with GAQL syntax"
"What fields are available for the campaign resource?"
"Show me examples of GAQL queries for performance data"
"How do I filter by date ranges in GAQL?"

Development

Setup

# 1. Clone and install
git clone https://github.com/your-username/mcp-google-ads-ts.git
cd mcp-google-ads-ts
npm install

# 2. Set up environment
cp .env.example .env
# Edit .env with your credentials

# 3. Development commands
npm run dev     # Development mode with auto-reload
npm test        # Run all tests
npm run build   # Production build
npm run lint    # Check code quality

Running Tests

# Unit tests only
npm run test:unit

# Integration tests (requires real Google Ads API access)
VITEST_REAL=1 npm run test:integration

# All tests
npm test

Project Structure

src/
├── cli.ts              # CLI entry point
├── server.ts           # MCP server implementation
├── server-tools.ts     # Tool implementations
├── auth.ts             # Authentication handling
├── schemas.ts          # Zod schemas for validation
├── headers.ts          # API request headers
├── tools/              # Individual tool implementations
│   ├── accounts.ts     # Account listing
│   ├── fields.ts       # Google Ads field metadata
│   ├── gaql.ts         # GAQL query execution
│   ├── performance.ts  # Performance reporting
│   └── oauth.ts        # Authentication management
└── utils/              # Utility functions
    ├── currency.ts     # Currency formatting
    ├── errorMapping.ts # API error handling
    ├── exec.ts         # Command execution
    ├── formatCsv.ts    # CSV formatting
    ├── formatTable.ts  # Table formatting
    └── formatCustomerId.ts  # Customer ID formatting

License

MIT

Available Tools

9 tools
end_sessionC

End a session and clear credentials (multi-tenant mode).

ParametersJSON Schema
NameRequiredDescriptionDefault
session_keyYesUUID v4 session key

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions clearing credentials, which hints at destructive behavior, but fails to detail critical aspects like whether this action is reversible, what happens to active operations, or any side effects. For a tool that likely terminates sessions, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core action ('End a session') and adds necessary context ('clear credentials in multi-tenant mode') without waste. Every word earns its place, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity as a session termination operation with no annotations and no output schema, the description is incomplete. It lacks details on behavioral outcomes, error conditions, or return values, leaving gaps for an AI agent to understand the full context of use. This is inadequate for a potentially destructive tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the single parameter 'session_key' documented as a UUID v4. The description adds no additional meaning beyond this, such as where to obtain the session key or format details. Baseline 3 is appropriate since the schema does the heavy lifting, but the description doesn't compensate or enhance understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('End a session') and the resource ('session'), with the additional context of clearing credentials in multi-tenant mode. It distinguishes from siblings like 'manage_auth' or 'set_session_credentials' by focusing on termination rather than management or creation. However, it doesn't explicitly differentiate from all siblings, keeping it at a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'manage_auth' or 'refresh_access_token', nor does it mention prerequisites or exclusions. It implies usage in multi-tenant mode but lacks explicit context for selection among siblings, resulting in minimal guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_gaql_queryC

Execute GAQL. Optional: login_customer_id (aka MCC/manager account id) overrides env.

ParametersJSON Schema
NameRequiredDescriptionDefault
customer_idNo10-digit customer ID (no dashes). Optional.
login_customer_idNoManager account (MCC) ID to use as login-customer for this request (10 digits, no dashes). Overrides env GOOGLE_ADS_MANAGER_ACCOUNT_ID.
queryYesGAQL query string. Examples: SELECT campaign.id, campaign.name, metrics.clicks FROM campaign WHERE segments.date DURING LAST_30_DAYS LIMIT 10 SELECT ad_group_ad.ad.id, metrics.impressions FROM ad_group_ad WHERE campaign.status = 'ENABLED' LIMIT 50
page_sizeNooptional page size (1-10000)
page_tokenNooptional page token
auto_paginateNofetch multiple pages automatically
max_pagesNolimit when auto_paginate=true (1-20)
output_formatNorender formattable

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the login_customer_id override behavior but fails to describe critical aspects like whether this is a read-only or write operation, authentication requirements, rate limits, error handling, or what the tool returns. For a query execution tool with 8 parameters, this is inadequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with just one sentence that directly addresses the tool's core functionality and one important behavioral note. Every word earns its place with zero wasted text, though this conciseness comes at the cost of completeness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex query execution tool with 8 parameters, no annotations, and no output schema, the description is severely incomplete. It doesn't explain what GAQL is, what data can be queried, authentication requirements, expected return format, error conditions, or how results are structured. The agent would need to rely heavily on the schema and external knowledge.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal value by mentioning the login_customer_id override behavior, but doesn't provide additional context about parameter interactions, query syntax beyond what's in the schema examples, or practical usage patterns.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool executes GAQL queries, which is a specific action with a defined resource (Google Ads Query Language). It distinguishes from siblings like 'gaql_help' (which likely provides assistance) and 'get_performance' (which may retrieve specific metrics). However, it doesn't explicitly differentiate from 'list_resources' which might also query data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides minimal guidance, only mentioning that login_customer_id overrides environment variables. It doesn't explain when to use this tool versus alternatives like 'list_resources' or 'get_performance', nor does it provide context about prerequisites, query limitations, or appropriate use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gaql_helpB

Get GAQL help with local documentation and official Google Ads API links. Use topic for specific areas or search for keywords.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNospecific GAQL topic to retrieve
searchNosearch term for help content

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions 'local documentation and official Google Ads API links,' which hints at the tool's behavior (returning help content), but it doesn't disclose key traits like whether it's read-only, what format the output is in, rate limits, or authentication needs. For a tool with no annotations, this is a significant gap, warranting a 2.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded and concise: two sentences with zero waste. The first sentence states the purpose, and the second provides usage hints. Every sentence earns its place, making it efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 2 parameters with full schema coverage and no output schema, the description is moderately complete. It covers the basic purpose and parameter usage but lacks details on behavioral traits (e.g., output format, error handling) and doesn't fully leverage the context of sibling tools. For a help tool with no annotations, it should do more to be fully helpful, so it's a 3.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters (topic with enum values and search). The description adds minimal value beyond the schema by suggesting how to use them ('Use topic for specific areas or search for keywords'), but it doesn't provide additional semantics like examples or deeper context. Baseline is 3 when schema coverage is high.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get GAQL help with local documentation and official Google Ads API links.' It specifies the verb ('Get') and resource ('GAQL help'), and distinguishes it from siblings like execute_gaql_query (which runs queries) and list_resources (which lists data). However, it doesn't explicitly differentiate from all siblings, such as get_performance or manage_auth, which is why it's a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides implied usage guidance: 'Use topic for specific areas or search for keywords.' This suggests when to use each parameter, but it doesn't explicitly state when to choose this tool over alternatives (e.g., vs. general documentation or other help tools) or any prerequisites. Given the sibling tools include execute_gaql_query, more explicit differentiation would be helpful, so it's a 3.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_credential_statusC

Get credential status for a session (multi-tenant mode).

ParametersJSON Schema
NameRequiredDescriptionDefault
session_keyYesUUID v4 session key

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves status but doesn't specify what information is returned, whether it's read-only, if it requires authentication, or any rate limits. The mention of 'multi-tenant mode' is unclear and adds minimal context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It is front-loaded with the core purpose. However, the phrase 'multi-tenant mode' is ambiguous and could be considered unnecessary without further explanation, slightly reducing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description is insufficient. It doesn't explain what 'credential status' includes, the format of the response, or any error conditions. Given the complexity implied by 'multi-tenant mode' and the lack of structured data, more detail is needed to make this tool usable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the single parameter 'session_key' documented as a 'UUID v4 session key'. The description adds no additional meaning beyond this, such as where to obtain the session key or how it relates to credential status. Baseline 3 is appropriate given the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool's purpose as 'Get credential status for a session' which is clear but lacks specificity about what 'credential status' entails. It distinguishes from siblings by mentioning 'multi-tenant mode', but this is vague and doesn't clearly differentiate from tools like 'manage_auth' or 'set_session_credentials'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It mentions 'multi-tenant mode' but doesn't explain what this means or when it applies. There are no explicit instructions on prerequisites, timing, or comparisons with sibling tools like 'manage_auth' or 'refresh_access_token'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_performanceC

Get performance (level: account|campaign|ad_group|ad). Optional: login_customer_id (aka MCC/manager account id) overrides env.

ParametersJSON Schema
NameRequiredDescriptionDefault
customer_idNo10-digit customer ID (no dashes). Optional.
login_customer_idNoManager account (MCC) ID to use as login-customer for this request (10 digits, no dashes). Overrides env GOOGLE_ADS_MANAGER_ACCOUNT_ID.
levelYesAggregation level
daysNoDays back to query (1-365, default 30)
limitNoGAQL LIMIT (1-1000, default 50)
page_sizeNooptional page size (1-10000)
page_tokenNooptional page token
auto_paginateNofetch multiple pages automatically
max_pagesNolimit when auto_paginate=true (1-20)
output_formatNorender formattable
filtersNooptional performance filters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions one behavioral aspect: 'login_customer_id (aka MCC/manager account id) overrides env' which explains an authentication override mechanism. However, it fails to disclose critical behavioral traits: whether this is a read-only operation (implied by 'Get' but not explicit), potential rate limits, pagination behavior (though parameters exist), what performance metrics are returned, or any side effects. For an 11-parameter tool with complex filtering capabilities, this is insufficient behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately concise with two sentences. The first sentence states the core purpose with key parameter information, and the second provides important behavioral context about the login_customer_id override. There's no wasted verbiage or redundancy. However, it could be slightly more structured by separating purpose from parameter guidance more clearly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (11 parameters including nested objects, pagination controls, and filtering), absence of annotations, and no output schema, the description is incomplete. It doesn't explain what 'performance' data includes (metrics returned), how results are structured, pagination behavior despite having pagination parameters, or error conditions. For a data retrieval tool with rich filtering capabilities, users need more context about what they're getting and how to interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already comprehensively documents all 11 parameters with descriptions, constraints, and defaults. The description adds minimal parameter semantics beyond the schema: it reinforces that 'login_customer_id' overrides environment variables, which is already implied in the schema description. No additional parameter meaning, relationships, or usage examples are provided. The baseline of 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get performance (level: account|campaign|ad_group|ad)' which specifies the verb ('Get') and resource ('performance') with the aggregation levels. It distinguishes itself from siblings by focusing on performance data retrieval rather than session management, query execution, or resource listing. However, it doesn't explicitly differentiate from potential performance-related alternatives that might exist in other contexts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides minimal usage guidance: it mentions that 'login_customer_id (aka MCC/manager account id) overrides env' which gives some context about parameter behavior. However, it offers no explicit guidance about when to use this tool versus alternatives (like execute_gaql_query for custom queries), no prerequisites, and no indication of when this tool would be preferred over other performance retrieval methods. The agent must infer usage from the tool name and parameters alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_resourcesC

List GAQL FROM-able resources via google_ads_field (category=RESOURCE, selectable=true) or list accounts. output_format=table|json|csv.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNowhat to list: resources | accountsresources
filterNosubstring filter on resource name
limitNomax rows (1-1000)
output_formatNorender formattable

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the output format options (table, json, csv) and hints at filtering and limiting, but fails to describe key behavioral traits such as whether this is a read-only operation, potential rate limits, authentication requirements, or what happens if no resources match the filter. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, stating the core purpose in a single sentence. It efficiently covers the main functionality and output format without unnecessary details. However, the sentence structure is slightly dense and could be clearer, but it avoids waste and is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (4 parameters, no output schema, no annotations), the description is partially complete. It covers the basic purpose and output format but lacks details on behavioral aspects, usage context, and how results are structured. Without an output schema, the description should ideally explain return values or examples, which it doesn't. This makes it adequate but with clear gaps for effective agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, meaning the input schema already documents all parameters thoroughly. The description adds minimal value beyond the schema: it mentions 'output_format' options but doesn't explain their semantics further, and it implies filtering on resource name without adding details. Since the schema does the heavy lifting, the baseline score of 3 is appropriate, as the description provides some context but no significant additional meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to list GAQL FROM-able resources via google_ads_field (category=RESOURCE, selectable=true) or list accounts. It specifies the verb ('List') and resources ('GAQL FROM-able resources' or 'accounts'), making the function evident. However, it doesn't explicitly distinguish this tool from sibling tools like 'execute_gaql_query' or 'gaql_help', which could provide similar or related functionality, leaving some ambiguity in differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It mentions two possible outputs (resources or accounts) but doesn't explain the use cases for each or how this tool relates to siblings like 'execute_gaql_query' or 'gaql_help'. Without explicit when-to-use or when-not-to-use instructions, the agent lacks clear direction for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_authB

Manage Google Ads auth: status; switch/refresh via gcloud; set_project/set_quota_project; optional oauth_login using env client id/secret to create ADC file.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNostatus | switch | refreshstatus
config_nameNogcloud configuration name (for switch)
allow_subprocessNoexecute gcloud steps (default true). Set false to only print commands.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes actions (status, switch, refresh) and mentions executing gcloud steps or printing commands, which adds useful context. However, it doesn't cover critical aspects like permissions needed, rate limits, error handling, or what 'switch' and 'refresh' entail operationally, leaving gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, starting with the core purpose. It uses semicolons to list actions efficiently, though the sentence structure is slightly dense. Every phrase adds value without redundancy, making it concise but not perfectly polished.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description is incomplete for a tool with 3 parameters and mutation capabilities. It covers the basic purpose and actions but lacks details on behavioral traits, return values, or error conditions. For a tool managing auth—a critical operation—this leaves significant gaps in understanding how to use it effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description adds marginal value by mentioning 'gcloud configuration name (for switch)' and 'execute gcloud steps', which aligns with but doesn't significantly expand beyond the schema. With high schema coverage, the baseline is 3, and the description doesn't provide extra semantic depth.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose as managing Google Ads authentication with specific actions (status, switch/refresh via gcloud, set_project/set_quota_project, optional oauth_login). It distinguishes itself from sibling tools like 'get_credential_status' and 'refresh_access_token' by offering broader auth management capabilities. However, it doesn't explicitly contrast with all siblings, keeping it at a 4 rather than a perfect 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for Google Ads auth management but doesn't explicitly state when to use this tool versus alternatives like 'get_credential_status' for checking status or 'refresh_access_token' for token renewal. It mentions optional oauth_login for creating ADC files, which provides some context, but lacks clear when/when-not guidance or named alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refresh_access_tokenB

Refresh the access token for a session (multi-tenant mode). Requires GOOGLE_OAUTH_CLIENT_ID/SECRET.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_keyYesUUID v4 session key

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action is a refresh operation (implying mutation) and mentions OAuth requirements, but doesn't cover critical aspects like whether this invalidates previous tokens, rate limits, error conditions, or what the refreshed token enables. This leaves significant gaps for a security-sensitive tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose. The OAuth requirement is necessary context. There's no wasted text, though it could be slightly more structured for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a security-critical mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what happens after token refresh, whether the session_key must be valid, potential side effects, or return values. The OAuth requirement is helpful but doesn't compensate for the overall lack of operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents the single parameter 'session_key'. The description adds no additional parameter information beyond what's in the schema. This meets the baseline for high schema coverage, but doesn't provide extra value like explaining session key format or relationships.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Refresh') and resource ('access token for a session'), with the specific context 'multi-tenant mode' adding useful detail. It doesn't explicitly distinguish from sibling tools like 'end_session' or 'manage_auth', but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when an access token needs refreshing in multi-tenant mode, but doesn't specify when to use this versus alternatives like 'manage_auth' or 'set_session_credentials'. It mentions prerequisites ('Requires GOOGLE_OAUTH_CLIENT_ID/SECRET'), which provides some contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_session_credentialsB

Establish a session with Google Ads credentials (multi-tenant mode only).

ParametersJSON Schema
NameRequiredDescriptionDefault
session_keyYesUUID v4 session key
google_credentialsYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states this establishes a session but doesn't describe what that session enables, how long it lasts, whether it's persistent, what permissions are required, or what happens if credentials are invalid. For a credential management tool with zero annotation coverage, this leaves significant behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that communicates the core purpose without unnecessary words. It's appropriately sized and front-loaded with the essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a credential/session management tool with no annotations, no output schema, and incomplete parameter documentation, the description is insufficient. It doesn't explain what a successful establishment returns, what errors might occur, or how this session integrates with other tools. The 'multi-tenant mode only' constraint is helpful but doesn't compensate for other missing context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 50% schema description coverage (only 'session_key' has a description), the description doesn't add any parameter-specific information beyond what's in the schema. It mentions 'Google Ads credentials' which aligns with the 'google_credentials' parameter but doesn't explain the structure or purpose of the credential fields. The description doesn't compensate for the schema coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Establish a session') and target ('with Google Ads credentials'), and specifies the operational mode ('multi-tenant mode only'). It doesn't explicitly differentiate from sibling tools like 'manage_auth' or 'refresh_access_token', but the specificity of establishing a session with Google Ads credentials provides good clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context ('multi-tenant mode only') but doesn't provide explicit guidance on when to use this tool versus alternatives like 'manage_auth' or 'refresh_access_token'. It suggests this is for initial session establishment but doesn't clarify prerequisites or when other tools might be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

B3.2/5.0
Disambiguation4/5

Most tools have distinct purposes, such as execute_gaql_query for querying, get_performance for metrics, and manage_auth for authentication. However, there is some overlap between end_session, refresh_access_token, and set_session_credentials, all related to session management, which could cause minor confusion for an agent.

Naming Consistency4/5

The tools generally follow a consistent verb_noun pattern, like execute_gaql_query and get_performance, with clear actions. A minor deviation is gaql_help, which uses a noun_verb format, but overall the naming is predictable and readable across the set.

Tool Count5/5

With 9 tools, the count is well-scoped for a Google Ads API server, covering key operations like querying, performance analysis, resource listing, and authentication. Each tool serves a specific function without redundancy, making the set efficient and manageable.

Completeness4/5

The toolset provides strong coverage for core Google Ads workflows, including data querying, performance retrieval, and authentication management. A minor gap is the lack of tools for modifying resources, such as creating or updating campaigns, but agents can still perform essential read and analysis tasks effectively.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables comprehensive Google Ads campaign management and analytics through the Google Ads API. Supports querying campaigns, ad groups, keywords, performance metrics, and executing custom GAQL queries with token-efficient implementation.
  • A
    license
    B
    quality
    B
    maintenance
    Enables comprehensive Google Ads campaign management and analysis through natural language, including performance metrics, keyword optimization, budget management, and custom GAQL queries.
    100
    13
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables LLMs to interact with the Google Ads API to retrieve account information, list accessible customers, and query campaign performance. It allows users to manage and analyze Google Ads data through natural language interfaces.
    Apache 2.0

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/martechery/mcp-google-ads-ts'

If you have feedback or need assistance with the MCP directory API, please join our Discord server