Coverage

What the REST API covers today, what it never will, and what is still to come.

The MCP server exposes 85 tools. The REST API covers 30 of them. This page is generated from the same map a CI check reads, so it cannot drift: a new tool fails the build until it is either built here or listed below.

Covered

ToolREST operation
gads_approve_actionapproveAction
gads_get_account_overviewgetAccountOverview
gads_get_audit_reportgetAuditReport
gads_get_connection_statusgetConnection
gads_get_optimization_plangetOptimizationPlan
gads_get_search_termslistSearchTerms
gads_get_sync_statusgetSyncStatus
gads_list_action_historylistHistory
gads_list_ad_accountslistAdAccounts
gads_list_ad_groupslistAdGroups
gads_list_adslistAds
gads_list_audit_runslistAuditRuns
gads_list_campaignslistCampaigns
gads_list_keywordslistKeywords
gads_list_pending_actionslistActions
gads_propose_add_keywordsaddKeywords
gads_propose_add_negative_keywordsaddNegativeKeywords
gads_propose_budget_changeproposeBudgetChange
gads_propose_campaign_statusproposeCampaignStatus
gads_propose_campaign_targetproposeCampaignTarget
gads_propose_keyword_statusproposeKeywordStatus
gads_propose_rename_ad_groupproposeRenameAdGroup
gads_propose_rename_campaignproposeRenameCampaign
gads_reject_actionrejectAction
gads_revert_actionrevertAction
gads_score_keywordsscoreKeywords
gads_set_optimization_targetssetOptimizationTargets
gads_suggest_keywordssuggestKeywords
gads_trigger_audittriggerAudit
gads_trigger_synctriggerSync

Not planned

Structural — these cannot be REST endpoints.

ToolWhy
gads_discover_search_term_silosLLM clustering — same reasoning as ideateKeywordSilos
gads_explain_policyexplains the safe-apply policy in prose for a model; the API returns policy_reasons on every proposal instead
gads_fetch_urlgeneral web fetch — an agent capability, not a resource of this API
gads_get_connect_urlreturns a URL a human must open in a browser — Google's OAuth consent screen cannot be completed by a machine
gads_ideate_keyword_silosLLM generation — non-deterministic output, belongs behind an agent run
gads_read_attachmentchat attachment plumbing with no REST analogue
gads_search_audience_ideasLLM-assisted ideation over Google's audience taxonomy

Still to come

Deliberately out of v1. Each entry says what it is waiting on.

ToolWaiting on
gads_discover_ad_accountsaccount import flow — admin-tier lifecycle surface, after v1
gads_dismiss_recommendationneeds the plan feed's fingerprints published in the REST plan response
gads_generate_free_auditfree-audit funnel is a marketing surface, not part of the operator API
gads_get_asset_performanceasset-level reporting — after the asset write surface
gads_get_change_historyGoogle-side changes are already in GET /history
gads_get_competitive_pressureauction-insights shape still moving
gads_get_conversion_actionsneeds a stable conversion-action shape before publishing
gads_get_experimentsafter the experiments write surface
gads_get_free_auditfree-audit funnel is a marketing surface, not part of the operator API
gads_get_funnelPostHog-dependent; needs the funnel surface first
gads_get_intraday_pulsetoday-so-far vs recent hours; every /api/v1 metrics response is documented as ending yesterday, so publishing a partial-day number needs a freshness field on the envelope first
gads_get_segment_performancedevice/geo/schedule segments — after the segment write surface
gads_get_tracking_healthPostHog-dependent; needs the funnel surface first
gads_import_ad_accountaccount import flow — admin-tier lifecycle surface, after v1
gads_list_audiencesafter the audience write surface
gads_list_projectsworkspace-tier resource; v1 exposes accounts, not projects
gads_propose_account_trackingaccount-level tracking config — admin surface, after v1
gads_propose_ad_group_statusphase 2 write set
gads_propose_ad_schedulesegment-modifier surface lands as a group, after v1
gads_propose_ad_statusphase 2 write set
gads_propose_ai_max_experimentAI Max surface lands as a group, after v1
gads_propose_ai_max_settingAI Max surface lands as a group, after v1
gads_propose_ai_max_text_guidelinesAI Max surface lands as a group, after v1
gads_propose_attach_audienceaudience surface lands as a group, after v1
gads_propose_brand_exclusionAI Max surface lands as a group, after v1
gads_propose_campaign_bid_strategyalways review-tier — resets Smart Bidding's learning period; wants a dedicated confirmation flow
gads_propose_change_keyword_match_typephase 2 write set
gads_propose_clone_ad_groupstructural create — needs a larger schema and a QA story
gads_propose_clone_campaignstructural create — needs a larger schema and a QA story
gads_propose_create_ad_groupstructural create — needs a larger schema and a QA story
gads_propose_create_assetscreative write — after the asset surface
gads_propose_create_campaignstructural create — needs a larger schema and a QA story
gads_propose_create_custom_audienceaudience surface lands as a group, after v1
gads_propose_create_experimentexperiments surface lands as a group, after v1
gads_propose_create_rsacreative write — high-risk, needs its own schema and review
gads_propose_detach_assetcreative write — after the asset surface
gads_propose_detach_audienceaudience surface lands as a group, after v1
gads_propose_device_bid_modifiersegment-modifier surface lands as a group, after v1
gads_propose_end_experimentexperiments surface lands as a group, after v1
gads_propose_geo_targetsegment-modifier surface lands as a group, after v1
gads_propose_keyword_bidphase 2 write set
gads_propose_promote_experimentexperiments surface lands as a group, after v1
gads_propose_remove_negative_keywordphase 2 write set
gads_propose_replace_adcreative write — high-risk, needs its own schema and review
gads_run_gaql_queryraw GAQL passthrough needs its own injection review before it is public
gads_share_free_auditfree-audit funnel is a marketing surface, not part of the operator API
gads_undismiss_recommendationpairs with dismissRecommendation — lands with it
gads_update_project_briefworkspace-tier resource; after the projects surface lands

Need one of these sooner? The MCP server already exposes all of them.

On this page