Connect your AI Agents to Google Ads in minutes

Available tools
list_ad_groups
List ad groups for a customer with optional filtering by campaign and status. Use getadgroup to retrieve a specific ad group.
get_ad_group
Get details of a specific ad group.
create_ad_group
Create a new ad group within a campaign. Required: customerid, campaignid (from listcampaigns), name. Use listcampaigns to find a valid campaign_id.
update_ad_group
Update an ad group. Set status=REMOVED to delete. Use listadgroups to find ad group IDs.
list_ads
List ads for a customer with optional filtering by ad group and status. Use get_ad to retrieve a specific ad.
get_ad
Get details of a specific ad.
create_ad
Create a Responsive Search Ad. Headlines: 3-15 required (max 30 chars each). Descriptions: 2-4 required (max 90 chars each). Final URLs: at least 1. Use listadgroups to find adgroupid. Note: ad content cannot be edited after creation; to change it, create a new ad.
update_ad
Update an ad (status only). Note: ad content (headlines, descriptions, URLs) cannot be edited after creation. Set status=REMOVED to delete. Use list_ads to find ad IDs.
list_campaign_budgets
List campaign budgets for a customer. Budgets are required when creating campaigns. Use this to discover available budgets before calling create_campaign.
create_campaign_budget
Create a new campaign budget. The budget resource name returned here is required when creating campaigns. Use listcampaignbudgets to find existing budgets.
list_campaigns
List campaigns for a customer with optional filtering by status, channel type, and name. Use get_campaign to retrieve a specific campaign.
get_campaign
Get details of a specific campaign.
create_campaign
Create a new campaign. Required parameters: customerid, name, advertisingchanneltype, campaignbudget (from listcampaignbudgets), biddingstrategytype. Use listcampaignbudgets to find a valid campaign_budget resource name.
update_campaign
Update a campaign. Set status=REMOVED to delete. Use listcampaigns or getcampaign to find campaign IDs.
list_accessible_customers
List all Google Ads customer account IDs accessible with the current credentials. Use the customer_id from this result when calling other tools.
get_customer
Get details of a specific Google Ads customer account (ID, name, currency, timezone).
list_keywords
List keywords (ad group criteria) for a customer with optional filtering by ad group and status.
create_keywords
Create one or more keywords in an ad group. Batch operation: create multiple keywords efficiently in a single call. Use listadgroups to find adgroupid.
update_keyword
Update a keyword. Use listkeywords to find criterionid. Set status=REMOVED to delete, or use remove_keyword for permanent removal.
remove_keyword
Permanently remove a keyword from an ad group. Use listkeywords to find criterionid. Alternatively, use update_keyword with status=REMOVED to preserve history.
search_google_ads
Run a custom GAQL (Google Ads Query Language) query to retrieve arbitrary resource data and metrics. Use this for custom reports, performance metrics, or any data not available through structured tools. Example: SELECT campaign.name, metrics.clicks, metrics.impressions FROM campaign WHERE campaign.status = ENABLED
validate_credential
Validate Google Ads OAuth2 credentials and developer token by listing accessible customer accounts.

How to set up Merge Agent Handler
In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}FAQs on using Merge's Google Ads MCP server
FAQs on using Merge's Google Ads MCP server
Ready to try it out?
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now

























