Google Ads MCP Server
The Google Ads MCP Server enables MCP clients to interact with the Google Ads API through natural language prompts, providing comprehensive authentication management, data querying, and GAQL assistance.
Authentication Management: Check auth status, switch/refresh gcloud configurations, or complete OAuth login via device flow. Supports multiple authentication methods including Application Default Credentials (ADC), existing authorized_user JSON files, and interactive OAuth device flow.
Resource Discovery: List accessible Google Ads accounts and discover GAQL queryable resources (e.g., campaign, ad_group) using the
list_resourcestool.Data Querying: Execute raw GAQL queries with pagination support and multiple output formats (table, JSON, CSV) via
execute_gaql_query.Performance Reporting: Retrieve performance metrics at various levels (account, campaign, ad_group, ad) with common filters like status, name, minimum clicks, or impressions using
get_performance.GAQL Assistance: Access offline-first cheat sheets and official documentation snippets for syntax help, best practices, and query examples through the
gaql_helptool.Flexible Deployment: Easy installation and execution as an NPM package (via
npxor global install) or direct execution from source code.Environment Configuration: Key settings like
GOOGLE_ADS_DEVELOPER_TOKENand authentication credential paths are configurable via environment variables.
Provides comprehensive tools for managing Google Ads campaigns through the Google Ads API, including GAQL query execution with pagination, performance data retrieval with filtering and currency conversion, resource discovery, and account management with GCloud/ADC authentication support.
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., "@Google Ads MCP Servershow me last week's campaign performance metrics"
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.
MCP Server for Google Ads
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
Using npx (Recommended)
{
"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
Application Default Credentials (ADC): The server first attempts to use ADC, which automatically finds credentials in this order:
Environment variable
GOOGLE_APPLICATION_CREDENTIALSpointing to a credential fileUser credentials from
gcloud auth application-default loginService account attached to the compute resource (GCE, Cloud Functions, etc.)
CLI Token Fallback: If enabled with
GOOGLE_ADS_GCLOUD_USE_CLI=true, the server can fall back to usinggcloud auth print-access-tokenfor authenticationAutomatic Token Refresh: Both methods handle token refresh automatically
Setting Up Authentication
Method 1: ADC via gcloud (Recommended)
gcloud auth application-default login --scopes=https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/adwordsMethod 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 thelogin_customer_id(aka MCC/manager account id) parameter in tools likeexecute_gaql_queryandget_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_IDandGOOGLE_OAUTH_CLIENT_SECRET(optional): Desktop OAuth client credentials used bymanage_authwithaction: "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.jsonClient-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-tsFor 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:
Install the "MCP Manager" extension from the marketplace
Open Command Palette (
Ctrl+Shift+P/Cmd+Shift+P)Run "MCP: Add Server"
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 build2. 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 devMulti-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_TTLSession TTL in seconds (default: 3600)MAX_CONNECTIONSMaximum in-memory sessions (default: 1000)CONNECTION_SWEEP_INTERVALCleanup interval in seconds (default: 300)VERIFY_TOKEN_SCOPEOptional. Whentrue, validates Ads scope at session establishmentALLOWED_CUSTOMER_IDSOptional allowlist of customer IDs (comma-separated)GOOGLE_OAUTH_CLIENT_ID/GOOGLE_OAUTH_CLIENT_SECRETOptional, for refresh flowsHTTPS_PROXYOptional proxy for outbound requestsNODE_TLS_REJECT_UNAUTHORIZEDFor proxy/cert handling when requiredSTRICT_IMMUTABLE_AUTHOptional. Whentrue, blocks re-setting credentials for an existing session (default allows overwrite with a warning)OBSERVABILITY_ENABLEDOptional. Set tofalseto disable structured JSON logs (default enabled). Alternatively setOBSERVABILITY=off.
Behavioral differences when enabled:
Credentials must be provided via
set_session_credentialsNo fallback to ADC/env credentials
manage_authis disabledEach tool call must include
session_keyDeveloper token is required in provided credentials
Sticky sessions required for multi-process deployments
Session tools:
set_session_credentialsRequest:
{
"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 }
get_credential_statusRequest:
{ "session_key": "f47ac10b-58cc-4372-a567-0e02b2c3d479" }Response:
{ "has_credentials": true, "expires_in": 3542, "has_refresh_token": true, "masked_token": "ya29****abcd" }
end_sessionRequest:
{ "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
}}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=1andENABLE_RUNTIME_CREDENTIALS=trueProvide runtime test credentials via env (examples):
TEST_ACCESS_TOKEN,TEST_REFRESH_TOKEN,TEST_DEVELOPER_TOKENTEST_LOGIN_CUSTOMER_ID,TEST_QUOTA_PROJECT_ID
Steps:
Call
set_session_credentialswith test env valuesRun
execute_gaql_queryandget_performancewithsession_keyOptionally call
refresh_access_tokento validate token refreshOptionally set
VERIFY_TOKEN_SCOPE=trueto validate scope against live APIOptionally pass
ALLOWED_CUSTOMER_IDSto 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
listAccessibleCustomersAccount 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_IDandGOOGLE_OAUTH_CLIENT_SECRETSaves ADC file: Creates
authorized_userJSON at.auth/adc.jsonScope validation: Automatically verifies Google Ads API access after completion
Sets credentials: Updates
GOOGLE_APPLICATION_CREDENTIALSfor immediate use
action: 'switch'
Configuration switching: Changes active gcloud configuration
Requires:
config_nameparameterAuto-execution: Runs
gcloud config configurations activate <name>whenallow_subprocess=trueGuidance: 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 loginwith proper scopesToken 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_idparameterCommand:
gcloud config set project <project_id>
action: 'set_quota_project'
Quota project setup: Sets ADC quota project for billing attribution
Requires:
project_idparameterCommand:
gcloud auth application-default set-quota-project <project_id>
Safety Features
Dry-run mode: Set
allow_subprocess: falseto see planned commands without executiongcloud 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 accountscampaigns- List campaignsad_groups- List ad groupsads- List adskeywords- List keywordsextensions- 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 qualityRunning 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 testProject 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 formattingLicense
MIT
Available Tools
9 toolsend_sessionC
End a session and clear credentials (multi-tenant mode).
| Name | Required | Description | Default |
|---|---|---|---|
| session_key | Yes | UUID v4 session key |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | No | 10-digit customer ID (no dashes). Optional. | |
| login_customer_id | No | Manager account (MCC) ID to use as login-customer for this request (10 digits, no dashes). Overrides env GOOGLE_ADS_MANAGER_ACCOUNT_ID. | |
| query | Yes | GAQL 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_size | No | optional page size (1-10000) | |
| page_token | No | optional page token | |
| auto_paginate | No | fetch multiple pages automatically | |
| max_pages | No | limit when auto_paginate=true (1-20) | |
| output_format | No | render format | table |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | specific GAQL topic to retrieve | |
| search | No | search term for help content |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| session_key | Yes | UUID v4 session key |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | No | 10-digit customer ID (no dashes). Optional. | |
| login_customer_id | No | Manager account (MCC) ID to use as login-customer for this request (10 digits, no dashes). Overrides env GOOGLE_ADS_MANAGER_ACCOUNT_ID. | |
| level | Yes | Aggregation level | |
| days | No | Days back to query (1-365, default 30) | |
| limit | No | GAQL LIMIT (1-1000, default 50) | |
| page_size | No | optional page size (1-10000) | |
| page_token | No | optional page token | |
| auto_paginate | No | fetch multiple pages automatically | |
| max_pages | No | limit when auto_paginate=true (1-20) | |
| output_format | No | render format | table |
| filters | No | optional performance filters |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | what to list: resources | accounts | resources |
| filter | No | substring filter on resource name | |
| limit | No | max rows (1-1000) | |
| output_format | No | render format | table |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | status | switch | refresh | status |
| config_name | No | gcloud configuration name (for switch) | |
| allow_subprocess | No | execute gcloud steps (default true). Set false to only print commands. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| session_key | Yes | UUID v4 session key |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| session_key | Yes | UUID v4 session key | |
| google_credentials | Yes |
TDQS
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
Google Ads analysis and operations — read performance, manage keywords, bids, and campaigns.
Google Ads, Meta Ads & GA4 MCP server - 250+ tools for campaigns, creatives, audiences & reports.
Google Ads MCP server — manage campaigns, keywords, and metrics.
Full Google Ads management: read (campaigns, performance, ROAS, keywords, search terms) and write (p
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceEnables 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.
- AlicenseBqualityBmaintenanceEnables comprehensive Google Ads campaign management and analysis through natural language, including performance metrics, keyword optimization, budget management, and custom GAQL queries.10013MIT
- AlicenseNot gradedqualityCmaintenanceEnables 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
- AlicenseNot gradedqualityAmaintenanceEnables Large Language Models to interact with Google Ads API for querying campaigns, ad groups, and performing mutations like creating budgets and ads.230Apache 2.0
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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