
Company News
AWS Security Hub Adds Socket for Supply Chain Security
Socket is now in the AWS Security Hub Extended plan. Adopt it through AWS, apply committed spend, and block malicious open source packages.
@cesteral/gads-mcp
Advanced tools
Google Ads MCP Server - Campaign entity management and reporting via Google Ads REST API v23
Google Ads MCP Server - Campaign entity management and reporting via Google Ads REST API v23.
Management and reporting server for Google Ads. Provides full CRUD operations on Google Ads campaign entities (campaigns, ad groups, ads, keywords, assets, budgets) and arbitrary GAQL query execution. Designed for AI agents to manage Google Ads campaigns programmatically through the Model Context Protocol.
Self-host quickstart | Compare OSS vs Cesteral Intelligence | Book a workflow demo
SessionServiceStore patternX-GAds-* headers (developer token, client ID, client secret, refresh token)RateLimiter classoutputSchema on all toolsgads_gaql_searchExecute arbitrary GAQL queries against the Google Ads API.
Parameters:
customerId (string): Google Ads customer ID (no dashes)query (string): GAQL query stringpageSize (number, optional): Deprecated. Use maxRows instead.pageToken (string, optional): Cursor for the next upstream page (different from offset which slices the in-memory buffer)mode, columns, maxRows (optional): Bounded report-view params — mode is "summary" (default — headers + counts + 10-row preview) or "rows" (paginated rows page); columns projects to selected columns; maxRows caps page size (default 10/50; hard cap 200). offset is not supported here — paginate via pageToken.gads_list_accountsList all Google Ads customer accounts accessible to the authenticated user.
Parameters: None
gads_get_entityGet a single Google Ads entity by type and ID.
Parameters:
entityType (string): Type of entity to retrievecustomerId (string): Google Ads customer IDentityId (string): The entity IDgads_list_entitiesList entities with optional GAQL filters and pagination.
Parameters:
entityType (string): Type of entities to listcustomerId (string): Google Ads customer IDfilters (object, optional): GAQL filter conditionspageSize (number, optional): Results per page (default 100, max 10000)pageToken (string, optional): Pagination tokenorderBy (string, optional): GAQL ORDER BY clausegads_get_insightsGet performance insights for Google Ads entities using preset parameters. Convenience wrapper around GAQL.
Parameters:
customerId (string): Google Ads customer IDentityType (string): Entity type (campaign, adGroup, ad, keyword)entityId (string, optional): Filter to a specific entitydateRange (string): Date range preset (TODAY, YESTERDAY, LAST_7_DAYS, LAST_30_DAYS, THIS_MONTH, LAST_MONTH, LAST_90_DAYS)metrics (string[], optional): Custom metrics (defaults to impressions, clicks, cost_micros, conversions, ctr, average_cpc)limit (number, optional): Deprecated. Use maxRows instead.mode, columns, offset, maxRows (optional): Bounded report-view params — mode is "summary" (default) or "rows"; columns projects to selected columns; offset paginates; maxRows caps page size (default 10/50; hard cap 200).gads_create_entityCreate a new Google Ads entity via the :mutate API.
Parameters:
entityType (string): Type of entity to createcustomerId (string): Google Ads customer IDdata (object): Entity data fieldsgads_update_entityUpdate an existing entity with updateMask discipline.
Parameters:
entityType (string): Type of entity to updatecustomerId (string): Google Ads customer IDentityId (string): The entity IDdata (object): Fields to updateupdateMask (string): Comma-separated list of fields to updategads_remove_entityRemove an entity via the :mutate API (sets status to REMOVED).
Parameters:
entityType (string): Type of entity to removecustomerId (string): Google Ads customer IDentityId (string): The entity IDgads_bulk_mutateExecute multiple create/update/remove operations in a single API call.
Parameters:
entityType (string): Type of entities to mutatecustomerId (string): Google Ads customer IDoperations (array): Array of mutate operation objectspartialFailure (boolean, optional): Allow partial success (default: false)gads_bulk_update_statusBatch update statuses for multiple entities.
Parameters:
entityType (string): Type of entities to updatecustomerId (string): Google Ads customer IDentityIds (string[]): Entity IDs to update (max 100)status (string): ENABLED, PAUSED, or REMOVEDgads_adjust_bidsBatch adjust ad group bids with safe read-modify-write pattern.
Parameters:
customerId (string): Google Ads customer IDadjustments (array): Array of bid adjustments (max 50), each with adGroupId and optional cpcBidMicros/cpmBidMicrosreason (string, optional): Reason for the bid adjustment (for audit trail)gads_validate_entityDry-run validate an entity payload via the Google Ads API with validateOnly: true.
Parameters:
entityType (string): Type of entity to validatecustomerId (string): Google Ads customer IDmode (string): create or updatedata (object): Entity data to validateentityId (string, optional): Required for update modeupdateMask (string, optional): Required for update mode| Entity Type | GAQL Resource | Mutate Endpoint | Notes |
|---|---|---|---|
campaign | campaign | campaigns:mutate | Requires campaignBudget reference |
adGroup | ad_group | adGroups:mutate | Requires campaign reference |
ad | ad_group_ad | adGroupAds:mutate | Composite ID: {adGroupId}~{adId} |
keyword | ad_group_criterion | adGroupCriteria:mutate | Composite ID: {adGroupId}~{criterionId} |
campaignBudget | campaign_budget | campaignBudgets:mutate | Create before campaign |
asset | asset | assets:mutate | Reusable text/image/sitelink/callout |
Entity Hierarchy: Customer > Campaign Budget > Campaign > Ad Group > Ad / Keyword
Phase: Production-Ready
All tools are fully implemented using Google Ads REST API v23. Entity CRUD, GAQL queries, and bulk operations are operational via OAuth2 refresh token authentication.
# Install dependencies
pnpm install
# Run in development mode
pnpm run dev:http
# Build
pnpm run build
# Start production server
pnpm run start
# Type check
pnpm run typecheck
# Run tests
pnpm run test
GADS_MCP_PORT: Server port (default: 3004)GADS_DEVELOPER_TOKEN: Google Ads developer token (required for stdio mode)GADS_CLIENT_ID: OAuth2 client ID (required for stdio mode)GADS_CLIENT_SECRET: OAuth2 client secret (required for stdio mode)GADS_REFRESH_TOKEN: OAuth2 refresh token (required for stdio mode)GADS_LOGIN_CUSTOMER_ID: Manager account ID (optional, for stdio mode)MCP_AUTH_MODE: Authentication mode - gads-headers (default), jwt, or noneMCP_AUTH_SECRET_KEY: Required when MCP_AUTH_MODE=jwtGAdsHttpClient - HTTP client for Google Ads API v23 with retry logic and error parsingGAdsService - GAQL queries, account listing, and generic CRUD via :mutate APIGAdsRefreshTokenAuthAdapter - OAuth2 token caching with mutex for concurrent requestsGAdsHeadersAuthStrategy - Reads credentials from request headersSessionServiceStore - Per-session service instances keyed by session IDcustomerId must be numeric with no dashes (e.g., 1234567890 not 123-456-7890)1000000 = $1.00)campaignBudget must be created before the campaign that references itREMOVED status is permanent — equivalent to deletegads_validate_entity calls the real API with validateOnly: true (not client-side only){adGroupId}~{adId}, for keywords: {adGroupId}~{criterionId}@hono/mcp/health endpointSee root CLAUDE.md for development guidelines, build system details, and monorepo conventions. See the root README for full architecture context.
Self-host: Follow the deployment guide to run this server on your own infrastructure.
Cesteral Intelligence: Request access -- governed execution with credential brokering, approvals, audit, and multi-tenant access.
Book a workflow demo: See it in action with your own ad accounts.
Compare options: OSS connectors vs Cesteral Intelligence
Apache License 2.0 — see LICENSE for details. This package is part of Cesteral's open-source connector layer; managed hosting and higher-level governance features live outside this repository.
FAQs
Google Ads MCP Server - Campaign entity management and reporting via Google Ads REST API v23
We found that @cesteral/gads-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Socket is now in the AWS Security Hub Extended plan. Adopt it through AWS, apply committed spend, and block malicious open source packages.

Research
/Security News
Popular npm packages keyv and cacheable compromised.

Security News
A misconfiguration gave three Anthropic models internet access, and one, believing it was in a simulation, shipped a credential-stealing package to PyPI.